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