Datenaugmentierung mit Ultralytics YOLO

YOLO data augmentation examples showing original and augmented images for training

Einführung

Datenaugmentierung ist eine entscheidende Technik im Computer Vision-Bereich, die dein Trainings-Dataset künstlich erweitert, indem verschiedene Transformationen auf vorhandene Bilder angewendet werden. Beim Training von Deep Learning-Modellen wie Ultralytics YOLO hilft die Datenaugmentierung, die Robustheit des Modells zu verbessern, Overfitting zu reduzieren und die Generalisierung auf reale Szenarien zu optimieren.



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

Warum Datenaugmentierung wichtig ist

Datenaugmentierung erfüllt mehrere kritische Zwecke beim Training von Computer Vision-Modellen:

  • Erweitertes Dataset: Durch das Erstellen von Variationen vorhandener Bilder kannst du die Größe deines Trainings-Datasets effektiv steigern, ohne neue Daten sammeln zu müssen.
  • Verbesserte Generalisierung: Modelle lernen, Objekte unter verschiedenen Bedingungen zu erkennen, was sie in realen Anwendungen robuster macht.
  • Reduziertes Overfitting: Durch das Einbringen von Variabilität in die Trainingsdaten ist es weniger wahrscheinlich, dass Modelle spezifische Bildmerkmale auswendig lernen.
  • Höhere Leistung: Modelle, die mit geeigneter Augmentierung trainiert wurden, erreichen typischerweise eine bessere Genauigkeit bei Validierungs- und Test-Sets.

Die Implementierung von Ultralytics YOLO bietet eine umfassende Suite an Augmentierungstechniken, von denen jede spezifische Zwecke erfüllt und auf unterschiedliche Weise zur Modellleistung beiträgt. Dieser Leitfaden untersucht jeden Augmentierungsparameter im Detail und hilft dir zu verstehen, wann und wie du sie in deinen Projekten effektiv einsetzt.

Beispielkonfigurationen

Du kannst jeden Parameter mithilfe der Python API, dem Command Line Interface (CLI) oder einer Konfigurationsdatei anpassen. Im Folgenden findest du Beispiele, wie du die Datenaugmentierung für jede Methode einrichtest.

Konfigurationsbeispiele
import albumentations as A

from ultralytics import YOLO

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

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

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.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="coco.yaml", epochs=100, augmentations=custom_transforms)

Verwendung einer Konfigurationsdatei

Du kannst alle Trainingsparameter, einschließlich Augmentierungen, in einer YAML-Konfigurationsdatei festlegen (z. B. train_custom.yaml). Der mode-Parameter ist nur bei der Verwendung des CLI erforderlich. Diese neue YAML-Datei überschreibt dann die Standarddatei, die sich im ultralytics-Paket befindet.

# 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 anschließend das Training 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")

Farbraum-Augmentierungen

Farbton-Anpassung (hsv_h)

  • Bereich: 0.0 - 1.0
  • Standard: 0.015
  • Verwendung: Verschiebt die Bildfarben, während ihre Beziehungen erhalten bleiben. Der Hyperparameter hsv_h definiert das Ausmaß der Verschiebung, wobei die endgültige Anpassung zufällig zwischen -hsv_h und hsv_h gewählt wird. Zum Beispiel wird bei hsv_h=0.3 die Verschiebung zufällig innerhalb von -0.3 bis 0.3 ausgewählt. Bei Werten über 0.5 umschließt die Farbtonverschiebung das Farbrad, weshalb die Augmentierungen zwischen 0.5 und -0.5 gleich aussehen.
  • Zweck: Besonders nützlich für Außenaufnahmen, bei denen Lichtverhältnisse das Erscheinungsbild von Objekten drastisch beeinflussen können. Eine Banane könnte zum Beispiel bei hellem Sonnenlicht gelber aussehen, in Innenräumen jedoch grünlicher.
  • Ultralytics-Implementierung: RandomHSV
-0.5-0.250.00.250.5
Farbtonverschiebung -0.5 AugmentierungFarbtonverschiebung -0.25 AugmentierungOriginalbild ohne AugmentierungFarbtonverschiebung 0.25 AugmentierungFarbtonverschiebung -0.5 Augmentierung

Sättigungsanpassung (hsv_s)

  • Bereich: 0.0 - 1.0
  • Standard: 0.7
  • Verwendung: Ändert die Intensität der Farben im Bild. Der Hyperparameter hsv_s definiert das Ausmaß der Verschiebung, wobei die endgültige Anpassung zufällig zwischen -hsv_s und hsv_s gewählt wird. Zum Beispiel wird bei hsv_s=0.7 die Intensität zufällig innerhalb von -0.7 bis 0.7 ausgewählt.
  • Zweck: Hilft Modellen dabei, mit unterschiedlichen Wetterbedingungen und Kameraeinstellungen umzugehen. Ein rotes Verkehrsschild könnte an einem sonnigen Tag sehr lebendig erscheinen, bei nebligen Bedingungen jedoch stumpf und verblasst wirken.
  • Ultralytics-Implementierung: RandomHSV
