Datenaugmentation mit Ultralytics YOLO#
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.
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)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.5Starte das Training anschließend mit der Python-API:
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.0bis1.0 - Standardwert:
0.015 - Verwendung: Verschiebt die Bildfarben, während ihre Beziehungen zueinander erhalten bleiben. Der Hyperparameter
hsv_hdefiniert die Stärke der Verschiebung. Die endgültige Anpassung wird zufällig zwischen-hsv_hundhsv_hgewählt. Beihsv_h=0.3wird die Verschiebung beispielsweise zufällig im Bereich von-0.3bis0.3ausgewählt. Bei Werten über0.5läuft die Farbtonverschiebung am Farbkreis über, weshalb die Augmentationen zwischen0.5und-0.5gleich 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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Sättigungsanpassung (hsv_s)#
- Bereich:
0.0bis1.0 - Standardwert:
0.7 - Verwendung: Verändert die Intensität der Farben im Bild. Der Hyperparameter
hsv_sdefiniert die Stärke der Verschiebung. Die endgültige Anpassung wird zufällig zwischen-hsv_sundhsv_sgewählt. Beihsv_s=0.7wird die Intensität beispielsweise zufällig im Bereich von-0.7bis0.7ausgewä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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Helligkeitsanpassung (hsv_v)#
- Bereich:
0.0bis1.0 - Standardwert:
0.4 - Verwendung: Verändert die Helligkeit des Bildes. Der Hyperparameter
hsv_vdefiniert die Stärke der Verschiebung. Die endgültige Anpassung wird zufällig zwischen-hsv_vundhsv_vgewählt. Beihsv_v=0.4wird die Intensität beispielsweise zufällig im Bereich von-0.4bis0.4ausgewä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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Geometrische Transformationen#
Drehung (degrees)#
- Bereich:
0.0bis180 - Standardwert:
0 - Verwendung: Dreht Bilder zufällig innerhalb des angegebenen Bereichs. Der Hyperparameter
degreesdefiniert den Drehwinkel. Die endgültige Anpassung wird zufällig zwischen-degreesunddegreesgewählt. Beidegrees=10.0wird die Drehung beispielsweise zufällig im Bereich von-10.0bis10.0ausgewä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 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Verschiebung (translate)#
- Bereich:
0.0bis1.0 - Standardwert:
0.1 - Verwendung: Verschiebt Bilder horizontal und vertikal um einen zufälligen Bruchteil ihrer Größe. Der Hyperparameter
translatedefiniert die Stärke der Verschiebung. Die endgültige Anpassung wird für jede Achse separat zufällig innerhalb des Bereichs von-translatebistranslategewählt. Beitranslate=0.5wird die Verschiebung auf der x-Achse beispielsweise zufällig zwischen-0.5und0.5ausgewä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
xundyjedes Mal gleich. Die Werte-1.0und1.0werden nicht gezeigt, da sie das Bild vollständig aus dem Bildausschnitt verschieben würden.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Skalierung (scale)#
- Bereich:
0.0bis1.0als 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
scaleden Skalierungsfaktor. Der endgültige Faktor wird zufällig zwischen1-scaleund1+scalegewählt. Beiscale=0.5wird die Skalierung beispielsweise zufällig im Bereich von0.5bis1.5ausgewählt. Als Tupel legtscalediesen Bereich direkt fest, sodassscale=(0.5, 2.0)den Faktor zwischen0.5und2.0abtastet. - 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.0wird nicht gezeigt, da das Bild dadurch verschwinden würde, während1.0lediglich 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.0bis1.0validiert. Ein Wert außerhalb dieses Bereichs löst einenValueErroraus. 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 - scalebis1.0) ab. Die Übergabe eines Tupels löst daher einenTypeErroraus.
- Der Wert
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Scherung (shear)#
- Bereich:
-180bis+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
sheardefiniert den Scherungswinkel. Die endgültige Anpassung wird zufällig zwischen-shearundsheargewählt. Beishear=10.0wird die Scherung auf der x-Achse beispielsweise zufällig zwischen-10und10ausgewä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 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Perspektive (perspective)#
- Bereich:
0.0bis0.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
perspectivedefiniert die Stärke der Perspektive. Die endgültige Anpassung wird zufällig zwischen-perspectiveundperspectivegewählt. Beiperspective=0.001wird die Perspektive auf der x-Achse beispielsweise zufällig zwischen-0.001und0.001ausgewä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.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Vertikales Spiegeln (flipud)#
- Bereich:
0.0bis1.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.0stellt sicher, dass alle Bilder gespiegelt werden, während der Wertflipud=0.0die Transformation vollständig deaktiviert. Beiflipud=0.5wird 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 aus | flipud an |
|---|---|
![]() | ![]() |
Horizontales Spiegeln (fliplr)#
- Bereich:
0.0bis1.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
fliplrdefiniert die Wahrscheinlichkeit für die Anwendung der Transformation. Der Wertfliplr=1.0stellt sicher, dass alle Bilder gespiegelt werden, während der Wertfliplr=0.0die Transformation vollständig deaktiviert. Beifliplr=0.5wird 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 aus | fliplr an |
|---|---|
![]() | ![]() |
Vertauschen der BGR-Kanäle (bgr)#
- Bereich:
0.0bis1.0 - Standardwert:
0 - Verwendung: Vertauscht die Farbkanäle eines Bildes von RGB zu BGR und ändert dadurch die Reihenfolge der Farbdarstellung. Der Hyperparameter
bgrdefiniert die Wahrscheinlichkeit für die Anwendung der Transformation.bgr=1.0stellt sicher, dass bei allen Bildern die Kanäle vertauscht werden, währendbgr=0.0die Transformation deaktiviert. Beibgr=0.5wird 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 aus | bgr an |
|---|---|
![]() | ![]() |
Mosaic (mosaic)#
- Bereich:
0.0bis1.0 - Standardwert:
1 - Verwendung: Kombiniert vier Trainingsbilder zu einem Bild. Der Hyperparameter
mosaicdefiniert die Wahrscheinlichkeit für die Anwendung der Transformation.mosaic=1.0stellt sicher, dass alle Bilder kombiniert werden, währendmosaic=0.0die Transformation deaktiviert. Beimosaic=0.5wird 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
mosaicdas Modell robuster macht, kann sie den Trainingsprozess erschweren. - Die Augmentation
mosaickann gegen Ende des Trainings deaktiviert werden, indem duclose_mosaicauf die Anzahl der Epochen vor dem Abschluss setzt, ab der sie ausgeschaltet werden soll. Wennepochsbeispielsweise auf200undclose_mosaicauf20gesetzt wird, wird die Augmentationmosaicnach180Epochen deaktiviert. Wennclose_mosaicauf0gesetzt wird, bleibt die Augmentationmosaicwährend des gesamten Trainings aktiviert. - Das Schließen von Mosaic deaktiviert in derselben Epoche auch
copy_paste,mixupundcutmix. 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, dasscopy_pasteim standardmäßigen Modusflipinnerhalb 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
mosaickombiniert das aktuelle Bild mit drei weiteren Bildern. Diese stammen aus einem Puffer kürzlich geladener Bilder oder beicache='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.
- Auch wenn die Augmentation
mosaic aus | mosaic an |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Bereich:
0.0bis1.0 - Standardwert:
0 - Verwendung: Mischt zwei Bilder und ihre Beschriftungen mit der angegebenen Wahrscheinlichkeit. Der Hyperparameter
mixupdefiniert die Wahrscheinlichkeit für die Anwendung der Transformation.mixup=1.0stellt sicher, dass alle Bilder gemischt werden, währendmixup=0.0die Transformation deaktiviert. Beimixup=0.5wird 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
mixupist ein Zufallswert aus einer Beta-Verteilungnp.random.beta(32.0, 32.0). Das bedeutet, dass jedes Bild ungefähr 50 % beiträgt, mit geringfügigen Abweichungen.
- Das Verhältnis
Erstes Bild, mixup aus | Zweites Bild, mixup aus | mixup an |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)#
- Bereich:
0.0bis1.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
cutmixdefiniert die Wahrscheinlichkeit für die Anwendung der Transformation.cutmix=1.0stellt sicher, dass diese Transformation auf alle Bilder angewendet wird, währendcutmix=0.0sie vollständig deaktiviert. Beicutmix=0.5wird 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
cutmixinnerhalb 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 und0.01(1 %), sobald die Beschriftungen Segmente enthalten.
Erstes Bild, cutmix aus | Zweites Bild, cutmix aus | cutmix an |
|---|---|---|
![]() | ![]() | ![]() |
Copy-Paste-Augmentationen#
Copy-Paste (copy_paste)#
- Bereich:
0.0bis1.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_modegesteuert. Im Modusflipgibtcopy_pasteden Anteil der kopierbaren Objekte an: Ein Bild mit sechs geeigneten Objekten erhält beicopy_paste=0.5drei Kopien. Im Modusmixupsteuert derselbe Wert zusätzlich die Wahrscheinlichkeit, dass Copy-Paste ausgeführt wird.copy_paste=0.0deaktiviert 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_pasteverwendet 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 unter0.3(30 %) liegen; sobald ein IoA-Wert0.3oder 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.3gesetzt.
- Wie im folgenden Video gezeigt, kann die Augmentierung
copy_paste aus | copy_paste aktiviert mit copy_paste_mode=flip | Den Prozess copy_paste visualisieren |
|---|---|---|
![]() | ![]() |
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_modegleich, 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.
- Das IoA-Prinzip ist bei beiden Optionen von
| Referenzbild | Ausgewähltes Bild für copy_paste | copy_paste aktiviert mit copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
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. WennNonegesetzt 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.0bis1.0 - Standardwert:
0.4 - Verwendung: Löscht während des Klassifikationstrainings zufällig Teile des Bildes. Der Hyperparameter
erasinglegt die Wahrscheinlichkeit für die Anwendung der Transformation fest; beierasing=1.0wird in jedem Bild eine Region gelöscht, währenderasing=0.0die Transformation deaktiviert. Beierasing=0.5besteht 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
erasingverfügt über die Hyperparameterscale,ratioundvalue, 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)und0.
- Die Augmentierung
erasing aus | erasing aktiviert (Beispiel 1) | erasing aktiviert (Beispiel 2) | erasing aktiviert (Beispiel 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Erweiterte Augmentierungsfunktionen#
Benutzerdefinierte Albumentations-Transformationen (augmentations)#
- Typ:
listder 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 undresumesie 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,degreesund alle weiteren – bleibt aktiv und wird unabhängig angewendet. - Räumliche Transformationen, die die Bildgeometrie verändern, einschließlich solcher, die in
A.OneOfoderA.Composeverschachtelt sind, bewegen Bounding Boxes, Polygone, Keypoints sowie Tiefen- oder semantische Masken zusammen mit dem Bild;A.RandomGridShufflekann 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,poseundobb. Die Klassifikation ist ausgenommen, da sie eine separate Augmentierungspipeline verwendet.
- Zum Erstellen der Transformationsobjekte ist die Python API erforderlich. Ultralytics serialisiert sie beim Speichern eines Checkpoints mit
Die folgenden Beispiele erfordern Albumentations 1.4.22 oder neuer und daher Python 3.9 oder neuer.
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_sundhsv_vsind 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,shearoderperspectiveverzichten. Wenn der Kamerawinkel jedoch variieren kann und du ein robusteres Modell benötigst, solltest du diese Augmentierungen beibehalten. - Verwende die Augmentierung
mosaicnur, wenn teilweise verdeckte Objekte oder mehrere Objekte pro Bild akzeptabel sind und den Wert des Labels nicht verändern. Alternativ kannst dumosaicaktiviert lassen, aber den Wert vonclose_mosaicerhö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.
- In den meisten Fällen sind geringfügige Variationen bei Farbe und Helligkeit vorteilhaft. Die Standardwerte für
Wenn das Paket
albumentationsinstalliert 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
pgrößer als0aktiv 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
albumentationsinstalliert ist. Falls nicht, installiere es:pip install albumentationsNach 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.













































