Переглянути як 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 у блоках завантаження в 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Тип даних CUDA AMP: 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Учитель: контрольна точка детектора або ідентифікатор фундаментального вчителя, наприклад dinov2, для дистиляції ознак бекбона
disВага функції втрат дистиляції. Якщо не задано, діє опубліковане типове значення для цього типу втрат
distill_loss_typemgdВтрати на ознаках для вчителів-детекторів: mgd, cwd. Фундаментальні вчителі завжди використовують 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Записувати втрати в лог кожні 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, замість навчатися без нього.

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.