YOLO Vision 2026:

Аугментация данных с помощью Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Введение#

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



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

Почему аугментация данных важна#

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

  • Расширенный набор данных: Создавая вариации существующих изображений, ты можешь эффективно увеличить размер набора для обучения без сбора новых данных.
  • Улучшенная обобщающая способность: Модели учатся распознавать объекты в различных условиях, что делает их более устойчивыми в реальных приложениях.
  • Снижение переобучения: За счет внесения вариативности в обучающие данные модели с меньшей вероятностью будут запоминать специфические характеристики изображений.
  • Повышенная производительность: Модели, обученные с правильной аугментацией, обычно достигают лучшей точности на проверочных и тестовых наборах.

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

Примеры конфигураций#

Ты можешь настроить каждый параметр с помощью API Python, интерфейса командной строки (CLI) или файла конфигурации. Ниже приведены примеры того, как настроить аугментацию данных для каждого метода.

Примеры конфигурации
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
    data="coco8.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)

# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco8.yaml", epochs=100, augmentations=custom_transforms)
Обнуление аргументов аугментации не отключает Albumentations

Преобразования, перечисленные на этой странице, — это те, которыми ты управляешь с помощью аргументов обучения. Ultralytics также применяет небольшой набор Albumentations — размытие, медианное размытие, шкалу серого и CLAHE, каждое со значением p=0.01 — когда установлен пакет albumentations, и ни один аргумент в default.yaml не отключает его. Удалы пакет, чтобы удалить его, или передай свой список в augmentations, чтобы заменить его.

Использование файла конфигурации#

Ты можешь определить все параметры обучения, включая аугментации, в конфигурационном файле YAML (например, train_custom.yaml). Параметр mode требуется только при использовании CLI. Этот новый файл YAML затем переопределит файл по умолчанию, расположенный в пакете ultralytics.

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5

Затем запусти обучение с помощью Python API:

Пример обучения
from ultralytics import YOLO

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

Аугментации цветового пространства#

Регулировка оттенка (hsv_h)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0.015
  • Использование: Сдвигает цвета изображения, сохраняя при этом их взаимосвязи. Гиперпараметр hsv_h определяет величину сдвига, причем окончательная настройка выбирается случайным образом между -hsv_h и hsv_h. Например, при hsv_h=0.3 сдвиг выбирается случайным образом в диапазоне от -0.3 до 0.3. Для значений выше 0.5 сдвиг оттенка закольцовывается по цветовому кругу, поэтому аугментации выглядят одинаково между 0.5 и -0.5.
  • Цель: Особенно полезно для сценариев на открытом воздухе, где условия освещения могут радикально влиять на внешний вид объекта. Например, банан может выглядеть более желтым под ярким солнечным светом, но более зеленоватым в помещении.
  • Реализация Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Аугментация сдвига оттенка -0.5Аугментация сдвига оттенка -0.25Исходное изображение без аугментацииАугментация сдвига оттенка 0.25Аугментация сдвига оттенка -0.5

Регулировка насыщенности (hsv_s)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0.7
  • Использование: Изменяет интенсивность цветов на изображении. Гиперпараметр hsv_s определяет величину сдвига, причем окончательная настройка выбирается случайным образом между -hsv_s и hsv_s. Например, при hsv_s=0.7 интенсивность выбирается случайным образом в диапазоне от -0.7 до 0.7.
  • Цель: Помогает моделям справляться с меняющимися погодными условиями и настройками камеры. Например, красный дорожный знак может выглядеть очень ярким в солнечный день, но тусклым и выцветшим в туманную погоду.
  • Реализация Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Аугментация насыщения -1.0 в градациях серогоАугментация насыщения -0.5Исходное изображение без аугментацииАугментация насыщения 0.5Яркая аугментация насыщения 1.0

Регулировка яркости (hsv_v)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0.4
  • Использование: Изменяет яркость изображения. Гиперпараметр hsv_v определяет величину сдвига, причем окончательная настройка выбирается случайным образом между -hsv_v и hsv_v. Например, при hsv_v=0.4 интенсивность выбирается случайным образом в диапазоне от -0.4 до 0.4.
  • Цель: Необходима для обучения моделей, которые должны работать в различных условиях освещения. Например, красное яблоко может выглядеть ярким на солнце, но значительно темнее в тени.
  • Реализация Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Темная аугментация яркости -1.0Аугментация яркости -0.5Исходное изображение без аугментацииАугментация яркости 0.5Яркая аугментация яркости 1.0

