Посмотреть как Markdown

Матрица аугментаций

То, что параметр аугментации задан, ещё не значит, что он дойдёт до пайплайна. На этой странице записано, как каждое обучаемое семейство обходится с каждым параметром TrainConfig — по декларативной таблице, которую библиотека поставляет как единственный источник истины.

Параметры

Это имена полей TrainConfig, а не то, как они пишутся в CLI. CLI сопоставляет им свои алиасы, поэтому --mosaic задаёт mosaic_prob.

ПараметрЗначение
mosaic_probВероятность собрать мозаичный сэмпл из 4 изображений
mixup_probВероятность подмешать второй сэмпл
hsv_probВероятность цветового HSV-джиттера
flip_probВероятность горизонтального отражения
degreesДиапазон случайного поворота для аффинного преобразования, в градусах
translateДоля случайного сдвига для аффинного преобразования
mosaic_scaleДиапазон случайного масштаба для аффинного преобразования
mixup_scaleДиапазон джиттера масштаба, применяемый к парному изображению MixUp
shearДиапазон случайного скоса для аффинного преобразования, в градусах
perspectiveВеличина проективного искажения в аффинном преобразовании
flipudВероятность вертикального отражения
no_aug_epochsПоследние эпохи, которые обучаются с отключённой сильной аугментацией
auto_augmentПолитика AutoAugment для классификации: randaugment, autoaugment или augmix
erasingВероятность RandomErasing в классификации
mixupВероятность батчевого MixUp в классификации, с мягкими метками
cutmixВероятность батчевого CutMix в классификации, с мягкими метками

Последние четыре — набор для классификации. Семейства детекции их игнорируют. mixup — параметр только для API: в 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 равен нулю.

Архетипы пайплайнов

Каждое охваченное семейство следует одному из шести пайплайнов, с несколькими отклонениями по семействам, перечисленными ниже.

ПараметрВ стиле YOLOXYOLO-NASВ стиле DETRКлассификацияСемантикаВосстановление
mosaic_probusedignoredignoredignoredignoredignored
mixup_probgatedusedignoredignoredignoredignored
hsv_probusedusedignoredignoredignoredignored
flip_probusedusedusedignoredignoredignored
degreesgatedusedignoredignoredignoredignored
translategatedusedignoredignoredignoredignored
mosaic_scalegatedusedignoredignoredignoredignored
mixup_scalegatedusedignoredignoredignoredignored
sheargatedusedignoredignoredignoredignored
perspectivegatedusedignoredignoredignoredignored
flipudusedusedignoredignoredignoredignored
no_aug_epochsusedusedusedusedusedused
auto_augmentignoredignoredignoredusedignoredignored
erasingignoredignoredignoredusedignoredignored
mixupignoredignoredignoredusedignoredignored
cutmixignoredignoredignoredusedignoredignored

В пайплайне в стиле YOLOX HSV-джиттер и отражения применяются к каждому сэмплу на этапе предобработки, а аффинное преобразование и MixUp выполняются только внутри ветки мозаики. YOLO-NAS вместо этого применяет аффинное преобразование к каждому сэмплу, и оно включено всегда, мозаику игнорирует, а MixUp применяет независимо, переиспользуя mosaic_scale как диапазон масштаба аффинного преобразования.

Пайплайн в стиле DETR — сквозное преобразование без мозаики. Фотометрическое искажение, zoom-out и обрезка по IoU заданы в нём константами рецепта, а не настраиваемыми параметрами, и поэтому hsv_prob и геометрические параметры до него не доходят. Пайплайн классификации использует преобразование ImageFolder, у которого горизонтальное отражение зафиксировано на 0.5, а не берётся из flip_prob. Джиттер масштаба и HSV в семантике приходят из атрибутов класса семейства, а не из параметров конфигурации, а отражения в восстановлении — связанные операции над входом и целью с фиксированной вероятностью 0.5.

no_aug_epochs учитывается везде, хотя отключает он разное: мозаику и MixUp в стиле YOLOX, аффинное преобразование и MixUp в YOLO-NAS, сильные фотометрические аугментации и обрезки плюс хвост скорости обучения в стиле DETR, и хвост планировщика во всех остальных.

Семейства по архетипам

АрхетипСемейства
В стиле YOLOXyolox, yolo7, yolo9, yolo9_e2e, yolo9_p2, rtmdet, picodet, rtdetr, rtdetrv2, fomo
YOLO-NASyolonas
В стиле DETRdfine, domedetr, deim, deimv2, rtdetrv4, rfdetr, ec, dinov2
Классификацияresnet, convnext, mobilenetv4, efficientnetv2
Семантикаsegformer
Восстановлениеnafnet

Охвачено двадцать пять семейств. Семейство вне этого списка возвращает пустое множество игнорируемых параметров, поэтому предупреждений для него не выводится.

Отклонения

СемействоОтличие от своего архетипа
rtmdetflipud игнорируется: в его преобразовании нет вертикального отражения
picodetflipud игнорируется
rtdetrflipud игнорируется
rtdetrv2flipud игнорируется
fomoperspective и flipud игнорируются
echsv_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_p2copy_pasteВероятность copy-paste-аугментации экземпляров, только task="segment"
yolo9, yolo9_e2e, yolo9_p2copy_paste_modeИсточник copy-paste: flip отражает тот же сэмпл, mixup берёт второй сэмпл
yolo9, yolo9_e2e, yolo9_p2rot90Вероятность случайного поворота на 90 градусов
rfdetrcopy_pasteВероятность copy-paste для task="segment", только в режиме flip
rfdetrcopy_paste_modeРежим источника copy-paste для task="segment"
rfdetrcrop_resize_probВероятность случайной обрезки с изменением размера в нативном пайплайне
dfinecrop_resize_probВероятность случайной обрезки с изменением размера, task="segment"
eccrop_resize_probВероятность случайной обрезки с изменением размера, task="segment"
ec, yolonasbrightness_contrast_probВероятность джиттера яркости и контраста, task="pose"
ec, yolonasaffine_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, где note объясняет, почему параметр игнорируется или привязан к мозаике для этого семейства.

Привязка к мозаике

Для семейства в стиле YOLOX сочетание mixup_prob=0.5 и mosaic_prob=0 полностью отключает MixUp, потому что MixUp применяется только к мозаичным сэмплам. К такой комбинации легко прийти, отключая мозаику на поздних этапах обучения. Трейнер пишет в лог предупреждение с названием семейства, а mixup_gating_warning — чистая функция, которая за ним стоит.

Список параметров, статусы, архетипы, отклонения по семействам и вспомогательные функции прочитаны из libreyolo/data/augment/spec.py на версии 1.5.0. Эта таблица привязана к реальным пайплайнам тестами tests/unit/test_augment_spec.py.