-1.0-0.50.00.51.0
Sättigung -1.0 Graustufen-AugmentierungSättigung -0.5 AugmentierungOriginalbild ohne AugmentierungSättigung 0.5 AugmentierungSättigung 1.0 lebendige Augmentierung

Helligkeitsanpassung (hsv_v)

  • Bereich: 0.0 - 1.0
  • Standard: 0.4
  • Verwendung: Ändert die Helligkeit des Bildes. Der Hyperparameter hsv_v definiert das Ausmaß der Verschiebung, wobei die endgültige Anpassung zufällig zwischen -hsv_v und hsv_v gewählt wird. Zum Beispiel wird bei hsv_v=0.4 die Intensität zufällig innerhalb von -0.4 bis 0.4 ausgewählt.
  • Zweck: Wesentlich für das Training von Modellen, die bei verschiedenen Lichtverhältnissen funktionieren müssen. Ein roter Apfel könnte im Sonnenlicht hell aussehen, im Schatten jedoch deutlich dunkler.
  • Ultralytics-Implementierung: RandomHSV
-1.0-0.50.00.51.0
Helligkeit -1.0 dunkle AugmentierungHelligkeit -0.5 AugmentierungOriginalbild ohne AugmentierungHelligkeit 0.5 AugmentierungHelligkeit 1.0 helle Augmentierung

Geometrische Transformationen

Rotation (degrees)

  • Bereich: 0.0 bis 180
  • Standard: 0
  • Verwendung: Rotiert Bilder zufällig innerhalb des angegebenen Bereichs. Der Hyperparameter degrees definiert den Rotationswinkel, wobei die endgültige Anpassung zufällig zwischen -degrees und degrees gewählt wird. Zum Beispiel wird bei degrees=10.0 die Rotation zufällig innerhalb von -10.0 bis 10.0 ausgewählt.
  • Zweck: Entscheidend für Anwendungen, bei denen Objekte in verschiedenen Ausrichtungen erscheinen können. In Drohnenaufnahmen können Fahrzeuge beispielsweise in jede Richtung ausgerichtet sein, was erfordert, dass Modelle Objekte unabhängig von ihrer Rotation erkennen.
  • Ultralytics-Implementierung: RandomPerspective
-180-900.090180
Rotation -180 Grad AugmentierungRotation -90 Grad AugmentierungOriginalbild ohne AugmentierungRotation 90 Grad AugmentierungRotation 180 Grad Augmentierung

Translation (translate)

  • Bereich: 0.0 - 1.0
  • Standard: 0.1
  • Verwendung: Verschiebt Bilder horizontal und vertikal um einen zufälligen Bruchteil der Bildgröße. Der Hyperparameter translate definiert das Ausmaß der Verschiebung, wobei die endgültige Anpassung zweimal zufällig (einmal für jede Achse) innerhalb des Bereichs -translate bis translate gewählt wird. Zum Beispiel wird bei translate=0.5 die Translation zufällig innerhalb von -0.5 bis 0.5 auf der x-Achse ausgewählt, und ein weiterer unabhängiger Zufallswert wird innerhalb desselben Bereichs auf der y-Achse gewählt.
  • Zweck: Hilft Modellen dabei, teilweise sichtbare Objekte zu erkennen und verbessert die Robustheit gegenüber der Objektposition. Bei Anwendungen zur Bewertung von Fahrzeugschäden können Autoteile beispielsweise je nach Position und Entfernung des Fotografen vollständig oder teilweise im Bild erscheinen. Die Translations-Augmentierung lehrt das Modell, diese Merkmale unabhängig von ihrer Vollständigkeit oder Position zu erkennen.
  • Ultralytics-Implementierung: RandomPerspective
  • Note: For simplicity, the translations applied below are the same each time for both x and y axes. Values -1.0 and 1.0 are not shown as they would translate the image completely out of the frame.
-0.5-0.250.00.250.5
Translation -0.5 Verschiebung AugmentierungTranslation -0.25 Verschiebung AugmentierungOriginalbild ohne AugmentierungTranslation 0.25 Verschiebung AugmentierungTranslation 0.5 Verschiebung Augmentierung