Геометрические преобразования#

Поворот (degrees)#

  • Диапазон: от 0.0 до 180
  • По умолчанию: 0
  • Использование: Поворачивает изображения случайным образом в заданном диапазоне. Гиперпараметр degrees определяет угол поворота, причем окончательная настройка выбирается случайным образом между -degrees и degrees. Например, при degrees=10.0 поворот выбирается случайным образом в диапазоне от -10.0 до 10.0.
  • Цель: Критически важна для приложений, где объекты могут появляться в различных ориентациях. Например, на аэрофотоснимках с дронов транспортные средства могут быть ориентированы в любом направлении, что требует от моделей распознавания объектов независимо от их поворота.
  • Реализация Ultralytics: RandomPerspective
-180-900.090180
Аугментация поворота на -180 градусовАугментация поворота на -90 градусовИсходное изображение без аугментацииАугментация поворота на 90 градусовАугментация поворота на 180 градусов

Смещение (translate)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0.1
  • Использование: Сдвигает изображения по горизонтали и вертикали на случайную долю от размера изображения. Гиперпараметр translate определяет величину сдвига, причем окончательная настройка выбирается случайно дважды (по одному разу для каждой оси) в диапазоне от -translate до translate. Например, при translate=0.5 смещение выбирается случайно в диапазоне от -0.5 до 0.5 по оси x, а другое независимое случайное значение выбирается в том же диапазоне по оси y.
  • Цель: Помогает моделям научиться обнаруживать частично видимые объекты и повышает устойчивость к положению объекта. Например, в приложениях для оценки повреждений транспортных средств части автомобиля могут появляться полностью или частично в кадре в зависимости от положения и расстояния фотографа; аугментация переносом научит модель распознавать эти признаки независимо от их полноты или положения.
  • Реализация Ultralytics: RandomPerspective
  • Примечание: Для простоты применяемые ниже смещения одинаковы каждый раз для обеих осей x и y. Значения -1.0 и 1.0 не показаны, так как они полностью сместили бы изображение за пределы кадра.
-0.5-0.250.00.250.5
Аугментация смещения при трансляции -0.5Аугментация смещения при трансляции -0.25Исходное изображение без аугментацииАугментация смещения при трансляции 0.25Аугментация смещения при трансляции 0.5

Масштабирование (scale)#

  • Диапазон: 0.0 - 1.0 в виде числа с плавающей точкой или явный кортеж (min, max)
  • По умолчанию: 0.5
  • Использование: Изменяет размер изображений на случайный коэффициент в указанном диапазоне. Как число с плавающей точкой, гиперпараметр scale определяет коэффициент масштабирования, причем итоговый коэффициент выбирается случайным образом между 1-scale и 1+scale. Например, при scale=0.5 масштабирование выбирается случайным образом в диапазоне от 0.5 до 1.5. Как кортеж, scale задает этот диапазон напрямую, поэтому scale=(0.5, 2.0) выбирает коэффициент между 0.5 и 2.0.
  • Цель: Позволяет моделям работать с объектами на разных расстояниях и разных размеров. Например, в приложениях для автономного вождения транспортные средства могут находиться на разном расстоянии от камеры, что требует от модели распознавания их независимо от размера.
  • Реализация Ultralytics: RandomPerspective
  • Примечание:
    • Значение -1.0 не показано, так как оно заставило бы изображение исчезнуть, в то время как 1.0 просто приводит к зуму 2x.
    • Значения, отображаемые в таблице ниже, являются фактическими дельтами масштаба, а не значениями, передаваемыми в гиперпараметр scale.
    • Формат числа с плавающей точкой проверяется на соответствие диапазону 0.0 - 1.0, и значение за его пределами вызывает ValueError. Чтобы выбрать коэффициент, превышающий зум 2x, передай вместо этого форму кортежа (min, max).
    • Формат кортежа применим только к геометрическим задачам. Обучение классификации выводит собственный диапазон обрезки из числа с плавающей точкой (от 1.0 - scale до 1.0), поэтому передача кортежа туда вызывает TypeError.
