Примечание: эта статья — перевод страницы документации библиотеки Albumentations. Написана на основе 10 лет опыта в Computer Vision (работа, статьи, ML соревновПримечание: эта статья — перевод страницы документации библиотеки Albumentations. Написана на основе 10 лет опыта в Computer Vision (работа, статьи, ML соревнов

[Перевод] Аугментации изображений: как улучшить качество моделей без новых данных

2026/03/11 08:30
34м. чтение
Для обратной связи или замечаний по поводу данного контента, свяжитесь с нами по адресу crypto.news@mexc.com
4da3d31229de32f39f02b2c68514b346.webp

Примечание: эта статья — перевод страницы документации библиотеки Albumentations. Написана на основе 10 лет опыта в Computer Vision (работа, статьи, ML соревнования), 7 лет из которых я работал над Albumentations.
Все комментарии, вопросы и улучшения будут использованы для улучшения оригинального текста.

Модель, обученная на студийных фотографиях, сильно проседает, когда пользователи загружают снимки с телефона. Медицинский классификатор с точностью 95% падает до 70% при развёртывании в соседней больнице с другим оборудованием. Система восприятия для автономного вождения, обученная на летних калифорнийских данных, теряется в зимних европейских условиях. Модель мониторинга дикой природы, отлично работающая днём, перестает работать, когда камера-ловушка переключается в инфракрасный режим на закате.
Это не экзотика — модель просто запоминает узкое распределение обучающих данных вместо решения самой задачи. Датасет фиксирует лишь небольшой срез реальности: освещение, камеры, погоду и ракурсы — и модель опирается на детали съемки, а не на семантику изображения.
Лучшее решение — собрать данные из того распределения, в котором модель будет работать. У репрезентативных обучающих данных нет альтернатив. Но сбор данных — это дорого, долго и всегда неполно: невозможно предусмотреть все условия эксплуатации модели заранее.

Аугментация изображений — мощный вспомогательный инструмент, помогающий уменьшить проблему расхождения train и test распределений. Она расширяет распределение обучающих данных, сохраняя семантику изображений. Модель видит один и тот же объект в десятках вариаций освещения, ориентации и качества. Она учится, что «попугай» определяется формой и текстурой, а не настройками камеры.

В этой статье — путь от основ до production. Мы будем говорить об аугментации изображений, хотя многое будет применимо и к другим модальностям.

План:

  1. Понять, что такое аугментация, зачем она нужна и почему работает.

  2. Собрать стартовый пайплайн, с которым сразу можно обучать.

  3. Разобрать типичные ошибки, которые незаметно портят результат.

  4. Оценить результаты по воспроизводимому протоколу.

  5. Разобрать теорию и ограничения в production.

Интуиция: трансформации, сохраняющие смысл

Возьмите цветную фотографию попугая и переведите её в grayscale (оттенки серого). Это всё ещё попугай? Очевидно да. Семантика — форма, текстура и поза — полностью сохранена. Цвет не определял «попугайность».

Отразите изображение горизонтально. Всё ещё попугай. Поверните на несколько градусов. И снова он. Обрежьте чуть плотнее. Подкрутите яркость. Добавьте лёгкое размытие. В каждом случае разметчик поставил бы ту же метку.

Сохранение метки при безопасных трансформациях
Сохранение метки при безопасных трансформациях

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

Все трансформации можно разделить на два типа:

  • Пиксельные (pixel-level) преобразования меняют значения пикселей без изменения геометрии: яркость, контраст, цветовые сдвиги, размытие, шум, перевод в grayscale (оттенки серого).

  • Пространственные (spatial) преобразования меняют геометрию: отражения, повороты, масштабирование, перспективные искажения, сдвиги.

Оба семейства сохраняют метки, и поэтому их можно комбинировать.

Почему аугментация помогает: два слоя

Аугментация действует на двух уровнях. Это важно понять и для выбора стратегии, и для того, чтобы понять, почему совет «используйте только реалистичную аугментацию» неполон.

Уровень 1: In-distribution — дополнение того, что не удалось собрать

In-distribution аугментацию можно представить так: если бы вы в тех же условиях собирали данные бесконечно долго, какие вариации вы бы в итоге получили?

Вы фотографируете кошек для классификатора. Большинство кошек в вашем датасете смотрят вправо. Но кошки также смотрят влево, вверх, сидят под разными углами. Просто таких примеров оказалось мало. Горизонтальное отражение или небольшой поворот создаёт примеры, которые ваш процесс сбора мог бы дать — они просто не попали в датасет.

Дерматолог снимает изображения кожных поражений дерматоскопом. Устройство прижимается к коже, но на практике всегда есть лёгкий наклон, незначительный поворот, небольшие сдвиги центрирования. Эти вариации естественны для сбора данных, но не все попали в датасет. Малые аффинные преобразования и кроп помогают заполнить эти пробелы.

Каждый объектив вносит небольшое бочкообразное или подушкообразное искажение — прямые линии слегка изгибаются на снимке. Разные объективы дают разные искажения. Если обучающие данные получены одной камерой, а в production используется другая, характер геометрических искажений будет другим.
К примеру, OpticalDistortion симулирует именно это: искажает изображение так, как это сделал бы другой объектив, создавая вариации, характерные для реальной оптики.

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

In-distribution аугментация — самый безопасный выбор. Вы делаете обучающее распределение плотнее, заполняя пространство между реальными примерами правдоподобными вариациями, которые мог бы дать тот же процесс сбора. На этом уровне риск — быть слишком осторожным.

Это особенно ценно, когда условия обучения и production расходятся — а это норма, а не исключение. Медицинская модель, обученная на снимках из одной больницы, развёртывается в другой с другим оборудованием, другой калибровкой, другими привычками техников. Ритейл-классификатор, обученный на студийных фото, начинает получать снимки с телефонов при любом освещении. Спутниковая модель, обученная на снимках с одного сенсора, должна работать на другом.

Расширение обучающего распределения аугментацией
Расширение обучающего распределения аугментацией

In-distribution аугментация сокращает этот разрыв: трансформации яркости и цвета покрывают разницу в экспозиции и балансе белого, размытие и шум — разницу в оптике и качестве сенсора, геометрические трансформации — разницу в кропах и ракурсе. Чаще всего аугментация помогает потому, что условия production менее контролируемы, чем условия сбора данных.

Уровень 2: Out-of-distribution — регуляризация нереалистичными трансформациями

Теперь рассмотрим трансформации, дающие изображения, которые ваш процесс сбора никогда бы не произвёл, сколько бы вы ни ждали. Перевод цветной фотографии в grayscale (оттенки серого) — ни одна цветная камера никогда не снимет чёрно-белое изображение. Сильное сдвиговое искажение — ни один объектив не даёт такого эффекта. Вырезание случайных прямоугольных областей — ни один физический процесс так не делает. Экстремальный цветовой джиттер, превращающий красного попугая в фиолетового — никакое освещение такого не создаёт.

Эти трансформации out-of-distribution по определению. Но семантика остаётся однозначной. Чёрно-белый попугай — всё ещё очевидно попугай. Попугай с вырезанным прямоугольником — всё ещё попугай. Фиолетовый попугай выглядит странно, но форма, поза и текстура однозначно говорят «попугай».

Цель — не симулировать условия эксплуатации, а заставить сеть выучить устойчивые и избыточные признаки:

- Перевод в grayscale (оттенки серого) заставляет модель распознавать объекты по форме и текстуре, а не по цвету. Если вы обучаете классификатор птиц и модель выучивает «красный = попугай», она сломается на молодых попугаях, которые зелёные. Периодический перевод в grayscale вынуждает использовать структурные признаки. Патолог, работающий с гистологическими срезами, окрашенными H&E, сталкивается с той же проблемой — интенсивность окрашивания варьируется между лабораториями, и модель не должна полагаться на точный цвет.

- CoarseDropout заставляет модель учиться по нескольким частям объекта. Без него детектор слонов может почти полностью полагаться на хобот — единственный самый характерный признак. Замаскируйте хобот при обучении, и сеть вынуждена использовать уши, ноги, форму тела и текстуру кожи. На инференсе модель видит полное изображение — более лёгкую задачу, чем та, на которой обучалась. Принцип «тренируйся на сложном — тестируйся на лёгком» работает именно потому, что аугментированные изображения нереалистичны.

- Эластичные трансформации симулируют деформации, которые ни одна камера не производит, но которые важны для определённых доменов. В медицинской визуализации образцы ткани под микроскопом могут смещаться и деформироваться в зависимости от подготовки препарата и фокусировки. Деформация невелика, но достаточно реальна, чтобы эластичные трансформации отражали тот вид геометрической нестабильности, с которым модель должна справляться. Аналогично, распознавание рукописных символов выигрывает, потому что никакие два рукописных штриха не дают одинаковую геометрию.

- Сильный цветовой джиттер (ColorJitter) формирует инвариантность к цветовой статистике, которая различается между условиями освещения, сенсорами и пайплайнами постобработки. Модель для камеры-ловушки должна работать на рассвете, в сумерках и под пологом леса. Ритейл-модель — при флуоресцентном складском освещении и естественном дневном свете. Цветовой джиттер далеко за пределами реалистичных значений учит модель, что идентичность объекта не зависит от точного цвета — что обычно верно.

Это более сложный приём. Ключевое ограничение то же — метка должна оставаться однозначной после трансформации. Когда out-of-distribution аугментация работает, она значительно улучшает обобщение сверх того, что даёт in-distribution аугментация. Когда заходит слишком далеко — метка становится неоднозначной или модель тратит ресурсы на бесполезные инвариантности — она вредит.

На практике делают пайплайн, комбинирующий оба уровня. In-distribution трансформации покрывают реалистичные вариации и сокращают разрыв между train и production. Out-of-distribution трансформации — обычно с более низкой вероятностью — добавляют регуляризацию, вынуждая модель выучивать избыточные признаки. Эффективные пайплайны используют оба уровня аугментации, вне зависимости от размера датасета — маленькие датасеты выигрывают больше всего, но даже модели, обученные на миллионах изображений, используют аугментацию для регуляризации и устойчивости.

Единственное правило: сохранение метки

Любая аугментация — без исключений — должна удовлетворять одному ограничению:

Поставил бы аннотатор ту же метку после этой трансформации?

Если да — трансформация годится. Если нет — либо уберите её, либо ослабьте эффект до тех пор, пока ответ не станет «да».

  • Для классификации это означает, что класс должен сохраниться после применения аугментации.

  • Для детекции, сегментации и ключевых точек это означает, что пространственные аннотации должны трансформироваться вместе с изображением.

Когда сохранение метки нарушается, аугментация превращает данные в шум. Модель получает противоречивый обучающий сигнал, и метрики ухудшаются — часто незаметно, потому что агрегированные метрики могут маскировать ущерб по отдельным классам.

Это правило не допускает исключений. Всё остальное в этой статье — какие преобразования выбирать, насколько агрессивными их делать, когда использовать нереалистичные искажения — следует из него.

Первый пайплайн: базовая политика аугментаций

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

import albumentations as A train_transform = A.Compose([ A.RandomResizedCrop(size=(512, 512), scale=(0.8, 1.0), p=1.0), A.HorizontalFlip(p=0.5), A.Rotate(limit=10, p=0.3), A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.4), A.GaussianBlur(blur_limit=(3, 5), p=0.1), A.CoarseDropout( num_holes_range=(1, 6), hole_height_range=(0.05, 0.15), hole_width_range=(0.05, 0.15), p=0.2, ), ])

Это выполняется на CPU, пока GPU делает прямой и обратный проходы. Библиотеки аугментаций оптимизированы по скорости, так что пайплайн успевает за GPU-обучением, не становясь узким местом.

Что делает каждая трансформация:

  • RandomResizedCrop вносит вариацию масштаба и кропа (crop), не теряя смысла изображения.

  • HorizontalFlip безопасен в большинстве задач с естественными изображениями и использует зеркальную симметрию.

  • Небольшой Rotate покрывает лёгкий наклон камеры и вариации кропов.

  • RandomBrightnessContrast покрывает базовую вариативность экспозиции.

  • Лёгкий GaussianBlur повышает устойчивость к расфокусу и артефактам blur.

  • Умеренный CoarseDropout заставляет модель использовать несколько областей вместо одного доминантного патча.

Превью стартовой augmentation policy
Превью стартовой augmentation policy

Эта augmentation policy намеренно консервативна. Самый надёжный подход — наращивать постепенно: начать просто, измерить, добавить одну трансформацию или семейство, измерить снова, оставить то, что помогает. Это гораздо продуктивнее, чем начинать с подхода «суём всё подряд» и пытаться понять, почему метрики просели.

Даже этот простой пайплайн генерирует огромное разнообразие. Каждое независимое направление трансформации умножает эффективный размер датасета:

  • Горизонтальное отражение для всех изображений → ×2

  • Поворот с шагом 1° от −15° до +15° → ×31

  • 5 различных методов перевода в grayscale → ×5

Уже 2 × 31 × 5 = 310× — и мы даже не трогали яркость, контраст, масштаб, позицию кропов, силу размытия, уровень шума или окклюзию. Каждый из этих параметров добавляет свой диапазон вариаций. Albumentations предоставляет десятки пиксельных и десятки пространственных трансформаций, каждая со своим непрерывным или дискретным диапазоном параметров. Пространство возможных аугментацийодного изображения настолько огромно, что сеть фактически никогда не видит один и тот же вариант дважды за всё обучение, даже за сотни эпох.

Коллаж аугментаций попугая
Коллаж аугментаций попугая

Синхронизация таргетов: как не испортить метки незаметно

Для задач сложнее классификации аугментация затрагивает не только изображения. Детекции нужно, чтобы боксы двигались вместе с изображением. Сегментации — чтобы маски деформировались идентично. Оценке позы — чтобы ключевые точки следовали за геометрией.

Задача

Входные компоненты

Таргеты в Albumentations

Классификация

изображение

image

Детекция объектов

изображение + боксы

image, bboxes

Семантическая сегментация

изображение + маска

image, mask

Детекция ключевых точек / поза

изображение + ключевые точки

image, keypoints

Instance-сегментация

изображение + маски + боксы

image, mask, bboxes

Пиксельные трансформации (яркость, контраст, размытие, шум) не трогают геометрию, поэтому метки остаются на месте. Пространственные трансформации (отражение, поворот, кроп, аффинные, перспективные) двигают геометрию, и все пространственные аннотации должны трансформироваться синхронно с изображением. Именно здесь самописные пайплайны ломаются чаще всего: изображение повернули, а боксы — нет, и обучающий сигнал превращается в мусор. Модель учится на неправильных метках, а баг при этом не вызывает никаких исключений.

Синхронизация маски и bbox при пиксельных и пространственных трансформациях
Синхронизация маски и bbox при пиксельных и пространственных трансформациях

Вызов с несколькими аннотациями в Albumentations обрабатывает синхронизацию автоматически:

result = transform(image=img, mask=mask, bboxes=bboxes, keypoints=keypoints)

Расширяйте augmentation policy обдуманно: семейства трансформаций

На этом этапе у вас есть работающий базовый пайплайн и корректная синхронизация таргетов. Дальше — расширяйте augmentation policy по одному семейству за раз. У каждого семейства свои сильные стороны и предсказуемые грабли.

Геометрические трансформации

Примеры: HorizontalFlip, Rotate, Affine, Perspective, OpticalDistortion, SquareSymmetry.

Полезны для устойчивости к изменениям ракурса, вариации кропа и инвариантности к масштабу/позиции. HorizontalFlip безопасен в большинстве задач с естественными изображениями. В задачах, где ориентация не важна (аэро/спутниковая съёмка, микроскопия, некоторые медицинские сканы), SquareSymmetry применяет одну из 8 симметрий квадрата (тождественную, отражения, повороты на 90/180/270°) — точные операции без артефактов интерполяции от поворотов на произвольный угол.

Когда вредит: преобразование нарушает семантику сцены. Вертикальное отражение бессмысленно для сцен вождения. Большие повороты портят распознавание цифр или текста. Всегда проверяйте, сохраняет ли добавляемая геометрия метку именно для вашей задачи.

Фотометрические трансформации

Примеры: RandomBrightnessContrast, ColorJitter, PlanckianJitter, PhotoMetricDistort.

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

Когда вредит: нереалистичные цветовые распределения, которые никогда не встречаются в production. Сильные сдвиги оттенка на медицинских чёрно-белых изображениях не имеют физического смысла. Агрессивный цветовой джиттер для классов, чувствительных к цвету бренда, может запутать модель.

Размытие и шум

Примеры: GaussianBlur, MedianBlur, MotionBlur, GaussNoise.

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

Когда вредит: избыточное размытие или шум стирает те самые детали, которые определяют класс. Если мелкие дефекты — сигнал задачи (промышленная инспекция, медицинские поражения), сильное размытие может стереть объект интереса.

Окклюзия и dropout

Примеры: CoarseDropout, RandomErasing, GridDropout, ConstrainedCoarseDropout.

Dropout-аугментации — одни из самых эффективных аугментаций. Они заставляют сеть учиться по нескольким частям объекта, а не полагаться на один доминантный патч. По сути это аналог dropout в пространстве входных данных: сеть не может полагаться на один участок изображения. Заодно они симулируют реальную частичную окклюзию, которая в production встречается часто, а в обучающих данных — редко. ConstrainedCoarseDropout идёт дальше, применяя dropout конкретно внутри аннотированных областей объекта (масок или ограничивающих боксов), делая симуляцию окклюзии ещё прицельнее.

Когда вредит: маски слишком большие или слишком частые, уничтожающие основной сигнал.

Снижение цветовой информации

Примеры: ToGray, ChannelDropout.

Если цвет — ненадёжный дискриминативный признак для вашей задачи, эти трансформации заставляют сеть учиться по форме, текстуре и контексту. ToGray убирает всю цветовую информацию, а ChannelDropout выбрасывает отдельные каналы, частично ослабляя цветовой сигнал. Оба полезны как дополнения с низкой вероятностью (5–15%), чтобы снизить зависимость модели от цвета, который может не переноситься между условиями освещения или камерами.

Это особенно полезно в датасетах, где цвет коррелирует с меткой случайно.

Когда вредит: если цвет критичен для задачи (спелый или неспелый фрукт, сигнал светофора), эти трансформации портят метку.

Симуляция среды

Примеры: RandomRain, RandomFog, RandomSunFlare, RandomShadow.

Полезны для систем, работающих на открытом воздухе, где погода — реальный фактор.

Когда вредит: синтетические эффекты, не похожие на реальные снимки. Грубое наложение дождя, которое ни одна камера не воспроизводит, может навредить больше, чем помочь.

Продвинутые методы композиции

MixUp, CutMix, Mosaic и Copy-Paste могут быть мощными, но обычно требуют интеграции в обучающий цикл и собственной логики смешивания меток — это выходит за рамки одиночных трансформаций. Используйте их, когда базовая augmentation policy уже стабильна и вам нужна дополнительная устойчивость или поддержка редких случаев.

Настраивайте систематически: вероятность и интенсивность аугментаций

У каждой трансформации две ручки настройки:

  • Вероятность (p): как часто трансформация применяется к примеру.

  • Интенсивность трансформации: насколько сильна трансформация (угол поворота, диапазон яркости, размер ядра размытия).

Большинство ошибок выбора аугментации — не в выборе самого преобразования, а в настройке силы аугментации. Вероятность лишь решает, сработает ли трансформация на данном примере. Интенсивность определяет, насколько далеко трансформация уводит пиксели от оригинала.

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

Для трансформаций уровня 1 (in-distribution) привязывайте силу к измеренной вариативности production:

  • Если наклон камеры в production в пределах ±7 градусов, начинайте поворот около этого диапазона.

  • Если вариация экспозиции умеренная, держите границы яркости/контраста консервативными.

  • Если размытие от лёгкого движения — начинайте с малых размеров ядра.

Для трансформаций уровня 2 (out-of-distribution) интенсивность намеренно за пределами реальности production — цель регуляризация, а не симуляция. Ограничение здесь — сохранение метки, а не реализм: увеличивайте силу, пока метка не начнёт становиться неоднозначной, затем отступите.

Почему важно совместное применение

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

Практические значения по умолчанию

  • Начинайте с p между 0.1 и 0.5 для большинства необязательных трансформаций.

  • Оставьте одну-две постоянно включённые трансформации, если они кодируют неизбежную вариацию (кроп/ресайз).

  • Меняйте одну ось за раз: корректируйте вероятность или силу, но не то и другое одновременно.

  • Настройку augmentation policy рассматривайте как контролируемую абляцию, а не хаотичные эксперименты.

Соответствие интенсивности аугментации ёмкости модели

Оптимальная интенсивность аугментации зависит от ёмкости модели. Агрессивная аугментация может задавить маленькую модель — у неё просто не хватает ёмкости, чтобы выучить задачу через сильные искажения. У большой модели обратная проблема: она запоминает тренировочный набор слишком легко, и умеренная аугментация почти не снижает переобучение.

Из этого напрямую следует одна практическая стратегия:

  1. Выберите модель максимальной ёмкости, которую можете себе позволить по вычислительному бюджету.

  2. Она будет сильно переобучаться на сырых данных.

  3. Регуляризуйте её прогрессивно более агрессивной аугментацией, пока переобучение не окажется под контролем.

Для моделей высокой ёмкости одной in-distribution аугментации может не хватить для достаточного регуляризационного давления. Здесь аугментация уровня 2 (out-of-distribution) становится необходимой — не опциональной. Сильные цветовые искажения, агрессивный dropout, мощные геометрические трансформации — все нереалистичные, все с чётко сохранёнными метками — становятся основным инструментом регуляризации. У модели достаточно ёмкости, чтобы справиться с более сложной задачей, а аугментация не даёт ей пойти по пути наименьшего сопротивления.

Вот почему совет «используйте только реалистичную аугментацию» неполон. Он применим к маленьким моделям и ограниченным настройкам. Для современных больших моделей нереалистичная, но сохраняющая метки аугментация — часто разница между запоминающей и обобщающей моделью.

Учитывайте взаимодействие с другими регуляризаторами

Аугментация — часть общего регуляризационного бюджета модели, а не отдельная крутилка. Её эффект зависит от ёмкости модели, шума меток, оптимизатора, расписания тренировки и других регуляризаторов (weight decay, dropout, label smoothing, stochastic depth).

На практике:

  • Заметно более агрессивная аугментация может потребовать более длительного обучения или скорректированного learning rate schedule.

  • Сильная аугментация плюс сильный label smoothing может вызвать недообучение (underfitting).

  • На сильно зашумлённых метках тяжёлая аугментация может усилить сложность оптимизации вместо помощи.

  • Увеличение ёмкости модели и увеличение силы аугментации нужно настраивать вместе — это связанные, а не независимые ручки.

Типичные ошибки: лучше знать до production

Переаугментация (Overaugmentation) — реальная проблема. Три способа сломать обучение:

  • Порча меток: геометрия, нарушающая семантику меток (отражение текста, поворот однонаправленных сцен), кроп, стирающие объект интереса, цветовые трансформации, уничтожающие критичную для задачи цветовую информацию (спелый или неспелый фрукт, сигнал светофора).

  • Пустая трата ёмкости: модель расходует ресурсы на вариации, не дающие обобщения, — аугментации, ортогональные любой реальной или полезной инвариантности.

  • Накручивание силы без проверки: наложили кучу агрессивных трансформаций, не проверив, что каждая по отдельности помогает. Трансформации взаимодействуют нелинейно, и в комбинации могут вытолкнуть примеры за границу сохранения метки, хотя по отдельности ни одна этого не делает.

Симптомы переаугментации:

  • Training loss выходит на необычно высокое плато.

  • Метрики валидации скачут без чёткого тренда.

  • Калибровка ухудшается, даже если accuracy кажется стабильной.

  • Просадки по отдельным классам, скрытые за агрегированными метриками.

Реалистичная vs переаугментированная политика
Реалистичная vs переаугментированная политика

Аугментация под задачу

В разных задачах разная чувствительность, и разные паттерны ошибок требуют разных стратегий аугментации. Augmentation policy, помогающая классификации, может испортить детекцию или сегментацию при неосторожном применении. В этом разделе — два направления подстройки: адаптация по типу задачи и точечные стратегии (работа с конкретными классами, трудными примерами и доменами).

Классификация

Основной риск — семантическая порча. Для многих классов объектов умеренные геометрические и цветовые трансформации безопасны. Для классов, зависящих от ориентации (цифры, стрелки, направление текста) отражения и большие повороты могут нарушить метку.

Детекция объектов

Детекция крайне чувствительна к выбору кропа и масштаба:

  • Агрессивный кроп полностью убирает мелкие объекты, тихо выбрасывая обучающие примеры.

  • Боксы у краёв изображения требуют аккуратной обработки после пространственных трансформаций.

  • Правила фильтрации боксов после кропа/поворота могут убирать трудные примеры без предупреждения.

  • Выбор аугментаций меняющих масштаб влияет на recall мелких объектов сильнее, чем подсказывает глобальный mAP.

  • В зависимости от архитектуры сети, искажения соотношения сторон могут мешать работе анкоров (anchors).

Всегда валидируйте метрики по бинам размеров (мелкие, средние, крупные объекты), а не только агрегированный mAP.

Семантическая сегментация

Целостность маски критична:

  • Используйте nearest-neighbor интерполяцию для масок, чтобы не вводить невалидные индексы классов.

  • Тонкие границы (провода, сосуды, трещины) хрупки при интерполяции и агрессивном ресайзе.

  • Мелкие связные компоненты могут исчезать при агрессивном кропе.

Оценивайте boundary F1 или контурные метрики для задач с важными границами, а не только глобальный IoU. IoU по классам важнее среднего IoU, когда частоты классов не сбалансированы.

Ключевые точки и оценка позы

Пайплайны для ключевых точек ломаются незаметно:

  • Фильтрация точек, которые при аугментации вышли за границу изображения после поворота или кроп может поломать целостность набора точек в скелете.

  • Агрессивные перспективные преобразования могут произвести анатомически невозможные геометрии скелета.

Самый частый баг — семантика меток после отражений. Когда вы горизонтально отражаете изображение лица, пиксель, который был левым глазом, перемещается туда, где был правый глаз. Координаты обновляются корректно — но метка теперь неверна. Индекс 36 по-прежнему говорит «левый глаз», но анатомически это теперь правый глаз отражённого человека. Для любой модели, где индекс массива несёт семантический смысл (лицевые ландмарки, поза тела, ключевые точки руки), это тихо портит обучение.

Albumentations решает это через label_mapping — словарь, указывающий пайплайну, как переназначать и переупорядочивать метки ключевых точек при определённых трансформациях:

import albumentations as A FACE_68_HFLIP_MAPPING = { # Глаза: левый (36-41) ↔ правый (42-47) 36: 45, 37: 44, 38: 43, 39: 42, 40: 47, 41: 46, 45: 36, 44: 37, 43: 38, 42: 39, 47: 40, 46: 41, # Рот: левый ↔ правый 48: 54, 49: 53, 50: 52, 51: 51, 54: 48, 53: 49, 52: 50, # ... (полный маппинг на 68 точек опущен для краткости) } transform = A.Compose([ A.Resize(256, 256), A.HorizontalFlip(p=0.5), A.Affine(scale=(0.8, 1.2), rotate=(-20, 20), p=0.7), ], keypoint_params=A.KeypointParams( format='xy', label_fields=['keypoint_labels'], label_mapping={'HorizontalFlip': {'keypoint_labels': FACE_68_HFLIP_MAPPING}}, ))

После отражения пайплайн не только обновляет координаты, но и меняет метки и переупорядочивает массив ключевых точек, чтобы индекс 36 по-прежнему означал «левый глаз» — соответствуя анатомии человека на отражённом изображении.

Всегда проверяйте количество ключевых точек до и после трансформации, контролируйте переназначение меток после отражений и проводите визуальный проход по трансформированным примерами перед полным обучением.

Медицинская визуализация

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

OCR и анализ документов

Поворот, перспектива, размытие и компрессия обычно полезны. Вертикальные отражения почти всегда недопустимы. Сдвиги оттенка могут быть бесполезны или вредны в зависимости от пайплайна сканера/камеры.

Спутниковая и аэросъёмка

Инвариантность к вращению часто полезна, но не всегда полная 360-градусная — если ориентация «север вверх» или геометрия съёмки важны для семантики меток, неограниченный поворот может испортить метки.

Промышленная инспекция

Мелкие дефекты исчезают при размытии или уменьшении. Сохраняйте микроструктуру, если только качество при деплое не столь же снижено. Аугментации должны соответствовать реалистичной вариации сенсора и освещения, а не общим трансформациям изображений.

Трансферное обучение и fine-tuning

При дообучении предобученной модели стратегия аугментации меняется. Модель уже содержит сильные представления из предобучения — ей не нужно заново учить рёбра, текстуры и формы. Тяжёлая аугментация, уместная при обучении с нуля, может задавить дообучение, особенно на маленьком целевом датасете: модель тратит ресурсы на переучивание признаков, которые у неё уже есть, через искажения, которые ей не нужны.

Начинайте с более лёгкой аугментации, чем при обучении с нуля: консервативный кроп, умеренные цветовые и яркостные сдвиги, горизонтальное отражение если уместно. По мере роста числа эпох дообучения или разморозки слоёв можно постепенно наращивать силу — модель получает больше свободы для адаптации. Если дообучаете только классификационную голову на замороженном бэкбоне, аугментация менее важна: экстрактор признаков фиксирован, и лучше сосредоточиться на трансформациях, покрывающих разрыв с production, а не на тяжёлой регуляризации.

Взаимодействие с learning rate тоже важно. При fine-tuning learning rate обычно ниже, чем при обучении с нуля. Агрессивная аугментация с низким learning rate означает, что модель видит сильно искажённые примеры, но может делать лишь крошечные обновления за шаг — верный путь к медленной сходимости и потраченным GPU-часам.

Точечная настройка: работа со слабыми местами

Когда базовый пайплайн работает, следующий шаг — прицельная настройка. В отличие от weight decay, dropout или label smoothing, которые давят равномерно на всё, аугментация — осмысленный регуляризатор: её можно нацелить на конкретные проблемы модели.

Классоспецифичная аугментация. Применяйте разные augmentation policy к разным классам или категориям изображений. Система мониторинга дикой природы может требовать сильного цветового джиттера для лесных видов (переменное освещение под пологом), но минимальной цветовой аугментации для пустынных видов (стабильное, равномерное освещение). Медицинский пайплайн может применять эластичные трансформации к модальностям мягких тканей, но сохранять изображения костей без деформаций. Система автономного вождения может применять погодную аугментацию избирательно к шоссейным сценам, оставляя нетронутыми кадры из тоннелей.

Отбор трудных примеров через аугментацию. Если модель стабильно ошибается на определённом подмножестве — мелких объектах, окклюдированных экземплярах, необычных ракурсах — применяйте более сильную аугментацию именно к этим трудным случаям. По сути это отбор трудных негативных примеров, но через пайплайн данных, а не через функцию потерь:

  • Применяйте более сильный ConstrainedCoarseDropout к классам, где окклюзия — основная причина ошибок — он вырезает патчи именно внутри аннотированных областей объекта (масок или боксов), а не из случайного фона.

  • Используйте более сильные геометрические трансформации для классов, где модель переобучается на каноничные позы.

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

Это продуктивнее, чем равномерное увеличение силы аугментации по всем фронтам, которое помогает трудным случаям, но может навредить лёгким.

Augmentation Policy по доменам. В мультидоменных датасетах (помещение + улица, день + ночь, разные типы сенсоров) единая augmentation policy почти всегда субоптимальна. Трансформации, помогающие уличным сценам (симуляция погоды, сильная вариация яркости), могут вредить сценам в помещении (стабильное освещение, контролируемая среда). Раздельные augmentation policy по домену или условная аугментация по метаданным могут заметно обыграть универсальный подход.

Ни один другой регуляризатор не даёт такого контроля. Weight decay нельзя настроить по классам. Dropout не нацелишь на конкретную проблему. Аугментацию — можно.

Оценка по воспроизводимому протоколу

Аугментация — это не «настроил и забыл». Дисциплинированный протокол оценки спасает от недель бессистемных экспериментов.

Шаг 1: Baseline без аугментации

Обучите без аугментации, чтобы установить истинный baseline. Без этого каждое изменение сравнивается с движущейся целью, и вы не можете измерить чистый эффект.

Шаг 2: Консервативная стартовая augmentation policy

Примените умеренную базовую augmentation policy (как описано выше), обучите полностью и зафиксируйте:

  • Основные метрики (accuracy, mAP, IoU)

  • Метрики по классам

  • Метрики по подгруппам (ночь/день, тип камеры, локация, масштаб объекта)

Шаг 3: Абляции по одной оси

Меняйте только один фактор за раз:

  • Увеличить или уменьшить вероятность одной трансформации

  • Расширить или сузить один диапазон силы

  • Добавить или убрать один тип трансформаций

Шаг 4: Синтетическое стресс-тестирование

Аугментации — не только для обучения, они также мощный инструмент для оценки робастности модели. Создайте дополнительные пайплайны валидации, применяющие целевые трансформации поверх стандартного ресайза и нормализации, затем сравните метрики с чистым baseline'ом. Если accuracy значительно падает при простом горизонтальном отражении, модель не выучила инвариантность, которую вы предполагали. Если метрики проседают при умеренном снижении яркости, вы точно знаете, какую аугментацию добавить в обучение.

Шаг 5: Оценка на реальных «трудных срезах»

Синтетическое стресс-тестирование проверяет инвариантности изолированно. Анализ реальных ошибок дополняет эту картину. Оценивайте на заранее собранных сложных подмножествах — слабое освещение, размытие, погода, сильная окклюзия, сдвиг камеры/домена — и сопоставляйте каждый паттерн ошибок с классом трансформаций, нацеленным на него:

  • Ошибки из-за освещения → яркость, гамма, тени

  • Ошибки из-за движения/фокуса → motion blur, gaussian blur

  • Ошибки из-за ракурса → поворот, аффинные, перспектива

  • Ошибки из-за частичной видимости → coarse dropout, агрессивный кроп

  • Ошибки из-за сенсорного шума → гауссов шум, артефакты компрессии

Если трансформация в вашем пайплайне не привязана к реальному классу ошибок, она, скорее всего, добавляет вычисления, не принося пользы.

Шаг 6: Зафиксируйте augmentation policy перед перебором архитектур

Не перенастраивайте аугментацию одновременно с крупными архитектурными изменениями. Эксперименты со смешанными факторами тратят время и дают ненадёжные выводы.

Честный анализ метрик

Общие метрики скрывают ущерб от выбора аушментаций. Следите за:

  • Просадками по отдельным классам, замаскированными за счёт доминантных

  • Раскалибровкой уверенности модели

  • Улучшениями на лёгких срезах, но регрессиями на критичных хвостовых случаях

  • Нестабильными метриками при разных сидах с тяжёлыми аугментациями

Запускайте минимум два сида для итоговых кандидатов в пайплайн. Тяжёлая аугментация увеличивает дисперсию результатов.

Продвинутый раздел: почему эти эвристики работают

Если ваш пайплайн уже работает, этот раздел объясняет, почему правила выше — не просто эмпирика. Можно пропустить при первом чтении и вернуться, когда захочется посмотреть более формально о дизайне аугментационных пайплайнов.

Что аугментация делает с оптимизацией

Аугментация действует как семантически осмысленный регуляризатор. В отличие от weight decay или dropout, которые добавляют неструктурированный шум к параметрам или активациям, аугментация добавляет шум, согласованный с задачей, ко входам:

  • Вносит стохастичность в пространство входов, ослабляя запоминание.

  • Сглаживает границы решений вокруг наблюдаемых обучающих точек.

  • Поощряет инвариантность к факторам помех и эквивариантность для пространственных таргетов.

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

Инвариантность vs эквивариантность

Два понятия, которые проясняют, чему именно аугментация учит модель:

  • Инвариантность: предсказание не должно меняться при трансформации. Пример: класс «попугай» должен оставаться «попугаем» при умеренном повороте.

  • Эквивариантность: предсказание должно меняться предсказуемым образом при трансформации. Пример: координаты ограничивающие боксы должны поворачиваться вместе с изображением.

Многие баги обучения возникают, когда эквивариантные аннотации по ошибке обрабатывают как инвариантные — например, аугментируют изображение для детекции, но забывают трансформировать боксы.

Симметрии: данные vs архитектура

Два способа закодировать инвариантности:

  1. Аугментация (уровень данных): обучить модель выучивать инвариантность/эквивариантность из разнообразных входов.

  2. Проектирование архитектуры: встроить слои, кодирующие симметрию напрямую (эквивариантные сети, geometric deep learning).

Кодирование симметрии на уровне архитектуры мощное, но узкое: оно работает для чистых математических симметрий — групп вращений, групп отражений, трансляционной эквивариантности. Если у ваших данных есть чётко определённая группа симметрий (инвариантность к вращению в микроскопии, трансляционная эквивариантность в свёртках), встраивание в архитектуру элегантно и требует меньше данных.

Но большинство инвариантностей реального мира — не чистые симметрии. Устойчивость к дождю, туману, дисторсии объектива, JPEG-компрессии, сенсорному шуму, переменному освещению — ничто из этого не имеет компактного теоретико-группового представления. Нет «weather-эквивариантной свёртки». Единственный практический способ научить модель этим инвариантностям — через аугментацию.

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

Геометрическая интуиция: многообразия

Есть геометрический взгляд на то, почему аугментация работает и когда ломается.

Высокоразмерное пространство изображений в основном пусто. Естественные изображения занимают низкоразмерное многообразие, вложенное в пиксельное пространство — искривлённую поверхность, на которой лежат правдоподобные фотографии реальных сцен. Случайный пиксельный шум на этом многообразии не лежит. Состязательные возмущения тоже. Обучающие примеры — разреженные точки на этом многообразии, и модели нужно выучить его структуру из этих немногих точек.

Аугментация создаёт новые точки на многообразии. Когда трансформация сохраняет метку и даёт визуально правдоподобное изображение, аугментированный пример лежит на том же многообразии, что и оригинал — просто в другой его области. Это уплотнение: заполнение пробелов между разреженными обучающими точками правдоподобными интерполяциями вдоль поверхности.

Отсюда ясен и режим отказа: если трансформация выталкивает примеры с многообразия — в области пиксельного пространства, которые ни одна камера не может снять и ни один человек не распознает — модель тратит ресурсы на обработку невозможных входов. Вот почему экстремальные параметры вредят, даже когда метка технически сохранена. Попугай, повёрнутый на 175 градусов, с инвертированными цветами и сильной пикселизацией, может быть всё ещё распознаваем как попугай, но лежит далеко от любой области многообразия, с которой модель столкнётся при деплое.

Отсюда простое практическое правило: аугментированные примеры должны оставаться на многообразии данных или очень близко к нему. In-distribution аугментация строго остаётся на многообразии. Out-of-distribution аугментация движется к границе, но не должна уходить в явно неестественную область. Тест «поставил бы человек всё ещё правильную метку?» — прокси для «всё ещё ли это на распознаваемом многообразии изображений?».

За пределами стандартного обучения: аугментация в других контекстах

Всё вышесказанное покрывает самый распространённый сценарий: аугментация одного изображения при supervised-обучении. Но роль аугментации выходит далеко за эти рамки. В некоторых постановках она определяет сам обучающий сигнал, в других — улучшает предсказания на инференсе, а при обучении на синтетических данных становится основным инструментом преодоления разрыва с реальностью. Базовые принципы (сохранение метки, контролируемое разнообразие, соответствие задаче) те же, но ограничения проектирования на каждом уровне свои.

Аугментация в self-supervised и contrastive learning

В supervised learning аугментация улучшает обобщение за счёт диверсификации обучающего распределения. В self-supervised learning аугментация не просто полезна — она составляет саму основу обучения. Весь обучающий сигнал зависит от неё.

Контрастивные методы вроде SimCLR, MoCo, BYOL и DINO работают так: создают несколько аугментированных вариантов одного изображения и учат модель понимать, что у них общая семантика. Лосс притягивает представления разных аугментаций одного изображения и отталкивает представления разных изображений. Без аугментации обучающего сигнала попросту нет.

Отсюда другое ограничение при проектировании. В supervised learning нужны аугментации, сохраняющие метку и добавляющие разнообразие. В contrastive learning нужны аугментации, убирающие низкоуровневые детали, к которым модель должна быть инвариантна (точное положение кропа, цветовая статистика, уровень размытия), и сохраняющие высокоуровневую семантику, которую модель должна кодировать. Augmentation policy напрямую задаёт, к каким признакам модель станет инвариантной.

На практике augmentation policy для контрастивного предобучения обычно гораздо агрессивнее, чем для supervised fine-tuning на тех же данных. Тяжёлые цветовые искажения, агрессивный кроп и размытие — всё стандарт в контрастивных пайплайнах. Семантика сохраняется, и модель выучивает представления, устойчивые к этим вариациям.

Это же объясняет, почему выбор augmentation policy в self-supervised learning влияет на downstream-задачи. Обучаете контрастивные представления с тяжёлой цветовой аугментацией — получаете цветоинвариантные признаки: хорошо для классификации объектов, плохо для задач, где цвет семантически важен (классификация цветков, состояние светофора). Выбор аугментаций при предобучении определяет, какие инвариантности будут зашиты в представление.

Test-time augmentation (TTA)

Аугментация — в первую очередь техника обучения, но есть родственный приём, который применяет аугментации на инференсе.

Test-time augmentation (TTA) работает так: вместо одного предсказания на тестовом изображении применяются несколько аугментаций (горизонтальное отражение, множественные кропы), предсказания делаются на каждом варианте, а результаты объеденяются (обычно усреднением вероятностей или голосованием). Ансамбль аугментированных вариантов часто даёт более стабильные предсказания, чем любой одиночный прогон.

TTA особенно эффективна, когда:

  • Модель обучалась с аугментацией, но тестовые примеры неоднозначны или пограничны.

  • Тестовое распределение содержит вариации, плохо покрытые обучающими данными.

  • Высокая точность важнее латентности инференса (медицинская диагностика, соревнования на Kaggle).

Самые распространённые TTA-трансформации: горизонтальное отражение (почти всегда помогает), инференс в нескольких масштабах (прогон на нескольких разрешениях с усреднением), множественные кропы (несколько кропов из разных частей изображения). Более агрессивные трансформации вроде поворота или цветовых вариаций могут помочь в конкретных доменах, но могут и навредить, если модель уже усвоила сильные приоры из обучающей аугментации.

Но есть цена: TTA увеличивает вычислительную стоимость inference линейно с числом вариантов. Пятикратная TTA — пять прямых проходов. Там, где важна латентность, это часто неприемлемо. В офлайн-обработке или задачах с высокими ставками — надёжный способ выжать дополнительную точность из существующей модели без переобучения.

Domain randomization: от симуляции к реальности

Отдельное применение аугментации — в робототехнике и обучении на синтетических данных. Когда модели восприятия обучаются на синтетике (игровые движки, физические симуляторы), синтетические изображения систематически отличаются от реальных: другие текстуры, освещение, артефакты рендеринга. Модели, обученные чисто на синтетике, часто полностью проваливаются на реальных данных.

Domain randomization решает эту проблему экстремальной случайной аугментацией при обучении на синтетике. Логика та же, что и в принципе расширения распределения: вместо того чтобы делать синтетику реалистичнее, сделайте её максимально разнообразной. Рандомизируйте текстуры, цвета, освещение, параметры камеры, позиции объектов — далеко за пределами реалистичного диапазона. Если обучающее распределение достаточно широко, реальные изображения попадают внутрь него как ещё одна вариация, с которой модель уже справляется.

Это крайний случай out-of-distribution аугментации. Она работает, потому что метка сохранена — симулированная рука робота остаётся рукой робота вне зависимости от того, хром ли её текстура, дерево или психоделическая радуга. Модель выучивает признаки, устойчивые ко всем возможным вариациям внешнего вида, включая конкретный облик реальных объектов. Ключевой принцип — достаточно широкое обучающее распределение поглощает целевой домен без явного моделирования — применим далеко за пределами робототехники.

Production: эксплуатационные аспекты

Никогда не аугментируйте валидационные или тестовые данные

Самая частая ошибка перед production — случайная аугментация данных для оценки. Обучающая аугментация должна быть строго отделена от валидационного и инференс-препроцессинга. Валидационные и тестовые пайплайны — только детерминированные трансформации: ресайз, паддинг, нормализация. Ничего случайного.

Звучит очевидно, но всплывает в неожиданных местах:

  • Общая переменная transform, переиспользуемая и для обучения, и для валидации.

  • Флаг в конфиге, по умолчанию True, не переопределённый явно при оценке.

  • Пайплайн для инференса, копирующий обучающий препроцессинг (включая аугментацию).

Если метрики валидации подозрительно скачут между запусками при идентичных данных и чекпоинтах модели — проверьте, не просачивается ли аугментация в оценку. Быстрая диагностика: запустите валидационный пайплайн дважды на тех же данных. Если результаты различаются — где-то в пайплайне есть что-то случайное.

Визуально проверьте пайплайн до обучения

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

Перед полным обучением визуализируйте 20–50 аугментированных примеров со всеми аннотациями (маски, боксы, ключевые точки). Проверьте:

  • Маски, сместившиеся или деформировавшиеся не так, как изображение.

  • Ограничивающие боксы, больше не охватывающие объект.

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

  • Изображения, настолько искажённые, что метка неоднозначна.

  • Краевые артефакты от поворота или перспективы (чёрные области, повторяющиеся пиксели).

На это уходит 10 минут — зато спасает от многодневного обучения на испорченных данных. Для быстрого знакомства с отдельными трансформациями — посмотреть, что они делают, как параметры влияют на выход — есть интерактивный инструмент Explore Transforms, где можно протестировать любую трансформацию на своих изображениях до написания кода.

Пропускная способность

Аугментация не бесплатна по времени. Тяжёлые CPU-трансформации могут стать узким местом:

  • GPU простаивает, пока воркеры загрузчика данных обрабатывают изображения.

  • Время эпохи растёт, эксперименты замедляются.

  • Сложные пайплайны снижают воспроизводимость при включении дорогих стохастических операций.

Что делать: начните с профилирования пропускной способности загрузчика. Проверьте утилизацию GPU — если далеко от 100%, bottleneck в пайплайне данных. Дорогие трансформации (эластичные искажения, перспективные деформации) ставьте на пониженную вероятность. Кэшируйте детерминированный препроцессинг (декодирование, ресайз до базового разрешения) и накладывайте стохастическую аугментацию поверх. Настройте количество воркеров и буфер предзагрузки под своё железо. Если одна трансформация доминирует по времени пайплайна — проверьте, даёт ли более дешёвая альтернатива ту же инвариантность.

Воспроизводимость

  • Задавайте seed где нужно, но имейте в виду: некоторые низкоуровневые операции остаются недетерминированными на разном железе и версиях библиотек.

  • Версионируйте аугментационный пайплайн в конфиг-файлах, а не только в коде. Аугментации, захардкоженную в обучающем скрипте, сложнее отслеживать, сравнивать и откатывать, чем вынесенную в отдельный конфиг.

  • Привязывайте аугментационный пайплайн к артефактам обучения, чтобы можно было откатиться при дрифте. Когда выпускаете модель, аугментационный пайплайн должен быть частью метаданных артефакта — наравне с архитектурой, гиперпараметрами и версией датасета.

Управление augmentation policy в команде

Если несколько человек обучают модели в одном проекте, неотслеживаемые изменения аугментаций вызывают «загадочные регрессии» спустя месяцы. Кто-то добавляет трансформацию, не проводит абляцию — и метрики сдвигаются, но никто не связывает два события до следующей крупной оценки.

Обращайтесь с аугментацией как с управляемой конфигурацией: версионируйте определение, ведите changelog, требуйте результатов абляции для крупных изменений и привязывайте версию аугментаций к каждому артефакту модели. Ревью изменений аугментационного пайплайна должно быть столь же строгим, как ревью изменений архитектуры — влияние на метрики сопоставимо.

Когда пересматривать существующую augmentation policy

Augmentation Policy, которая работала раньше, может стать неправильной, когда:

  • Меняется камера (новый сенсор, другое разрешение, другой объектив).

  • Меняются правила разметки (новые определения классов, более строгие требования к боксам).

  • Меняется источник данных географически или демографически.

  • Меняется препроцессинг при инференсе (другая логика ресайза, другая нормализация).

  • Меняются продуктовые ограничения (новые требования к латентности, новые целевые разрешения).

Ревью augmentation policy должно быть стандартным шагом при крупных изменениях данных или продукта — а не реакцией на падение метрик. К моменту, когда метрики просядут, вы уже выкатите модель с ухудшенным качеством.

Заключение

Аугментация изображений — один из самых эффективных инструментов в компьютерном зрении. Она работает на двух уровнях: in-distribution трансформации покрывают реалистичные вариации деплоя, out-of-distribution — действуют как мощные регуляризаторы для больших моделей. Оба уровня объединяет одно безусловное ограничение: метка должна оставаться однозначной после трансформации.

Практический план действий:

  1. Начните с in-distribution, сохраняющих метку трансформаций, соответствующих известным вариациям деплоя.

  2. Измерьте относительно baseline без аугментации.

  3. Добавляйте out-of-distribution трансформации прогрессивно — они не «опасны по умолчанию», но требуют валидации.

  4. Соотносите силу аугментации с ёмкостью модели: бо́льшие модели нуждаются в более сильной аугментации и могут её выдержать.

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

  6. Версионируйте и пересматривайте аугментационный пайплайн по мере изменения данных, моделей и условий деплоя.

  • Albumentations — open-source библиотека для аугментации изображений.

  • Если хотите поэкспериментировать с аугментациями на практике, можно попробовать библиотеку Albumentations или посмотреть, как работают отдельные трансформации в интерактивном инструменте Explore Transforms.

Источник

Возможности рынка
Логотип Mintlayer
Mintlayer Курс (ML)
$0.00752
$0.00752$0.00752
+0.13%
USD
График цены Mintlayer (ML) в реальном времени
Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу crypto.news@mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.