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

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

То, что параметр аугментации задан, ещё не значит, что он дойдёт до пайплайна. На этой странице записано, как каждое обучаемое семейство обходится с каждым параметром 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 равен нулю.

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

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

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

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

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

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

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

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

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

Отклонения

СемействоОтличие от своего архетипа
rtmdetflipud игнорируется: в его преобразовании нет вертикального отражения
picodetflipud игнорируется
rtdetrflipud игнорируется
rtdetrv2flipud игнорируется
fomoperspective и flipud игнорируются
ppyoloeflipud игнорируется: исходный рецепт вместо него использует случайный поворот на 90 градусов
gtrmosaic_prob и mixup_prob используются в первые mosaic_epochs эпох; degrees, translate и mosaic_scale задают аффинное преобразование после мозаики
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.6.0. Эта таблица привязана к реальным пайплайнам тестами tests/unit/test_augment_spec.py.