Ultralytics YOLO27:

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

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

Ты можешь настроить каждый параметр с помощью Python API, интерфейса командной строки (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.01.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.01.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.01.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.01.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 в формате float или явный кортеж (min, max)
  • По умолчанию: 0.5
  • Использование: изменяет размер изображений на случайный коэффициент в указанном диапазоне. В формате float гиперпараметр 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.
    • Форма float проверяется на принадлежность диапазону 0.01.0; значение за его пределами вызывает ValueError. Чтобы выбирать коэффициент за пределами двукратного увеличения, вместо этого передай форму кортежа (min, max).
    • Форма кортежа применяется только к геометрическим задачам. При обучении классификации собственный диапазон обрезки выводится из значения float (от 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 сдвиг по оси x случайным образом выбирается в диапазоне от -10 до 10, а по оси 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.00.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.01.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.01.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.01.0
  • По умолчанию: 0
  • Использование: меняет порядок цветовых каналов изображения с RGB на BGR. Гиперпараметр bgr определяет вероятность применения преобразования: значение bgr=1.0 гарантирует замену каналов во всех изображениях, а значение bgr=0.0 отключает её. Например, при bgr=0.5 каждое изображение с вероятностью 50% преобразуется из RGB в BGR.
  • Назначение: повышает устойчивость к различному порядку цветовых каналов. Например, при обучении моделей, которые должны работать с разными камерами и библиотеками обработки изображений, где форматы RGB и BGR могут использоваться непоследовательно, или при развёртывании моделей в средах, где формат входных цветов может отличаться от обучающих данных.
  • Реализация Ultralytics: Format
bgr выключенbgr включён
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • Диапазон: 0.01.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.01.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.01.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.01.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 — это метод аугментации данных, повышающий устойчивость модели за счёт создания разнообразных вариантов изображений посредством случайных комбинаций простых преобразований. См. статью об AugMix.
  • Реализация Ultralytics: classify_augmentations()
  • Примечание:
    • По сути, главное различие между тремя методами заключается в способе определения и применения политик аугментации.
    • Подробное сравнение этих трёх методов приведено в этой статье.

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

  • Диапазон: 0.01.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 для аугментации данных с помощью Python API. Этот параметр принимает список объектов преобразований Albumentations, которые будут применяться во время обучения вместо стандартных преобразований Albumentations.
  • Назначение: обеспечивает детальный контроль над стратегиями аугментации данных за счёт использования обширной библиотеки преобразований Albumentations. Это особенно полезно, когда нужны специализированные аугментации, недоступные среди встроенных параметров YOLO, например упругие деформации и искажения сетки для медицинских изображений, преобразования, настроенные для аэрофотосъёмки и спутниковых снимков, изменения шума и яркости для имитации условий низкой освещённости или вариации текстур, напоминающие дефекты, для промышленного контроля.
  • Реализация Ultralytics: Albumentations
  • Примечание:
    • Для создания объектов преобразований требуется Python API. При сохранении контрольной точки 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

# 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,
)

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

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

    • В большинстве случаев небольшие изменения цвета и яркости полезны. Значения 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. Подробнее о реализации см. в примере пользовательского обучения в документации по классификации.

Комментарии