Посмотреть как Markdown

libreyolo train

Обучает одну модель на одном датасете и записывает чекпойнты, метрики и логи в каталог запуска. У каждого аргумента ниже есть значение по умолчанию из определения команды, и его может заменить собственный конфиг обучения семейства моделей.

Команда
libreyolo train
Обязательный
data
Результат
Чекпойнты, метрики и логи в runs/train/<name>; без name= используется собственное имя запуска семейства, например yolo9_exp

Синтаксис

bash
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). Обязательный
modelyolox-sИмя модели или путь к весам
taskЯвное переопределение задачи: detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueИспользовать предобученные веса. false собирает архитектуру и обучает с нуля
allow_download_scriptsfalseРазрешить встроенный Python в блоках download в YAML датасета

Цикл обучения

АргументПо умолчаниюЗначение
epochs300Эпохи обучения
batch16Размер батча. При нескольких GPU это глобальный батч, поровну разделённый между ними
imgsz640Размер изображения при обучении: 640 (квадрат) или 480x640 (HxW)
deviceautoУстройство: 0, cpu, mps, auto. Список GPU, например 0,1 или [0,1], запускает обучение на этих GPU
workers4Процессы загрузчика данных
cachefalseКэшировать изображения, чтобы ускорить загрузку данных: ram, disk, true, false
seed0Зерно генератора случайных чисел
resumeПродолжить обучение: true или путь к чекпойнту
amptrueАвтоматическая смешанная точность
amp_dtypefloat16Тип данных для AMP на CUDA: float16 или bfloat16
cuda_graphfalseЗахватывать прямой и обратный проход обучения в графы CUDA. Только одна GPU и только поддерживаемые семейства; остальные работают в eager-режиме
compilefalseОбернуть обучаемую сеть в torch.compile: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Только одна GPU с CUDA; остальные запуски обучаются в eager-режиме с предупреждением
lorafalseДообучение через LoRA, для трансформерных семейств, перечисленных в разделе «Примечания»
freezeЗаморозить слои: число, список индексов или имена модулей

Дистилляция

АргументПо умолчаниюЗначение
distill_modelУчитель: чекпойнт детектора или идентификатор foundation-учителя, например dinov2, для дистилляции признаков бэкбона
disВес функции потерь дистилляции. Если не задан — опубликованное значение по умолчанию для этого типа потерь
distill_loss_typemgdФункция потерь по признакам для учителей-детекторов: mgd, cwd. Foundation-учители всегда используют feat_mse

Оптимизатор

АргументПо умолчаниюЗначение
optimizersgdОптимизатор: sgd, adam, adamw
lr00.01Начальная скорость обучения
momentum0.937Момент для SGD и коэффициент первого момента для оптимизаторов Adam
weight_decay0.0005L2-регуляризация
nesterovtrueМомент Нестерова
clip_max_normОбрезать L2-норму градиента до этого значения перед каждым шагом оптимизатора; 0 отключает обрезку. Если не задан, действует значение семейства

Планировщик

АргументПо умолчаниюЗначение
scheduleryoloxwarmcosТип расписания LR
warmup_epochs5Длительность прогрева
warmup_lr_start0.0Начальный LR прогрева
min_lr_ratio0.05Минимальное отношение LR
lr_drop100Эпоха ступенчатого снижения LR для RF-DETR

Аугментация

АргументПо умолчаниюЗначение
mosaic1.0Вероятность mosaic
mixup1.0Вероятность mixup
hsv_prob1.0Вероятность HSV-джиттера
flip_prob0.5Вероятность горизонтального отражения
degrees10.0Диапазон поворота, плюс и минус, в градусах
translate0.1Доля сдвига
shear2.0Угол скоса
mosaic_scale(0.1,2.0)Диапазон масштаба mosaic
mixup_scale(0.5,1.5)Диапазон масштаба mixup
no_aug_epochs15Отключить аугментацию на последних N эпохах

EMA

