Аугментації
Аугментація налаштовується параметрами TrainConfig, але кожне сімейство моделей виконує власний пайплайн навчання. Пайплайн без гілки мозаїки ігнорує mosaic_prob, а не імітує його дію.
Налаштування параметрів
Параметри аугментації передаються як звичайні аргументи train().
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.train( data="my-dataset.yaml", epochs=100, mosaic_prob=1.0, mixup_prob=0.15, hsv_prob=1.0, flip_prob=0.5, no_aug_epochs=15,)# У CLI параметр mosaic_prob має назву mosaic, а mixup_prob має назву mixup.libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \ epochs=100 mosaic=1.0 mixup=0.15 hsv_prob=1.0 \ flip_prob=0.5 no_aug_epochs=15Три з них мають коротші назви, які однаково приймають train() і CLI: mosaic
відповідає mosaic_prob, fliplr відповідає flip_prob, а для виявлення mixup
відповідає mixup_prob. Передавання короткої назви та її поля з різними
значеннями спричиняє помилку. Назви всіх інших параметрів однакові в обох місцях.
Три стани замість двох
Дія параметра залежить від сімейства. Бібліотека зберігає ці відомості в декларативній таблиці, і кожен запис має один із трьох станів.
used означає, що параметр доходить до пайплайна й змінює зразки. ignored означає,
що він ніколи не доходить до пайплайна, тому його встановлення нічого не змінює.
gated_by_mosaic означає, що параметр застосовується лише до зразків, які потрапили
до гілки мозаїки, тому за mosaic_prob=0 він ніколи не спрацьовує, хоча й під'єднаний.
Третій стан часто стає несподіванкою. У пайплайні стилю YOLOX афінне перетворення
виконується на полотні мозаїки, а MixUp змішує зразок мозаїки, тому mosaic_prob=0
непомітно вимикає degrees, translate, shear, perspective, mosaic_scale,
mixup_prob і mixup_scale одночасно. Саме для випадку MixUp засіб навчання записує
в лог попередження:
mixup_prob=0.15 has no effect for YOLOv9: mixup only applies to mosaic samplesand mosaic_prob=0. Set mosaic_prob > 0 to enable mixup.CLI також попереджає про ігноровані параметри й перелічує лише ті, які було введено:
Warning: RF-DETR ignores these parameters: degrees, mosaicЧотири структури пайплайнів
Сімейства об'єднуються в чотири пайплайни навчання, і саме пайплайн визначає майже всі відповіді.
Пайплайн мозаїки стилю YOLOX застосовує до кожного зразка варіювання HSV і віддзеркалення, а потім виконує афінне перетворення та MixUp усередині гілки мозаїки. Він охоплює YOLOX, YOLOv7, YOLOv9 та його варіанти E2E і P2, RTMDet, PicoDet, RT-DETR, RT-DETRv2 і FOMO.
Наскрізний пайплайн стилю DETR не має мозаїки чи афінного перетворення. Фотометричне
спотворення, віддалення та обрізання за IoU в ньому є константами рецепта, а не
параметрами конфігурації, тому діють лише flip_prob і no_aug_epochs. Він охоплює
D-FINE, Dome-DETR, DEIM, DEIMv2, RT-DETRv4, EC і, з однією зміною, RF-DETR.
Класифікаційний пайплайн ImageFolder має власні засоби керування аугментацією. flip_prob керує горизонтальним віддзеркаленням і типово дорівнює 0.5; fliplr є його псевдонімом.
YOLO-NAS має окрему структуру: взагалі без мозаїки, із завжди ввімкненим афінним
перетворенням кожного зразка та MixUp, який застосовується незалежно, а не обмежується
іншою умовою. Значення mosaic_scale повторно використовується як діапазон масштабу
афінного перетворення.
SegFormer, LingBot-Vision і NAFNet виконують окремі пайплайни для своїх задач,
випадковість яких зафіксована в сімействі, а не налаштовується. У SegFormer і
LingBot-Vision діють атрибути класу semantic_scale_jitter і
semantic_hsv_prob, а не mosaic_scale і hsv_prob.
В NAFNet обрізання та віддзеркалення є пов'язаними операціями над вхідними й цільовими
даними з фіксованою ймовірністю 0.5.
Які параметри підтримує кожне сімейство
У таблиці нижче наведено специфікацію, що постачається у
libreyolo/data/augment/spec.py і звіряється з фактичними з'єднаннями пайплайна
власними тестами бібліотеки. Читайте її там, а не робіть висновки з архітектури.
from libreyolo.data.augment.spec import AUG_KNOBS, aug_support for knob, description in AUG_KNOBS.items(): support = aug_support("yolo9")[knob] print(f"{knob:16} {support.status:16} {support.note or description}")from libreyolo.data.augment.spec import ignored_aug_params print(sorted(ignored_aug_params("rfdetr")))Підсумок за пайплайнами для базових параметрів:
| Параметр | Стиль YOLOX | YOLO-NAS | Стиль DETR | Класифікація |
|---|---|---|---|---|
mosaic_prob | використовується | ігнорується | ігнорується | ігнорується |
mixup_prob | залежить від мозаїки | використовується | ігнорується | ігнорується |
hsv_prob | використовується | використовується | ігнорується | ігнорується |
flip_prob | використовується | використовується | використовується | використовується |
flipud | використовується | використовується | ігнорується | використовується |
degrees | залежить від мозаїки | використовується | ігнорується | ігнорується |
translate | залежить від мозаїки | використовується | ігнорується | ігнорується |
shear | залежить від мозаїки | використовується | ігнорується | ігнорується |
perspective | залежить від мозаїки | використовується | ігнорується | ігнорується |
mosaic_scale | залежить від мозаїки | використовується | ігнорується | ігнорується |
mixup_scale | залежить від мозаїки | використовується | ігнорується | ігнорується |
no_aug_epochs | використовується | використовується | використовується | використовується |
Винятки в цих стовпцях, і всі вони звужують підтримку:
- RTMDet, PicoDet, RT-DETR, RT-DETRv2 і FOMO не мають вертикального віддзеркалення,
тому
flipudігнорується. Обгортку мозаїки FOMO також створено без перспективи. - Нативний пайплайн RF-DETR не має варіювання HSV, тому на додачу до стовпця стилю
DETR параметр
hsv_probігнорується. - EC підтримує
hsv_prob,degreesіtranslate, але лише дляtask="pose", де їх зчитує перетворення з урахуванням ключових точок. Його шляхи виявлення й сегментації використовують фіксовані фотометричні рецепти. - DINOv2 дотримується стовпця стилю DETR для задач виявлення й семантичної сегментації
та додає пакет класифікації для
task="classify".
no_aug_epochs має стан used усюди, але його значення залежить від пайплайна. У пайплайнах mosaic він вимикає mosaic і MixUp для останніх епох. У пайплайнах стилю DETR він зупиняє фотометричні аугментації, віддалення й обрізання та формує завершення розкладу. У класифікаційних пайплайнах він вимикає автоматичну аугментацію, стирання, MixUp і CutMix; обрізання й віддзеркалення залишаються.
perspective додає проєктивне викривлення поверх обертання, масштабу, зсуву й
переміщення. Кожен кут полотна зсувається всередину на випадкову величину, що не
перевищує min(perspective * 100, 0.2) половини сторони полотна по кожній осі, тож
perspective=0.001 зсуває кут щонайбільше на 5 відсотків сторони за будь-якої
роздільної здатності, а кожне значення від 0.002 досягає того самого максимуму.
Типове 0 лишає викривлення афінним, а від'ємне значення спричиняє ValueError,
коли викривлюється перший зразок. Його застосовують YOLOv9 та його варіанти E2E і
P2, YOLOX, YOLOv7, YOLO-NAS, PP-YOLOE, RTMDet, PicoDet, RT-DETR і RT-DETRv2.
MixUp у пайплайні mosaic YOLOv9, через який навчаються YOLOv9 та його варіанти, YOLOv7, RT-DETR і RT-DETRv2, бере коефіцієнт змішування з Beta(1, 1), рівномірно на [0, 1]. Обгортка mosaic YOLOX, яку використовують YOLOX, RTMDet і PicoDet, змішує з фіксованим 0.5.
Пакет класифікації
Чотири параметри керують пайплайном класифікації й не впливають ні на що інше. Сімейства виявлення ігнорують усі чотири.
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train( data="my-classification-dataset", epochs=50, auto_augment="randaugment", erasing=0.25, mixup=0.2, cutmix=0.2,)auto_augment приймає "randaugment", "autoaugment", "augmix" або None.
erasing задає ймовірність RandomErasing. mixup і cutmix є ймовірностями для
окремого батча, які створюють м'які мітки; на одному батчі виконується не більше
однієї операції, спочатку MixUp, тому ймовірності додаються й мають у сумі
не перевищувати 1.
Усі чотири типово вимкнено, тому навчання класифікації не змінюється без явного запиту.
train() і CLI спрямовують mixup залежно від завдання: класифікація використовує змішування батчів, а виявлення використовує mixup_prob.
scale=0.5 означає діапазон площі випадкового обрізання (0.5, 1.0); явна пара задає обидві межі. crop_pct=None зберігає коефіцієнт масштабування сімейства для оцінювання; перевизначення впливає на оцінювання під час навчання й валідації, тоді як експорт зберігає нативну попередню обробку сімейства.
CLI надає auto_augment, erasing, cutmix, fliplr і flipud. У класифікації mixup означає змішування батчів і типово дорівнює 0.0. Горизонтальне віддзеркалення типово має ймовірність 0.5, вертикальне 0.0. mixup + cutmix не має перевищувати 1.
no_aug_epochs вимикає автоматичну аугментацію, стирання, MixUp і CutMix для останніх епох, зберігаючи обрізання й віддзеркалення. У класифікаційних рецептах ця завершальна фаза типово дорівнює 0.
Параметри окремих сімейств
Деякі параметри належать підкласу конфігурації певного сімейства, а не базовому класу, тому існують лише для цього сімейства й не мають прапорця CLI.
| Сімейство | Параметр | Дія |
|---|---|---|
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste | Імовірність аугментації екземплярів copy-paste, лише для task="segment" |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste_mode | "flip" повторно використовує той самий віддзеркалений зразок, "mixup" отримує другий зразок |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | rot90 | Імовірність випадкового повороту на 90 градусів |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | max_labels | Обмеження еталонних міток на зображення в перетвореннях навчання, типово 300 |
| RF-DETR | copy_paste, copy_paste_mode | Copy-paste для task="segment", лише режим "flip" |
| RF-DETR, D-FINE, EC | crop_resize_prob | Імовірність випадкового обрізання зі зміною розміру |
| EC, YOLO-NAS | brightness_contrast_prob, affine_prob | Імовірності варіювання яскравості й контрасту та афінного перетворення з урахуванням ключових точок у шляху пози |
max_labels є параметром, який спричиняє втрату даних. Рамки понад обмеження
відкидаються з одноразовим попередженням, а не помилкою, тому для щільних
зображень, наприклад аерофотознімків, його значення потрібно збільшити. Пам'ять
для призначення міток залежить від найщільнішого зображення в батчі, а не від
обмеження.
Мозаїку й MixUp вимкнено для навчання з орієнтованими рамками незалежно від параметрів, оскільки аугментацію повернутих рамок з урахуванням кутів не реалізовано.
Пов'язані матеріали
- Гіперпараметри описують
no_aug_epochsяк аргумент розкладу та решту параметрівtrain(). - Датасети описують формати міток, які споживають ці перетворення.