Skalierung (scale)

  • Bereich: 0.0 - 1.0
  • Standard: 0.5
  • Verwendung: Ändert die Größe von Bildern um einen zufälligen Faktor innerhalb des angegebenen Bereichs. Der Hyperparameter scale definiert den Skalierungsfaktor, wobei die endgültige Anpassung zufällig zwischen 1-scale und 1+scale gewählt wird. Zum Beispiel wird bei scale=0.5 die Skalierung zufällig innerhalb von 0.5 bis 1.5 ausgewählt.
  • Zweck: Ermöglicht es Modellen, mit Objekten in unterschiedlichen Entfernungen und Größen umzugehen. Bei Anwendungen zum autonomen Fahren können Fahrzeuge beispielsweise in verschiedenen Abständen zur Kamera erscheinen, was vom Modell verlangt, sie unabhängig von ihrer Größe zu erkennen.
  • Ultralytics-Implementierung: RandomPerspective
  • Hinweis:
    • Der Wert -1.0 wird nicht gezeigt, da er das Bild verschwinden lassen würde, während 1.0 einfach zu einem 2-fachen Zoom führt.
    • Die in der Tabelle unten angezeigten Werte sind diejenigen, die über den Hyperparameter scale angewendet werden, nicht der endgültige Skalierungsfaktor.
    • Wenn scale größer als 1.0 ist, kann das Bild entweder sehr klein sein oder gespiegelt werden, da der Skalierungsfaktor zufällig zwischen 1-scale und 1+scale gewählt wird. Zum Beispiel wird bei scale=3.0 die Skalierung zufällig innerhalb von -2.0 bis 4.0 ausgewählt. Wenn ein negativer Wert gewählt wird, wird das Bild gespiegelt.
-0.5-0.250.00.250.5
Skalierung 0.5x Auszoomen AugmentierungSkalierung 0.75x Auszoomen AugmentierungOriginalbild ohne AugmentierungSkalierung 1.25x Einzoomen AugmentierungSkalierung 1.5x Einzoomen Augmentierung

Scherung (shear)

  • Bereich: -180 bis +180
  • Standard: 0
  • Verwendung: Führt eine geometrische Transformation ein, die das Bild entlang der x- und y-Achse verzerrt und dabei Bildteile in eine Richtung verschiebt, während parallele Linien beibehalten werden. Der Hyperparameter shear definiert den Scherungswinkel, wobei die endgültige Anpassung zufällig zwischen -shear und shear gewählt wird. Zum Beispiel wird bei shear=10.0 die Scherung zufällig innerhalb von -10 bis 10 auf der x-Achse ausgewählt, und ein weiterer unabhängiger Zufallswert wird innerhalb desselben Bereichs auf der y-Achse gewählt.
  • Zweck: Hilft Modellen bei der Generalisierung gegenüber Variationen in Blickwinkeln, die durch leichte Neigungen oder schräge Perspektiven verursacht werden. Bei der Verkehrsüberwachung können Objekte wie Autos oder Verkehrsschilder aufgrund nicht senkrechter Kameraausrichtungen schräg erscheinen. Die Anwendung der Scherungs-Augmentierung stellt sicher, dass das Modell lernt, Objekte trotz solcher verzerrten Darstellungen zu erkennen.
  • Ultralytics-Implementierung: RandomPerspective
  • Hinweis:
    • shear-Werte können das Bild schnell verzerren, daher wird empfohlen, mit kleinen Werten zu beginnen und diese schrittweise zu erhöhen.
    • Im Gegensatz zu Perspektivtransformationen führt die Scherung keine Tiefe oder Fluchtpunkte ein, sondern verzerrt stattdessen die Form von Objekten, indem ihre Winkel geändert werden, während gegenüberliegende Seiten parallel bleiben.
-10-50.0510
Scherung -10 Grad AugmentierungScherung -5 Grad AugmentierungOriginalbild ohne AugmentierungScherung 5 Grad AugmentierungScherung 10 Grad Augmentierung

Perspektive (perspective)

  • Bereich: 0.0 - 0.001
  • Standard: 0
  • Verwendung: Wendet eine vollständige Perspektivtransformation sowohl entlang der x-Achse als auch der y-Achse an, um zu simulieren, wie Objekte bei Betrachtung aus verschiedenen Tiefen oder Winkeln erscheinen. Der Hyperparameter perspective definiert die Stärke der Perspektivänderung, wobei die endgültige Anpassung zufällig zwischen -perspective und perspective gewählt wird. Bei perspective=0.001 wird die Perspektive beispielsweise zufällig innerhalb von -0.001 bis 0.001 auf der x-Achse gewählt, und ein weiterer unabhängiger Zufallswert wird im selben Bereich für die y-Achse ausgewählt.
  • Zweck: Die Perspektiven-Augmentierung ist entscheidend für die Bewältigung extremer Blickwinkeländerungen, insbesondere in Szenarien, in denen Objekte aufgrund von Perspektivverschiebungen verkürzt oder verzerrt erscheinen. Zum Beispiel können bei der drohnenbasierten Objekterkennung Gebäude, Straßen und Fahrzeuge je nach Neigung und Höhe der Drohne gestreckt oder gestaucht wirken. Durch die Anwendung von Perspektivtransformationen lernen Modelle, Objekte trotz dieser perspektivbedingten Verzerrungen zu erkennen, was ihre Robustheit bei realen Einsätzen verbessert.
  • Ultralytics-Implementierung: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginalbild ohne AugmentierungPerspective 0.0005 transformationPerspective 0.001 transformation

