libreyolo train
Обучает одну модель на одном датасете и записывает чекпойнты, метрики и логи в каталог запуска. У каждого аргумента ниже есть значение по умолчанию из определения команды, и его может заменить собственный конфиг обучения семейства моделей.
- Команда
libreyolo train- Обязательный
data- Результат
- Чекпойнты, метрики и логи в runs/train/exp
Синтаксис
libreyolo train data=<dataset.yaml> [model=<name|path>] [key=value ...]Аргументы задаются парами key=value, POSIX-форма тоже работает, поэтому
epochs=50 и --epochs 50 — один и тот же аргумент. Логические аргументы
принимают true и false: amp=false превращается в --no-amp там, где у
флага есть отрицательная форма.
Аргументы
Модель и данные
| Аргумент | По умолчанию | Значение |
|---|---|---|
data | Путь к YAML датасета (формат YOLO, например coco8.yaml). Обязательный | |
model | yolox-s | Имя модели или путь к весам |
task | Явное переопределение задачи: detect, segment, semantic, pose, classify, gaze, obb, point, depth | |
pretrained | true | Использовать предобученные веса. false собирает архитектуру и обучает с нуля |
allow_download_scripts | false | Разрешить встроенный Python в блоках download в YAML датасета |
Цикл обучения
| Аргумент | По умолчанию | Значение |
|---|---|---|
epochs | 300 | Эпохи обучения |
batch | 16 | Размер батча на устройство |
imgsz | 640 | Размер изображения при обучении: 640 (квадрат) или 480x640 (HxW) |
device | auto | Устройство: 0, cpu, mps, auto |
workers | 4 | Процессы загрузчика данных |
cache | false | Кэшировать изображения, чтобы ускорить загрузку данных: ram, disk, true, false |
seed | 0 | Зерно генератора случайных чисел |
resume | Продолжить обучение: true или путь к чекпойнту | |
amp | true | Автоматическая смешанная точность |
amp_dtype | float16 | Тип данных для AMP на CUDA: float16 или bfloat16 |
cuda_graph | false | Захватывать прямой и обратный проход обучения в графы CUDA. Только одна GPU и только поддерживаемые семейства; остальные работают в eager-режиме |
lora | false | Дообучение через LoRA, для трансформерных семейств, перечисленных в разделе «Примечания» |
freeze | Заморозить слои: число, список индексов или имена модулей |
Дистилляция
| Аргумент | По умолчанию | Значение |
|---|---|---|
distill_model | Учитель: чекпойнт детектора или идентификатор foundation-учителя, например dinov2, для дистилляции признаков бэкбона | |
dis | Вес функции потерь дистилляции. Если не задан — опубликованное значение по умолчанию для этого типа потерь | |
distill_loss_type | mgd | Функция потерь по признакам для учителей-детекторов: mgd, cwd. Foundation-учители всегда используют feat_mse |
Оптимизатор
| Аргумент | По умолчанию | Значение |
|---|---|---|
optimizer | sgd | Оптимизатор: sgd, adam, adamw |
lr0 | 0.01 | Начальная скорость обучения |
momentum | 0.937 | Момент для SGD и коэффициент первого момента для оптимизаторов Adam |
weight_decay | 0.0005 | L2-регуляризация |
nesterov | true | Момент Нестерова |
Планировщик
| Аргумент | По умолчанию | Значение |
|---|---|---|
scheduler | yoloxwarmcos | Тип расписания LR |
warmup_epochs | 5 | Длительность прогрева |
warmup_lr_start | 0.0 | Начальный LR прогрева |
min_lr_ratio | 0.05 | Минимальное отношение LR |
lr_drop | 100 | Эпоха ступенчатого снижения LR для RF-DETR |
Аугментация
| Аргумент | По умолчанию | Значение |
|---|---|---|
mosaic | 1.0 | Вероятность mosaic |
mixup | 1.0 | Вероятность mixup |
hsv_prob | 1.0 | Вероятность HSV-джиттера |
flip_prob | 0.5 | Вероятность горизонтального отражения |
degrees | 10.0 | Диапазон поворота, плюс и минус, в градусах |
translate | 0.1 | Доля сдвига |
shear | 2.0 | Угол скоса |
mosaic_scale | (0.1,2.0) | Диапазон масштаба mosaic |
mixup_scale | (0.5,1.5) | Диапазон масштаба mixup |
no_aug_epochs | 15 | Отключить аугментацию на последних N эпохах |
EMA
| Аргумент | По умолчанию | Значение |
|---|---|---|
ema | true | Экспоненциальное скользящее среднее |
ema_decay | 0.9998 | Коэффициент затухания EMA |
Валидация во время обучения
| Аргумент | По умолчанию | Значение |
|---|---|---|
val | true | Валидация во время обучения |
eval_interval | 10 | Валидация каждые N эпох |
max_det | 300 | Максимум предсказаний на изображение после NMS на валидации |
eval_max_det | Ограничение для COCO-оценщика. Если не задано — соглашение pycocotools AP@100 | |
faster_coco_eval | true | Использовать C++-бэкенд faster-coco-eval для метрик COCO, если он установлен; иначе откат на pycocotools |
save_plots | false | Сохранять итоговые графики валидации во время обучения |
patience | 50 | Терпение ранней остановки. 0 отключает её |
Вывод
| Аргумент | По умолчанию | Значение |
|---|---|---|
project | runs/train | Корневой каталог для результатов |
name | exp | Имя эксперимента |
exist_ok | false | Переиспользовать существующий каталог с результатами |
save_period | 10 | Сохранять чекпойнт каждые N эпох |
log_interval | 10 | Логировать loss каждые N батчей |
Флаги для агентов
| Аргумент | По умолчанию | Значение |
|---|---|---|
json | false | Вывод JSON в stdout |
quiet | false | Подавить stderr |
dry_run | false | Собрать и напечатать конфигурацию, ничего не выполняя |
help_json | false | Вывести схему команды в JSON и выйти |
Примеры
# coco8.yaml входит в пакет и скачивает свои 8 изображений при первом использовании.libreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8# Печатает, что будет использовать запуск, включая значения по умолчанию# семейства, и выходит без обучения и загрузки данных.libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=truelibreyolo train model=LibreYOLO9s.pt data=coco8.yaml \ epochs=50 batch=8 optimizer=adamw lr0=0.001 weight_decay=0.0001 \ patience=20 save_period=5 project=runs/train name=yolo9s-coco8 exist_ok=trueПримечания
Значения по умолчанию выше используются не всегда
У каждого семейства моделей есть собственный конфиг обучения, и там, где он
отличается от базового, его значение заменяет значение команды по умолчанию для
любого аргумента, который вы не задали явно. Аргумент, заданный вами, всегда
побеждает. libreyolo cfg печатает базовые значения по умолчанию и
переопределения по семействам — так и смотрят, что конкретное семейство
использует на самом деле.
Больше всего это важно для imgsz. По умолчанию команда берёт 640, а это не
родной вход для каждого чекпойнта: опубликованные размеры детекции RF-DETR —
384, 512, 576 и 704, а чекпойнты YOLOX n и t — 416. Для RF-DETR и DEIMv2
imgsz передаётся дальше, только если он задан явно, поэтому иначе остаётся в
силе их собственный размер. Другим семействам значение передаётся как есть, и
они обучаются с ним. FOMO — самый строгий случай: каждый размер принимает
только свой родной вход (96, 192 и 224), поэтому запуску FOMO нужен imgsz,
заданный под него, иначе он останавливается с ошибкой. RF-DETR вдобавок
требует, чтобы значение делилось на размер патча, умноженный на число окон, и
сообщает два ближайших допустимых размера, если это не так.
Аргументы, которые семейство игнорирует
Не каждое семейство читает каждый аргумент, и заметнее всего это на аргументах
аугментации. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 и DINOv2 обучаются через
сквозные пайплайны без mosaic, без mixup и без аффинных искажений, поэтому
mosaic, mixup, hsv_prob, degrees, translate, shear, mosaic_scale
и mixup_scale там ни до чего не доходят. EC использует тот же пайплайн, но
читает hsv_prob, degrees и translate, когда его задача — оценка позы.
Семейства классификации, SegFormer и NAFNet игнорируют весь этот набор, а
вместе с ним и flip_prob, потому что отражение у них работает с фиксированной
вероятностью, а не с настраиваемой. YOLO-NAS игнорирует только mosaic,
поскольку вместо него аугментирует всегда включённым аффинным преобразованием
для каждого примера. RF-DETR игнорирует ещё три сверх этого списка:
optimizer, momentum и nesterov.
Задать один из них — не ошибка. Запуск пишет в stderr строку с названием
семейства и аргументами, которые он проигнорирует, затем обучается, и эта
строка — авторитетный список для установленной версии. Она же и единственный
сигнал, поэтому скриптовый запуск с quiet=true подавляет это предупреждение
вместе со всем остальным в stderr.
val=false — смежный случай. Для большинства семейств он выставляет
eval_interval в 0; RF-DETR не умеет так отключать валидацию и пишет в лог,
что запрос проигнорирован.
Другое поведение, о котором стоит знать
lora=true принимают RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 и v4, EC и
ConvNeXt. Любое другое семейство завершается с config_unsupported, а не
обучается без LoRA.
pretrained=false вместе с resume отклоняется для семейств, которые
поддерживают обучение с нуля, поскольку эти два аргумента требуют
противоположного.
mosaic и mixup — это написание в командной строке для полей конфига
mosaic_prob и mixup_prob. В семействах, где mixup применяется только к
mosaic-примерам, mixup больше нуля при mosaic, равном нулю, никогда не
срабатывает, и запуск об этом сообщает.
dry_run=true разрешает ссылку на модель, применяет значения по умолчанию
семейства и печатает конфигурацию, с которой шло бы обучение. Датасет он не
загружает, поэтому это дешёвый способ убедиться, что аргумент получил
ожидаемое значение.
В stdout идёт итоговый объект результата; прогресс и предупреждения идут в
stderr. Код возврата — 0 при успехе, 2 при ошибке использования или
конфигурации, 3, если датасет не удаётся найти или прочитать, 4, если не
удаётся загрузить модель, и 1 при прочих сбоях во время выполнения.
Связанное: libreyolo doctor — проверить датасет, прежде
чем браться за обучение, libreyolo monitor — следить за
запуском в браузере, libreyolo val — измерить результат.