Аугментації
Аугментація налаштовується параметрами 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Два з них мають коротші назви в CLI: mosaic відповідає mosaic_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 samples
and 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 для класифікації ігнорує кожен параметр виявлення. Горизонтальне
віддзеркалення в ньому має фіксовану ймовірність 0.5, на яку flip_prob не впливає.
Натомість він має власний набір параметрів, описаний нижче.
YOLO-NAS має окрему структуру: взагалі без мозаїки, із завжди ввімкненим афінним
перетворенням кожного зразка та MixUp, який застосовується незалежно, а не обмежується
іншою умовою. Значення mosaic_scale повторно використовується як діапазон масштабу
афінного перетворення.
SegFormer і NAFNet виконують окремі пайплайни для своїх задач, випадковість яких
зафіксована в сімействі, а не налаштовується. У SegFormer діють атрибути класу
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 використовується скрізь, але не скрізь означає те саме. У пайплайнах
мозаїки він вимикає мозаїку й MixUp для останніх епох. У пайплайнах стилю DETR він
припиняє фотометричні аугментації, віддалення й обрізання та формує завершальну частину
розкладу. У пайплайнах класифікації та семантичної сегментації він лише формує
завершальну частину розкладу.
Пакет класифікації
Чотири параметри керують пайплайном класифікації й не впливають ні на що інше. Сімейства виявлення ігнорують усі чотири.
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.
Усі чотири типово вимкнено, тому навчання класифікації не змінюється без явного запиту.
Варто чітко зазначити один збіг назв: у CLI mixup є псевдонімом параметра
виявлення mixup_prob. Поле класифікації mixup не має власної назви в CLI
і доступне лише через model.train(mixup=...) у Python.
Параметри окремих сімейств
Деякі параметри належать підкласу конфігурації певного сімейства, а не базовому класу, тому існують лише для цього сімейства й не мають прапорця 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 | max_labels | Обмеження еталонних міток на зображення в перетвореннях навчання, типово 100 |
| 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(). - Датасети описують формати міток, які споживають ці перетворення.