Vertikales Spiegeln (flipud)

  • Bereich: 0.0 - 1.0
  • Standard: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • Zweck: Nützlich für Szenarien, in denen Objekte auf dem Kopf stehen können. In Roboter-Sichtsystemen können Objekte auf Förderbändern oder von Roboterarmen beispielsweise in verschiedenen Ausrichtungen aufgenommen und abgelegt werden. Das vertikale Spiegeln hilft dem Modell, Objekte unabhängig von ihrer Ausrichtung (oben/unten) zu erkennen.
  • Ultralytics-Implementierung: RandomFlip
flipud ausflipud an
Original image without augmentationVertical flip augmentation enabled

Horizontales Spiegeln (fliplr)

  • Bereich: 0.0 - 1.0
  • Standard: 0.5
  • Verwendung: Führt ein horizontales Spiegeln durch, indem das Bild entlang der x-Achse gespiegelt wird. Diese Transformation vertauscht die linke und rechte Seite unter Beibehaltung der räumlichen Konsistenz, was dem Modell hilft, Objekte in gespiegelten Ausrichtungen zu verallgemeinern. Der Hyperparameter fliplr definiert die Wahrscheinlichkeit der Anwendung, wobei fliplr=1.0 garantiert, dass alle Bilder gespiegelt werden, und fliplr=0.0 die Funktion deaktiviert. Bei fliplr=0.5 besteht beispielsweise eine 50-prozentige Chance, dass ein Bild horizontal gespiegelt wird.
  • Zweck: Horizontales Spiegeln wird häufig in der Objekterkennung, Pose-Schä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 Seiten der Straße erscheinen, und das horizontale Spiegeln hilft dem Modell, sie in beiden Ausrichtungen gleichermaßen gut zu erkennen.
  • Ultralytics-Implementierung: RandomFlip
fliplr ausfliplr an
Original image without augmentationHorizontal flip augmentation enabled

BGR-Kanalaustausch (bgr)

  • Bereich: 0.0 - 1.0
  • Standard: 0
  • Verwendung: Tauscht die Farbkanäle eines Bildes von RGB zu BGR und ändert die Reihenfolge der Farbdarstellung. Der Hyperparameter bgr definiert die Wahrscheinlichkeit der Transformation, wobei bgr=1.0 sicherstellt, dass alle Bilder den Kanalaustausch durchlaufen, und bgr=0.0 ihn deaktiviert. Bei bgr=0.5 hat jedes Bild beispielsweise eine 50-prozentige Chance, von RGB zu BGR konvertiert zu werden.
  • Zweck: Erhöht die Robustheit gegenüber verschiedenen Farbkanalreihenfolgen. Dies ist hilfreich, wenn Modelle trainiert werden, die mit verschiedenen Kamerasystemen und Imaging-Bibliotheken funktionieren müssen, bei denen RGB- und BGR-Formate inkonsistent verwendet werden, oder wenn Modelle in Umgebungen bereitgestellt werden, in denen sich das Eingangsfarbformat von den Trainingsdaten unterscheiden könnte.
  • Ultralytics-Implementierung: Format
bgr ausbgr an
Original image without augmentationBGR channel swap augmentation

Mosaik (mosaic)

  • Bereich: 0.0 - 1.0
  • Standard: 1
  • Verwendung: Kombiniert vier Trainingsbilder zu einem. Der Hyperparameter mosaic definiert die Wahrscheinlichkeit der Anwendung, wobei mosaic=1.0 sicherstellt, dass alle Bilder kombiniert werden, und mosaic=0.0 die Transformation deaktiviert. Bei mosaic=0.5 hat jedes Bild beispielsweise eine 50-prozentige Chance, mit drei anderen Bildern kombiniert zu werden.
  • Zweck: Äußerst effektiv zur Verbesserung der Erkennung kleiner Objekte und des Kontextverständnisses. In Wildtierschutzprojekten, in denen Tiere in verschiedenen Entfernungen und Maßstäben erscheinen können, hilft die Mosaik-Augmentierung dem Modell, dieselbe Art über verschiedene Größen, teilweise Verdeckungen und Umgebungskontexte hinweg zu erkennen, indem künstlich vielfältige Trainingsbeispiele aus begrenzten Daten erstellt werden.
  • Ultralytics-Implementierung: Mosaic
  • Hinweis:
    • Auch wenn die mosaic-Augmentierung das Modell robuster macht, kann sie den Trainingsprozess anspruchsvoller gestalten.
    • Die mosaic-Augmentierung kann gegen Ende des Trainings deaktiviert werden, indem close_mosaic auf die Anzahl der Epochen vor Abschluss festgelegt wird, nach denen sie abgeschaltet werden soll. Wenn epochs auf 200 und close_mosaic auf 20 gesetzt ist, wird die mosaic-Augmentierung nach 180 Epochen deaktiviert. Wenn close_mosaic auf 0 gesetzt ist, bleibt die mosaic-Augmentierung während des gesamten Trainingsprozesses aktiv.
    • Das Zentrum des generierten Mosaiks wird anhand von Zufallswerten bestimmt und kann entweder innerhalb oder außerhalb des Bildes liegen.
    • Die aktuelle Implementierung der mosaic-Augmentierung kombiniert 4 zufällig aus dem Datensatz ausgewählte Bilder. Wenn der Datensatz klein ist, kann dasselbe Bild im selben Mosaik mehrmals verwendet werden.
