Матриця аугментацій
Установлення параметра аугментації не гарантує, що він потрапить до пайплайна. На цій сторінці зафіксовано, як кожне придатне до навчання сімейство обробляє кожен параметр TrainConfig, на основі декларативної таблиці, яку бібліотека постачає як єдине джерело істини.
Параметри
Це назви полів TrainConfig, а не варіанти написання в CLI. train() і CLI
зіставляють із ними короткі варіанти написання, тому mosaic установлює mosaic_prob.
| Параметр | Значення |
|---|---|
mosaic_prob | Імовірність створення мозаїчного зразка з 4 зображень |
mixup_prob | Імовірність домішування другого зразка |
hsv_prob | Імовірність випадкової зміни кольорів HSV |
flip_prob | Імовірність горизонтального віддзеркалення |
degrees | Діапазон випадкового повороту для афінного перетворення в градусах |
translate | Частка випадкового зміщення для афінного перетворення |
mosaic_scale | Діапазон випадкового масштабу для афінного перетворення |
mixup_scale | Діапазон випадкового масштабу, застосований до партнерського зображення MixUp |
shear | Діапазон випадкового зсуву для афінного перетворення в градусах |
perspective | Сила проєктивного викривлення, що додається до афінного перетворення: кути полотна зсуваються всередину щонайбільше на min(perspective * 100, 0.2) половини сторони полотна по кожній осі; 0 вимикає |
flipud | Імовірність вертикального віддзеркалення |
no_aug_epochs | Останні епохи навчання з вимкненою сильною аугментацією |
auto_augment | Політика AutoAugment для класифікації: randaugment, autoaugment або augmix |
erasing | Імовірність RandomErasing для класифікації |
mixup | Імовірність пакетного MixUp для класифікації з м'якими мітками |
cutmix | Імовірність пакетного CutMix для класифікації з м'якими мітками |
Останні чотири належать до набору класифікації. Сімейства виявлення їх ігнорують. train() і CLI спрямовують mixup на змішування батчів класифікації для класифікаторів і на mixup_prob для детекторів.
from libreyolo.data.augment.spec import ( AUG_KNOBS, aug_support, ignored_aug_params, uses_mosaic_gating,) print(sorted(AUG_KNOBS)) table = aug_support("yolo9")print(table["mixup_prob"].status, table["mixup_prob"].note) print(sorted(ignored_aug_params("dfine")))print(uses_mosaic_gating("yolo9"), uses_mosaic_gating("yolonas"))Три стани
| Стан | Значення |
|---|---|
used | Параметр потрапляє до пайплайна навчання сімейства та змінює зразки |
gated_by_mosaic | Параметр застосовується лише до зразків, що пройшли гілку мозаїки, тому за mosaic_prob == 0 він ніколи не спрацьовує |
ignored | Параметр ніколи не потрапляє до пайплайна; його встановлення нічого не змінює |
Стан ignored варто перевірити перед запуском, оскільки помилки не виникає.
CLI попереджає, коли явно заданий параметр навчання ігнорується вибраним
сімейством, а засіб навчання попереджає, коли mixup_prob > 0 не може
спрацювати, бо сімейство дозволяє MixUp лише для мозаїки, а mosaic_prob дорівнює нулю.
Архетипи пайплайнів
Кожне охоплене сімейство використовує один із шести пайплайнів із кількома відхиленнями для окремих сімейств, переліченими нижче.
| Параметр | У стилі YOLOX | YOLO-NAS | У стилі DETR | Класифікація | Семантична | Відновлення |
|---|---|---|---|---|---|---|
mosaic_prob | використовується | ігнорується | ігнорується | ігнорується | ігнорується | ігнорується |
mixup_prob | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
hsv_prob | використовується | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
flip_prob | використовується | використовується | використовується | використовується | ігнорується | ігнорується |
degrees | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
translate | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
mosaic_scale | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
mixup_scale | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
shear | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
perspective | залежить від мозаїки | використовується | ігнорується | ігнорується | ігнорується | ігнорується |
flipud | використовується | використовується | ігнорується | використовується | ігнорується | ігнорується |
no_aug_epochs | використовується | використовується | використовується | використовується | використовується | використовується |
auto_augment | ігнорується | ігнорується | ігнорується | використовується | ігнорується | ігнорується |
erasing | ігнорується | ігнорується | ігнорується | використовується | ігнорується | ігнорується |
mixup | ігнорується | ігнорується | ігнорується | використовується | ігнорується | ігнорується |
cutmix | ігнорується | ігнорується | ігнорується | використовується | ігнорується | ігнорується |
У пайплайні стилю YOLOX попереднє оброблення окремих зразків застосовує випадкову
зміну HSV і віддзеркалення, тоді як афінне перетворення та MixUp виконуються
лише в гілці мозаїки. Натомість YOLO-NAS виконує постійно ввімкнене афінне
перетворення для кожного зразка, ігнорує мозаїку й незалежно застосовує MixUp,
повторно використовуючи mosaic_scale як діапазон афінного масштабу.
Пайплайн стилю DETR є наскрізним перетворенням без mosaic. Фотометричне спотворення, віддалення й обрізання за IoU є константами рецепта, а не налаштовуваними параметрами, тому hsv_prob і геометричні параметри до нього не доходять. Класифікація використовує flip_prob для горизонтального й flipud для вертикального віддзеркалення. Семантичне коливання масштабу й HSV походять з атрибутів класів сімейства, а не з параметрів конфігурації; віддзеркалення відновлення є спільними операціями входу й цілі з фіксованою ймовірністю 0.5.
no_aug_epochs враховується всюди, але вимикає різне: mosaic і MixUp для стилю YOLOX, афінне перетворення й MixUp для YOLO-NAS, сильні фотометричні аугментації та обрізання разом із завершенням розкладу швидкості навчання для стилю DETR, а також автоматичну аугментацію, стирання, MixUp і CutMix для класифікації. Обрізання й віддзеркалення класифікації залишаються ввімкненими.
Сімейства за архетипом
| Архетип | Сімейства |
|---|---|
| У стилі YOLOX | yolox, yolo7, yolo9, yolo9_e2e, yolo9_p2, rtmdet, picodet, rtdetr, rtdetrv2, fomo |
| YOLO-NAS | yolonas, ppyoloe |
| У стилі DETR | dfine, gtr, domedetr, deim, deimv2, tinyformer, rtdetrv4, rfdetr, ec, dinov2 |
| Класифікація | resnet, convnext, convnextv2, mobilenetv4, efficientnetv2 |
| Семантична | segformer, unet, lingbotvision |
| Відновлення | nafnet |
Охоплено тридцять одне сімейство. Для сімейства поза цим списком повертається порожній набір ігнорованих параметрів, тому попередження не виводиться.
Відхилення
| Сімейство | Відмінність від архетипу |
|---|---|
rtmdet | flipud ігнорується: його перетворення не має вертикального віддзеркалення |
picodet | flipud ігнорується |
rtdetr | flipud ігнорується |
rtdetrv2 | flipud ігнорується |
fomo | perspective і flipud ігноруються |
ppyoloe | flipud ігнорується: рецепт першоджерела натомість використовує випадковий поворот на 90 градусів |
gtr | mosaic_prob і mixup_prob використовуються протягом перших mosaic_epochs епох; degrees, translate і mosaic_scale формують афінне перетворення, що йде після мозаїки |
ec | hsv_prob, degrees і translate використовуються лише для task="pose"; detect і segment застосовують фіксовані фотометричні рецепти |
dinov2 | Пакет класифікації використовується лише для task="classify" |
ec і dinov2 є багатозадачними сімействами, тому параметр позначається як
ігнорований, лише якщо його ігнорують усі придатні до навчання завдання цього
сімейства. Завдяки цьому попередження CLI ніколи не є правильним для одного
завдання й помилковим для іншого.
Dome-DETR успадковує перетворення D-FINE без змін. Єдиною непідтримуваною функцією є багатомасштабне навчання, яке вимикається його конфігурацією, а не специфікацією аугментації.
Параметри окремих сімейств
Деякі сімейства мають параметри аугментації у власному підкласі TrainConfig,
а не в базовому. CLI не надає до них доступу; задавайте їх через Python API.
| Сімейство | Параметр | Значення |
|---|---|---|
yolo9, yolo9_e2e, yolo9_p2 | copy_paste | Імовірність аугментації екземплярів копіюванням і вставленням лише для task="segment" |
yolo9, yolo9_e2e, yolo9_p2 | copy_paste_mode | Джерело копіювання та вставлення: flip віддзеркалює той самий зразок, mixup використовує другий зразок |
yolo9, yolo9_e2e, yolo9_p2 | rot90 | Імовірність випадкового повороту на 90 градусів |
rfdetr | copy_paste | Імовірність копіювання та вставлення для task="segment", лише режим flip |
rfdetr | copy_paste_mode | Режим джерела копіювання та вставлення для task="segment" |
rfdetr | crop_resize_prob | Імовірність випадкового обрізання зі зміною розміру в рідному пайплайні |
dfine | crop_resize_prob | Імовірність випадкового обрізання зі зміною розміру для task="segment" |
ec | crop_resize_prob | Імовірність випадкового обрізання зі зміною розміру для task="segment" |
ec, yolonas | brightness_contrast_prob | Імовірність випадкової зміни яскравості й контрастності для task="pose" |
ec, yolonas | affine_prob | Імовірність афінного перетворення з урахуванням ключових точок для task="pose" |
rot90 застосовується до detect і OBB у yolo9.
Запити до специфікації
| Допоміжна функція | Повертає |
|---|---|
aug_support(family) | Таблицю відповідності параметрів до Support або None для невідомого сімейства |
ignored_aug_params(family) | Набір назв параметрів, які сімейство ігнорує; порожній для невідомого сімейства |
uses_mosaic_gating(family) | Чи спрацьовує MixUp сімейства лише для мозаїчних зразків |
display_name(family) | Зрозумілу користувачу назву сімейства, яку використано в попередженнях |
mixup_gating_warning(family, mosaic_prob, mixup_prob) | Текст попередження, якщо MixUp ніколи не може спрацювати, інакше None |
Support є іменованим кортежем зі status і note, де примітка пояснює, чому
параметр ігнорується або залежить від мозаїки для цього сімейства.
Шлюз мозаїки
Для сімейства в стилі YOLOX поєднання mixup_prob=0.5 з mosaic_prob=0
повністю вимикає MixUp, оскільки MixUp застосовується лише до мозаїчних зразків.
Таке поєднання легко отримати, якщо вимкнути мозаїку наприкінці навчання. Засіб
навчання записує попередження з назвою сімейства, а чиста функція
mixup_gating_warning реалізує цю поведінку.