Переглянути як 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 у блоках завантаження в YAML датасету

Цикл навчання

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

Планувальник

АргументТипове значенняОпис
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Записувати втрати в лог кожні 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, замість навчатися без нього.

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.