mosaic ausmosaic an
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)

  • Bereich: 0.0 - 1.0
  • Standard: 0
  • Verwendung: Mischt zwei Bilder und deren Labels mit einer gegebenen Wahrscheinlichkeit. Der Hyperparameter mixup definiert die Wahrscheinlichkeit der Anwendung, wobei mixup=1.0 sicherstellt, dass alle Bilder gemischt werden, und mixup=0.0 die Transformation deaktiviert. Bei mixup=0.5 hat jedes Bild beispielsweise eine 50-prozentige Chance, mit einem anderen Bild gemischt zu werden.
  • Zweck: Verbessert die Modellrobustheit und reduziert Overfitting. In Einzelhandelsprodukt-Erkennungssystemen hilft Mixup dem Modell, robustere Merkmale zu lernen, indem Bilder verschiedener Produkte gemischt werden. Dies lehrt das Modell, Artikel selbst dann zu identifizieren, wenn sie nur teilweise sichtbar sind oder durch andere Produkte in überfüllten Verkaufsregalen verdeckt werden.
  • Ultralytics-Implementierung: Mixup
  • Hinweis:
    • Das mixup-Verhältnis ist ein Zufallswert, der aus einer np.random.beta(32.0, 32.0)-Beta-Verteilung ausgewählt wird, was bedeutet, dass jedes Bild zu etwa 50% beiträgt, mit leichten 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 - 1.0
  • Standard: 0
  • Verwendung: Schneidet einen rechteckigen Bereich aus einem Bild aus und fügt ihn mit einer gegebenen Wahrscheinlichkeit in ein anderes Bild ein. Der Hyperparameter cutmix definiert die Wahrscheinlichkeit der Anwendung, wobei cutmix=1.0 sicherstellt, dass alle Bilder diese Transformation durchlaufen, und cutmix=0.0 sie vollständig deaktiviert. Bei cutmix=0.5 hat jedes Bild beispielsweise eine 50-prozentige Chance, dass ein Bereich durch ein Stück eines anderen Bildes ersetzt wird.
  • Zweck: Verbessert die Modellleistung durch die Schaffung realistischer Verdeckungsszenarien bei gleichzeitiger Wahrung der lokalen Merkmalsintegrität. Bei autonomen Fahrsystemen hilft CutMix dem Modell beispielsweise, Fahrzeuge oder Fußgänger auch dann zu erkennen, wenn sie teilweise von anderen Objekten verdeckt werden, was die Erkennungsgenauigkeit in komplexen realen Umgebungen mit überlappenden Objekten verbessert.
  • Ultralytics-Implementierung: CutMix
  • Hinweis:
    • Größe und Position des ausgeschnittenen Bereichs werden für jede Anwendung zufällig bestimmt.
    • Im Gegensatz zu Mixup, das Pixelwerte global mischt, behält cutmix die ursprünglichen Pixelintensitäten innerhalb der ausgeschnittenen Bereiche bei und bewahrt so lokale Merkmale.
    • Ein Bereich wird nur dann in das Zielbild eingefügt, wenn er sich nicht mit einer bestehenden Bounding Box überschneidet. Zusätzlich werden nur diejenigen Bounding Boxes beibehalten, die mindestens 0.1 (10 %) ihrer ursprünglichen Fläche innerhalb des eingefügten Bereichs behalten.
    • Dieser Schwellenwert für die minimale Fläche der Bounding Box kann in der aktuellen Implementierung nicht geändert werden und ist standardmäßig auf 0.1 eingestellt.
Erstes Bild, cutmix ausZweites Bild, cutmix auscutmix an
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Segmentierungsspezifische Augmentierungen

