Ultralytics YOLO27:

Datenaugmentation mit Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Einleitung#

Datenaugmentation ist eine wichtige Technik in der Computer Vision, die deinen Trainingsdatensatz durch verschiedene Transformationen vorhandener Bilder künstlich erweitert. Beim Training von Deep-Learning-Modellen wie Ultralytics YOLO trägt Datenaugmentation dazu bei, die Robustheit des Modells zu verbessern, Overfitting zu reduzieren und die Generalisierung auf reale Szenarien zu verbessern.



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

Warum Datenaugmentation wichtig ist#

Datenaugmentation erfüllt beim Training von Computer-Vision-Modellen mehrere wichtige Zwecke:

  • Erweiterter Datensatz: Durch das Erstellen von Varianten vorhandener Bilder kannst du die Größe deines Trainingsdatensatzes effektiv erhöhen, ohne neue Daten zu sammeln.
  • Verbesserte Generalisierung: Modelle lernen, Objekte unter verschiedenen Bedingungen zu erkennen, und werden dadurch in realen Anwendungen robuster.
  • Weniger Overfitting: Durch das Einführen von Variabilität in die Trainingsdaten memorieren Modelle spezifische Bildeigenschaften weniger wahrscheinlich.
  • Verbesserte Leistung: Mit geeigneter Datenaugmentation trainierte Modelle erreichen in Validierungs- und Testdatensätzen typischerweise eine bessere Genauigkeit.

Die Implementierung von Ultralytics YOLO bietet eine umfassende Sammlung von Augmentationstechniken. Jede davon erfüllt bestimmte Zwecke und trägt auf unterschiedliche Weise zur Modellleistung bei. Dieser Leitfaden behandelt die folgenden Augmentationseinstellungen und hilft dir zu verstehen, wann und wie du sie in deinen Projekten effektiv einsetzt.

Beispielkonfigurationen#

Du kannst jeden Parameter über die Python-API, die Befehlszeilenschnittstelle (CLI) oder eine Konfigurationsdatei anpassen. Im Folgenden findest du Beispiele für die Einrichtung der Datenaugmentation mit den jeweiligen Methoden.

Beispiele für Konfigurationen
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
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,
)

# Training with custom Albumentations transforms (Python API only)
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)
Das Zurücksetzen der Augmentationsargumente auf null deaktiviert Albumentations nicht

Die auf dieser Seite aufgeführten Transformationen steuerst du über Trainingsargumente. Ultralytics wendet außerdem immer dann eine kleine Auswahl von Albumentations an – Weichzeichnen, Median-Weichzeichnen, Graustufen und CLAHE, jeweils mit p=0.01 – wenn das Paket albumentations installiert ist. Kein Argument in default.yaml deaktiviert diese Auswahl. Deinstalliere das Paket, um sie zu entfernen, oder übergib deine eigene Liste an augmentations, um sie zu ersetzen.

Eine Konfigurationsdatei verwenden#

Du kannst alle Trainingsparameter einschließlich der Augmentationen in einer YAML-Konfigurationsdatei definieren, zum Beispiel in train_custom.yaml. Der Parameter mode ist nur bei Verwendung der CLI erforderlich. Diese neue YAML-Datei überschreibt anschließend die Standarddatei im Paket 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

Starte das Training anschließend mit der Python-API:

Trainingsbeispiel
from ultralytics import YOLO

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

Augmentationen im Farbraum#

Farbtonanpassung (hsv_h)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0.015
  • Verwendung: Verschiebt die Bildfarben, während ihre Beziehungen zueinander erhalten bleiben. Der Hyperparameter hsv_h definiert die Stärke der Verschiebung. Die endgültige Anpassung wird zufällig zwischen -hsv_h und hsv_h gewählt. Bei hsv_h=0.3 wird die Verschiebung beispielsweise zufällig im Bereich von -0.3 bis 0.3 ausgewählt. Bei Werten über 0.5 läuft die Farbtonverschiebung am Farbkreis über, weshalb die Augmentationen zwischen 0.5 und -0.5 gleich aussehen.
  • Zweck: Besonders nützlich für Szenarien im Freien, in denen die Lichtverhältnisse das Erscheinungsbild von Objekten stark beeinflussen können. Eine Banane kann beispielsweise bei hellem Sonnenlicht gelber, in Innenräumen jedoch grünlicher aussehen.
  • Implementierung von Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

