Datenaugmentation mit Ultralytics YOLO#
Einführung#
Data augmentation ist eine entscheidende Technik in der Computer Vision, die deinen Trainingsdatensatz künstlich erweitert, indem verschiedene Transformationen auf bestehende Bilder angewendet werden. Beim Training von Deep-Learning-Modellen wie Ultralytics YOLO trägt die Datenaugmentation dazu bei, die Robustheit des Modells zu verbessern, Overfitting zu reduzieren und die Generalisierung auf reale Szenarien zu stärken.
Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀
Warum Datenaugmentation wichtig ist#
Datenaugmentation erfüllt mehrere kritische Funktionen beim Training von Computer-Vision-Modellen:
- Erweiterter Datensatz: Durch das Erstellen von Variationen bestehender Bilder kannst du die Größe deines Trainingsdatensatzes effektiv vergrößern, 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 die Einführung von Variabilität in den Trainingsdaten ist es weniger wahrscheinlich, dass Modelle spezifische Bildmerkmale auswendig lernen.
- Verbesserte Leistung: Modelle, die mit einer angemessenen Augmentation trainiert wurden, erzielen typischerweise eine bessere Genauigkeit bei Validierungs- und Testsätzen.
Die Implementierung von Ultralytics YOLO bietet eine umfassende Suite von Augmentierungstechniken, die jeweils spezifische Zwecke erfüllen und auf unterschiedliche Weise zur Modellleistung beitragen. Dieser Leitfaden untersucht die folgenden Augmentierungseinstellungen und hilft dir zu verstehen, wann und wie du sie in deinen Projekten effektiv einsetzt.
Beispielkonfigurationen#
Du kannst jeden Parameter mithilfe der Python API, des Command Line Interface (CLI) oder einer Konfigurationsdatei anpassen. Nachfolgend findest du Beispiele, wie du die Datenaugmentation mit jeder Methode einrichtest.
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 sind diejenigen, die du über Trainingsargumente steuerst. Ultralytics wendet außerdem einen kleinen Albumentations-Satz an – Weichzeichnen (Blur), Median-Weichzeichnen, Graustufen und CLAHE, jeweils mit p=0.01 –, wann immer das Paket albumentations installiert ist und kein Argument in default.yaml es ausschaltet. Deinstalliere das Paket, um es zu entfernen, oder übergib deine eigene Liste an augmentations, um sie zu ersetzen.
Verwendung einer Konfigurationsdatei#
Du kannst alle Trainingsparameter, einschließlich Augmentationen, in einer YAML-Konfigurationsdatei (z. B. train_custom.yaml) definieren. Der Parameter mode ist nur bei der Verwendung der CLI erforderlich. Diese neue YAML-Datei überschreibt dann die Standarddatei, die sich im Paket ultralytics 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.5Starte dann das Training 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")Farbraum-Augmentationen#
Farbtonanpassung (hsv_h)#
- Bereich:
0.0-1.0 - Standard:
0.015 - Verwendung: Verschiebt die Bildfarben unter Beibehaltung ihrer Beziehungen. Der Hyperparameter
hsv_hdefiniert das Ausmaß der Verschiebung, wobei die finale Anpassung zufällig zwischen-hsv_hundhsv_hgewählt wird. Beispielsweise wird beihsv_h=0.3die Verschiebung zufällig innerhalb von-0.3bis0.3ausgewählt. Bei Werten über0.5wird der Farbtonversatz um den Farbreis herum fortgesetzt, weshalb die Augmentationen zwischen0.5und-0.5gleich aussehen. - Zweck: Besonders nützlich für Außenaufnahmen, bei denen Lichtverhältnisse das Erscheinungsbild von Objekten stark beeinflussen können. Zum Beispiel kann eine Banane bei hellem Sonnenlicht gelber aussehen, in Innenräumen jedoch eher grünlich.
- Ultralytics-Implementierung: RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Sättigungsanpassung (hsv_s)#
- Bereich:
0.0-1.0 - Standard:
0.7 - Verwendung: Modifiziert die Intensität der Farben im Bild. Der Hyperparameter
hsv_sdefiniert das Ausmaß der Verschiebung, wobei die finale Anpassung zufällig zwischen-hsv_sundhsv_sgewählt wird. Beispielsweise wird beihsv_s=0.7die Intensität zufällig innerhalb von-0.7bis0.7ausgewählt. - Zweck: Hilft Modellen dabei, mit unterschiedlichen Wetterbedingungen und Kameraeinstellungen umzugehen. Zum Beispiel kann ein rotes Verkehrsschild an einem sonnigen Tag sehr lebendig wirken, bei nebligen Bedingungen jedoch stumpf und verblasst aussehen.
- Ultralytics-Implementierung: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Helligkeitsanpassung (hsv_v)#
- Bereich:
0.0-1.0 - Standard:
0.4 - Verwendung: Ändert die Helligkeit des Bildes. Der Hyperparameter
hsv_vdefiniert das Ausmaß der Verschiebung, wobei die finale Anpassung zufällig zwischen-hsv_vundhsv_vgewählt wird. Beispielsweise wird beihsv_v=0.4die Intensität zufällig innerhalb von-0.4bis0.4ausgewählt. - Zweck: Wesentlich für das Training von Modellen, die unter verschiedenen Lichtbedingungen funktionieren müssen. Zum Beispiel kann ein roter Apfel im Sonnenlicht hell erscheinen, im Schatten jedoch viel dunkler.
- Ultralytics-Implementierung: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Geometrische Transformationen#
Rotation (degrees)#
- Bereich:
0.0bis180 - Standard:
0 - Verwendung: Rotiert Bilder zufällig innerhalb des angegebenen Bereichs. Der Hyperparameter
degreesdefiniert den Rotationswinkel, wobei die finale Anpassung zufällig zwischen-degreesunddegreesgewählt wird. Beispielsweise wird beidegrees=10.0die Rotation zufällig innerhalb von-10.0bis10.0ausgewählt. - Zweck: Entscheidend für Anwendungen, bei denen Objekte in verschiedenen Ausrichtungen erscheinen können. Zum Beispiel müssen in Luftaufnahmen von Drohnen Fahrzeuge in jede beliebige Richtung orientiert sein, was erfordert, dass Modelle die Objekte unabhängig von ihrer Rotation erkennen.
- Ultralytics-Implementierung: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Verschiebung (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
translatedefiniert das Ausmaß der Verschiebung, wobei die finale Anpassung zweimal (einmal für jede Achse) innerhalb des Bereichs-translateundtranslatezufällig gewählt wird. Beispielsweise wird beitranslate=0.5die Verschiebung auf der x-Achse zufällig innerhalb von-0.5bis0.5ausgewählt, und ein weiterer unabhängiger Zufallswert wird im selben Bereich auf der y-Achse ausgewählt. - Zweck: Hilft Modellen dabei, teilweise sichtbare Objekte zu erkennen, und verbessert die Robustheit gegenüber der Objektposition. Zum Beispiel können in Anwendungen zur Bewertung von Fahrzeugschäden Autoteile je nach Position und Entfernung des Fotografen vollständig oder teilweise im Bild sein. Die Translations-Augmentation bringt dem Modell bei, diese Merkmale unabhängig von ihrer Vollständigkeit oder Position zu erkennen.
- Ultralytics-Implementierung: RandomPerspective
- Hinweis: Der Einfachheit halber sind die unten angewendeten Verschiebungen für die Achsen
xundyjedes Mal gleich. Die Werte-1.0und1.0werden nicht angezeigt, 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.0-1.0als Float oder ein explizites(min, max)-Tupel - Standard:
0.5 - Verwendung: Skaliert Bilder um einen zufälligen Faktor innerhalb des angegebenen Bereichs. Als Float definiert der Hyperparameter
scaleden Skalierungsgewinn, wobei der endgültige Faktor zufällig zwischen1-scaleund1+scalegewählt wird. Beispielsweise wird die Skalierung beiscale=0.5zufällig innerhalb von0.5bis1.5ausgewählt. Als Tupel legtscalediesen Bereich direkt fest, sodassscale=(0.5, 2.0)den Faktor zwischen0.5und2.0abtastet. - Zweck: Ermöglicht Modellen den Umgang mit Objekten in unterschiedlichen Entfernungen und Größen. Zum Beispiel können in Anwendungen für autonomes Fahren Fahrzeuge in verschiedenen Entfernungen von der Kamera erscheinen, was erfordert, dass das Modell sie unabhängig von ihrer Größe erkennt.
- Ultralytics-Implementierung: RandomPerspective
- Hinweis:
- Der Wert
-1.0wird nicht angezeigt, da er das Bild verschwinden lassen würde, während1.0einfach zu einem 2-fachen Zoom führt. - Die in der Tabelle unten angezeigten Werte sind die realisierten Skalierungsdeltas, nicht die Werte, die du an den Hyperparameter
scaleübergibst. - Die Float-Form wird für den Bereich
0.0-1.0validiert, und ein Wert außerhalb dieses Bereichs löst einenValueErroraus. Um einen Faktor jenseits eines 2-fachen Zooms abzutasten, übergib stattdessen die(min, max)-Tupelform. - Die Tupelform gilt nur für geometrische Aufgaben. Das Klassifizierungstraining leitet seinen eigenen Crop-Bereich aus dem Float ab (
1.0 - scalebis1.0), sodass die Übergabe eines Tupels dort einenTypeErrorauslöst.
- Der Wert
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Scherung (shear)#
- Bereich:
-180bis+180 - Standard:
0 - Verwendung: Führt eine geometrische Transformation ein, die das Bild sowohl entlang der x- als auch der y-Achse verzerrt und Teile des Bildes in eine Richtung verschiebt, während parallele Linien erhalten bleiben. Der Hyperparameter
sheardefiniert den Scherungswinkel, wobei die finale Anpassung zufällig zwischen-shearundsheargewählt wird. Beispielsweise wird beishear=10.0die Scherung auf der x-Achse zufällig innerhalb von-10bis10ausgewählt, und ein weiterer unabhängiger Zufallswert wird im selben Bereich auf der y-Achse ausgewählt. - Zweck: Hilft Modellen dabei, auf Variationen von Blickwinkeln zu generalisieren, die durch leichte Neigungen oder schräge Perspektiven entstehen. Zum Beispiel können in der Verkehrsüberwachung Objekte wie Autos und Verkehrsschilder aufgrund von nicht senkrechten Kamerapositionen schräg erscheinen. Die Anwendung der Scherungs-Augmentation stellt sicher, dass das Modell lernt, Objekte trotz solcher verzerrten Perspektiven zu erkennen.
- Ultralytics-Implementierung: RandomPerspective
- Hinweis:
- Werte von
shearkönnen das Bild schnell verzerren. Es wird daher empfohlen, mit kleinen Werten zu beginnen und diese schrittweise zu erhöhen. - Im Gegensatz zu perspektivischen Transformationen führt Scherung keine Tiefe oder Fluchtpunkte ein, sondern verzerrt die Form von Objekten durch Änderung ihrer Winkel, während gegenüberliegende Seiten parallel bleiben.
- Werte von
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Perspektive (perspective)#
- Bereich:
0.0-0.001 - Standard:
0 - Verwendung: Wendet eine vollständige Perspektivtransformation sowohl entlang der x- als auch der y-Achse an und simuliert so, wie Objekte bei Betrachtung aus verschiedenen Tiefen oder Winkeln erscheinen. Der Hyperparameter
perspectivedefiniert das Ausmaß der Perspektive, wobei die finale Anpassung zufällig zwischen-perspectiveundperspectivegewählt wird. Beispielsweise wird beiperspective=0.001die Perspektive auf der x-Achse zufällig innerhalb von-0.001bis0.001ausgewählt, und ein weiterer unabhängiger Zufallswert wird im selben Bereich auf der y-Achse ausgewählt. - Zweck: Die Perspektiven-Augmentierung ist entscheidend für den Umgang mit extremen Blickwinkeländerungen, insbesondere in Szenarien, in denen Objekte aufgrund von Perspektivverschiebungen verkürzt oder verzerrt erscheinen. Beispielsweise können in der drohnengestützten 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 perspektivisch bedingten Verzerrungen zu erkennen, was ihre Robustheit bei realen Einsätzen verbessert.
- Ultralytics-Implementierung: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Vertikales Spiegeln (Up-Down) (flipud)#
- Bereich:
0.0-1.0 - Standard:
0 - Verwendung: Führt eine vertikale Spiegelung durch, indem das Bild entlang der y-Achse invertiert wird. Diese Transformation spiegelt das gesamte Bild auf den Kopf, bewahrt jedoch alle räumlichen Beziehungen zwischen Objekten. Der Hyperparameter flipud definiert die Wahrscheinlichkeit für die Anwendung der Transformation, wobei ein Wert von
flipud=1.0sicherstellt, dass alle Bilder gespiegelt werden, und ein Wert vonflipud=0.0die Transformation vollständig deaktiviert. Beispielsweise hat jedes Bild beiflipud=0.5eine Chance von 50 %, auf den Kopf gespiegelt zu werden. - Zweck: Nützlich für Szenarien, in denen Objekte auf dem Kopf stehen können. In robotischen Sichtsystemen können Objekte auf Förderbändern oder Greifarmen beispielsweise in verschiedenen Ausrichtungen aufgenommen und platziert werden. Vertikales Spiegeln hilft dem Modell, Objekte unabhängig von ihrer Ausrichtung von oben nach unten zu erkennen.
- Ultralytics-Implementierung: RandomFlip
flipud aus | flipud an |
|---|---|
![]() | ![]() |
Horizontales Spiegeln (Left-Right) (fliplr)#
- Bereich:
0.0-1.0 - Standard:
0.5 - Verwendung: Führt eine horizontale Spiegelung durch, indem das Bild entlang der x-Achse gespiegelt wird. Diese Transformation vertauscht die linke und rechte Seite bei gleichzeitiger Beibehaltung der räumlichen Konsistenz, was dem Modell hilft, auf Objekte zu generalisieren, die in gespiegelten Ausrichtungen erscheinen. Der Hyperparameter
fliplrdefiniert die Wahrscheinlichkeit der Anwendung der Transformation, wobei ein Wert vonfliplr=1.0sicherstellt, dass alle Bilder gespiegelt werden, und ein Wert vonfliplr=0.0die Transformation vollständig deaktiviert. Beispielsweise hat jedes Bild beifliplr=0.5eine Wahrscheinlichkeit von 50 %, von links nach rechts gespiegelt zu werden. - Zweck: Horizontales Spiegeln wird in der Objekterkennung, Pose-Schätzung und Gesichtserkennung weit verbreitet eingesetzt, um die Robustheit gegenüber Links-Rechts-Variationen zu verbessern. Im autonomen Fahren können Fahrzeuge und Fußgänger beispielsweise auf beiden Seiten der Straße erscheinen, und horizontales Spiegeln hilft dem Modell, sie in beiden Ausrichtungen gleichermaßen gut zu erkennen.
- Ultralytics-Implementierung: RandomFlip
fliplr aus | fliplr an |
|---|---|
![]() | ![]() |
BGR-Kanaltausch (bgr)#
- Bereich:
0.0-1.0 - Standard:
0 - Verwendung: Tauscht die Farbkanäle eines Bildes von RGB nach BGR aus und ändert so die Reihenfolge, in der Farben dargestellt werden. Der Hyperparameter
bgrdefiniert die Wahrscheinlichkeit der Anwendung der Transformation, wobeibgr=1.0sicherstellt, dass bei allen Bildern der Kanaltausch durchgeführt wird, undbgr=0.0ihn deaktiviert. Beispielsweise hat jedes Bild beibgr=0.5eine Wahrscheinlichkeit von 50 %, von RGB in BGR konvertiert zu werden. - Zweck: Erhöht die Robustheit gegenüber verschiedenen Farbkanal-Reihenfolgen. Dies ist nützlich beim Training von Modellen, die über verschiedene Kamerasysteme und Bildbibliotheken hinweg funktionieren müssen, in denen RGB- und BGR-Formate inkonsistent verwendet werden könnten, oder bei der Bereitstellung von Modellen in Umgebungen, in denen sich das Eingangsfarbformat von den Trainingsdaten unterscheiden kann.
- Ultralytics-Implementierung: Format
bgr aus | bgr an |
|---|---|
![]() | ![]() |
Mosaik (mosaic)#
- Bereich:
0.0-1.0 - Standard:
1 - Verwendung: Kombiniert vier Trainingsbilder zu einem. Der Hyperparameter
mosaicdefiniert die Wahrscheinlichkeit der Anwendung der Transformation, wobeimosaic=1.0sicherstellt, dass alle Bilder kombiniert werden, undmosaic=0.0die Transformation deaktiviert. Beispielsweise hat jedes Bild beimosaic=0.5eine Wahrscheinlichkeit von 50 %, mit drei anderen Bildern kombiniert zu werden. - Zweck: Äußerst effektiv zur Verbesserung der Erkennung kleiner Objekte und des Kontextverständnisses. Bei Naturschutzprojekten, in denen Tiere in unterschiedlichen Entfernungen und Maßstäben erscheinen können, hilft die Mosaic-Augmentierung dem Modell beispielsweise, dieselbe Art über verschiedene Größen, Teilverdeckungen und Umweltkontexte hinweg zu erkennen, indem künstlich vielfältige Trainingsbeispiele aus begrenzten Daten erstellt werden.
- Ultralytics-Implementierung: Mosaic
- Hinweis:
- Auch wenn die Augmentation
mosaicdas Modell robuster macht, kann sie den Trainingsprozess auch anspruchsvoller gestalten. - Die Augmentation
mosaickann gegen Ende des Trainings deaktiviert werden, indemclose_mosaicauf die Anzahl der Epochen vor dem Abschluss eingestellt wird, zu der sie ausgeschaltet werden soll. Wenn beispielsweiseepochsauf200undclose_mosaicauf20eingestellt ist, wird die Augmentationmosaicnach180Epochen deaktiviert. Wennclose_mosaicauf0eingestellt ist, bleibt die Augmentationmosaicfür den gesamten Trainingsprozess aktiviert. - Das Schließen des Mosaiks deaktiviert in derselben Epoche auch
copy_paste,mixupundcutmix. Die vier werden gemeinsam abgeschaltet, sodass die letzten Epochen ohne sie trainieren, während alle anderen Augmentierungen – die geometrischen Transformationen, HSV, Spiegelungen und Albumentations – weiterlaufen. Beachte, dasscopy_pasteim Standardmodusflipinnerhalb eines einzelnen Bildes arbeitet, anstatt mehrere zu kombinieren. - Das Zentrum des generierten Mosaiks wird mithilfe von Zufallswerten bestimmt und kann entweder innerhalb oder außerhalb des Bildes liegen.
- Die aktuelle Implementierung der Augmentierung
mosaickombiniert das aktuelle Bild mit 3 anderen, die aus einem Puffer kürzlich geladener Bilder oder von einer beliebigen Stelle im Datensatz stammen, wenncache='ram'gilt. In jedem Fall werden sie mit Zurücklegen entnommen, sodass dasselbe Bild in einem einzigen Mosaik mehr als einmal vorkommen kann.
- Auch wenn die Augmentation
mosaic aus | mosaic an |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Bereich:
0.0-1.0 - Standard:
0 - Verwendung: Mischt zwei Bilder und deren Labels mit einer gegebenen Wahrscheinlichkeit. Der Hyperparameter
mixupdefiniert die Wahrscheinlichkeit der Anwendung der Transformation, wobeimixup=1.0sicherstellt, dass alle Bilder gemischt werden, undmixup=0.0die Transformation deaktiviert. Beispielsweise hat jedes Bild beimixup=0.5eine Wahrscheinlichkeit von 50 %, mit einem anderen Bild gemischt zu werden. - Zweck: Verbessert die Robustheit des Modells und reduziert Overfitting. In Einzelhandel-Produkterkennungssystemen hilft Mixup dem Modell beispielsweise, robustere Merkmale zu lernen, indem Bilder verschiedener Produkte gemischt werden. Dies lehrt das Modell, Artikel auch dann zu identifizieren, wenn sie nur teilweise sichtbar sind oder durch andere Produkte in überfüllten Ladenregalen verdeckt werden.
- Ultralytics-Implementierung: Mixup
- Hinweis:
- Das Verhältnis
mixupist ein Zufallswert aus einer Beta-Verteilungnp.random.beta(32.0, 32.0), was bedeutet, dass jedes Bild mit geringfügigen Abweichungen etwa 50 % beisteuert.
- Das Verhältnis
Erstes Bild, mixup aus | Zweites Bild, mixup aus | mixup an |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)#
- Bereich:
0.0-1.0 - Standard:
0 - Verwendung: Schneidet eine rechteckige Region aus einem Bild aus und fügt sie mit einer gegebenen Wahrscheinlichkeit in ein anderes Bild ein. Der Hyperparameter
cutmixdefiniert die Wahrscheinlichkeit der Anwendung der Transformation, wobeicutmix=1.0sicherstellt, dass alle Bilder dieser Transformation unterzogen werden, undcutmix=0.0sie vollständig deaktiviert. Beispielsweise hat jedes Bild beicutmix=0.5eine Wahrscheinlichkeit von 50 %, dass eine Region durch einen Ausschnitt aus einem anderen Bild ersetzt wird. - Zweck: Verbessert die Modellleistung durch die Schaffung realistischer Verdeckungsszenarien unter Beibehaltung der lokalen Merkmalsintegrität. In Systemen für autonomes Fahren hilft CutMix dem Modell beispielsweise, Fahrzeuge oder Fußgänger auch dann zu erkennen, wenn sie teilweise von anderen Objekten verdeckt sind, was die Erkennungsgenauigkeit in komplexen realen Umgebungen mit überlappenden Objekten verbessert.
- Ultralytics-Implementierung: CutMix
- Hinweis:
- Die Größe und Position des ausgeschnittenen Bereichs wird für jede Anwendung zufällig bestimmt.
- Im Gegensatz zu Mixup, das Pixelwerte global mischt, behält
cutmixdie ursprünglichen Pixelintensitäten innerhalb der ausgeschnittenen Bereiche bei, wodurch lokale Merkmale erhalten bleiben. - Eine Region wird nur dann in das Zielbild eingefügt, wenn sie sich nicht mit bereits vorhandenen Bounding Boxes überschneidet. Außerdem werden nur jene Bounding Boxes beibehalten, die einen ausreichenden Teil ihrer ursprünglichen Fläche innerhalb der eingefügten Region behalten.
- Dieser Schwellenwert für die minimale Bounding-Box-Fläche kann mit der aktuellen Implementierung nicht geändert werden. Er beträgt
0.1(10 %) für Detektionslabels 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.0-1.0 - Standard:
0 - Verwendung: Erfordert Polygon-Labels, daher wird sie bei Segmentierungs- und OBB-Aufgaben angewendet; diese Augmentierung kopiert Objekte innerhalb oder zwischen Bildern, gesteuert durch
copy_paste_mode. Imflip-Modus istcopy_pasteder Bruchteil der kopierten berechtigten Objekte: Ein Bild mit sechs berechtigten Objekten erhält drei Kopien beicopy_paste=0.5. Immixup-Modus steuert derselbe Wert auch die Wahrscheinlichkeit, dass Copy-Paste ausgeführt wird.copy_paste=0.0deaktiviert die Transformation. - Zweck: Besonders nützlich für Instanzsegmentierungsaufgaben und seltene Objektklassen. In der industriellen Fehlererkennung, bei der bestimmte Fehlerarten selten auftreten, kann die Copy-Paste-Augmentierung beispielsweise das Vorkommen dieser seltenen Defekte künstlich erhöhen, indem sie von einem Bild in ein anderes kopiert werden. 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 Video gezeigt, kann die
copy_paste-Augmentierung verwendet werden, um Objekte von einem Bild in ein anderes zu kopieren. - Sobald ein Objekt zum Kopieren ausgewählt ist, wird sein IoA (Intersection over Area) für alle bereits im Zielbild vorhandenen Objekte berechnet, unabhängig von
copy_paste_mode. Das Objekt wird nur dann eingefügt, wenn alle IoA-Werte unter0.3(30 %) liegen; es wird nicht eingefügt, wenn ein IoA-Wert0.3oder höher ist. - Der IoA-Schwellenwert kann mit der aktuellen Implementierung nicht geändert werden und ist standardmäßig auf
0.3eingestellt.
- Wie im folgenden Video gezeigt, kann die
copy_paste aus | copy_paste an mit copy_paste_mode=flip | Visualisiere den Prozess von copy_paste |
|---|---|---|
![]() | ![]() |
Copy-Paste-Modus (copy_paste_mode)#
- Optionen:
'flip','mixup' - Standard:
'flip' - Verwendung: Bestimmt die Methode, die für die Copy-Paste-Augmentation verwendet wird. Wenn auf
'flip'eingestellt, 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 Art und Weise, wie kopierte Objekte in Zielbilder integriert werden.
- Ultralytics-Implementierung: CopyPaste
- Hinweis:
- Das IoA-Prinzip ist für beide
copy_paste_mode-Optionen dasselbe, 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.
- Das IoA-Prinzip ist für beide
| Referenzbild | Ausgewähltes Bild für copy_paste | copy_paste an mit copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Klassifizierungsspezifische Augmentierungen#
Auto Augment (auto_augment)#
- Optionen:
'randaugment','autoaugment','augmix',None - Standard:
'randaugment' - Verwendung: Wendet automatisierte Augmentationsrichtlinien für die Klassifizierung an. Die Option
'randaugment'verwendet RandAugment,'autoaugment'verwendet AutoAugment und'augmix'verwendet AugMix. Die Einstellung aufNonedeaktiviert die automatisierte Augmentation. - Zweck: Optimiert Augmentierungsstrategien automatisch für Klassifizierungsaufgaben. Die Unterschiede sind folgende:
- AutoAugment: Dieser Modus wendet vordefinierte Augmentationsrichtlinien an, die aus Datensätzen wie ImageNet, CIFAR10 und SVHN gelernt wurden. Benutzer können diese bestehenden Richtlinien auswählen, aber innerhalb von Torchvision keine neuen trainieren. Um optimale Augmentationsstrategien für spezifische Datensätze zu ermitteln, wären externe Bibliotheken oder benutzerdefinierte Implementierungen erforderlich. Verweis auf das AutoAugment-Papier.
- RandAugment: Wendet eine zufällige Auswahl von Transformationen mit einheitlicher Größenordnung an. Dieser Ansatz reduziert den Bedarf an einer umfangreichen Suchphase, wodurch er recheneffizienter wird und dennoch die Modellrobustheit erhöht. Verweis auf das RandAugment-Papier.
- AugMix: AugMix ist eine Datenaugmentation, die die Modellrobustheit erhöht, indem sie durch zufällige Kombinationen einfacher Transformationen vielfältige Bildvariationen erzeugt. Verweis auf das AugMix-Papier.
- Ultralytics-Implementierung: classify_augmentations()
- Hinweis:
- Im Grunde liegt der Hauptunterschied zwischen den drei Methoden in der Art und Weise, wie die Augmentierungsrichtlinien definiert und angewendet werden.
- Du kannst diesen Artikel zu Rate ziehen, der die drei Methoden im Detail vergleicht.
Random Erasing (erasing)#
- Bereich:
0.0-1.0 - Standard:
0.4 - Verwendung: Löscht beim Klassifizierungstraining zufällig Teile des Bildes. Der Hyperparameter
erasingdefiniert die Wahrscheinlichkeit der Anwendung der Transformation, wobeierasing=1.0in jedem Bild eine Region löscht underasing=0.0die Transformation deaktiviert. Beispielsweise hat jedes Bild beierasing=0.5eine 50-prozentige Chance, dass ein Teil gelöscht wird. - Zweck: Hilft Modellen dabei, robuste Merkmale zu erlernen und verhindert eine zu starke Abhängigkeit von bestimmten Bildbereichen. In Gesichtserkennungssystemen hilft das zufällige Löschen beispielsweise dabei, Modelle gegenüber teilweisen Verdeckungen wie Sonnenbrillen, Gesichtsmasken oder anderen Objekten, die Gesichtsmerkmale teilweise verdecken könnten, robuster zu machen. Dies verbessert die Leistung in der realen Welt, da das Modell gezwungen wird, Individuen anhand mehrerer Gesichtsmerkmale zu identifizieren, anstatt sich allein auf markante Merkmale zu verlassen, die möglicherweise verdeckt sind.
- Ultralytics-Implementierung: classify_augmentations()
- Hinweis:
- Die Augmentation
erasingenthält 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 Augmentation
erasing aus | erasing an (Beispiel 1) | erasing an (Beispiel 2) | erasing an (Beispiel 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Erweiterte Augmentierungsfunktionen#
Benutzerdefinierte Albumentations-Transformationen (augmentations)#
- Typ:
listvon Albumentations-Transformationen - Standard:
None - Verwendung: Ermöglicht es dir, benutzerdefinierte Albumentations-Transformationen für die Datenaugmentation über die Python-API bereitzustellen. Dieser Parameter akzeptiert eine Liste von Albumentations-Transformationsobjekten, die während des Trainings anstelle der standardmäßigen Albumentations-Transformationen angewendet werden.
- Zweck: Bietet eine feingranulare 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, wie z. B. elastische Deformationen und Rasterverzerrungen für die medizinische Bildgebung, auf Luft- und Satellitenperspektiven abgestimmte Transformationen, Rausch- und Helligkeitsverschiebungen zur Simulation von Schlechtlichtbedingungen oder defektähnliche Texturvariationen für die industrielle Inspektion.
- Ultralytics-Implementierung: Albumentations
- Hinweis:
- Das Erstellen der Transformationsobjekte erfordert die Python-API. Ultralytics serialisiert sie beim Speichern eines Checkpoints mit
A.to_dict(), sodass eine bereits serialisierte Liste eine YAML-Konfigurationsdatei oder die CLI durchläuft, wodurchresumesie wiederherstellen kann. - Benutzerdefinierte Transformationen ersetzen den standardmäßigen Albumentations-Satz vollständig. Jede an anderer Stelle auf dieser Seite konfigurierte Augmentierung –
mosaic,hsv_h,degreesund der Rest – bleibt aktiv und wird unabhängig angewendet. - Sei vorsichtig bei räumlichen Transformationen, die die Bildgeometrie verändern. Ultralytics passt Bounding Boxes automatisch an, aber einige komplexe Transformationen erfordern möglicherweise zusätzliche Konfigurationen.
- Albumentations bietet über 70 Transformationen; die Albumentations-Dokumentation listet sie alle auf. Das Hinzufügen vieler oder rechenintensiver Transformationen verlangsamt das Training, beginne also mit einem kleinen Satz und beobachte die Epochenzeit.
- Gilt für die Aufgaben
detect,segment,semantic,depth,poseundobb. Die Klassifizierung ist ausgeschlossen, da sie eine separate Augmentierungspipeline verwendet.
- Das Erstellen der Transformationsobjekte erfordert die Python-API. Ultralytics serialisiert sie beim Speichern eines Checkpoints mit
Die folgenden Beispiele benötigen 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 Wahl der richtigen Augmentierungen hängt von deinem spezifischen Anwendungsfall und Datensatz ab. Hier sind ein paar allgemeine Richtlinien, die dir bei der Entscheidung helfen können:
- In den meisten Fällen sind geringfügige Abweichungen bei Farbe und Helligkeit von Vorteil. Die Standardwerte für
hsv_h,hsv_sundhsv_vsind ein solider Ausgangspunkt. - Wenn der Kamerastandpunkt einheitlich ist und sich nach der Bereitstellung des Modells nicht ändert, kannst du geometrische Transformationen wie
rotation,translation,scale,shearoderperspectivewahrscheinlich überspringen. Wenn sich der Kamerawinkel jedoch ändern kann und das Modell robuster sein muss, ist es besser, diese Augmentationen beizubehalten. - Verwende die Augmentation
mosaicnur dann, wenn teilweise verdeckte Objekte oder mehrere Objekte pro Bild akzeptabel sind und den Label-Wert nicht verändern. Alternativ kannst dumosaicaktiv lassen, aber den Wertclose_mosaicerhöhen, um sie früher im Trainingsprozess zu deaktivieren.
Kurz gesagt: Halte es einfach. Beginne mit einer kleinen Menge an Augmentierungen und füge bei Bedarf nach und nach weitere hinzu. Das Ziel ist es, die Generalisierung und Robustheit des Modells zu verbessern, nicht den Trainingsprozess unnötig zu komplizieren. Stelle zudem sicher, dass die von dir angewendeten Augmentierungen dieselbe Datenverteilung widerspiegeln, auf die dein Modell in der Produktion treffen wird.
- In den meisten Fällen sind geringfügige Abweichungen bei Farbe und Helligkeit von Vorteil. Die Standardwerte für
Wenn das Paket
albumentationsinstalliert ist, wendet Ultralytics automatisch eine Reihe zusätzlicher Bildaugmentationen darüber an. Diese Augmentationen werden intern verwaltet und erfordern keine zusätzliche Konfiguration.Die vollständige Liste der angewendeten Transformationen findest du in unserer technischen Dokumentation sowie in unserem Albumentations-Integrationsleitfaden. Beachte, dass nur die Augmentationen mit einer Wahrscheinlichkeit
pgrößer als0aktiv sind. Diese werden gezielt mit geringer Häufigkeit angewendet, um reale visuelle Artefakte wie Unschärfe oder Graustufeneffekte zu imitieren.Du kannst auch deine eigenen benutzerdefinierten Albumentations-Transformationen über die Python-API bereitstellen. Weitere Details findest du im Abschnitt Erweiterte Augmentationsfunktionen.
Prüfe, ob das Paket
albumentationsinstalliert ist. Falls nicht, installiere es:pip install albumentationsNach der Installation sollte das Paket automatisch von Ultralytics erkannt und verwendet werden.
Du kannst Augmentierungen anpassen, indem du eine benutzerdefinierte Dataset-Klasse und einen Trainer erstellst. Beispielsweise kannst du die standardmäßigen Klassifizierungsaugmentierungen von Ultralytics durch PyTorchs torchvision.transforms.Resize oder andere Transforms ersetzen. Siehe das Beispiel für benutzerdefiniertes Training in der Klassifizierungsdokumentation für Implementierungsdetails.













