Copy-Paste (copy_paste)

  • Bereich: 0.0 - 1.0
  • Standard: 0
  • Verwendung: Funktioniert nur bei Segmentierungsaufgaben. Diese Augmentierung kopiert Objekte innerhalb oder zwischen Bildern basierend auf einer festgelegten Wahrscheinlichkeit, die durch den copy_paste_mode gesteuert wird. Der Hyperparameter copy_paste definiert die Wahrscheinlichkeit der Anwendung, wobei copy_paste=1.0 sicherstellt, dass alle Bilder kopiert werden, und copy_paste=0.0 die Transformation deaktiviert. Bei copy_paste=0.5 hat jedes Bild beispielsweise eine 50-prozentige Chance, dass Objekte aus einem anderen Bild hineinkopiert werden.
  • Zweck: Besonders nützlich für Instanzsegmentierungsaufgaben und seltene Objektklassen. In der industriellen Fehlererkennung, wo bestimmte Fehlertypen nur selten auftreten, kann die Copy-Paste-Augmentierung das Vorkommen dieser seltenen Fehler künstlich erhöhen, indem sie sie von einem Bild in ein anderes kopiert. Dies hilft dem Modell, diese unterrepräsentierten Fälle besser zu lernen, ohne dass zusätzliche fehlerhafte Proben erforderlich sind.
  • Ultralytics-Implementierung: CopyPaste
  • Hinweis:
    • Wie im folgenden GIF dargestellt, kann die copy_paste-Augmentierung verwendet werden, um Objekte von einem Bild in ein anderes zu kopieren.
    • Sobald ein Objekt kopiert wurde, wird unabhängig vom copy_paste_mode sein Intersection over Area (IoA) mit allen Objekten des Quellbildes berechnet. Wenn alle IoA-Werte unter 0.3 (30 %) liegen, wird das Objekt in das Zielbild eingefügt. Wenn nur einer der IoA-Werte über 0.3 liegt, wird das Objekt nicht in das Zielbild eingefügt.
    • Der IoA-Schwellenwert kann in der aktuellen Implementierung nicht geändert werden und ist standardmäßig auf 0.3 eingestellt.
copy_paste auscopy_paste an mit copy_paste_mode=flipVisualisierung des copy_paste-Prozesses
Original image without augmentationCopy-paste augmentation enabledCopy-paste augmentation animated demo

Copy-Paste-Modus (copy_paste_mode)

  • Optionen: 'flip', 'mixup'
  • Standard: 'flip'
  • Verwendung: Bestimmt die Methode, die für die Copy-Paste-Augmentierung verwendet wird. Bei 'flip' stammen die Objekte aus demselben Bild, während 'mixup' es ermöglicht, Objekte aus verschiedenen Bildern zu kopieren.
  • Zweck: Ermöglicht Flexibilität bei der Integration kopierter Objekte in Zielbilder.
  • Ultralytics-Implementierung: CopyPaste
  • Hinweis:
    • Das IoA-Prinzip ist für beide copy_paste_mode-Einstellungen gleich, aber die Art und Weise, wie die Objekte kopiert werden, unterscheidet sich.
    • Je nach Bildgröße können Objekte manchmal teilweise oder vollständig außerhalb des Rahmens kopiert werden.
    • Abhängig von der Qualität der Polygon-Annotationen können kopierte Objekte leichte Formvariationen im Vergleich zu den Originalen aufweisen.
ReferenzbildAusgewähltes Bild für copy_pastecopy_paste an mit copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Klassifizierungsspezifische Augmentierungen

Auto Augment (auto_augment)

  • Optionen: 'randaugment', 'autoaugment', 'augmix', None
  • Standard: 'randaugment'
  • Verwendung: Wendet automatisierte Augmentierungsrichtlinien für die Klassifizierung an. Die Option 'randaugment' nutzt RandAugment, 'autoaugment' verwendet AutoAugment und 'augmix' nutzt AugMix. Die Einstellung auf None deaktiviert die automatisierte Augmentierung.
  • Zweck: Optimiert Augmentierungsstrategien automatisch für Klassifizierungsaufgaben. Die Unterschiede sind wie folgt:
    • AutoAugment: Dieser Modus wendet vordefinierte Augmentierungsrichtlinien an, die aus Datensätzen wie ImageNet, CIFAR10 und SVHN gelernt wurden. Nutzer können diese bestehenden Richtlinien auswählen, aber innerhalb von Torchvision keine neuen trainieren. Um optimale Augmentierungsstrategien für spezifische Datensätze zu entdecken, wären externe Bibliotheken oder benutzerdefinierte Implementierungen notwendig. Verweis auf das AutoAugment-Paper.
    • RandAugment: Wendet eine zufällige Auswahl von Transformationen mit einheitlicher Stärke an. Dieser Ansatz reduziert die Notwendigkeit einer umfangreichen Suchphase, was ihn recheneffizienter macht und dennoch die Robustheit des Modells verbessert. Verweis auf das RandAugment-Paper.
    • AugMix: AugMix ist eine Datenaugmentierungsmethode, die die Robustheit des Modells verbessert, indem sie durch zufällige Kombinationen einfacher Transformationen vielfältige Bildvariationen erzeugt. Verweis auf das AugMix-Paper.
  • Implementierung von Ultralytics: classify_augmentations()
  • Hinweis:
    • Im Grunde genommen liegt der Hauptunterschied zwischen den drei Methoden in der Art und Weise, wie die Augmentierungsrichtlinien definiert und angewendet werden.
    • Du kannst diesen Artikel hinzuziehen, der die drei Methoden im Detail vergleicht.