Sättigungsanpassung (hsv_s)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0.7
  • Verwendung: Verändert die Intensität der Farben im Bild. Der Hyperparameter hsv_s definiert die Stärke der Verschiebung. Die endgültige Anpassung wird zufällig zwischen -hsv_s und hsv_s gewählt. Bei hsv_s=0.7 wird die Intensität beispielsweise zufällig im Bereich von -0.7 bis 0.7 ausgewählt.
  • Zweck: Hilft Modellen, mit unterschiedlichen Wetterbedingungen und Kameraeinstellungen umzugehen. Ein rotes Verkehrsschild kann an einem sonnigen Tag beispielsweise sehr leuchtend wirken, bei Nebel jedoch matt und blass erscheinen.
  • Implementierung von Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

Helligkeitsanpassung (hsv_v)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0.4
  • Verwendung: Verändert die Helligkeit des Bildes. Der Hyperparameter hsv_v definiert die Stärke der Verschiebung. Die endgültige Anpassung wird zufällig zwischen -hsv_v und hsv_v gewählt. Bei hsv_v=0.4 wird die Intensität beispielsweise zufällig im Bereich von -0.4 bis 0.4 ausgewählt.
  • Zweck: Unverzichtbar für das Training von Modellen, die bei unterschiedlichen Lichtverhältnissen funktionieren müssen. Ein roter Apfel kann im Sonnenlicht beispielsweise hell, im Schatten jedoch deutlich dunkler aussehen.
  • Implementierung von Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

Geometrische Transformationen#

Drehung (degrees)#

  • Bereich: 0.0 bis 180
  • Standardwert: 0
  • Verwendung: Dreht Bilder zufällig innerhalb des angegebenen Bereichs. Der Hyperparameter degrees definiert den Drehwinkel. Die endgültige Anpassung wird zufällig zwischen -degrees und degrees gewählt. Bei degrees=10.0 wird die Drehung beispielsweise zufällig im Bereich von -10.0 bis 10.0 ausgewählt.
  • Zweck: Entscheidend für Anwendungen, in denen Objekte in unterschiedlichen Ausrichtungen erscheinen können. In Luftaufnahmen von Drohnen können Fahrzeuge beispielsweise in jede Richtung ausgerichtet sein, sodass Modelle Objekte unabhängig von ihrer Drehung erkennen müssen.
  • Implementierung von Ultralytics: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

Verschiebung (translate)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0.1
  • Verwendung: Verschiebt Bilder horizontal und vertikal um einen zufälligen Bruchteil ihrer Größe. Der Hyperparameter translate definiert die Stärke der Verschiebung. Die endgültige Anpassung wird für jede Achse separat zufällig innerhalb des Bereichs von -translate bis translate gewählt. Bei translate=0.5 wird die Verschiebung auf der x-Achse beispielsweise zufällig zwischen -0.5 und 0.5 ausgewählt; für die y-Achse wird unabhängig davon ein weiterer Zufallswert aus demselben Bereich gewählt.
  • Zweck: Hilft Modellen, teilweise sichtbare Objekte zu erkennen, und verbessert ihre Robustheit gegenüber der Objektposition. Bei Anwendungen zur Bewertung von Fahrzeugschäden können Fahrzeugteile beispielsweise abhängig von Position und Abstand der fotografierenden Person vollständig oder teilweise im Bild erscheinen. Die Verschiebungsaugmentation lehrt das Modell, diese Merkmale unabhängig von ihrer Vollständigkeit oder Position zu erkennen.
  • Implementierung von Ultralytics: RandomPerspective
  • Hinweis: Der Einfachheit halber sind die unten angewendeten Verschiebungen für die Achsen x und y jedes Mal gleich. Die Werte -1.0 und 1.0 werden nicht gezeigt, da sie das Bild vollständig aus dem Bildausschnitt verschieben würden.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

Skalierung (scale)#

  • Bereich: 0.0 bis 1.0 als Gleitkommazahl oder ein explizites (min, max)-Tupel
  • Standardwert: 0.5
  • Verwendung: Ändert die Bildgröße um einen zufälligen Faktor innerhalb des angegebenen Bereichs. Als Gleitkommazahl definiert der Hyperparameter scale den Skalierungsfaktor. Der endgültige Faktor wird zufällig zwischen 1-scale und 1+scale gewählt. Bei scale=0.5 wird die Skalierung beispielsweise zufällig im Bereich von 0.5 bis 1.5 ausgewählt. Als Tupel legt scale diesen Bereich direkt fest, sodass scale=(0.5, 2.0) den Faktor zwischen 0.5 und 2.0 abtastet.
  • Zweck: Ermöglicht es Modellen, mit Objekten in unterschiedlichen Entfernungen und Größen umzugehen. Beim autonomen Fahren können Fahrzeuge beispielsweise in verschiedenen Entfernungen von der Kamera erscheinen, sodass das Modell sie unabhängig von ihrer Größe erkennen muss.
  • Implementierung von Ultralytics: RandomPerspective
  • Hinweis:
    • Der Wert -1.0 wird nicht gezeigt, da das Bild dadurch verschwinden würde, während 1.0 lediglich einen 2-fachen Zoom bewirkt.
    • Die in der folgenden Tabelle angezeigten Werte sind die tatsächlich realisierten Skalierungsdifferenzen, nicht die Werte, die du an den Hyperparameter scale übergibst.
    • Die Gleitkommaform wird auf den Bereich 0.0 bis 1.0 validiert. Ein Wert außerhalb dieses Bereichs löst einen ValueError aus. Um einen Faktor über einen 2-fachen Zoom hinaus abzutasten, übergib stattdessen die Tupelform (min, max).
    • Die Tupelform gilt nur für geometrische Aufgaben. Beim Klassifikationstraining leitet sich der eigene Zuschneidebereich aus der Gleitkommazahl (1.0 - scale bis 1.0) ab. Die Übergabe eines Tupels löst daher einen TypeError aus.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

