libreyolo train
Обучает одну модель на одном датасете и записывает чекпойнты, метрики и логи в каталог запуска. У каждого аргумента ниже есть значение по умолчанию из определения команды, и его может заменить собственный конфиг обучения семейства моделей.
- Команда
libreyolo train- Обязательный
data- Результат
- Чекпойнты, метрики и логи в runs/train/<name>; без name= используется собственное имя запуска семейства, например yolo9_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 | Размер батча. При нескольких GPU это глобальный батч, поровну разделённый между ними |
imgsz | 640 | Размер изображения при обучении: 640 (квадрат) или 480x640 (HxW) |
device | auto | Устройство: 0, cpu, mps, auto. Список GPU, например 0,1 или [0,1], запускает обучение на этих GPU |
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-режиме |
compile | false | Обернуть обучаемую сеть в torch.compile: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Только одна GPU с CUDA; остальные запуски обучаются в 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 | Момент Нестерова |
clip_max_norm | Обрезать L2-норму градиента до этого значения перед каждым шагом оптимизатора; 0 отключает обрезку. Если не задан, действует значение семейства |
Планировщик
| Аргумент | По умолчанию | Значение |
|---|---|---|
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 | Имя эксперимента. Если не задано, запуск получает имя, которое использует train() семейства, например yolo9_exp или dfine_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 и выйти |
| Аргумент | По умолчанию | Значение |
|---|---|---|
min_samples | 0 | Минимальная длина эпохи для маленьких датасетов: если изображений меньше, выбрать столько примеров за эпоху с возвращением (0 = выключено) |
class_balanced | False | Выборка с коэффициентами повторения в стиле LVIS для датасетов с длинным хвостом (по умолчанию выключена) |
cls_pw | 0.0 | Степень обратной частоты при взвешивании классификации: 0 выключает, 1 полное взвешивание (средний вес класса равен 1; не сочетается с class_weights=True) |
class_weights | False | Прежние веса функции потерь классификации, нормализованные по примерам (по умолчанию выключены) |
single_cls | False | Обучать поддерживаемый детектор, переназначив все метки классу 0 |
classes | None | Обучать поддерживаемый детектор только на исходных ID классов датасета через запятую (например, '0,3,5'); остальные классы отбрасываются как неразмеченные. ID сохраняются без перенумерации |
average_best | 0 | Равномерно усреднить N лучших чекпойнтов по отслеживаемой метрике в weights/average.pt в конце обучения (0 = выключено) |
export_check | False | Экспортировать ONNX до эпохи 1 и завершить запуск ошибкой, если экспорт не удался (по умолчанию выключено) |
precise_bn | 0 | Пересчитать накопленную статистику BatchNorm по этому числу обучающих изображений после последней эпохи (0 = выключено) |
aux_weight | Только YOLO9: вес функции потерь вспомогательной ветви PGI. Заданное значение подключает новую ветвь с этим весом, а 0 обучает только основную голову. Если не задан, ветвь подключается с весом 0.25, только когда веса содержат тензоры PGI или обучение идёт с нуля | |
fliplr | None | Вероятность горизонтального отражения (псевдоним flip_prob из экосистемы) |
flipud | 0.0 | Вероятность вертикального отражения |
auto_augment | None | Политика автоаугментации классификации: randaugment, autoaugment, augmix (по умолчанию нет) |
erasing | 0.0 | Вероятность RandomErasing для классификации, 0 <= erasing < 1 |
cutmix | 0.0 | Вероятность CutMix для классификации (мягкие метки) |
scale | 0.5 | Диапазон площади RandomResizedCrop для классификации: нижняя граница как число или явная пара (min,max) |
crop_pct | None | Коэффициент изменения размера перед центральной обрезкой при оценке классификации (по умолчанию нативное значение семейства) |
plot_samples | 8 | Число изображений в визуализации примеров валидации: 0 отключает, -1 выводит каждое проверенное изображение (не меняет метрики) |
Примеры
# 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, когда его задача — оценка позы.
Семейства классификации игнорируют этот набор, кроме mixup, который у них
означает батчевый MixUp, и читают flip_prob. SegFormer, LingBot-Vision и NAFNet
игнорируют весь набор, а вместе с ним и flip_prob, потому что отражение у них работает с
фиксированной вероятностью, а не с настраиваемой. YOLO-NAS игнорирует только mosaic,
поскольку вместо него аугментирует всегда включённым аффинным преобразованием
для каждого примера. RF-DETR игнорирует ещё три сверх этого списка:
optimizer, momentum и nesterov.
Задать один из них — не ошибка. Запуск пишет в stderr строку с названием
семейства и аргументами, которые он проигнорирует, затем обучается, и эта
строка — авторитетный список для установленной версии. Она же и единственный
сигнал, поэтому скриптовый запуск с quiet=true подавляет это предупреждение
вместе со всем остальным в stderr.
val=false — смежный случай. Он выставляет eval_interval в 0, что
выключает валидацию во время обучения, включая последнюю эпоху, и запуск не
записывает best.pt.
Другое поведение, о котором стоит знать
lora=true принимают RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 и v4, EC, GTR и
ConvNeXt. Любое другое семейство завершается с config_unsupported, а не
обучается без LoRA.
clip_max_norm принимают семейства, в конфиге обучения которых он объявлен:
YOLOv9, YOLOv9-E2E и YOLOv9-P2, где по умолчанию он равен 10, а также D-FINE,
Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR,
DINOv2 и GTR, где по умолчанию он равен 0.1. Любое другое семейство
завершается с config_unsupported, а отрицательное или неконечное значение
завершается с config_type_error.
device=0,1 строит модель на первом GPU из списка и передаёт список в
train(), который запускает по одному процессу на каждый GPU. См.
обучение на нескольких GPU.
У RF-DETR нет переноса с детекции на сегментацию. task=segment с
чекпойнтом сегментации RF-DETR загружает этот чекпойнт независимо от имени
файла, потому что задачу определяют метаданные чекпойнта, а с чекпойнтом
детекции запуск останавливается с ошибкой, вместо того чтобы обучать
необученную голову масок.
pretrained=false вместе с resume отклоняется для семейств, которые
поддерживают обучение с нуля, поскольку эти два аргумента требуют
противоположного.
mosaic и mixup — это написание в командной строке для полей конфига
mosaic_prob и mixup_prob; у модели классификации mixup вместо этого
означает батчевый MixUp. В семействах, где mixup применяется только к
mosaic-примерам, mixup больше нуля при mosaic, равном нулю, никогда не
срабатывает, и запуск об этом сообщает.
dry_run=true разрешает ссылку на модель, применяет значения по умолчанию
семейства и печатает конфигурацию, с которой шло бы обучение. Датасет он не
загружает, поэтому это дешёвый способ убедиться, что аргумент получил
ожидаемое значение.
В stdout идёт итоговый объект результата; прогресс и предупреждения идут в
stderr. Код возврата — 0 при успехе, 2 при ошибке использования или
конфигурации, 3, если датасет не удаётся найти или прочитать, 4, если не
удаётся загрузить модель, и 1 при прочих сбоях во время выполнения.
Связанное: libreyolo doctor — проверить датасет, прежде
чем браться за обучение, libreyolo monitor — следить за
запуском в браузере, libreyolo val — измерить результат.