CutMix
CutMix вставляет прямоугольный фрагмент одного обучающего изображения в другое и смешивает их метки пропорционально площади фрагмента, повышая точность и качество локализации.
CutMix — метод аугментации данных: из одного обучающего изображения вырезают прямоугольную область и накладывают её на ту же область другого изображения, а метки смешивают пропорционально площади, занимаемой каждым изображением. Сангду Юн и коллеги из NAVER Clova AI Research представили этот метод в статье на ICCV 2019 года как сочетание двух более ранних идей: удаления случайной области в Cutout и смешивания меток в MixUp. На ImageNet CutMix снизил ошибку top-1 у ResNet-50 с 23,68% до 21,40%, опередив MixUp с результатом 22,58% и Cutout с 22,93%. Модели, предварительно обученные с этим методом, также лучше справлялись с обнаружением объектов и созданием описаний изображений.
Как работает CutMix#
Для каждой пары изображений A и B CutMix выбирает коэффициент смешивания λ из бета-распределения, которое при стандартном параметре α = 1 равномерно распределено от 0 до 1. Затем метод задаёт ширину и высоту рамки как ширину и высоту изображения, умноженные на √(1 − λ), помещает её центр в случайную точку, обрезает рамку по границам изображения и копирует область B в A. После обрезки λ пересчитывается как доля оставшейся части A, а метка становится смесью из λ частей A и (1 − λ) частей B. Например, если на изображение собаки наложить участок с кошкой, занимающий 30% площади, целевой вектор будет содержать 0,7 для собаки и 0,3 для кошки. При обучении минимизируется функция потерь относительно этой мягкой метки, как и при сглаживании меток.
torchvision в составе PyTorch применяет CutMix ко всему батчу, объединяя каждое изображение с соседним в батче:
import torch
from torchvision.transforms import v2
# A batch of 4 random 224x224 images labeled with classes 0-3 of 10
torch.manual_seed(0)
images = torch.rand(4, 3, 224, 224)
labels = torch.tensor([0, 1, 2, 3])
# Paste a random box from each image's neighbor in the batch and mix the labels by area
cutmix = v2.CutMix(num_classes=10)
mixed_images, mixed_labels = cutmix(images, labels)
# Image 0 received its patch from image 3
pasted = (mixed_images[0] != images[0]).any(dim=0).float().mean()
print(f"pasted area: {pasted:.3f}")
print(f"label weights for classes 0-3: {mixed_labels[0, :4].numpy().round(3)}")Результат — площадь вставленного участка 0,187 и веса меток 0,813 для класса 0 и 0,187 для класса 3: доля целевой метки, назначенная каждому классу, соответствует доле пикселей, которую этот класс вносит.
Почему CutMix помогает#
Модель классификации изображений, обученная на целых изображениях, может успешно работать, распознавая одну небольшую, очень информативную часть — например, морду собаки. Когда CutMix закрывает эту часть другим изображением, модели приходится распознавать собаку по телу, лапам или шерсти. Так она учится использовать больше областей каждого объекта, что улучшает локализацию со слабым учителем и устойчивость к окклюзии. Все пиксели смешанного изображения по-прежнему взяты из реальных фотографий, поэтому модель никогда не обучается на пустых участках или полупрозрачных наложениях. Как и другие сильные аугментации, CutMix служит регуляризацией и снижает переобучение. Современные схемы обучения визуальных трансформеров (ViT), в том числе схема, лежащая в основе Data-efficient Image Transformers (DeiT) от Meta, используют вместе CutMix и MixUp.
CutMix и смежные методы аугментации#
- MixUp: Смешивает два целых изображения попиксельно с весом λ и так же смешивает их метки. В результате получаются полупрозрачные наложения, не похожие ни на одну реальную сцену.
- Cutout: Маскирует случайный квадрат нулями и сохраняет исходную метку, поэтому замаскированные пиксели не дают модели информации при обучении.
- Mosaic: Объединяет четыре изображения, изменённых по размеру, в одно. Это стандартная аугментация для обучения детекторов объектов: метки рамок сохраняются для каждого объекта, оставшегося в кадре.
- Копирование и вставка для сегментации экземпляров: Переносит из одного изображения в другое сегментированные экземпляры объектов, а не прямоугольные области.
CutMix при обнаружении объектов#
При обнаружении объектов метки остаются точными: вместо смешанного вектора классов сохраняются рамки обоих изображений, если соответствующие объекты остаются видимыми. Аугментация Ultralytics YOLO cutmix, отключённая по умолчанию, принимает вероятность от 0 до 1. Реализация выбирает область вырезания, не пересекающуюся ни с одной из существующих рамок целевого изображения, копирует ту же область из второго изображения и сохраняет каждую вставленную ограничивающую рамку, если не менее 10% её площади остаётся внутри области; для меток сегментации порог составляет 1%. По умолчанию CutMix отключается вместе с mosaic на последние 10 эпох обучения; срок задаёт close_mosaic=10.