Zufälliges Löschen (erasing)

  • Bereich: 0.0 - 0.9
  • Standard: 0.4
  • Verwendung: Löscht während des Klassifizierungstrainings zufällig Teile des Bildes. Der Hyperparameter erasing definiert die Wahrscheinlichkeit der Anwendung der Transformation, wobei erasing=0.9 sicherstellt, dass fast alle Bilder gelöscht werden, und erasing=0.0 die Transformation deaktiviert. Zum Beispiel hat jedes Bild bei erasing=0.5 eine Chance von 50 %, dass ein Teil gelöscht wird.
  • Zweck: Hilft Modellen dabei, robuste Merkmale zu erlernen und verhindert eine zu starke Abhängigkeit von bestimmten Bildbereichen. Zum Beispiel hilft zufälliges Löschen bei Gesichtserkennungssystemen den Modellen, robuster gegenüber teilweisen Verdeckungen wie Sonnenbrillen, Gesichtsmasken oder anderen Objekten zu werden, die Gesichtsmerkmale teilweise verdecken könnten. Dies verbessert die Leistung in der realen Welt, indem das Modell gezwungen wird, Personen anhand mehrerer Gesichtsmerkmale zu identifizieren, anstatt sich ausschließlich auf markante Merkmale zu verlassen, die verdeckt sein könnten.
  • Implementierung von Ultralytics: classify_augmentations()
  • Hinweis:
    • Die erasing-Augmentierung enthält die Hyperparameter scale, ratio und value, die mit der aktuellen Implementierung nicht geändert werden können. Ihre Standardwerte sind (0.02, 0.33), (0.3, 3.3) bzw. 0, wie in der PyTorch-Dokumentation angegeben.
    • Die Obergrenze des erasing-Hyperparameters ist auf 0.9 festgelegt, um zu vermeiden, dass die Transformation auf alle Bilder angewendet wird.
erasing auserasing an (Beispiel 1)erasing an (Beispiel 2)erasing an (Beispiel 3)
Originalbild ohne AugmentierungBeispiel für zufälliges Löschen 1Beispiel für zufälliges Löschen 2Beispiel für zufälliges Löschen 3

Erweiterte Augmentierungsfunktionen

Benutzerdefinierte Albumentations-Transformationen (augmentations)

  • Typ: list von Albumentations-Transformationen
  • Standard: None
  • Verwendung: Ermöglicht es dir, benutzerdefinierte Albumentations-Transformationen für die Datenaugmentierung über die Python API bereitzustellen. Dieser Parameter akzeptiert eine Liste von Albumentations-Transformations-Objekten, die während des Trainings anstelle der Standard-Albumentations-Transformationen angewendet werden.
  • Zweck: Bietet eine feinkörnige Kontrolle über 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, wie z. B. erweiterte Farbanpassungen, Rauschinjektionen oder domänenspezifische Transformationen.
  • Implementierung von Ultralytics: Albumentations
Beispiel für benutzerdefinierte Albumentations
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(var_limit=(10.0, 50.0), 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,
)

Wichtige Punkte:

  • Nur Python API: Benutzerdefinierte Albumentations-Transformationen werden derzeit nur über die Python API unterstützt. Sie können nicht über CLI- oder YAML-Konfigurationsdateien spezifiziert werden.
  • Ersetzt Standard-Transformationen: Wenn du benutzerdefinierte Transformationen über den augmentations-Parameter bereitstellst, ersetzen diese die Standard-Albumentations-Transformationen vollständig. Die Standard-YOLO-Augmentierungen (wie mosaic, hsv_h, hsv_s, degrees usw.) bleiben aktiv und werden unabhängig davon angewendet.
  • Kompatibilität mit Bounding Boxen: Sei vorsichtig bei der Verwendung räumlicher Transformationen (Transformationen, die die Geometrie des Bildes verändern). Ultralytics handhabt die Anpassungen der Bounding Boxen automatisch, aber einige komplexe Transformationen erfordern möglicherweise eine zusätzliche Konfiguration.
  • Umfangreiche Bibliothek: Albumentations bietet über 70+ verschiedene Transformationen. Erkunde die Albumentations-Dokumentation, um alle verfügbaren Optionen zu entdecken.
  • Überlegung zur Leistung: Das Hinzufügen von zu vielen Augmentierungen oder die Verwendung rechenintensiver Transformationen kann das Training verlangsamen. Beginne mit einer kleinen Auswahl und überwache die Trainingsgeschwindigkeit.

