Матрица аугментаций
То, что параметр аугментации задан, ещё не значит, что он дойдёт до пайплайна. На этой странице записано, как каждое обучаемое семейство обходится с каждым параметром 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
равен нулю.
Архетипы пайплайнов
Каждое охваченное семейство следует одному из шести пайплайнов, с несколькими отклонениями по семействам, перечисленными ниже.
| Параметр | В стиле YOLOX | YOLO-NAS | В стиле DETR | Классификация | Семантика | Восстановление |
|---|---|---|---|---|---|---|
mosaic_prob | used | ignored | ignored | ignored | ignored | ignored |
mixup_prob | gated | used | ignored | ignored | ignored | ignored |
hsv_prob | used | used | ignored | ignored | ignored | ignored |
flip_prob | used | used | used | ignored | ignored | ignored |
degrees | gated | used | ignored | ignored | ignored | ignored |
translate | gated | used | ignored | ignored | ignored | ignored |
mosaic_scale | gated | used | ignored | ignored | ignored | ignored |
mixup_scale | gated | used | ignored | ignored | ignored | ignored |
shear | gated | used | ignored | ignored | ignored | ignored |
perspective | gated | used | ignored | ignored | ignored | ignored |
flipud | used | used | ignored | ignored | ignored | ignored |
no_aug_epochs | used | used | used | used | used | used |
auto_augment | ignored | ignored | ignored | used | ignored | ignored |
erasing | ignored | ignored | ignored | used | ignored | ignored |
mixup | ignored | ignored | ignored | used | ignored | ignored |
cutmix | ignored | ignored | ignored | used | ignored | ignored |
В пайплайне в стиле 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, и хвост
планировщика во всех остальных.
Семейства по архетипам
| Архетип | Семейства |
|---|---|
| В стиле YOLOX | yolox, yolo7, yolo9, yolo9_e2e, yolo9_p2, rtmdet, picodet, rtdetr, rtdetrv2, fomo |
| YOLO-NAS | yolonas |
| В стиле DETR | dfine, domedetr, deim, deimv2, rtdetrv4, rfdetr, ec, dinov2 |
| Классификация | resnet, convnext, mobilenetv4, efficientnetv2 |
| Семантика | segformer |
| Восстановление | nafnet |
Охвачено двадцать пять семейств. Семейство вне этого списка возвращает пустое множество игнорируемых параметров, поэтому предупреждений для него не выводится.
Отклонения
| Семейство | Отличие от своего архетипа |
|---|---|
rtmdet | flipud игнорируется: в его преобразовании нет вертикального отражения |
picodet | flipud игнорируется |
rtdetr | flipud игнорируется |
rtdetrv2 | flipud игнорируется |
fomo | perspective и flipud игнорируются |
ec | hsv_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_p2 | copy_paste | Вероятность copy-paste-аугментации экземпляров, только task="segment" |
yolo9, yolo9_e2e, yolo9_p2 | copy_paste_mode | Источник copy-paste: flip отражает тот же сэмпл, mixup берёт второй сэмпл |
yolo9, yolo9_e2e, yolo9_p2 | rot90 | Вероятность случайного поворота на 90 градусов |
rfdetr | copy_paste | Вероятность copy-paste для task="segment", только в режиме flip |
rfdetr | copy_paste_mode | Режим источника copy-paste для task="segment" |
rfdetr | crop_resize_prob | Вероятность случайной обрезки с изменением размера в нативном пайплайне |
dfine | crop_resize_prob | Вероятность случайной обрезки с изменением размера, task="segment" |
ec | crop_resize_prob | Вероятность случайной обрезки с изменением размера, task="segment" |
ec, yolonas | brightness_contrast_prob | Вероятность джиттера яркости и контраста, task="pose" |
ec, yolonas | affine_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 — чистая функция, которая за ним стоит.