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

libreyolo train

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

Команда
libreyolo train
Обязательный
data
Результат
Чекпойнты, метрики и логи в runs/train/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Размер батча на устройство
imgsz640Размер изображения при обучении: 640 (квадрат) или 480x640 (HxW)
deviceautoУстройство: 0, cpu, mps, auto
workers4Процессы загрузчика данных
cachefalseКэшировать изображения, чтобы ускорить загрузку данных: ram, disk, true, false
seed0Зерно генератора случайных чисел
resumeПродолжить обучение: true или путь к чекпойнту
amptrueАвтоматическая смешанная точность
amp_dtypefloat16Тип данных для AMP на CUDA: float16 или bfloat16
cuda_graphfalseЗахватывать прямой и обратный проход обучения в графы CUDA. Только одна GPU и только поддерживаемые семейства; остальные работают в 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Момент Нестерова

Планировщик

АргументПо умолчаниюЗначение
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Корневой каталог для результатов
nameexpИмя эксперимента
exist_okfalseПереиспользовать существующий каталог с результатами
save_period10Сохранять чекпойнт каждые N эпох
log_interval10Логировать loss каждые N батчей

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

АргументПо умолчаниюЗначение
jsonfalseВывод JSON в stdout
quietfalseПодавить stderr
dry_runfalseСобрать и напечатать конфигурацию, ничего не выполняя
help_jsonfalseВывести схему команды в 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=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, когда его задача — оценка позы. Семейства классификации, 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 — измерить результат.

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