Häufige Anwendungsfälle:

  • Medizinische Bildgebung: Wende spezialisierte Transformationen wie elastische Verformungen oder Gitterverzerrungen für die Augmentierung von Röntgen- oder MRT-Bildern an
  • Luft-/Satellitenbilder: Verwende Transformationen, die für Aufnahmen aus der Vogelperspektive optimiert sind
  • Umgebungen bei schwachem Licht: Wende Rausch- und Helligkeitsanpassungen an, um schwierige Lichtverhältnisse zu simulieren
  • Industrielle Inspektion: Füge fehlerähnliche Muster oder Texturvariationen für Qualitätskontrollanwendungen hinzu

Hinweise zur Kompatibilität:

  • Erfordert Albumentations Version 1.0.3 oder höher
  • Kompatibel mit allen YOLO-Erkennungs- und Segmentierungsaufgaben
  • Nicht anwendbar für Klassifizierungsaufgaben (Klassifizierung verwendet eine andere Augmentierungspipeline)

Für weitere Informationen über Albumentations und verfügbare Transformationen besuche die offizielle Albumentations-Dokumentation.

FAQ

Es gibt zu viele Augmentierungen zur Auswahl. Woher weiß ich, welche ich verwenden soll?

Die Auswahl der richtigen Augmentierungen hängt von deinem spezifischen Anwendungsfall und Datensatz ab. Hier sind ein paar allgemeine Richtlinien, die dir bei der Entscheidung helfen sollen:

  • In den meisten Fällen sind leichte Variationen in Farbe und Helligkeit vorteilhaft. Die Standardwerte für hsv_h, hsv_s und hsv_v sind ein solider Ausgangspunkt.
  • Wenn der Blickwinkel der Kamera konsistent ist und sich nach der Bereitstellung des Modells nicht ändert, kannst du wahrscheinlich auf geometrische Transformationen wie rotation, translation, scale, shear oder perspective verzichten. Wenn sich der Kamerawinkel jedoch ändern kann und du möchtest, dass das Modell robuster ist, ist es besser, diese Augmentierungen beizubehalten.
  • Verwende die mosaic-Augmentierung nur, wenn das Vorhandensein von teilweise verdeckten Objekten oder mehreren Objekten pro Bild akzeptabel ist und den Label-Wert nicht ändert. Alternativ kannst du mosaic aktiv lassen, aber den close_mosaic-Wert erhöhen, um es früher im Trainingsprozess zu deaktivieren.

Kurz gesagt: Halte es einfach. Beginne mit einem kleinen Satz an Augmentierungen und füge nach Bedarf schrittweise weitere hinzu. Das Ziel ist es, die Generalisierung und Robustheit des Modells zu verbessern, nicht den Trainingsprozess zu verkomplizieren. Stelle außerdem sicher, dass die von dir angewendeten Augmentierungen dieselbe Datenverteilung widerspiegeln, auf die dein Modell in der Produktion treffen wird.

Wenn ich ein Training starte, sehe ich einen albumentations: Blur[...]-Verweis. Bedeutet das, dass Ultralytics YOLO zusätzliche Augmentierungen wie Weichzeichnen durchführt?

Wenn das albumentations-Paket installiert ist, wendet Ultralytics automatisch eine Reihe zusätzlicher Bildaugmentierungen an, die dieses nutzen. Diese Augmentierungen werden intern gehandhabt und erfordern keine zusätzliche Konfiguration.

Du findest die vollständige Liste der angewendeten Transformationen 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. Diese werden gezielt mit geringer Häufigkeit angewendet, um visuelle Artefakte aus der realen Welt nachzuahmen, wie z. B. Weichzeichnungs- oder Graustufeneffekte.

Du kannst auch deine eigenen benutzerdefinierten Albumentations-Transformationen über die Python API bereitstellen. Siehe den Abschnitt Erweiterte Augmentierungsfunktionen für weitere Details.

Wenn ich ein Training starte, sehe ich keinen Verweis auf Albumentations. Warum?

Prüfe, ob das albumentations-Paket installiert ist. Falls nicht, kannst du es durch Ausführen von pip install albumentations installieren. Sobald es installiert ist, sollte das Paket automatisch erkannt und von Ultralytics verwendet werden.

Wie passe ich meine Augmentierungen an?

Du kannst Augmentierungen anpassen, indem du eine benutzerdefinierte Dataset-Klasse und einen Trainer erstellst. Du kannst zum Beispiel die Standard-Klassifizierungs-Augmentierungen von Ultralytics durch PyTorchs torchvision.transforms.Resize oder andere Transformationen ersetzen. Siehe das Beispiel für benutzerdefiniertes Training in der Klassifizierungsdokumentation für Implementierungsdetails.

Kommentare