-0.5-0.250.00.250.5
Аугментация уменьшения масштаба 0.5xАугментация уменьшения масштаба 0.75xИсходное изображение без аугментацииАугментация увеличения масштаба 1.25xАугментация увеличения масштаба 1.5x

Наклон (shear)#

  • Диапазон: от -180 до +180
  • По умолчанию: 0
  • Использование: Вводит геометрическое преобразование, которое искажает изображение вдоль осей x и y, эффективно сдвигая части изображения в одном направлении при сохранении параллельности линий. Гиперпараметр shear определяет угол наклона, причем окончательная настройка выбирается случайным образом между -shear и shear. Например, при shear=10.0 наклон выбирается случайным образом в диапазоне от -10 до 10 по оси x, а другое независимое случайное значение выбирается в том же диапазоне по оси y.
  • Цель: Помогает моделям обобщать вариации углов обзора, вызванные небольшими наклонами или ракурсами. Например, при мониторинге дорожного движения объекты, такие как автомобили и дорожные знаки, могут казаться наклонными из-за неперпендикулярного размещения камер. Применение аугментации сдвигом гарантирует, что модель научится распознавать объекты вопреки таким искажениям.
  • Реализация Ultralytics: RandomPerspective
  • Примечание:
    • Значения shear могут быстро исказить изображение, поэтому рекомендуется начинать с малых значений и постепенно увеличивать их.
    • В отличие от перспективных преобразований, сдвиг не вводит глубину или точки схода, а искажает форму объектов путем изменения их углов, сохраняя противоположные стороны параллельными.
-10-50.0510
Аугментация сдвига -10 градусовАугментация сдвига -5 градусовИсходное изображение без аугментацииАугментация сдвига 5 градусовАугментация сдвига 10 градусов

Перспектива (perspective)#

  • Диапазон: 0.0 - 0.001
  • По умолчанию: 0
  • Использование: Применяет полное перспективное преобразование вдоль осей x и y, имитируя то, как объекты выглядят при просмотре с разной глубины или под разными углами. Гиперпараметр perspective определяет величину перспективы, причем окончательная настройка выбирается случайным образом между -perspective и perspective. Например, при perspective=0.001 перспектива выбирается случайным образом в диапазоне от -0.001 до 0.001 по оси x, а другое независимое случайное значение выбирается в том же диапазоне по оси y.
  • Цель: Аугментация перспективы критически важна для обработки экстремальных изменений ракурса, особенно в сценариях, где объекты кажутся укороченными или искаженными из-за сдвигов перспективы. Например, при обнаружении объектов с дрона здания, дороги и транспортные средства могут выглядеть растянутыми или сжатыми в зависимости от наклона и высоты полета. Применяя перспективные преобразования, модели учатся распознавать объекты, несмотря на эти искажения, что повышает их устойчивость в реальных условиях эксплуатации.
  • Реализация Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Перспективное преобразование -0.001Перспективное преобразование -0.0005Исходное изображение без аугментацииПерспективное преобразование 0.0005Перспективное преобразование 0.001

Отражение сверху вниз (flipud)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0
  • Использование: Выполняет вертикальное отражение путем инвертирования изображения по оси y. Это преобразование зеркально отображает все изображение вверх ногами, но сохраняет все пространственные взаимосвязи между объектами. Гиперпараметр flipud определяет вероятность применения преобразования: значение flipud=1.0 гарантирует, что все изображения будут отражены, а значение flipud=0.0 полностью отключает преобразование. Например, при flipud=0.5 каждое изображение имеет 50% шанс быть перевернутым вверх ногами.
  • Цель: Полезно для сценариев, где объекты могут появляться в перевернутом виде. Например, в роботизированных системах технического зрения объекты на конвейерных лентах или манипуляторах роботов могут быть подняты и размещены в различных ориентациях. Вертикальное отражение помогает модели распознавать объекты независимо от их расположения.
  • Реализация Ultralytics: RandomFlip
flipud выклflipud вкл
Исходное изображение без аугментацииВключена аугментация вертикального отражения

