Data Augmentation
Bei der Datenerweiterung werden Modelle mit zufällig veränderten Kopien vorhandener Bilder trainiert, etwa mit Spiegelungen, Zuschnitten und Farbverschiebungen, damit sie besser generalisieren.
Datenerweiterung vergrößert die Vielfalt eines Trainingsdatensatzes, indem zufällige Transformationen wie Spiegelungen, Zuschnitte, Größenänderungen, Farbverschiebungen und das Mischen von Bildern auf die bereits enthaltenen Beispiele angewendet werden. Jede transformierte Kopie behält ihre ursprüngliche Beschriftung. So lernt das Modell, dass ein Objekt bei Änderungen des Blickwinkels, der Beleuchtung und der Position dasselbe Objekt bleibt. Neue Bilder zu sammeln und zu beschriften ist langsam und teuer. Datenerweiterung ist daher der günstigste Schutz vor Überanpassung, und fast jedes moderne Computer-Vision-Modell wird damit trainiert.
So funktioniert Datenerweiterung#
Die meisten Trainingspipelines erweitern die Daten während des Trainings: Der Data Loader transformiert jedes Bild beim Erstellen eines Batches und zieht dabei jedes Mal neue Zufallsparameter. So sieht das Modell in jeder Epoche eine andere Version jedes Bildes. Bei der Offline-Erweiterung wird vor dem Training stattdessen eine feste Anzahl transformierter Kopien auf der Festplatte gespeichert. Das vervielfacht den Speicherbedarf und bietet dem Modell deutlich weniger unterschiedliche Varianten.
Zwei Regeln verhindern, dass Datenerweiterung die Daten verfälscht. Erstens müssen sich die Labels mit den Pixeln mitbewegen: Bei Objekterkennung, Instanzsegmentierung und Posenschätzung muss eine geometrische Transformation jede Begrenzungsbox, Maske und jeden Schlüsselpunkt aktualisieren. Bei einer horizontalen Spiegelung werden außerdem die linken und rechten Schlüsselpunkte vertauscht. Zweitens muss die Transformation in der realen Welt vorkommen können: Vertikale Spiegelungen eignen sich für Luftbilder und Mikroskopbilder. Bei Straßenbildern erzeugen sie dagegen umgedrehte Autos, wie sie bei der Inferenz nie vorkommen. Die Transformationen von Torchvision setzen die erste Regel automatisch um, wenn Begrenzungsboxen zusammen mit dem Bild übergeben werden:
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()}")Der Rahmen um den Mann links im Bild verschiebt sich von [50, 400, 250, 900] zu [560, 400, 760, 900] und wird über die Breite von 810 Pixeln gespiegelt. Die Farbvariation verändert die Pixel, ohne den Rahmen anzutasten.
Gängige Verfahren#
- Geometrische Transformationen: Spiegelungen, Drehungen, Skalierungen, Verschiebungen, Zuschnitte, Scherungen und perspektivische Verzerrungen simulieren unterschiedliche Kamerapositionen und Objektgrößen.
- Fotometrische Transformationen: Änderungen von Helligkeit, Kontrast, Sättigung und Farbton sowie Unschärfe und Rauschen simulieren unterschiedliche Lichtverhältnisse, Sensoren und Bildqualität.
- Verdeckung: Zufälliges Löschen und Ausschneiden blenden Rechtecke aus, sodass sich das Modell nicht auf einen einzelnen Teil eines Objekts verlassen kann.
- Mischen von Bildern: MixUp mischt zwei Bilder und ihre Beschriftungen, CutMix fügt einen Ausschnitt aus einem Bild in ein anderes ein, Mosaik ordnet vier Bilder zu einem Trainingsbeispiel an und Copy-Paste setzt segmentierte Objekte auf neue Hintergründe.
- Automatisierte Richtlinien: RandAugment wendet eine zufällige Folge von Transformationen an, die nur durch zwei Einstellungen gesteuert wird: die Anzahl und Stärke der Transformationen. Damit entfällt die aufwendige Suche, die zuvor erlernte Richtlinien erforderten.
Pipelines zur Datenerweiterung für die Objekterkennung#
Detektionspipelines verketten mehrere Transformationen, die jeweils mit eigener Wahrscheinlichkeit angewendet werden. So erhält jedes Trainingsbild eine andere zufällige Kombination.
Beim Training mit Ultralytics YOLO wird diese Pipeline standardmäßig ausgeführt. Jedes Bild erhält eine Mosaiktransformation (mosaic=1.0), eine Wahrscheinlichkeit von 50 % für eine horizontale Spiegelung (fliplr=0.5), eine Skalierung von bis zu ±50 % und HSV-Farbverschiebungen. Für die letzten 10 Epochen wird die Mosaiktransformation deaktiviert (close_mosaic=10), damit das Modell mit vollständigen, natürlich wirkenden Bildern fertig trainiert wird.
from ultralytics import YOLO
# Lade ein vortrainiertes YOLO26n-Modell
model = YOLO("yolo26n.pt")
# fliplr: Wahrscheinlichkeit einer horizontalen Spiegelung; scale: Zoom-Bereich (+/- 70%); degrees: Drehbereich (+/- 5)
results = model.train(data="coco8.yaml", epochs=10, fliplr=0.5, scale=0.7, degrees=5.0)Während dieses Trainingslaufs speichert der YOLO26-Trainer die ersten drei erweiterten Batches unter train_batch0.jpg, train_batch1.jpg und train_batch2.jpg, jeweils mit eingezeichneten Rahmen. So lässt sich die Wirkung jeder Einstellung überprüfen, bevor ein langer Trainingslauf gestartet wird.
Datenerweiterung und verwandte Begriffe#
- Synthetische Daten: Werden mit Rendering-Engines, Simulatoren oder Diffusionsmodellen von Grund auf neu erzeugt. Bei der Datenerweiterung werden bereits vorhandene echte Bilder verändert.
- Datenvorverarbeitung: Deterministische Schritte wie Größenanpassung und Normalisierung, die während des Trainings und der Inferenz auf jedes Bild identisch angewendet werden. Datenerweiterung ist zufällig und findet nur während des Trainings statt.
- Testzeiterweiterung (TTA): Führt die Inferenz auf mehreren erweiterten Versionen derselben Eingabe aus, etwa gespiegelten und in der Größe veränderten Kopien, und führt die Vorhersagen zusammen. Das erhöht den Rechenaufwand und bringt einen kleinen Genauigkeitsgewinn.