Scherung (shear)#

  • Bereich: -180 bis +180
  • Standardwert: 0
  • Verwendung: Führt eine geometrische Transformation ein, die das Bild entlang der x- und y-Achse schert. Dadurch werden Bildteile effektiv in eine Richtung verschoben, während parallele Linien erhalten bleiben. Der Hyperparameter shear definiert den Scherungswinkel. Die endgültige Anpassung wird zufällig zwischen -shear und shear gewählt. Bei shear=10.0 wird die Scherung auf der x-Achse beispielsweise zufällig zwischen -10 und 10 ausgewählt; für die y-Achse wird unabhängig davon ein weiterer Zufallswert aus demselben Bereich gewählt.
  • Zweck: Hilft Modellen, auf Variationen der Blickwinkel zu generalisieren, die durch leichte Neigungen oder schräge Perspektiven entstehen. Bei der Verkehrsüberwachung können Objekte wie Autos und Verkehrsschilder aufgrund nicht senkrechter Kamerapositionen beispielsweise schräg erscheinen. Die Scherungsaugmentation stellt sicher, dass das Modell Objekte trotz solcher Verzerrungen erkennt.
  • Implementierung von Ultralytics: RandomPerspective
  • Hinweis:
    • shear-Werte können das Bild schnell verzerren. Es wird daher empfohlen, mit kleinen Werten zu beginnen und sie schrittweise zu erhöhen.
    • Im Gegensatz zu Perspektivtransformationen führt die Scherung keine Tiefe oder Fluchtpunkte ein. Stattdessen verzerrt sie die Form von Objekten, indem sie deren Winkel verändert und dabei gegenüberliegende Seiten parallel hält.
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

Perspektive (perspective)#

  • Bereich: 0.0 bis 0.001
  • Standardwert: 0
  • Verwendung: Wendet eine vollständige Perspektivtransformation entlang der x- und y-Achse an und simuliert, wie Objekte aus unterschiedlichen Entfernungen oder Blickwinkeln erscheinen. Der Hyperparameter perspective definiert die Stärke der Perspektive. Die endgültige Anpassung wird zufällig zwischen -perspective und perspective gewählt. Bei perspective=0.001 wird die Perspektive auf der x-Achse beispielsweise zufällig zwischen -0.001 und 0.001 ausgewählt; für die y-Achse wird unabhängig davon ein weiterer Zufallswert aus demselben Bereich gewählt.
  • Zweck: Perspektivaugmentation ist entscheidend für den Umgang mit extremen Änderungen des Blickwinkels, insbesondere wenn Objekte aufgrund von Perspektivverschiebungen verkürzt oder verzerrt erscheinen. Bei der objektbasierten Erkennung mit Drohnen können Gebäude, Straßen und Fahrzeuge abhängig von Neigung und Höhe der Drohne gestreckt oder gestaucht erscheinen. Durch Perspektivtransformationen lernen Modelle, Objekte trotz dieser perspektivbedingten Verzerrungen zu erkennen, und werden dadurch in realen Einsätzen robuster.
  • Implementierung von Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

Vertikales Spiegeln (flipud)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0
  • Verwendung: Spiegelt das Bild vertikal, indem es entlang der y-Achse invertiert wird. Diese Transformation stellt das gesamte Bild auf den Kopf, erhält jedoch alle räumlichen Beziehungen zwischen den Objekten. Der Hyperparameter flipud definiert die Wahrscheinlichkeit für die Anwendung der Transformation. Der Wert flipud=1.0 stellt sicher, dass alle Bilder gespiegelt werden, während der Wert flipud=0.0 die Transformation vollständig deaktiviert. Bei flipud=0.5 wird jedes Bild beispielsweise mit einer Wahrscheinlichkeit von 50 % auf den Kopf gestellt.
  • Zweck: Nützlich für Szenarien, in denen Objekte auf dem Kopf stehend erscheinen können. In robotischen Bildverarbeitungssystemen können Objekte auf Förderbändern oder Roboterarmen beispielsweise aufgenommen und in verschiedenen Ausrichtungen abgelegt werden. Vertikales Spiegeln hilft dem Modell, Objekte unabhängig von ihrer Ausrichtung von oben nach unten zu erkennen.
  • Implementierung von Ultralytics: RandomFlip