АргументПо умолчаниюЗначение
ematrueЭкспоненциальное скользящее среднее
ema_decay0.9998Коэффициент затухания EMA

Валидация во время обучения

АргументПо умолчаниюЗначение
valtrueВалидация во время обучения
eval_interval10Валидация каждые N эпох и после последней эпохи
max_det300Максимум предсказаний на изображение после NMS на валидации
eval_max_detОграничение для COCO-оценщика. Если не задано — соглашение pycocotools AP@100
faster_coco_evaltrueИспользовать C++-бэкенд faster-coco-eval для метрик COCO, если он установлен; иначе откат на pycocotools
save_plotsfalseСохранять итоговые графики валидации во время обучения
patience50Терпение ранней остановки. 0 отключает её

Вывод

АргументПо умолчаниюЗначение
projectruns/trainКорневой каталог для результатов
nameИмя эксперимента. Если не задано, запуск получает имя, которое использует train() семейства, например yolo9_exp или dfine_exp
exist_okfalseПереиспользовать существующий каталог с результатами
save_period10Сохранять чекпойнт каждые N эпох
log_interval10Логировать loss каждые N батчей

Флаги для агентов

АргументПо умолчаниюЗначение
jsonfalseВывод JSON в stdout
quietfalseПодавить stderr
dry_runfalseСобрать и напечатать конфигурацию, ничего не выполняя
help_jsonfalseВывести схему команды в JSON и выйти
АргументПо умолчаниюЗначение
min_samples0Минимальная длина эпохи для маленьких датасетов: если изображений меньше, выбрать столько примеров за эпоху с возвращением (0 = выключено)
class_balancedFalseВыборка с коэффициентами повторения в стиле LVIS для датасетов с длинным хвостом (по умолчанию выключена)
cls_pw0.0Степень обратной частоты при взвешивании классификации: 0 выключает, 1 полное взвешивание (средний вес класса равен 1; не сочетается с class_weights=True)
class_weightsFalseПрежние веса функции потерь классификации, нормализованные по примерам (по умолчанию выключены)
single_clsFalseОбучать поддерживаемый детектор, переназначив все метки классу 0
classesNoneОбучать поддерживаемый детектор только на исходных ID классов датасета через запятую (например, '0,3,5'); остальные классы отбрасываются как неразмеченные. ID сохраняются без перенумерации
average_best0Равномерно усреднить N лучших чекпойнтов по отслеживаемой метрике в weights/average.pt в конце обучения (0 = выключено)
export_checkFalseЭкспортировать ONNX до эпохи 1 и завершить запуск ошибкой, если экспорт не удался (по умолчанию выключено)
precise_bn0Пересчитать накопленную статистику BatchNorm по этому числу обучающих изображений после последней эпохи (0 = выключено)
aux_weightТолько YOLO9: вес функции потерь вспомогательной ветви PGI. Заданное значение подключает новую ветвь с этим весом, а 0 обучает только основную голову. Если не задан, ветвь подключается с весом 0.25, только когда веса содержат тензоры PGI или обучение идёт с нуля
fliplrNoneВероятность горизонтального отражения (псевдоним flip_prob из экосистемы)
flipud0.0Вероятность вертикального отражения
auto_augmentNoneПолитика автоаугментации классификации: randaugment, autoaugment, augmix (по умолчанию нет)
erasing0.0Вероятность RandomErasing для классификации, 0 <= erasing < 1
cutmix0.0Вероятность CutMix для классификации (мягкие метки)
scale0.5Диапазон площади RandomResizedCrop для классификации: нижняя граница как число или явная пара (min,max)
crop_pctNoneКоэффициент изменения размера перед центральной обрезкой при оценке классификации (по умолчанию нативное значение семейства)
plot_samples8Число изображений в визуализации примеров валидации: 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=true
Именованный запуск с явным рецептом
libreyolo 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 — измерить результат.

Проверено с LibreYOLO v1.6.0.