Отражение слева направо (fliplr)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0.5
  • Использование: Выполняет горизонтальное отражение путем зеркального отображения изображения по оси x. Это преобразование меняет местами левую и правую стороны при сохранении пространственной согласованности, что помогает модели обобщать объекты, появляющиеся в зеркальной ориентации. Гиперпараметр fliplr определяет вероятность применения преобразования: значение fliplr=1.0 гарантирует, что все изображения будут отражены, а значение fliplr=0.0 полностью отключает преобразование. Например, при fliplr=0.5 каждое изображение имеет 50% шанс быть отраженным слева направо.
  • Цель: Горизонтальное отражение широко используется в задачах обнаружения объектов, оценки позы и распознавания лиц для повышения устойчивости к вариациям «лево-право». Например, в беспилотном вождении транспортные средства и пешеходы могут появляться с любой стороны дороги, и горизонтальное отражение помогает модели распознавать их одинаково хорошо в обеих ориентациях.
  • Реализация Ultralytics: RandomFlip
fliplr выклfliplr вкл
Исходное изображение без аугментацииВключена аугментация горизонтального отражения

Замена каналов BGR (bgr)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0
  • Использование: Меняет местами цветовые каналы изображения с RGB на BGR, изменяя порядок представления цветов. Гиперпараметр bgr определяет вероятность применения преобразования: bgr=1.0 гарантирует замену каналов для всех изображений, а bgr=0.0 отключает ее. Например, при bgr=0.5 каждое изображение имеет 50% шанс быть конвертированным из RGB в BGR.
  • Цель: Повышает устойчивость к различному порядку цветовых каналов. Например, при обучении моделей, которые должны работать с различными системами камер и библиотеками обработки изображений, где форматы RGB и BGR могут использоваться непоследовательно, или при развертывании моделей в средах, где входной формат цвета может отличаться от обучающих данных.
  • Реализация Ultralytics: Format
bgr выклbgr вкл
Исходное изображение без аугментацииАугментация смены каналов BGR

Мозаика (mosaic)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 1
  • Использование: Объединяет четыре обучающих изображения в одно. Гиперпараметр mosaic определяет вероятность применения преобразования: mosaic=1.0 гарантирует объединение всех изображений, а mosaic=0.0 отключает преобразование. Например, при mosaic=0.5 каждое изображение имеет 50% шанс быть объединенным с тремя другими изображениями.
  • Цель: Высокоэффективно для улучшения обнаружения мелких объектов и понимания контекста. Например, в проектах по защите дикой природы, где животные могут появляться на разном расстоянии и в разных масштабах, аугментация «мозаика» помогает модели научиться распознавать один и тот же вид при различных размерах, частичных окклюзиях и в разных условиях окружающей среды, искусственно создавая разнообразные обучающие выборки из ограниченных данных.
  • Реализация Ultralytics: Mosaic
  • Примечание:
    • Даже если аугментация mosaic делает модель более устойчивой, она также может сделать процесс обучения более сложным.
    • Аугментацию mosaic можно отключить ближе к концу обучения, установив close_mosaic равным количеству эпох до завершения, когда ее следует отключить. Например, если epochs установлено в 200, а close_mosaic установлено в 20, аугментация mosaic будет отключена после 180 эпох. Если close_mosaic установлено в 0, аугментация mosaic будет включена на протяжении всего процесса обучения.
    • Закрытие мозаики также отключает copy_paste, mixup и cutmix на той же эпохе. Эти четыре параметра отключаются одновременно, поэтому последние эпохи обучаются без них, в то время как все остальные виды аугментации — геометрические преобразования, HSV, отражения и Albumentations — продолжают работать. Обрати внимание, что copy_paste в режиме по умолчанию flip работает с отдельным изображением, а не объединяет несколько.
    • Центр сгенерированной мозаики определяется с помощью случайных значений и может находиться как внутри изображения, так и за его пределами.
    • Текущая реализация аугментации mosaic объединяет текущее изображение с 3 другими, взятыми из буфера недавно загруженных изображений или из произвольного места в датасете при cache='ram'. В любом случае они выбираются с возвратом, поэтому одно и то же изображение может появиться в одной мозаике более одного раза.
mosaic выклmosaic вкл
Исходное изображение без аугментацииВключена мозаичная аугментация из 4 изображений

