Datenerweiterung mit Ultralytics YOLO#
Einführung#
Datenerweiterung ist eine wichtige Technik in der Computer Vision, mit der dein Trainingsdatensatz künstlich erweitert wird, indem verschiedene Transformationen auf vorhandene Bilder angewendet werden. Beim Trainieren von Modellen für Deep Learning wie Ultralytics YOLO verbessert die Datenerweiterung die Robustheit des Modells, verringert Überanpassung und verbessert die Generalisierung auf reale Szenarien.
Ansehen: So verwendest du Mosaic, MixUp und weitere Datenerweiterungen, damit Ultralytics YOLO-Modelle besser generalisieren 🚀
Warum Datenerweiterung wichtig ist#
Datenerweiterung erfüllt beim Training von Computer-Vision-Modellen mehrere wichtige Zwecke:
- Erweiterter Datensatz: Indem du Variationen vorhandener Bilder erzeugst, 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 sind dadurch in realen Anwendungen robuster.
- Weniger Überanpassung: Durch mehr Variabilität in den Trainingsdaten sinkt die Wahrscheinlichkeit, dass Modelle bestimmte Bildeigenschaften auswendig lernen.
- Bessere Leistung: Mit geeigneter Datenerweiterung trainierte Modelle erzielen bei Validierungs- und Testdatensätzen in der Regel eine höhere Genauigkeit.
Die Implementierung in Ultralytics YOLO umfasst eine breite Palette von Datenerweiterungstechniken. Jede Technik verfolgt einen bestimmten Zweck und trägt auf andere Weise zur Modellleistung bei. Dieser Leitfaden behandelt die folgenden Einstellungen zur Datenerweiterung 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 Kommandozeilenschnittstelle (CLI) oder eine Konfigurationsdatei anpassen. Im Folgenden findest du Beispiele dafür, wie du die Datenerweiterung mit jeder Methode einrichtest.
import albumentations as A
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n.pt")
# Modelltraining mit benutzerdefinierten Parametern zur Datenerweiterung
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Modelltraining mit deaktivierter Einstellung sämtlicher konfigurierbarer Datenerweiterungen (deaktivierte Werte der Übersichtlichkeit halber ausgelassen)
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,
)
# Modelltraining mit benutzerdefinierten Albumentations-Transformationen (nur Python-API)
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 die Trainingsargumente. Ultralytics wendet außerdem eine kleine Auswahl an Albumentations-Transformationen an – Unschärfe, Medianunschärfe, Graustufen und CLAHE, jeweils mit p=0.01 – sobald das Paket albumentations installiert ist. Kein Argument in default.yaml deaktiviert diese Transformationen. Deinstalliere das Paket, um sie zu entfernen, oder übergib eine eigene Liste an augmentations, um sie zu ersetzen.
Eine Konfigurationsdatei verwenden#
Du kannst alle Trainingsparameter, einschließlich der Datenerweiterungen, in einer YAML-Konfigurationsdatei festlegen (z. B. train_custom.yaml). Der Parameter mode ist nur erforderlich, wenn du die CLI verwendest. Diese neue YAML-Datei überschreibt dann 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
# Ein mit COCO vortrainiertes YOLO26n-Modell laden
model = YOLO("yolo26n.pt")
# Modell mit benutzerdefinierter Konfiguration trainieren
model.train(cfg="train_custom.yaml")Farbraumtransformationen#
Farbtonanpassung (hsv_h)#
- Bereich:
0.0bis1.0 - Standardwert:
0.015 - Verwendung: Verschiebt die Bildfarben und erhält dabei ihre Beziehungen zueinander. Der Hyperparameter
hsv_hlegt die Stärke der Verschiebung fest; die endgültige Anpassung wird zufällig zwischen-hsv_hundhsv_hgewählt. Beihsv_h=0.3wird die Verschiebung beispielsweise zufällig aus dem Bereich-0.3bis0.3ausgewählt. Bei Werten über0.5läuft die Farbtonverschiebung über den Farbkreis hinweg. Daher sehen die Erweiterungen bei0.5und-0.5gleich aus. - Zweck: Besonders nützlich für Außenaufnahmen, bei denen die Lichtverhältnisse das Aussehen von Objekten stark beeinflussen können. Eine Banane kann beispielsweise bei hellem Sonnenlicht gelber und in Innenräumen eher grünlich aussehen.
- Implementierung in Ultralytics: RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Sättigungsanpassung (hsv_s)#
- Bereich:
0.0bis1.0 - Standardwert:
0.7 - Verwendung: Ändert die Farbintensität im Bild. Der Hyperparameter
hsv_slegt die Stärke der Verschiebung fest; die endgültige Anpassung wird zufällig zwischen-hsv_sundhsv_sgewählt. Beihsv_s=0.7wird die Intensität beispielsweise zufällig aus dem Bereich-0.7bis0.7ausgewählt. - Zweck: Hilft Modellen, mit wechselnden Wetterbedingungen und Kameraeinstellungen umzugehen. Ein rotes Verkehrsschild kann beispielsweise an einem sonnigen Tag sehr leuchtend erscheinen, bei Nebel jedoch blass und matt wirken.
- Implementierung in Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Helligkeitsanpassung (hsv_v)#
- Bereich:
0.0bis1.0 - Standardwert:
0.4 - Verwendung: Ändert die Helligkeit des Bildes. Der Hyperparameter
hsv_vlegt die Stärke der Verschiebung fest; die endgültige Anpassung wird zufällig zwischen-hsv_vundhsv_vgewählt. Beihsv_v=0.4wird die Intensität beispielsweise zufällig aus dem Bereich-0.4bis0.4ausgewählt. - Zweck: Unverzichtbar beim Training von Modellen, die bei unterschiedlichen Lichtverhältnissen funktionieren müssen. Ein roter Apfel kann beispielsweise im Sonnenlicht hell und im Schatten deutlich dunkler aussehen.
- Implementierung in Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Geometrische Transformationen#
Drehung (degrees)#
- Bereich:
0.0bis180 - Standardwert:
0 - Verwendung: Dreht Bilder innerhalb des angegebenen Bereichs zufällig. Der Hyperparameter
degreeslegt den Drehwinkel fest; die endgültige Anpassung wird zufällig zwischen-degreesunddegreesgewählt. Beidegrees=10.0wird die Drehung beispielsweise zufällig aus dem Bereich-10.0bis10.0ausgewählt. - Zweck: Entscheidend für Anwendungen, in denen Objekte in unterschiedlichen Ausrichtungen erscheinen können. Auf Luftbildern von Drohnen können Fahrzeuge beispielsweise in jede Richtung ausgerichtet sein. Modelle müssen Objekte daher unabhängig von ihrer Drehung erkennen.
- Implementierung in 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 Anteil ihrer Größe. Der Hyperparameter
translatelegt die Stärke der Verschiebung fest. Die endgültige Verschiebung wird für jede Achse separat und zufällig aus dem Bereich zwischen-translateundtranslategewählt. Beitranslate=0.5wird die Verschiebung auf der x-Achse beispielsweise zufällig aus dem Bereich-0.5bis0.5ausgewählt. Für die y-Achse wird ein weiterer unabhängiger Zufallswert aus demselben Bereich gewählt. - Zweck: Hilft Modellen, teilweise sichtbare Objekte zu erkennen, und verbessert die Robustheit gegenüber unterschiedlichen Objektpositionen. Bei der Bewertung von Fahrzeugschäden können Fahrzeugteile beispielsweise je nach Position und Abstand der fotografierenden Person vollständig oder teilweise im Bild erscheinen. Die Verschiebungserweiterung bringt dem Modell bei, diese Merkmale unabhängig davon zu erkennen, ob sie vollständig sichtbar sind oder wo sie sich befinden.
- Implementierung in Ultralytics: RandomPerspective
- Hinweis: Der Einfachheit halber sind die unten angewendeten Verschiebungen für die Achsen
xundyjeweils identisch. Die Werte-1.0und1.0sind nicht dargestellt, 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 als explizites Tupel(min, max) - Standardwert:
0.5 - Verwendung: Skaliert Bilder mit einem zufälligen Faktor innerhalb des angegebenen Bereichs. Bei einem Gleitkommawert legt der Hyperparameter
scaledie Skalierungsrate fest; der endgültige Faktor wird zufällig zwischen1-scaleund1+scalegewählt. Beiscale=0.5wird die Skalierung beispielsweise zufällig aus dem Bereich0.5bis1.5ausgewählt. Als Tupel legtscaleden Bereich direkt fest, sodassscale=(0.5, 2.0)den Faktor zwischen0.5und2.0auswählt. - Zweck: Ermöglicht Modellen, mit Objekten in unterschiedlichen Entfernungen und Größen umzugehen. Beim autonomen Fahren können Fahrzeuge beispielsweise in verschiedenen Entfernungen zur Kamera erscheinen. Das Modell muss sie daher unabhängig von ihrer Größe erkennen.
- Implementierung in Ultralytics: RandomPerspective
- Hinweis:
- Der Wert
-1.0ist nicht dargestellt, da er das Bild verschwinden lassen würde.1.0bewirkt lediglich eine zweifache Vergrößerung. - Die in der folgenden Tabelle angezeigten Werte sind die tatsächlich angewendeten Skalierungsänderungen und nicht die Werte, die du an den Hyperparameter
scaleübergibst. - Die Gleitkommaform ist auf den Bereich
0.0bis1.0beschränkt. Ein Wert außerhalb dieses Bereichs löst einenValueErroraus. Um einen Faktor zu erhalten, der über eine zweifache Vergrößerung hinausgeht, verwende stattdessen die Tupelform(min, max). - Die Tupelform gilt nur für geometrische Aufgaben. Beim Klassifikationstraining wird der Zuschneidebereich aus dem Gleitkommawert abgeleitet (
1.0 - scalebis1.0). Wird hier ein Tupel übergeben, löst das 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 Bildbereiche in eine Richtung verschoben, während parallele Linien parallel bleiben. Der Hyperparameter
shearlegt den Scherwinkel fest; die endgültige Anpassung wird zufällig zwischen-shearundsheargewählt. Beishear=10.0wird die Scherung auf der x-Achse beispielsweise zufällig aus dem Bereich-10bis10ausgewählt. Für die y-Achse wird ein weiterer unabhängiger Zufallswert aus demselben Bereich gewählt. - Zweck: Hilft Modellen, auf unterschiedliche Blickwinkel zu generalisieren, die durch leichte Neigungen oder schräge Perspektiven entstehen. Bei der Verkehrsüberwachung können Objekte wie Autos und Verkehrsschilder beispielsweise schräg erscheinen, wenn Kameras nicht senkrecht ausgerichtet sind. Die Scherungserweiterung sorgt dafür, dass das Modell Objekte trotz solcher Verzerrungen erkennt.
- Implementierung in Ultralytics: RandomPerspective
- Hinweis:
- Werte für
shearkönnen das Bild schnell verzerren. Es empfiehlt sich daher, mit kleinen Werten zu beginnen und diese schrittweise zu erhöhen. - Im Gegensatz zu Perspektivtransformationen erzeugt die Scherung weder Tiefe noch Fluchtpunkte. Stattdessen verzerrt sie die Form von Objekten, indem sie ihre Winkel verändert, während gegenüberliegende Seiten parallel bleiben.
- Werte für
-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 so, wie Objekte aus unterschiedlichen Tiefen oder Blickwinkeln erscheinen. Der Hyperparameter
perspectivelegt die Stärke der Perspektivtransformation fest; die endgültige Anpassung wird zufällig zwischen-perspectiveundperspectivegewählt. Beiperspective=0.001wird die Perspektivtransformation auf der x-Achse beispielsweise zufällig aus dem Bereich-0.001bis0.001ausgewählt. Für die y-Achse wird ein weiterer unabhängiger Zufallswert aus demselben Bereich gewählt. - Zweck: Die Perspektivenerweiterung ist entscheidend, um starke Änderungen des Blickwinkels zu bewältigen, insbesondere wenn Objekte durch Perspektivverschiebungen verkürzt oder verzerrt erscheinen. Bei der Objekterkennung mit Drohnen können Gebäude, Straßen und Fahrzeuge beispielsweise je nach Neigung und Flughöhe der Drohne gestreckt oder gestaucht wirken. Mit Perspektivtransformationen lernen Modelle, Objekte trotz solcher perspektivbedingten Verzerrungen zu erkennen, und werden dadurch bei realen Einsätzen robuster.
- Implementierung in Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Vertikal spiegeln (flipud)#
- Bereich:
0.0bis1.0 - Standardwert:
0 - Verwendung: Führt eine vertikale Spiegelung aus, indem das Bild entlang der y-Achse umgekehrt wird. Diese Transformation stellt das gesamte Bild auf den Kopf, erhält aber alle räumlichen Beziehungen zwischen den Objekten. Der Hyperparameter flipud legt die Wahrscheinlichkeit fest, mit der die Transformation angewendet wird. Bei einem Wert von
flipud=1.0werden alle Bilder gespiegelt, bei einem Wert vonflipud=0.0ist die Transformation vollständig deaktiviert. Beiflipud=0.5hat jedes Bild beispielsweise eine Wahrscheinlichkeit von 50 %, auf den Kopf gestellt zu werden. - Zweck: Nützlich in Szenarien, in denen Objekte auf dem Kopf stehen können. In Robotiksystemen können Objekte auf Förderbändern oder Roboterarmen beispielsweise aufgenommen und in verschiedenen Ausrichtungen abgelegt werden. Die vertikale Spiegelung hilft dem Modell, Objekte unabhängig von ihrer Ausrichtung von oben oder unten zu erkennen.
- Implementierung in Ultralytics: RandomFlip
flipud aus | flipud an |
|---|---|
![]() | ![]() |
Horizontal spiegeln (fliplr)#
- Bereich:
0.0bis1.0 - Standardwert:
0.5 - Verwendung: Spiegelt ein Bild horizontal an der x-Achse. Dabei werden linke und rechte Seite vertauscht, während die räumliche Anordnung erhalten bleibt. Das hilft dem Modell, auf Objekte in spiegelverkehrter Ausrichtung zu generalisieren. Der Hyperparameter
fliplrlegt die Wahrscheinlichkeit für die Transformation fest. Beifliplr=1.0werden alle Bilder gespiegelt, beifliplr=0.0ist die Transformation vollständig deaktiviert. Beifliplr=0.5besteht für jedes Bild beispielsweise eine Wahrscheinlichkeit von 50 %, von links nach rechts gespiegelt zu werden. - Zweck: Die horizontale Spiegelung wird häufig bei der Objekterkennung, Pose-Schätzung und Gesichtserkennung eingesetzt, um die Robustheit gegenüber Links-rechts-Unterschieden zu verbessern. Beim autonomen Fahren können Fahrzeuge und Fußgänger beispielsweise auf beiden Straßenseiten erscheinen. Die horizontale Spiegelung hilft dem Modell, sie in beiden Ausrichtungen gleich gut zu erkennen.
- Implementierung in Ultralytics: RandomFlip
fliplr aus | fliplr an |
|---|---|
![]() | ![]() |
BGR-Kanaltausch (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
bgrlegt die Wahrscheinlichkeit für die Transformation fest. Beibgr=1.0werden bei allen Bildern die Kanäle vertauscht, beibgr=0.0ist die Transformation deaktiviert. Beibgr=0.5besteht für jedes Bild beispielsweise eine Wahrscheinlichkeit von 50 %, von RGB in BGR umgewandelt zu werden. - Zweck: Erhöht die Robustheit gegenüber unterschiedlichen Reihenfolgen der Farbkanäle. Das ist beispielsweise beim Training von Modellen nützlich, die mit verschiedenen Kamerasystemen und Bildverarbeitungsbibliotheken funktionieren müssen, in denen RGB- und BGR-Formate uneinheitlich verwendet werden. Es hilft auch bei der Bereitstellung in Umgebungen, in denen sich das Eingabefarbformat von den Trainingsdaten unterscheiden kann.
- Implementierung in Ultralytics: Format
bgr aus | bgr an |
|---|---|
![]() | ![]() |
Mosaik (mosaic)#
- Bereich:
0.0bis1.0 - Standardwert:
1 - Verwendung: Kombiniert vier Trainingsbilder zu einem. Der Hyperparameter
mosaiclegt die Wahrscheinlichkeit für die Transformation fest. Beimosaic=1.0werden alle Bilder kombiniert, beimosaic=0.0ist die Transformation deaktiviert. Beimosaic=0.5besteht für jedes Bild beispielsweise eine Wahrscheinlichkeit von 50 %, mit drei weiteren Bildern kombiniert zu werden. - Zweck: Besonders wirksam zur Verbesserung der Erkennung kleiner Objekte und des Kontextverständnisses. Bei Projekten zum Schutz von Wildtieren können Tiere beispielsweise in unterschiedlichen Entfernungen und Größen auftreten. Die Mosaikerweiterung hilft dem Modell, dieselbe Art in verschiedenen Größen, bei teilweiser Verdeckung und in unterschiedlichen Umgebungen zu erkennen, indem sie aus begrenzten Daten künstlich vielfältige Trainingsbeispiele erzeugt.
- Implementierung in Ultralytics: Mosaic
- Hinweis:
- Auch wenn die Erweiterung
mosaicdas Modell robuster macht, kann sie den Trainingsprozess erschweren. - Die Erweiterung
mosaiclässt sich gegen Ende des Trainings deaktivieren, indem duclose_mosaicauf die Anzahl der Epochen vor Trainingsende setzt, ab der sie ausgeschaltet werden soll. Wenn beispielsweiseepochsauf200undclose_mosaicauf20gesetzt ist, wird die Erweiterungmosaicnach180Epochen deaktiviert. Wirdclose_mosaicauf0gesetzt, bleibt die Erweiterungmosaicwährend des gesamten Trainings aktiv. - Wenn das Mosaik beendet wird, werden außerdem
copy_paste,mixupundcutmixin derselben Epoche deaktiviert. Alle vier werden gemeinsam ausgeschaltet. Die letzten Epochen laufen somit ohne diese Erweiterungen, während alle anderen – geometrische Transformationen, HSV, Spiegelungen und Albumentations – weiterhin angewendet werden. Beachte, dasscopy_pasteim standardmäßigen Modusflipmit einem einzelnen Bild arbeitet, statt mehrere Bilder zu kombinieren. - Die Mitte des erzeugten Mosaiks wird anhand von Zufallswerten festgelegt und kann innerhalb oder außerhalb des Bildes liegen.
- Die aktuelle Implementierung der Erweiterung
mosaickombiniert das aktuelle Bild mit drei weiteren Bildern. Diese stammen aus einem Puffer kürzlich geladener Bilder oder – wenncache='ram'– aus dem gesamten Datensatz. In beiden Fällen wird mit Zurücklegen ausgewählt, sodass dasselbe Bild mehrmals in einem einzelnen Mosaik vorkommen kann.
- Auch wenn die Erweiterung
mosaic aus | mosaic an |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Bereich:
0.0bis1.0 - Standardwert:
0 - Verwendung: Mischt zwei Bilder samt ihren Labels mit einer bestimmten Wahrscheinlichkeit. Der Hyperparameter
mixuplegt die Wahrscheinlichkeit für die Transformation fest. Beimixup=1.0werden alle Bilder gemischt, beimixup=0.0ist die Transformation deaktiviert. Beimixup=0.5besteht für jedes Bild beispielsweise eine Wahrscheinlichkeit von 50 %, mit einem anderen Bild gemischt zu werden. - Zweck: Verbessert die Robustheit des Modells und reduziert Überanpassung. Bei Systemen zur Erkennung von Einzelhandelsprodukten hilft Mixup dem Modell beispielsweise, robustere Merkmale zu lernen, indem Bilder verschiedener Produkte gemischt werden. So lernt das Modell, Artikel auch dann zu erkennen, wenn sie teilweise sichtbar oder durch andere Produkte in vollen Ladenregalen verdeckt sind.
- Implementierung in Ultralytics: MixUp
- Hinweis:
- Das Verhältnis
mixupist ein Zufallswert aus einer Beta-Verteilungnp.random.beta(32.0, 32.0). Dadurch trägt jedes Bild ungefähr 50 % bei, mit leichten 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 einer bestimmten Wahrscheinlichkeit einen rechteckigen Bereich aus einem Bild aus und fügt ihn in ein anderes Bild ein. Der Hyperparameter
cutmixlegt die Wahrscheinlichkeit für die Anwendung der Transformation fest.cutmix=1.0sorgt dafür, dass die Transformation auf alle Bilder angewendet wird, währendcutmix=0.0sie vollständig deaktiviert. Beicutmix=0.5besteht beispielsweise für jedes Bild eine Wahrscheinlichkeit von 50 %, dass ein Bereich durch einen Ausschnitt aus einem anderen Bild ersetzt wird. - Zweck: Verbessert die Modellleistung, indem realistische Verdeckungsszenarien erzeugt werden, während lokale Merkmale erhalten bleiben. Bei 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 werden. Dadurch verbessert sich die Erkennungsgenauigkeit in komplexen realen Umgebungen mit überlappenden Objekten.
- Implementierung von Ultralytics: CutMix
- Hinweis:
- Größe und Position des ausgeschnittenen Bereichs werden bei jeder Anwendung zufällig bestimmt.
- Im Gegensatz zu MixUp, bei dem Pixelwerte global miteinander vermischt werden, bleiben bei
cutmixdie ursprünglichen Pixelintensitäten in den ausgeschnittenen Bereichen erhalten, wodurch lokale Merkmale bewahrt werden. - Ein Bereich wird nur dann in das Zielbild eingefügt, wenn er keine vorhandene Bounding Box überlappt. Außerdem bleiben nur Bounding Boxes erhalten, die innerhalb des eingefügten Bereichs einen ausreichenden Teil ihrer ursprünglichen Fläche bewahren.
- Dieser Mindestschwellenwert für die Fläche einer Bounding Box kann mit der aktuellen Implementierung nicht geändert werden. Er beträgt
0.1(10 %) für Erkennungslabels und0.01(1 %), sobald die Labels Segmente enthalten.
Erstes Bild, cutmix aus | Zweites Bild, cutmix aus | cutmix an |
|---|---|---|
![]() | ![]() | ![]() |
Copy-Paste-Augmentierungen#
Copy-Paste (copy_paste)#
- Bereich:
0.0bis1.0 - Standardwert:
0 - Verwendung: Erfordert Polygonlabels und eignet sich daher für Segmentierungs- und OBB-Aufgaben. Bei dieser Augmentierung werden Objekte innerhalb eines Bildes oder zwischen Bildern kopiert. Gesteuert wird sie über
copy_paste_mode. Im Modusflipgibtcopy_pasteden Anteil der zum Kopieren geeigneten Objekte an: Ein Bild mit sechs geeigneten Objekten erhält beicopy_paste=0.5drei Kopien. Im Modusmixupsteuert derselbe Wert auch die Wahrscheinlichkeit, mit der Copy-Paste ausgeführt wird.copy_paste=0.0deaktiviert die Transformation. - Zweck: Besonders nützlich für Instanzsegmentierungsaufgaben und seltene Objektklassen. Bei der industriellen Fehlererkennung beispielsweise treten bestimmte Fehlerarten nur selten auf. Durch Copy-Paste-Augmentierung lassen sich diese seltenen Fehler künstlich häufiger abbilden, indem sie aus einem Bild in ein anderes kopiert werden. So kann das Modell diese unterrepräsentierten Fälle besser erlernen, ohne dass zusätzliche fehlerhafte Proben erforderlich sind.
- Implementierung von Ultralytics: CopyPaste
- Hinweis:
- Wie im folgenden Video zu sehen ist, 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 mit der aktuellen Implementierung nicht geändert werden und ist standardmäßig auf
0.3festgelegt.
- Wie im folgenden Video zu sehen ist, kann die Augmentierung
copy_paste aus | copy_paste mit copy_paste_mode=flip aktiviert | Den Ablauf von 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 Objekte werden auf unterschiedliche Weise kopiert. - Je nach Bildgröße kann es vorkommen, dass Objekte teilweise oder vollständig außerhalb des Bildausschnitts kopiert werden.
- Je nach Qualität der Polygonannotationen können kopierte Objekte leichte Formabweichungen gegenüber den Originalen aufweisen.
- Das IoA-Prinzip ist bei beiden Optionen von
| Referenzbild | Ausgewähltes Bild für copy_paste | copy_paste mit copy_paste_mode=mixup aktiviert |
|---|---|---|
![]() | ![]() | ![]() |
Aufgabenspezifische Augmentierungen für die Klassifizierung#
Auto Augment (auto_augment)#
- Optionen:
'randaugment','autoaugment','augmix',None - Standardwert:
'randaugment' - Verwendung: Wendet automatisierte Augmentierungsrichtlinien für die Klassifizierung an. Die Option
'randaugment'verwendet RandAugment,'autoaugment'verwendet AutoAugment und'augmix'verwendet AugMix. MitNonewird die automatisierte Augmentierung deaktiviert. - Zweck: Optimiert Augmentierungsstrategien automatisch für Klassifizierungsaufgaben. Die Unterschiede sind folgende:
- AutoAugment: In diesem Modus werden vordefinierte Augmentierungsrichtlinien angewendet, die anhand von Datensätzen wie ImageNet, CIFAR10 und SVHN erlernt wurden. Du kannst diese vorhandenen Richtlinien auswählen, aber keine neuen in Torchvision trainieren. Um optimale Augmentierungsstrategien für bestimmte Datensätze zu ermitteln, sind externe Bibliotheken oder eigene Implementierungen erforderlich. Siehe das AutoAugment-Paper.
- RandAugment: Wendet eine zufällige Auswahl von Transformationen mit einheitlicher Stärke an. Dadurch ist keine umfangreiche Suchphase erforderlich. Das Verfahren ist somit recheneffizienter und verbessert zugleich die Robustheit des Modells. Siehe das RandAugment-Paper.
- AugMix: AugMix ist eine Datenaugmentierungsmethode, die die Robustheit des Modells verbessert, indem sie durch zufällige Kombinationen einfacher Transformationen vielfältige Bildvarianten erzeugt. Siehe das AugMix-Paper.
- Implementierung von Ultralytics: classify_augmentations()
- Hinweis:
- Der Hauptunterschied zwischen den drei Methoden besteht darin, wie die Augmentierungsrichtlinien definiert und angewendet werden.
- In diesem Artikel werden die drei Methoden ausführlich verglichen.
Random Erasing (erasing)#
- Bereich:
0.0bis1.0 - Standardwert:
0.4 - Verwendung: Radiert während des Klassifizierungstrainings zufällig Teile des Bildes aus. Der Hyperparameter
erasinglegt die Wahrscheinlichkeit für die Anwendung der Transformation fest.erasing=1.0radiert in jedem Bild einen Bereich aus, währenderasing=0.0die Transformation deaktiviert. Beierasing=0.5besteht beispielsweise für jedes Bild eine Wahrscheinlichkeit von 50 %, dass ein Teil ausradiert wird. - Zweck: Hilft Modellen, robuste Merkmale zu erlernen, und verhindert, dass sie sich zu stark auf bestimmte Bildbereiche verlassen. Bei Gesichtserkennungssystemen hilft Random Erasing beispielsweise dabei, Modelle robuster gegenüber teilweisen Verdeckungen durch Sonnenbrillen, Gesichtsmasken oder andere Objekte zu machen, die Gesichtszüge teilweise verdecken können. Das verbessert die Leistung in der Praxis, da das Modell Personen anhand mehrerer Gesichtsmerkmale identifizieren muss, statt sich ausschließlich auf markante, möglicherweise verdeckte Merkmale zu verlassen.
- Implementierung von Ultralytics: classify_augmentations()
- Hinweis:
- Die Augmentierung
erasingumfasst die Hyperparameterscale,ratioundvalue, 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 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: Mit der Python API kannst du benutzerdefinierte Albumentations-Transformationen zur Datenaugmentierung bereitstellen. Dieser Parameter akzeptiert eine Liste von Albumentations-Transformationsobjekten, die während des Trainings anstelle der standardmäßigen Albumentations-Transformationen angewendet werden.
- Zweck: Bietet mithilfe der umfangreichen Bibliothek von Albumentations-Transformationen eine präzise Kontrolle über Datenaugmentierungsstrategien. Das ist besonders nützlich, wenn du spezielle Augmentierungen benötigst, die über die integrierten YOLO-Optionen hinausgehen, etwa elastische Verformungen und Rasterverzerrungen für die medizinische Bildgebung, auf Luft- und Satellitenaufnahmen abgestimmte Transformationen, Rausch- und Helligkeitsänderungen zur Simulation von schlechten Lichtverhältnissen oder fehlerähnliche Texturvariationen für die industrielle Prüfung.
- 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(). Daher lässt sich eine bereits serialisierte Liste über eine YAML-Konfigurationsdatei oder die CLI unverändert wieder einlesen. So kannresumedie Objekte wiederherstellen. - Benutzerdefinierte Transformationen ersetzen den gesamten standardmäßigen Satz von Albumentations-Transformationen. Alle an anderer Stelle auf dieser Seite konfigurierten Augmentierungen –
mosaic,hsv_h,degreesund weitere – bleiben aktiv und werden unabhängig voneinander angewendet. - Räumliche Transformationen, die die Bildgeometrie verändern, verschieben zusammen mit dem Bild auch Bounding Boxes, Polygone, Keypoints sowie Tiefen- oder semantische Masken. Dazu zählen auch Transformationen, die in
A.OneOfoderA.Composeverschachtelt sind.A.RandomGridShufflekann die Topologie von Polygonen oder Keypoints nicht erhalten und löst bei Segmentierungs-, Pose- und OBB-Beispielen einen Fehler aus. - Albumentations bietet mehr als 70 Transformationen. In der Albumentations-Dokumentation sind sie alle aufgeführt. Viele oder rechenintensive Transformationen verlangsamen das Training. Beginne daher mit einer kleinen Auswahl und behalte die Dauer der Epochen im Blick.
- Gilt für die Aufgaben
detect,segment,semantic,depth,poseundobb. Die Klassifizierung 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
Für die folgenden Beispiele ist Albumentations 1.4.22 oder neuer und damit Python 3.9 oder neuer erforderlich.
import albumentations as A
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n.pt")
# Benutzerdefinierte Albumentations-Transformationen definieren
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),
]
# Mit benutzerdefinierten Albumentations-Transformationen trainieren
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Benutzerdefinierte Transformationen übergeben
imgsz=640,
)Häufig gestellte Fragen#
Die Wahl der passenden 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 leichte Farb- und Helligkeitsabweichungen von Vorteil. Die Standardwerte für
hsv_h,hsv_sundhsv_vsind ein guter Ausgangspunkt. - Wenn der Blickwinkel der Kamera gleich bleibt und sich nach der Bereitstellung des Modells nicht ändert, kannst du wahrscheinlich auf geometrische Transformationen wie
degrees(Drehung),translate,scale,shearoderperspectiveverzichten. Wenn sich der Kamerawinkel jedoch ändern kann und das Modell robuster sein soll, solltest du diese Augmentierungen beibehalten. - Verwende die Augmentierung
mosaicnur, wenn teilweise verdeckte Objekte oder mehrere Objekte pro Bild akzeptabel sind und den Labelwert nicht verändern. Alternativ kannst dumosaicaktiviert lassen und den Wert vonclose_mosaicerhöhen, damit die Augmentierung früher im Trainingsprozess deaktiviert wird.
Kurz gesagt: Halte es einfach. Beginne mit einer kleinen Auswahl an Augmentierungen und füge nach Bedarf schrittweise weitere hinzu. Ziel ist es, die Generalisierungsfähigkeit und Robustheit des Modells zu verbessern, nicht den Trainingsprozess unnötig zu verkomplizieren. Achte außerdem darauf, dass die angewendeten Augmentierungen dieselbe Datenverteilung abbilden, der das Modell später im Produktivbetrieb begegnet.
- In den meisten Fällen sind leichte Farb- und Helligkeitsabweichungen von Vorteil. 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 und in unserem Leitfaden zur Albumentations-Integration. Beachte, dass nur Augmentierungen mit einer Wahrscheinlichkeit
püber0aktiv sind. Sie werden absichtlich nur selten angewendet, um visuelle Artefakte aus der Praxis wie Unschärfe oder Graustufeneffekte nachzubilden.Du kannst mit der Python API auch eigene benutzerdefinierte Albumentations-Transformationen bereitstellen. Weitere Informationen findest du im Abschnitt Erweiterte Augmentierungsfunktionen.
Prüfe, ob das Paket
albumentationsinstalliert ist. Installiere es andernfalls:pip install albumentationsNach der Installation sollte Ultralytics das Paket automatisch erkennen und verwenden.
Du kannst Augmentierungen anpassen, indem du eine benutzerdefinierte Datensatzklasse und einen Trainer erstellst. So kannst du beispielsweise die standardmäßigen Ultralytics-Augmentierungen für die Klassifizierung durch PyTorchs torchvision.transforms.Resize oder andere Transformationen ersetzen. Einzelheiten zur Implementierung findest du im Abschnitt zur Klassifizierung in diesem Beispiel für benutzerdefiniertes Training.













