flipud ausflipud an
Original image without augmentationVertical flip augmentation enabled

Horizontales Spiegeln (fliplr)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0.5
  • Verwendung: Spiegelt das Bild horizontal, indem es entlang der x-Achse gespiegelt wird. Diese Transformation vertauscht die linke und rechte Seite, bewahrt dabei jedoch die räumliche Konsistenz. Das hilft dem Modell, auf Objekte in gespiegelten Ausrichtungen zu generalisieren. Der Hyperparameter fliplr definiert die Wahrscheinlichkeit für die Anwendung der Transformation. Der Wert fliplr=1.0 stellt sicher, dass alle Bilder gespiegelt werden, während der Wert fliplr=0.0 die Transformation vollständig deaktiviert. Bei fliplr=0.5 wird jedes Bild beispielsweise mit einer Wahrscheinlichkeit von 50 % von links nach rechts gespiegelt.
  • Zweck: Horizontales Spiegeln wird häufig bei Objekterkennung, Posenschätzung und Gesichtserkennung eingesetzt, um die Robustheit gegenüber Links-rechts-Variationen zu verbessern. Beim autonomen Fahren können Fahrzeuge und Fußgänger beispielsweise auf beiden Straßenseiten erscheinen. Horizontales Spiegeln hilft dem Modell, sie in beiden Ausrichtungen gleich gut zu erkennen.
  • Implementierung von Ultralytics: RandomFlip
fliplr ausfliplr an
Original image without augmentationHorizontal flip augmentation enabled

Vertauschen der BGR-Kanäle (bgr)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0
  • Verwendung: Vertauscht die Farbkanäle eines Bildes von RGB zu BGR und ändert dadurch die Reihenfolge der Farbdarstellung. Der Hyperparameter bgr definiert die Wahrscheinlichkeit für die Anwendung der Transformation. bgr=1.0 stellt sicher, dass bei allen Bildern die Kanäle vertauscht werden, während bgr=0.0 die Transformation deaktiviert. Bei bgr=0.5 wird jedes Bild beispielsweise mit einer Wahrscheinlichkeit von 50 % von RGB in BGR umgewandelt.
  • Zweck: Erhöht die Robustheit gegenüber unterschiedlichen Anordnungen der Farbkanäle. Das ist beispielsweise beim Training von Modellen hilfreich, die mit verschiedenen Kamerasystemen und Bildverarbeitungsbibliotheken funktionieren müssen, in denen RGB- und BGR-Formate uneinheitlich verwendet werden, oder beim Einsatz in Umgebungen, in denen sich das Eingabefarbformat von den Trainingsdaten unterscheiden kann.
  • Implementierung von Ultralytics: Format
bgr ausbgr an
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 1
  • Verwendung: Kombiniert vier Trainingsbilder zu einem Bild. Der Hyperparameter mosaic definiert die Wahrscheinlichkeit für die Anwendung der Transformation. mosaic=1.0 stellt sicher, dass alle Bilder kombiniert werden, während mosaic=0.0 die Transformation deaktiviert. Bei mosaic=0.5 wird jedes Bild beispielsweise mit einer Wahrscheinlichkeit von 50 % mit drei anderen Bildern kombiniert.
  • Zweck: Besonders effektiv zur Verbesserung der Erkennung kleiner Objekte und des Kontextverständnisses. In Projekten zum Schutz von Wildtieren können Tiere beispielsweise in unterschiedlichen Entfernungen und Größen erscheinen. Mosaic hilft dem Modell, dieselbe Art bei verschiedenen Größen, teilweisen Verdeckungen und in unterschiedlichen Umgebungskontexten zu erkennen, indem aus begrenzten Daten künstlich vielfältige Trainingsbeispiele erzeugt werden.
  • Implementierung von Ultralytics: Mosaic
  • Hinweis:
    • Auch wenn die Augmentation mosaic das Modell robuster macht, kann sie den Trainingsprozess erschweren.
    • Die Augmentation mosaic kann gegen Ende des Trainings deaktiviert werden, indem du close_mosaic auf die Anzahl der Epochen vor dem Abschluss setzt, ab der sie ausgeschaltet werden soll. Wenn epochs beispielsweise auf 200 und close_mosaic auf 20 gesetzt wird, wird die Augmentation mosaic nach 180 Epochen deaktiviert. Wenn close_mosaic auf 0 gesetzt wird, bleibt die Augmentation mosaic während des gesamten Trainings aktiviert.
    • Das Schließen von Mosaic deaktiviert in derselben Epoche auch copy_paste, mixup und cutmix. Alle vier werden gemeinsam ausgeschaltet. Die letzten Epochen werden daher ohne sie trainiert, während alle anderen Augmentationen – die geometrischen Transformationen, HSV, Spiegelungen und Albumentations – weiterlaufen. Beachte, dass copy_paste im standardmäßigen Modus flip innerhalb eines einzelnen Bildes arbeitet, anstatt mehrere Bilder zu kombinieren.
    • Das Zentrum des erzeugten Mosaiks wird anhand von Zufallswerten bestimmt und kann innerhalb oder außerhalb des Bildes liegen.
    • Die aktuelle Implementierung der Augmentation mosaic kombiniert das aktuelle Bild mit drei weiteren Bildern. Diese stammen aus einem Puffer kürzlich geladener Bilder oder bei cache='ram' aus dem gesamten Datensatz. In beiden Fällen werden sie mit Zurücklegen gezogen, sodass dasselbe Bild mehr als einmal in einem einzelnen Mosaik erscheinen kann.
