Data Augmentation
Аугментация данных обучает модели на случайно преобразованных копиях существующих изображений — например, отражённых, обрезанных или изменённых по цвету, — чтобы улучшить их способность к обобщению.
Аугментация данных увеличивает разнообразие обучающего набора данных, применяя случайные преобразования, например отражения, обрезку, изменение масштаба, сдвиг цветов и смешивание изображений, к уже имеющимся примерам. Каждая преобразованная копия сохраняет исходную метку, поэтому модель учится тому, что объект остаётся тем же объектом при изменении ракурса, освещения и положения. Сбор и разметка новых изображений требуют много времени и средств, поэтому аугментация — самый дешёвый способ защититься от переобучения, и почти все современные модели компьютерного зрения обучаются с её применением.
Как работает аугментация данных#
В большинстве обучающих конвейеров аугментация выполняется на лету: загрузчик данных преобразует каждое изображение при формировании батча, каждый раз выбирая новые случайные параметры, поэтому на каждой эпохе модель видит новую версию каждого изображения. При офлайн-аугментации фиксированное количество преобразованных копий записывается на диск до начала обучения. Это увеличивает объём хранимых данных и даёт модели гораздо меньше разнообразных вариантов.
Чтобы расширение данных не искажало данные, соблюдай два правила. Во-первых, метки должны перемещаться вместе с пикселями: при детекции объектов, сегментации экземпляров и оценке позы геометрическое преобразование должно обновлять каждую ограничивающую рамку, маску и ключевую точку, а горизонтальное отражение также меняет местами левые и правые ключевые точки. Во-вторых, преобразование должно соответствовать тому, что может произойти в реальном мире: вертикальные отражения подходят для аэрофотоснимков и микроскопических изображений, но для уличных сцен создают перевёрнутые автомобили, которых не бывает во время инференса. Преобразования torchvision автоматически соблюдают первое правило, если рамки передаются вместе с изображением:
from urllib.request import urlopen
from PIL import Image
from torchvision import tv_tensors
from torchvision.transforms import v2
image = Image.open(urlopen("https://ultralytics.com/images/bus.jpg")) # 810 x 1080 pixels
boxes = tv_tensors.BoundingBoxes([[50, 400, 250, 900]], format="XYXY", canvas_size=(1080, 810))
# Flip every time (p=1.0) and shift colors; the box must move with the pixels
augment = v2.Compose([v2.RandomHorizontalFlip(p=1.0), v2.ColorJitter(brightness=0.4, saturation=0.7)])
new_image, new_boxes = augment(image, boxes)
print(f"Original box: {boxes.tolist()}")
print(f"Flipped box: {new_boxes.tolist()}")Рамка вокруг мужчины слева на изображении перемещается из [50, 400, 250, 900] в [560, 400, 760, 900], зеркально отражаясь относительно ширины 810 пикселей; при этом цветовая коррекция изменяет пиксели, не затрагивая рамку.
Распространённые методы#
- Геометрические преобразования: отражения, повороты, масштабирование, перенос, обрезка, сдвиг и перспективные искажения имитируют разные положения камеры и размеры объектов.
- Фотометрические преобразования: изменение яркости, контрастности, насыщенности и цветового тона, а также размытие и добавление шума имитируют разное освещение, сенсоры и качество изображения.
- Окклюзия: случайное стирание и вырезание закрывают прямоугольные области, чтобы модель не полагалась на какую-либо одну часть объекта.
- Смешивание изображений: MixUp объединяет два изображения и их метки, CutMix вставляет фрагмент одного изображения в другое, мозаика объединяет четыре изображения в один обучающий пример, а метод копирования-вставки переносит сегментированные объекты на новый фон.
- Автоматизированные стратегии: RandAugment применяет случайную последовательность преобразований, управляемую всего двумя настройками: количеством преобразований и их интенсивностью. Это избавляет от затратного поиска, необходимого для более ранних обучаемых стратегий.
Конвейеры аугментации для обнаружения объектов#
Конвейеры обнаружения связывают несколько преобразований, каждое из которых применяется с собственной вероятностью, поэтому каждое обучающее изображение получает свою случайную комбинацию.
При обучении Ultralytics YOLO этот конвейер включён по умолчанию: мозаика применяется к каждому изображению (mosaic=1.0), вероятность горизонтального отражения составляет 50% (fliplr=0.5), масштабирование — до ±50%, а также выполняются сдвиги цветов HSV. За последние 10 эпох мозаика отключается (close_mosaic=10), чтобы модель завершала обучение на целых изображениях, похожих на реальные.
from ultralytics import YOLO
# Загрузи предварительно обученную модель YOLO26n
model = YOLO("yolo26n.pt")
# fliplr: вероятность горизонтального отражения; scale: диапазон масштабирования (+/- 70%); degrees: диапазон поворота (+/- 5)
results = model.train(data="coco8.yaml", epochs=10, fliplr=0.5, scale=0.7, degrees=5.0)Во время этого запуска тренер YOLO26 сохраняет первые три аугментированных батча как train_batch0.jpg, train_batch1.jpg и train_batch2.jpg, с нарисованными рамками, чтобы можно было проверить эффект каждой настройки до начала длительного запуска.
Аугментация данных и связанные термины#
- Синтетические данные: генерируются с нуля с помощью движков рендеринга, симуляторов или моделей диффузии. Аугментация изменяет уже существующие реальные изображения.
- Предобработка данных: детерминированные шаги, например изменение размера и нормализация, одинаково применяемые ко всем изображениям при обучении и инференсе. Аугментация случайна и выполняется только во время обучения.
- Аугментация во время тестирования (TTA): запускает инференс на нескольких аугментированных версиях одного входного изображения, например отражённых и масштабированных копиях, а затем объединяет предсказания. Это требует дополнительных вычислений, но немного повышает точность.