Mixup (mixup)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0
  • Использование: Смешивает два изображения и их метки с заданной вероятностью. Гиперпараметр mixup определяет вероятность применения преобразования: mixup=1.0 гарантирует смешивание всех изображений, а mixup=0.0 отключает преобразование. Например, при mixup=0.5 каждое изображение имеет 50% шанс быть смешанным с другим изображением.
  • Цель: Улучшает устойчивость модели и уменьшает переобучение. Например, в системах распознавания товаров в розничной торговле Mixup помогает модели изучать более устойчивые признаки путем смешивания изображений разных продуктов, обучая ее идентифицировать товары, даже если они частично видны или скрыты другими продуктами на переполненных полках магазинов.
  • Реализация Ultralytics: Mixup
  • Примечание:
    • Коэффициент mixup представляет собой случайное значение, выбранное из бета-распределения np.random.beta(32.0, 32.0), что означает, что каждое изображение вносит примерно 50% вклада с небольшими отклонениями.
Первое изображение, mixup выклВторое изображение, mixup выклmixup вкл
Первое изображение для смешивания MixUpВторое изображение для смешивания MixUpВключена аугментация смешивания MixUp

CutMix (cutmix)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0
  • Использование: Вырезает прямоугольную область из одного изображения и вставляет ее на другое изображение с заданной вероятностью. Гиперпараметр cutmix определяет вероятность применения преобразования: cutmix=1.0 гарантирует, что все изображения подвергнутся этому преобразованию, а cutmix=0.0 полностью отключает его. Например, при cutmix=0.5 каждое изображение имеет 50% шанс замены области патчем из другого изображения.
  • Цель: Повышает производительность модели, создавая реалистичные сценарии окклюзии, сохраняя при этом целостность локальных признаков. Например, в системах автономного вождения CutMix помогает модели научиться распознавать транспортные средства или пешеходов, даже если они частично перекрыты другими объектами, что повышает точность обнаружения в сложных реальных условиях с перекрывающимися объектами.
  • Реализация Ultralytics: CutMix
  • Примечание:
    • Размер и положение вырезанной области определяются случайным образом для каждого применения.
    • В отличие от mixup, который смешивает значения пикселей глобально, cutmix сохраняет исходную интенсивность пикселей внутри вырезанных областей, сохраняя локальные особенности.
    • Область вставляется в целевое изображение только в том случае, если она не перекрывается ни с какими существующими ограничивающими рамками. Кроме того, сохраняются только те ограничивающие рамки, которые сохраняют достаточную часть своей исходной площади внутри вставленной области.
    • Этот порог минимальной площади ограничивающей рамки нельзя изменить в текущей реализации. Он составляет 0.1 (10%) для меток обнаружения и 0.01 (1%), как только метки содержат сегменты.
Первое изображение, cutmix выклВторое изображение, cutmix выклcutmix вкл
Первое изображение для CutMixВторое изображение для CutMixВключена аугментация CutMix

Аугментации для сегментации#

Copy-Paste (copy_paste)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0
  • Использование: Работает только для задач сегментации, это аугментация копирует объекты внутри изображений или между ними, управляемая с помощью copy_paste_mode. В режиме flip параметр copy_paste представляет собой долю подходящих объектов, которые копируются: на изображении с шестью подходящими объектами добавляется три копии при copy_paste=0.5. В режиме mixup это же значение также контролирует вероятность выполнения copy-paste. Значение copy_paste=0.0 отключает преобразование.
  • Цель: Особенно полезно для задач сегментации экземпляров и редких классов объектов. Например, при обнаружении промышленных дефектов, когда определенные типы дефектов встречаются редко, аугментация Copy-Paste может искусственно увеличить частоту появления этих редких дефектов, копируя их из одного изображения в другое, помогая модели лучше изучить эти недопредставленные случаи без необходимости в дополнительных образцах с дефектами.
  • Реализация Ultralytics: CopyPaste
  • Примечание:
    • Как показано в видео ниже, аугментацию copy_paste можно использовать для копирования объектов с одного изображения на другое.
    • Как только объект выбран для копирования, его показатель IoA вычисляется по отношению ко всем объектам, уже присутствующим на целевом изображении, независимо от copy_paste_mode. Объект вставляется только в том случае, если все значения IoA ниже 0.3 (30%); он не вставляется, если какое-либо значение IoA равно 0.3 или выше.
    • Порог IoA нельзя изменить в текущей реализации, и по умолчанию он установлен на 0.3.
