CutMix
CutMix fügt einen rechteckigen Ausschnitt aus einem Trainingsbild in ein anderes ein und mischt die Bezeichnungen entsprechend der Fläche des Ausschnitts. Das verbessert Genauigkeit und Lokalisierung.
CutMix ist eine Datenerweiterung, bei der ein rechteckiger Ausschnitt aus einem Trainingsbild ausgeschnitten und an derselben Stelle in ein anderes Bild eingefügt wird. Die beiden Labels werden entsprechend dem Bildanteil, den jedes Bild belegt, gewichtet. Sangdoo Yun und Kollegen von NAVER Clova AI Research stellten die Methode in einem ICCV-Beitrag von 2019 als Kombination zweier früherer Ideen vor: dem Entfernen eines zufälligen Bereichs bei Cutout und dem Mischen von Labels bei MixUp. Auf ImageNet senkte CutMix den Top-1-Fehler eines ResNet-50 von 23,68 % auf 21,40 % – besser als MixUp mit 22,58 % und Cutout mit 22,93 %. Mit CutMix vortrainierte Modelle ließen sich zudem besser auf Objekterkennung und Bildbeschriftung übertragen.
So funktioniert CutMix#
Für jedes Bildpaar A und B zieht CutMix einen Mischungsanteil λ aus einer Beta-Verteilung. Mit dem Standardparameter α = 1 ist dieser gleichmäßig zwischen 0 und 1 verteilt. Anschließend zeichnet die Methode einen Kasten, dessen Breite und Höhe jeweils der Bildbreite und -höhe multipliziert mit √(1 − λ) entsprechen. Der Kasten wird um einen zufälligen Punkt zentriert, auf die Bildränder zugeschnitten und der entsprechende Bereich aus B in A kopiert. Nach dem Zuschneiden wird λ als der verbleibende Anteil von A neu berechnet. Das Label setzt sich dann aus λ Anteilen von A und (1 − λ) Anteilen von B zusammen. Ein 30-%-Ausschnitt einer Katze in einem Hundebild ergibt beispielsweise ein Ziel mit 0,7 Hund und 0,3 Katze. Beim Training wird die Verlustfunktion anhand dieses weichen Labels minimiert, genauso wie bei Label Smoothing.
torchvision von PyTorch wendet CutMix auf einen ganzen Batch an und paart jedes Bild mit seinem Nachbarn im Batch:
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)}")Ausgegeben werden eine eingefügte Fläche von 0.187 und Label-Gewichte von 0.813 für Klasse 0 und 0.187 für Klasse 3: Der Anteil des Ziels, der jeder Klasse zugewiesen wird, entspricht dem Anteil der von ihr beigesteuerten Pixel.
Warum CutMix funktioniert#
Ein für die Bildklassifizierung trainiertes Modell kann ganze Bilder korrekt erkennen, indem es ein kleines, stark unterscheidungskräftiges Merkmal wie das Gesicht eines Hundes identifiziert. Wenn CutMix dieses Merkmal mit einem anderen Bild verdeckt, muss das Modell den Hund anhand seines Körpers, seiner Beine oder seines Fells erkennen. Dadurch lernt es, mehr Bereiche jedes Objekts zu nutzen, was die Lokalisierung bei schwacher Überwachung und die Robustheit gegenüber Verdeckungen verbessert. Jedes Pixel des gemischten Bildes stammt weiterhin aus einem echten Foto. Das Modell wird daher nie mit leeren Bereichen oder geisterhaften Überblendungen trainiert. Wie andere starke Erweiterungen wirkt CutMix als Regularisierung, die Überanpassung verringert. Moderne Trainingsrezepte für Vision-Transformer (ViT), darunter das Rezept hinter Metas Data-efficient Image Transformers (DeiT), verwenden CutMix und MixUp gemeinsam.
CutMix und verwandte Erweiterungsverfahren#
- MixUp: Überblendet zwei vollständige Bilder Pixel für Pixel mit dem Gewicht λ und mischt ihre Labels auf dieselbe Weise. Dadurch entstehen durchsichtige Überlagerungen, die keiner realen Szene ähneln.
- Cutout: Verdeckt ein zufälliges Quadrat mit Nullen und behält das ursprüngliche Label bei. Die verdeckten Pixel liefern dem Training daher keine Informationen.
- Mosaic: Kachelt vier verkleinerte Bilder zu einem Bild zusammen. Diese standardmäßige Erweiterungsmethode für das Training von Objekterkennern behält die Bounding-Box-Labels aller Objekte bei, die noch im Bild zu sehen sind.
- Copy-Paste für die Instanzsegmentierung: Fügt segmentierte Objektinstanzen statt Rechtecken aus einem Bild in ein anderes ein.
CutMix bei der Objekterkennung#
Bei der Objekterkennung bleibt jedes Label eindeutig: Statt eines gemischten Klassenvektors bleiben die Boxen beider Bilder erhalten, sofern ihre Objekte sichtbar sind. Die standardmäßig deaktivierte Ultralytics-YOLO-Erweiterung cutmix nimmt eine Wahrscheinlichkeit zwischen 0 und 1 entgegen. Die Implementierung wählt einen Ausschnitt, der keine vorhandenen Boxen des Zielbilds überlappt, kopiert denselben Ausschnitt aus einem zweiten Bild und behält jede eingefügte Bounding Box, die mindestens 10 % ihrer Fläche innerhalb des Ausschnitts behält – bei Segmentierungslabels sind es 1 %. CutMix wird standardmäßig zusammen mit Mosaic während der letzten 10 Trainingsepochen deaktiviert. Dafür sorgt close_mosaic=10.