mosaic ausmosaic an
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0
  • Verwendung: Mischt zwei Bilder und ihre Beschriftungen mit der angegebenen Wahrscheinlichkeit. Der Hyperparameter mixup definiert die Wahrscheinlichkeit für die Anwendung der Transformation. mixup=1.0 stellt sicher, dass alle Bilder gemischt werden, während mixup=0.0 die Transformation deaktiviert. Bei mixup=0.5 wird jedes Bild beispielsweise mit einer Wahrscheinlichkeit von 50 % mit einem anderen Bild gemischt.
  • Zweck: Verbessert die Robustheit des Modells und reduziert Overfitting. In Systemen zur Erkennung von Einzelhandelsprodukten hilft Mixup dem Modell beispielsweise, robustere Merkmale zu erlernen, indem Bilder verschiedener Produkte gemischt werden. Dadurch lernt es, Artikel auch dann zu erkennen, wenn sie teilweise sichtbar oder durch andere Produkte in vollen Verkaufsregalen verdeckt sind.
  • Implementierung von Ultralytics: Mixup
  • Hinweis:
    • Das Verhältnis mixup ist ein Zufallswert aus einer Beta-Verteilung np.random.beta(32.0, 32.0). Das bedeutet, dass jedes Bild ungefähr 50 % beiträgt, mit geringfügigen Abweichungen.
Erstes Bild, mixup ausZweites Bild, mixup ausmixup an
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0
  • Verwendung: Schneidet mit der angegebenen Wahrscheinlichkeit einen rechteckigen Bereich aus einem Bild aus und fügt ihn in ein anderes Bild ein. Der Hyperparameter cutmix definiert die Wahrscheinlichkeit für die Anwendung der Transformation. cutmix=1.0 stellt sicher, dass diese Transformation auf alle Bilder angewendet wird, während cutmix=0.0 sie vollständig deaktiviert. Bei cutmix=0.5 wird bei jedem Bild beispielsweise mit einer Wahrscheinlichkeit von 50 % ein Bereich durch einen Ausschnitt aus einem anderen Bild ersetzt.
  • Zweck: Verbessert die Modellleistung, indem realistische Verdeckungsszenarien erzeugt werden und die lokalen Merkmale erhalten bleiben. In Systemen für autonomes Fahren hilft CutMix dem Modell beispielsweise, Fahrzeuge oder Fußgänger auch dann zu erkennen, wenn sie teilweise durch andere Objekte verdeckt sind. Dadurch verbessert sich die Erkennungsgenauigkeit in komplexen realen Umgebungen mit sich überlagernden Objekten.
  • Implementierung von Ultralytics: CutMix
  • Hinweis:
    • Größe und Position des ausgeschnittenen Bereichs werden bei jeder Anwendung zufällig bestimmt.
    • Im Gegensatz zu Mixup, das Pixelwerte global mischt, behält cutmix innerhalb der ausgeschnittenen Bereiche die ursprünglichen Pixelintensitäten bei und bewahrt dadurch lokale Merkmale.
    • Ein Bereich wird nur dann in das Zielbild eingefügt, wenn er keine vorhandene Bounding Box überlappt. Außerdem bleiben nur die Bounding Boxes erhalten, die innerhalb des eingefügten Bereichs ausreichend viel ihrer ursprünglichen Fläche behalten.
    • Dieser Mindestschwellwert für die Fläche der Bounding Box kann in der aktuellen Implementierung nicht geändert werden. Er beträgt 0.1 (10 %) für Beschriftungen zur Objekterkennung und 0.01 (1 %), sobald die Beschriftungen Segmente enthalten.
