Аугментация данных с Ultralytics YOLO#
Введение#
Аугментация данных — важный метод в компьютерном зрении, который искусственно расширяет обучающий набор данных за счёт применения различных преобразований к существующим изображениям. При обучении моделей глубокого обучения, таких как 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)Преобразования, перечисленные на этой странице, настраиваются с помощью аргументов обучения. Кроме того, 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.25 | 0.0 | 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.5 | 0.0 | 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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Геометрические преобразования#
Поворот (degrees)#
- Диапазон: от
0.0до180 - По умолчанию:
0 - Применение: Случайным образом поворачивает изображения в заданном диапазоне. Гиперпараметр
degreesзадаёт угол поворота, а итоговое значение случайным образом выбирается между-degreesиdegrees. Например, при значенииdegrees=10.0угол поворота случайным образом выбирается в диапазоне от-10.0до10.0. - Назначение: Критически важна для приложений, в которых объекты могут быть ориентированы по-разному. Например, на аэрофотоснимках с дронов автомобили могут быть направлены в любую сторону, поэтому модели нужно распознавать объекты независимо от их поворота.
- Реализация Ultralytics: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Сдвиг (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.25 | 0.0 | 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просто увеличит масштаб в 2 раза. - Значения в таблице ниже показывают фактические изменения масштаба, а не значения, которые ты передаёшь гиперпараметру
scale. - Значение в формате числа с плавающей точкой проверяется на соответствие диапазону от
0.0до1.0; выход за его пределы вызываетValueError. Чтобы выбрать коэффициент, превышающий двукратное увеличение, передай значение в виде кортежа(min, max). - Формат кортежа применим только к геометрическим задачам. При обучении классификации собственный диапазон кадрирования рассчитывается на основе значения с плавающей точкой (от
1.0 - scaleдо1.0), поэтому передача кортежа вызоветTypeError.
- Значение
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Сдвиг по наклонной (shear)#
- Диапазон: от
-180до+180 - По умолчанию:
0 - Применение: Применяет геометрическое преобразование, наклоняя изображение по осям x и y: части изображения смещаются в одном направлении, а параллельность линий сохраняется. Гиперпараметр
shearзадаёт угол сдвига, а итоговое значение случайным образом выбирается между-shearиshear. Например, при значенииshear=10.0сдвиг по наклонной случайным образом выбирается в диапазоне от-10до10для оси x, а для оси y независимо выбирается другое случайное значение в том же диапазоне. - Назначение: Помогает моделям обобщать данные при изменении ракурса из-за небольших наклонов или косого угла обзора. Например, в системах мониторинга дорожного движения автомобили и дорожные знаки могут выглядеть наклонёнными из-за того, что камеры установлены не перпендикулярно дороге. Аугментация сдвигом по наклонной позволяет модели распознавать объекты несмотря на такие искажения.
- Реализация Ultralytics: RandomPerspective
- Примечание:
- Значения
shearмогут быстро исказить изображение, поэтому рекомендуется начинать с небольших значений и постепенно увеличивать их. - В отличие от перспективных преобразований, сдвиг по наклонной не создаёт глубину или точки схода, а искажает форму объектов, изменяя углы и сохраняя параллельность противоположных сторон.
- Значения
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Перспектива (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.0005 | 0.0 | 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вероятность преобразования каждого изображения из RGB в BGR составляет 50%. - Назначение: Повышает устойчивость к разному порядку цветовых каналов. Например, это полезно при обучении моделей, которые должны работать с разными системами камер и библиотеками обработки изображений, где форматы RGB и BGR могут использоваться непоследовательно, а также при развёртывании моделей в средах, где формат входных данных может отличаться от обучающего.
- Реализация Ultralytics: Format
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к текущему изображению добавляются ещё три: они берутся из буфера недавно загруженных изображений или из любого места набора данных, если заданоcache='ram'. В обоих случаях изображения выбираются с возвращением, поэтому одно и то же изображение может встретиться в мозаике несколько раз.
- Хотя аугментация
mosaic выключен | mosaic включён |
|---|---|
![]() | ![]() |
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 включён |
|---|---|---|
![]() | ![]() | ![]() |
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 включён |
|---|---|---|
![]() | ![]() | ![]() |
Аугментации 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 |
|---|---|---|
![]() | ![]() |
Режим Copy-Paste (copy_paste_mode)#
- Параметры:
'flip','mixup' - По умолчанию:
'flip' - Использование: задаёт метод аугментации copy-paste. Если выбрать
'flip', объекты берутся из того же изображения, а'mixup'позволяет копировать объекты из других изображений. - Назначение: позволяет гибко настраивать способ добавления скопированных объектов в целевые изображения.
- Реализация Ultralytics: CopyPaste
- Примечание:
- Принцип IoA одинаков для обоих вариантов
copy_paste_mode, но копирование объектов выполняется по-разному. - В зависимости от размера изображения объекты иногда могут копироваться частично или целиком за пределы кадра.
- В зависимости от качества полигональной разметки форма скопированных объектов может немного отличаться от исходной.
- Принцип IoA одинаков для обоих вариантов
| Исходное изображение | Выбранное изображение для copy_paste | copy_paste включён, copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Аугментации для классификации#
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) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Расширенные возможности аугментации#
Пользовательские преобразования 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. Классификация не поддерживается, поскольку для неё используется отдельный конвейер аугментации.
- Для создания объектов преобразований нужен API Python. При сохранении контрольной точки Ultralytics сериализует их с помощью
Для приведённых ниже примеров требуется Albumentations версии 1.4.22 или новее, а значит, Python версии 3.9 или новее.
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 или другие преобразования. Подробности реализации см. в примере пользовательского обучения в документации по классификации.













