copy_paste выклcopy_paste вкл с copy_paste_mode=flipВизуализация процесса copy_paste
Исходное изображение без аугментацииВключена аугментация copy-paste

Режим Copy-Paste (copy_paste_mode)#

  • Опции: 'flip', 'mixup'
  • По умолчанию: 'flip'
  • Использование: Определяет метод, используемый для аугментации copy-paste. Если установлено значение 'flip', объекты берутся из того же изображения, в то время как 'mixup' позволяет копировать объекты с разных изображений.
  • Цель: Обеспечивает гибкость в том, как скопированные объекты интегрируются в целевые изображения.
  • Реализация Ultralytics: CopyPaste
  • Примечание:
    • Принцип IoA одинаков для обеих опций copy_paste_mode, но способ копирования объектов различается.
    • В зависимости от размера изображения объекты иногда могут быть скопированы частично или полностью за пределами кадра.
    • В зависимости от качества многоугольных аннотаций скопированные объекты могут иметь небольшие вариации формы по сравнению с оригиналами.
Эталонное изображениеВыбранное изображение для copy_pastecopy_paste вкл с copy_paste_mode=mixup
Второе изображение для смешивания MixUpИсходное изображение без аугментацииCopy-paste в режиме MixUp

Аугментации для классификации#

Автоматическая аугментация (auto_augment)#

  • Опции: 'randaugment', 'autoaugment', 'augmix', None
  • По умолчанию: 'randaugment'
  • Использование: Применяет автоматизированные политики аугментации для классификации. Опция 'randaugment' использует RandAugment, 'autoaugment' использует AutoAugment, а 'augmix' использует AugMix. Установка значения в None отключает автоматическую аугментацию.
  • Цель: Автоматическая оптимизация стратегий аугментации для задач классификации. Различия заключаются в следующем:
    • AutoAugment: Этот режим применяет предопределенные политики аугментации, изученные на таких наборах данных, как ImageNet, CIFAR10 и SVHN. Пользователи могут выбирать эти существующие политики, но не могут обучать новые в рамках Torchvision. Для поиска оптимальных стратегий аугментации для конкретных наборов данных потребуются внешние библиотеки или пользовательские реализации. Ссылка на статью AutoAugment.
    • RandAugment: Применяет случайный выбор преобразований с равномерной амплитудой. Такой подход снижает потребность в обширной фазе поиска, делая его более эффективным с точки зрения вычислений и при этом повышая устойчивость модели. Ссылка на статью RandAugment.
    • AugMix: AugMix — это метод аугментации данных, который повышает устойчивость модели путем создания разнообразных вариаций изображений с помощью случайных комбинаций простых преобразований. Ссылка на статью AugMix.
  • Реализация Ultralytics: classify_augmentations()
  • Примечание:
    • По сути, главное различие между этими тремя методами заключается в способе определения и применения политик аугментации.
    • Ты можешь обратиться к этой статье, в которой подробно сравниваются эти три метода.

Случайное затирание (erasing)#

  • Диапазон: 0.0 - 1.0
  • По умолчанию: 0.4
  • Использование: Случайным образом стирает части изображения во время обучения классификации. Гиперпараметр erasing определяет вероятность применения преобразования: erasing=1.0 стирает область на каждом изображении, а erasing=0.0 отключает преобразование. Например, при erasing=0.5 каждое изображение имеет 50% вероятность стирания части.
  • Цель: Помогает моделям изучать надежные признаки и предотвращает излишнюю зависимость от конкретных областей изображения. Например, в системах распознавания лиц случайное стирание помогает моделям стать более устойчивыми к частичным окклюзиям, таким как солнцезащитные очки, маски или другие объекты, которые могут частично закрывать черты лица. Это улучшает работу в реальных условиях, заставляя модель идентифицировать человека по нескольким характеристикам лица, а не полагаться исключительно на отличительные особенности, которые могут быть скрыты.
  • Реализация Ultralytics: classify_augmentations()
  • Примечание:
    • Аугментация erasing поставляется с гиперпараметрами scale, ratio и value, которые нельзя изменить в текущей реализации. Их значения по умолчанию равны соответственно (0.02, 0.33), (0.3, 3.3) и 0, как указано в документации PyTorch.