Erstes Bild, cutmix ausZweites Bild, cutmix auscutmix an
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Copy-Paste-Augmentationen#

Copy-Paste (copy_paste)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0
  • Verwendung: Erfordert Polygonbeschriftungen und gilt daher für Segmentierungs- und OBB-Aufgaben. Diese Augmentation kopiert Objekte innerhalb eines Bildes oder zwischen Bildern und wird über copy_paste_mode gesteuert. Im Modus flip gibt copy_paste den Anteil der kopierbaren Objekte an: Ein Bild mit sechs geeigneten Objekten erhält bei copy_paste=0.5 drei Kopien. Im Modus mixup steuert derselbe Wert zusätzlich die Wahrscheinlichkeit, dass Copy-Paste ausgeführt wird. copy_paste=0.0 deaktiviert die Transformation.
  • Zweck: Besonders nützlich für Aufgaben der Instanzsegmentierung und seltene Objektklassen. Bei der Erkennung industrieller Defekte, bei der bestimmte Defekttypen nur selten auftreten, kann Copy-Paste-Augmentation das Vorkommen dieser seltenen Defekte künstlich erhöhen, indem sie von einem Bild in ein anderes kopiert werden. So lernt das Modell diese unterrepräsentierten Fälle besser, ohne dass zusätzliche fehlerhafte Beispiele benötigt werden.
  • Implementierung von Ultralytics: CopyPaste
  • Hinweis:
    • Wie im folgenden Video gezeigt, kann die Augmentierung copy_paste verwendet werden, um Objekte aus einem Bild in ein anderes zu kopieren.
    • Sobald ein Objekt zum Kopieren ausgewählt wurde, wird seine IoA mit allen Objekten berechnet, die bereits im Zielbild vorhanden sind, unabhängig von copy_paste_mode. Das Objekt wird nur eingefügt, wenn alle IoA-Werte unter 0.3 (30 %) liegen; sobald ein IoA-Wert 0.3 oder höher ist, wird es nicht eingefügt.
    • Der IoA-Schwellenwert kann in der aktuellen Implementierung nicht geändert werden und ist standardmäßig auf 0.3 gesetzt.
copy_paste auscopy_paste aktiviert mit copy_paste_mode=flipDen Prozess copy_paste visualisieren
Original image without augmentationCopy-paste augmentation enabled

Copy-Paste-Modus (copy_paste_mode)#

  • Optionen: 'flip', 'mixup'
  • Standardwert: 'flip'
  • Verwendung: Legt die Methode für die Copy-Paste-Augmentierung fest. Bei 'flip' stammen die Objekte aus demselben Bild, während 'mixup' das Kopieren von Objekten aus verschiedenen Bildern ermöglicht.
  • Zweck: Ermöglicht Flexibilität bei der Integration kopierter Objekte in Zielbilder.
  • Implementierung von Ultralytics: CopyPaste
  • Hinweis:
    • Das IoA-Prinzip ist bei beiden Optionen von copy_paste_mode gleich, aber die Art des Kopierens der Objekte unterscheidet sich.
    • Je nach Bildgröße werden Objekte manchmal teilweise oder vollständig außerhalb des Bildausschnitts kopiert.
    • Je nach Qualität der Polygonannotationen können kopierte Objekte im Vergleich zu den Originalen geringfügige Formabweichungen aufweisen.
ReferenzbildAusgewähltes Bild für copy_pastecopy_paste aktiviert mit copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Klassifikationsspezifische Augmentierungen#

