Ultralytics YOLO27:
Get Started

Аугментация данных с Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Введение#

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



Смотри: Как использовать Mosaic, MixUp и другие методы аугментации данных, чтобы модели Ultralytics YOLO лучше обобщали данные 🚀

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

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

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

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

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

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

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

from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n.pt")

# Обучение с пользовательскими параметрами аугментации
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Обучение с отключением всех настраиваемых аугментаций (отключённые параметры опущены для наглядности)
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,
)

# Обучение с пользовательскими преобразованиями Albumentations (только Python API)
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

# Загрузить модель YOLO26n, предобученную на COCO
model = YOLO("yolo26n.pt")

# Обучение модели с пользовательской конфигурацией
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
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

Настройка насыщенности (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
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

Настройка яркости (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
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

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

Поворот (degrees)#

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

Сдвиг (translate)#

  • Диапазон: 0.0 – 1.0
  • По умолчанию: 0.1
  • Применение: Случайным образом сдвигает изображения по горизонтали и вертикали на долю их размера. Гиперпараметр translate задаёт величину сдвига, а итоговое значение независимо выбирается дважды — для каждой оси — в диапазоне от -translate до translate. Например, при значении translate=0.5 сдвиг по оси x случайным образом выбирается в диапазоне от -0.5 до 0.5, а по оси y независимо выбирается другое случайное значение в том же диапазоне.
  • Назначение: Помогает моделям учиться обнаруживать частично видимые объекты и повышает устойчивость к изменению положения объекта. Например, в приложениях для оценки повреждений автомобилей их части могут быть полностью или частично видны в кадре в зависимости от положения и расстояния до фотографа. Аугментация сдвигом научит модель распознавать эти признаки независимо от того, насколько полно они видны и где находятся.
  • Реализация Ultralytics: RandomPerspective
  • Примечание: Для простоты в приведённых ниже примерах каждый раз применяется одинаковый сдвиг по обеим осям — x и y. Значения -1.0 и 1.0 не показаны, так как при них изображение полностью выйдет за границы кадра.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

Масштаб (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 просто увеличит масштаб в 2 раза.
    • Значения в таблице ниже показывают фактические изменения масштаба, а не значения, которые ты передаёшь гиперпараметру scale.
    • Значение в формате числа с плавающей точкой проверяется на соответствие диапазону от 0.0 до 1.0; выход за его пределы вызывает ValueError. Чтобы выбрать коэффициент, превышающий двукратное увеличение, передай значение в виде кортежа (min, max).
    • Формат кортежа применим только к геометрическим задачам. При обучении классификации собственный диапазон кадрирования рассчитывается на основе значения с плавающей точкой (от 1.0 - scale до 1.0), поэтому передача кортежа вызовет TypeError.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

Сдвиг по наклонной (shear)#

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

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

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

Переворот вверх ногами (flipud)#

  • Диапазон: 0.0 – 1.0
  • По умолчанию: 0
  • Применение: Переворачивает изображение по вертикали, отражая его относительно оси y. Преобразование переворачивает всё изображение вверх ногами, сохраняя взаимное расположение объектов. Гиперпараметр flipud задаёт вероятность применения преобразования: значение flipud=1.0 гарантирует переворот всех изображений, а значение flipud=0.0 полностью отключает преобразование. Например, при значении flipud=0.5 вероятность переворота каждого изображения вверх ногами составляет 50%.
  • Назначение: Полезно в ситуациях, когда объекты могут оказаться перевёрнутыми. Например, в системах технического зрения для робототехники объекты на конвейерных лентах или роботизированных манипуляторах могут перемещаться и менять ориентацию. Переворот по вертикали помогает модели распознавать объекты независимо от их положения сверху вниз.
  • Реализация Ultralytics: RandomFlip
flipud выключенflipud включён
Original image without augmentationVertical flip augmentation enabled

Переворот слева направо (fliplr)#

  • Диапазон: 0.0 – 1.0
  • По умолчанию: 0.5
  • Применение: Отражает изображение по горизонтали относительно оси x. Это преобразование меняет местами левую и правую стороны, сохраняя пространственную согласованность, и помогает модели обобщать данные, когда объекты имеют зеркальную ориентацию. Гиперпараметр fliplr задаёт вероятность применения преобразования: значение fliplr=1.0 гарантирует переворот всех изображений, а значение fliplr=0.0 полностью отключает преобразование. Например, при значении fliplr=0.5 вероятность переворота каждого изображения слева направо составляет 50%.
  • Назначение: Горизонтальный переворот широко используют для обнаружения объектов, оценки позы и распознавания лиц, чтобы повысить устойчивость к изменениям слева направо. Например, при автономном вождении автомобили и пешеходы могут находиться по любую сторону дороги, а горизонтальный переворот помогает модели одинаково хорошо распознавать их в обоих положениях.
  • Реализация Ultralytics: RandomFlip
fliplr выключенfliplr включён
Original image without augmentationHorizontal flip augmentation enabled

Перестановка каналов BGR (bgr)#

  • Диапазон: 0.0 – 1.0
  • По умолчанию: 0
  • Применение: Меняет порядок цветовых каналов изображения с RGB на BGR. Гиперпараметр bgr задаёт вероятность применения преобразования: значение bgr=1.0 гарантирует перестановку каналов во всех изображениях, а значение bgr=0.0 отключает её. Например, при значении bgr=0.5 вероятность преобразования каждого изображения из RGB в BGR составляет 50%.
  • Назначение: Повышает устойчивость к разному порядку цветовых каналов. Например, это полезно при обучении моделей, которые должны работать с разными системами камер и библиотеками обработки изображений, где форматы RGB и BGR могут использоваться непоследовательно, а также при развёртывании моделей в средах, где формат входных данных может отличаться от обучающего.
  • Реализация Ultralytics: Format
bgr выключенbgr включён
Original image without augmentationBGR channel swap augmentation

Мозаика (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 к текущему изображению добавляются ещё три: они берутся из буфера недавно загруженных изображений или из любого места набора данных, если задано cache='ram'. В обоих случаях изображения выбираются с возвращением, поэтому одно и то же изображение может встретиться в мозаике несколько раз.
mosaic выключенmosaic включён
Original image without augmentationMosaic 4-image augmentation enabled

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 включён
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

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 включён
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Аугментации Copy-Paste#

Copy-Paste (copy_paste)#

  • Диапазон: 0.0 – 1.0
  • По умолчанию: 0
  • Использование: требует полигональных меток, поэтому применяется в задачах сегментации и OBB; эта аугментация копирует объекты внутри одного изображения или между изображениями. Управлять ею можно с помощью 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
Original image without augmentationCopy-paste augmentation enabled

Режим 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
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

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

Auto Augment (auto_augment)#

  • Параметры: 'randaugment', 'autoaugment', 'augmix', None
  • По умолчанию: 'randaugment'
  • Использование: применяет автоматические политики аугментации для классификации. Параметр 'randaugment' использует RandAugment, 'autoaugment' — AutoAugment, а 'augmix' — AugMix. Значение None отключает автоматическую аугментацию.
  • Назначение: автоматически оптимизирует стратегии аугментации для задач классификации. Различия между методами:
    • AutoAugment: этот режим применяет заранее определённые политики аугментации, полученные при обучении на таких наборах данных, как ImageNet, CIFAR10 и SVHN. Можно выбирать готовые политики, но обучать новые в Torchvision нельзя. Чтобы подобрать оптимальные стратегии аугментации для конкретных наборов данных, потребуются сторонние библиотеки или собственные реализации. См. статью об AutoAugment.
    • RandAugment: случайным образом выбирает преобразования с одинаковой интенсивностью. Такой подход избавляет от необходимости проводить длительный поиск, снижая вычислительные затраты и при этом повышая устойчивость модели. См. статью о RandAugment.
    • 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)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Расширенные возможности аугментации#

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

  • Тип: list преобразований Albumentations
  • По умолчанию: None
  • Использование: позволяет задавать собственные преобразования Albumentations для аугментации данных через API Python. Параметр принимает список объектов преобразований Albumentations, которые будут применяться во время обучения вместо набора преобразований Albumentations по умолчанию.
  • Назначение: предоставляет точный контроль над стратегиями аугментации данных благодаря обширной библиотеке преобразований Albumentations. Это особенно полезно, если нужны специализированные аугментации, не входящие во встроенный набор возможностей YOLO: например, упругие деформации и искажения сетки для медицинских изображений, преобразования для аэрофотоснимков и спутниковых снимков, шум и изменение яркости для имитации слабого освещения или текстурные вариации, имитирующие дефекты, для промышленного контроля.
  • Реализация Ultralytics: Albumentations
  • Примечание:
    • Для создания объектов преобразований нужен API Python. При сохранении контрольной точки Ultralytics сериализует их с помощью A.to_dict(). Поэтому уже сериализованный список можно сохранить в YAML-файле конфигурации или передать через CLI, а затем восстановить с помощью resume.
    • Пользовательские преобразования полностью заменяют стандартный набор Albumentations. Все остальные аугментации, заданные на этой странице, — mosaic, hsv_h, degrees и прочие — остаются активными и применяются независимо.
    • Пространственные преобразования, изменяющие геометрию изображения, в том числе вложенные в A.OneOf или A.Compose, изменяют положение ограничивающих рамок, полигонов, ключевых точек, а также карт глубины и семантических масок вместе с изображением; A.RandomGridShuffle не может сохранять топологию полигонов или ключевых точек и вызывает ошибку для примеров сегментации, поз и OBB.
    • 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

# Загрузить модель
model = YOLO("yolo26n.pt")

# Определение пользовательских преобразований Albumentations
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),
]

# Обучение с пользовательскими преобразованиями Albumentations
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Передача пользовательских преобразований
    imgsz=640,
)

Часто задаваемые вопросы#

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

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

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

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

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

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

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

    pip install albumentations

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

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

Комментарии