erasing выклerasing вкл (пример 1)erasing вкл (пример 2)erasing вкл (пример 3)
Исходное изображение без аугментацииПример случайного стирания 1Пример случайного стирания 2Пример случайного стирания 3

Расширенные функции аугментации#

Пользовательские преобразования Albumentations (augmentations)#

  • Тип: list преобразований Albumentations
  • По умолчанию: None
  • Использование: Позволяет передавать пользовательские преобразования Albumentations для аугментации данных с использованием Python API. Этот параметр принимает список объектов преобразований Albumentations, которые будут применяться во время обучения вместо стандартных преобразований Albumentations.
  • Цель: Обеспечивает детальный контроль над стратегиями аугментации данных за счет использования обширной библиотеки преобразований Albumentations. Это особенно полезно, когда тебе нужны специализированные аугментации за пределами встроенных опций YOLO, такие как упругие деформации и искажения сетки для медицинской визуализации, преобразования, настроенные для воздушных и спутниковых перспектив, шумы и сдвиги яркости, имитирующие условия низкой освещенности, или дефектоподобные вариации текстуры для промышленного осмотра.
  • Реализация Ultralytics: Albumentations
  • Примечание:
    • Создание объектов преобразования требует использования Python API. Ultralytics сериализует их с помощью A.to_dict() при сохранении чекпоинта, поэтому уже сериализованный список проходит полный цикл через файл конфигурации YAML или CLI, что и позволяет resume восстанавливать их.
    • Пользовательские преобразования полностью заменяют набор Albumentations по умолчанию. Каждая аугментация, настроенная в другом месте на этой странице — mosaic, hsv_h, degrees и остальные — остается активной и применяется независимо.
    • Будь осторожен с пространственными преобразованиями, которые изменяют геометрию изображения. Ultralytics настраивает ограничивающие рамки автоматически, но некоторые сложные преобразования могут потребовать дополнительной конфигурации.
    • Albumentations предлагает более 70 преобразований; документация Albumentations перечисляєт их все. Добавление большого количества преобразований или ресурсоемких из них замедляет обучение, поэтому начти с небольшого набора и следи за временем эпохи.
    • Применяется к задачам detect, segment, semantic, depth, pose и obb. Классификация исключена, так как в ней используется отдельный конвейер аугментации.

Примеры ниже требуют Albumentations 1.4.22 или новее, а следовательно, Python 3.9 или новее.

Пример пользовательских Albumentations
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

FAQ#

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

    • В большинстве случаев небольшие изменения цвета и яркости полезны. Значения по умолчанию для hsv_h, hsv_s и hsv_v являются надежной отправной точкой.
    • Если точка обзора камеры постоянна и не изменится после развертывания модели, ты, скорее всего, можешь пропустить геометрические преобразования, такие как rotation, translation, scale, shear или perspective. Однако, если угол камеры может изменяться и тебе требуется большая устойчивость модели, лучше сохранить эти аугментации.
    • Используй аугментацию mosaic только в том случае, если частичное перекрытие объектов или наличие нескольких объектов на изображении допустимо и не изменяет значение метки. Альтернативно ты можешь оставить mosaic активным, но увеличить значение close_mosaic, чтобы отключить его раньше в процессе обучения.

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

  • Если установлен пакет albumentations, Ultralytics автоматически применяет с его помощью набор дополнительных аугментаций изображений. Эти аугментации обрабатываются внутри системы и не требуют дополнительной настройки.

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

    Ты также можешь предоставить собственные пользовательские преобразования Albumentations с помощью Python API. Подробнее см. в разделе Расширенные функции аугментации.

  • Проверь, установлен ли пакет albumentations. Если нет, установи его:

    pip install albumentations

    После установки пакет должен автоматически определяться и использоваться Ultralytics.

  • Ты можешь настраивать аугментации, создавая пользовательский класс датасета и трейнер. Например, ты можешь заменить стандартные аугментации классификации Ultralytics с помощью torchvision.transforms.Resize из PyTorch или других преобразований. Ознакомься с примером пользовательского обучения в документации по классификации для получения деталей реализации.

Комментарии