Auto Augment (auto_augment)#

  • Optionen: 'randaugment', 'autoaugment', 'augmix', None
  • Standardwert: 'randaugment'
  • Verwendung: Wendet automatisierte Augmentierungsrichtlinien für die Klassifikation an. Die Option 'randaugment' verwendet RandAugment, 'autoaugment' verwendet AutoAugment und 'augmix' verwendet AugMix. Wenn None gesetzt wird, werden automatisierte Augmentierungen deaktiviert.
  • Zweck: Optimiert Augmentierungsstrategien für Klassifikationsaufgaben automatisch. Die Unterschiede sind folgende:
    • AutoAugment: Dieser Modus wendet vordefinierte Augmentierungsrichtlinien an, die anhand von Datensätzen wie ImageNet, CIFAR10 und SVHN erlernt wurden. Du kannst diese vorhandenen Richtlinien auswählen, aber innerhalb von Torchvision keine neuen trainieren. Um optimale Augmentierungsstrategien für bestimmte Datensätze zu ermitteln, wären externe Bibliotheken oder eigene Implementierungen erforderlich. Siehe das AutoAugment-Paper.
    • RandAugment: Wendet eine zufällige Auswahl von Transformationen mit einheitlicher Stärke an. Dieser Ansatz verringert den Bedarf an einer umfangreichen Suchphase und ist dadurch bei weiterhin verbesserter Modellrobustheit recheneffizienter. Siehe das RandAugment-Paper.
    • AugMix: AugMix ist eine Methode zur Datenaugmentierung, die die Modellrobustheit verbessert, indem sie durch zufällige Kombinationen einfacher Transformationen vielfältige Bildvarianten erzeugt. Siehe das AugMix-Paper.
  • Implementierung von Ultralytics: classify_augmentations()
  • Hinweis:
    • Im Wesentlichen besteht der Hauptunterschied zwischen den drei Methoden darin, wie die Augmentierungsrichtlinien definiert und angewendet werden.
    • Weitere Informationen findest du in diesem Artikel, der die drei Methoden ausführlich vergleicht.

Random Erasing (erasing)#

  • Bereich: 0.0 bis 1.0
  • Standardwert: 0.4
  • Verwendung: Löscht während des Klassifikationstrainings zufällig Teile des Bildes. Der Hyperparameter erasing legt die Wahrscheinlichkeit für die Anwendung der Transformation fest; bei erasing=1.0 wird in jedem Bild eine Region gelöscht, während erasing=0.0 die Transformation deaktiviert. Bei erasing=0.5 besteht beispielsweise für jedes Bild eine Wahrscheinlichkeit von 50 %, dass ein Teil gelöscht wird.
  • Zweck: Hilft Modellen, robuste Merkmale zu erlernen, und verhindert eine zu starke Abhängigkeit von bestimmten Bildregionen. Bei Gesichtserkennungssystemen hilft Random Erasing beispielsweise, Modelle robuster gegenüber teilweisen Verdeckungen wie Sonnenbrillen, Gesichtsmasken oder anderen Objekten zu machen, die Gesichtszüge teilweise verdecken können. Dies verbessert die Leistung unter realen Bedingungen, da das Modell gezwungen wird, Personen anhand mehrerer Gesichtsmerkmale zu identifizieren, anstatt sich ausschließlich auf markante Merkmale zu stützen, die verdeckt sein könnten.
  • Implementierung von Ultralytics: classify_augmentations()
  • Hinweis:
    • Die Augmentierung erasing verfügt über die Hyperparameter scale, ratio und value, die in der aktuellen Implementierung nicht geändert werden können. Ihre Standardwerte sind laut der PyTorch-Dokumentation jeweils (0.02, 0.33), (0.3, 3.3) und 0.
erasing auserasing aktiviert (Beispiel 1)erasing aktiviert (Beispiel 2)erasing aktiviert (Beispiel 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Erweiterte Augmentierungsfunktionen#

Benutzerdefinierte Albumentations-Transformationen (augmentations)#

  • Typ: list der Albumentations-Transformationen
  • Standardwert: None
  • Verwendung: Ermöglicht die Bereitstellung eigener Albumentations-Transformationen für die Datenaugmentierung über die Python API. Dieser Parameter akzeptiert eine Liste von Albumentations-Transformationsobjekten, die während des Trainings anstelle der standardmäßigen Albumentations-Transformationen angewendet werden.
  • Zweck: Ermöglicht eine detaillierte Steuerung der Datenaugmentierungsstrategien durch Nutzung der umfangreichen Bibliothek von Albumentations-Transformationen. Dies ist besonders nützlich, wenn du spezielle Augmentierungen benötigst, die über die integrierten YOLO-Optionen hinausgehen, etwa elastische Verformungen und Gitterverzerrungen für medizinische Bildgebung, auf Luft- und Satellitenaufnahmen abgestimmte Transformationen, Rausch- und Helligkeitsänderungen zur Simulation von schlechten Lichtverhältnissen oder defektähnliche Texturvarianten für die industrielle Inspektion.
  • Implementierung von Ultralytics: Albumentations
  • Hinweis:
    • Zum Erstellen der Transformationsobjekte ist die Python API erforderlich. Ultralytics serialisiert sie beim Speichern eines Checkpoints mit A.to_dict(), sodass eine bereits serialisierte Liste über eine YAML-Konfigurationsdatei oder die CLI hinweg verwendet werden kann und resume sie wiederherstellen kann.
    • Benutzerdefinierte Transformationen ersetzen den standardmäßigen Satz von Albumentations vollständig. Jede an anderer Stelle auf dieser Seite konfigurierte Augmentierung – mosaic, hsv_h, degrees und alle weiteren – bleibt aktiv und wird unabhängig angewendet.
    • Räumliche Transformationen, die die Bildgeometrie verändern, einschließlich solcher, die in A.OneOf oder A.Compose verschachtelt sind, bewegen Bounding Boxes, Polygone, Keypoints sowie Tiefen- oder semantische Masken zusammen mit dem Bild; A.RandomGridShuffle kann die Topologie von Polygonen oder Keypoints nicht bewahren und gibt bei Segmentierungs-, Pose- und OBB-Proben einen Fehler aus.
    • Albumentations bietet mehr als 70 Transformationen; die Albumentations-Dokumentation enthält eine vollständige Liste. Das Hinzufügen vieler oder rechenintensiver Transformationen verlangsamt das Training. Beginne daher mit einer kleinen Auswahl und beobachte die Dauer der Epochen.
    • Gilt für die Aufgaben detect, segment, semantic, depth, pose und obb. Die Klassifikation ist ausgenommen, da sie eine separate Augmentierungspipeline verwendet.

Die folgenden Beispiele erfordern Albumentations 1.4.22 oder neuer und daher Python 3.9 oder neuer.

Beispiel für benutzerdefinierte Albumentations-Transformationen
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
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),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

