Переглянути як Markdown

Аугментації

Аугментація налаштовується параметрами TrainConfig, але кожне сімейство моделей виконує власний пайплайн навчання. Пайплайн без гілки мозаїки ігнорує mosaic_prob, а не імітує його дію.

Налаштування параметрів

Параметри аугментації передаються як звичайні аргументи train().

Python
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
# У 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")))

Підсумок за пайплайнами для базових параметрів:

ПараметрСтиль YOLOXYOLO-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-P2copy_pasteІмовірність аугментації екземплярів copy-paste, лише для task="segment"
YOLOv9, YOLOv9-E2E, YOLOv9-P2copy_paste_mode"flip" повторно використовує той самий віддзеркалений зразок, "mixup" отримує другий зразок
YOLOv9, YOLOv9-E2E, YOLOv9-P2rot90Імовірність випадкового повороту на 90 градусів
YOLOv9max_labelsОбмеження еталонних міток на зображення в перетвореннях навчання, типово 100
RF-DETRcopy_paste, copy_paste_modeCopy-paste для task="segment", лише режим "flip"
RF-DETR, D-FINE, ECcrop_resize_probІмовірність випадкового обрізання зі зміною розміру
EC, YOLO-NASbrightness_contrast_prob, affine_probІмовірності варіювання яскравості й контрасту та афінного перетворення з урахуванням ключових точок у шляху пози

max_labels є параметром, який може непомітно спричинити втрату даних. Рамки понад обмеження відкидаються без помилки, тому для щільних зображень, наприклад аерофотознімків, його значення потрібно збільшити.

Мозаїку й MixUp вимкнено для навчання з орієнтованими рамками незалежно від параметрів, оскільки аугментацію повернутих рамок з урахуванням кутів не реалізовано.

Пов'язані матеріали

  • Гіперпараметри описують no_aug_epochs як аргумент розкладу та решту параметрів train().
  • Датасети описують формати міток, які споживають ці перетворення.

Перевірено з LibreYOLO v1.5.0.