FAQ#

  • Die Auswahl der richtigen Augmentierungen hängt von deinem konkreten Anwendungsfall und Datensatz ab. Hier sind einige allgemeine Richtlinien, die dir bei der Entscheidung helfen:

    • In den meisten Fällen sind geringfügige Variationen bei Farbe und Helligkeit vorteilhaft. Die Standardwerte für hsv_h, hsv_s und hsv_v sind ein guter Ausgangspunkt.
    • Wenn die Perspektive der Kamera gleichbleibt und sich nach der Bereitstellung des Modells nicht ändern wird, kannst du wahrscheinlich auf geometrische Transformationen wie rotation, translation, scale, shear oder perspective verzichten. Wenn der Kamerawinkel jedoch variieren kann und du ein robusteres Modell benötigst, solltest du diese Augmentierungen beibehalten.
    • Verwende die Augmentierung mosaic nur, wenn teilweise verdeckte Objekte oder mehrere Objekte pro Bild akzeptabel sind und den Wert des Labels nicht verändern. Alternativ kannst du mosaic aktiviert lassen, aber den Wert von close_mosaic erhöhen, um die Augmentierung früher im Trainingsprozess zu deaktivieren.

    Kurz gesagt: Halte es einfach. Beginne mit einer kleinen Auswahl an Augmentierungen und füge bei Bedarf nach und nach weitere hinzu. Ziel ist es, die Verallgemeinerungsfähigkeit und Robustheit des Modells zu verbessern, nicht den Trainingsprozess unnötig zu verkomplizieren. Stelle außerdem sicher, dass die angewendeten Augmentierungen dieselbe Datenverteilung widerspiegeln, der dein Modell im Produktivbetrieb begegnen wird.

  • Wenn das Paket albumentations installiert ist, wendet Ultralytics damit automatisch eine Reihe zusätzlicher Bildaugmentierungen an. Diese Augmentierungen werden intern verarbeitet und erfordern keine zusätzliche Konfiguration.

    Die vollständige Liste der angewendeten Transformationen findest du in unserer technischen Dokumentation sowie in unserem Leitfaden zur Albumentations-Integration. Beachte, dass nur Augmentierungen mit einer Wahrscheinlichkeit p größer als 0 aktiv sind. Sie werden absichtlich mit geringer Häufigkeit angewendet, um visuelle Artefakte aus der realen Welt wie Unschärfe- oder Graustufeneffekte nachzuahmen.

    Du kannst über die Python API auch eigene Albumentations-Transformationen bereitstellen. Weitere Informationen findest du im Abschnitt Erweiterte Augmentierungsfunktionen.

  • Prüfe, ob das Paket albumentations installiert ist. Falls nicht, installiere es:

    pip install albumentations

    Nach der Installation sollte das Paket automatisch erkannt und von Ultralytics verwendet werden.

  • Du kannst Augmentierungen anpassen, indem du eine eigene Datensatzklasse und einen eigenen Trainer erstellst. Beispielsweise kannst du die standardmäßigen Ultralytics-Augmentierungen für die Klassifikation durch PyTorchs torchvision.transforms.Resize oder andere Transformationen ersetzen. Einzelheiten zur Implementierung findest du im Beispiel für benutzerdefiniertes Training in der Klassifikationsdokumentation.

Kommentare