Tipps für optimale Trainingsergebnisse mit YOLOv5#
📚 Diese Anleitung erklärt, wie du mit YOLOv5 den bestmöglichen mAP und optimale Trainingsergebnisse erzielst 🚀.
Meistens lassen sich gute Ergebnisse erzielen, ohne die Modelle oder Trainingseinstellungen zu ändern, sofern dein Datensatz ausreichend groß und gut gelabelt ist. Falls du nicht gleich gute Ergebnisse erzielst, kannst du einige Schritte unternehmen, um sie zu verbessern. Wir empfehlen jedoch immer, zuerst mit allen Standardeinstellungen zu trainieren, bevor du Änderungen in Betracht ziehst. So erhältst du eine Ausgangsbasis für die Leistung und kannst Verbesserungsmöglichkeiten erkennen.
Wenn du Fragen zu deinen Trainingsergebnissen hast, empfehlen wir dir, möglichst viele Informationen bereitzustellen, damit du eine hilfreiche Antwort erhältst. Dazu gehören Ergebnisdiagramme (Trainingsverluste, Validierungsverluste, P, R, mAP), die PR-Kurve, die Konfusionsmatrix, Trainingsmosaike, Testergebnisse und Bilder mit Datensatzstatistiken wie labels.png. All diese Dateien befinden sich in deinem Verzeichnis project/name, üblicherweise unter yolov5/runs/train/exp.
Im Folgenden haben wir eine umfassende Anleitung für alle zusammengestellt, die optimale Ergebnisse beim Training mit YOLOv5 erzielen möchten.
Datensatz#
- Bilder pro Klasse. Empfohlen werden ≥ 1500 Bilder pro Klasse
- Instanzen pro Klasse. Empfohlen werden ≥ 10000 Instanzen (gelabelte Objekte) pro Klasse
- Bildvielfalt. Die Bilder müssen repräsentativ für die Einsatzumgebung sein. Für Anwendungen in der Praxis empfehlen wir Bilder zu verschiedenen Tageszeiten, aus unterschiedlichen Jahreszeiten, bei unterschiedlichem Wetter und Lichtverhältnissen, aus verschiedenen Blickwinkeln und unterschiedlichen Quellen (aus dem Internet gesammelt, vor Ort aufgenommen, mit verschiedenen Kameras) usw.
- Konsistenz der Labels. Alle Instanzen aller Klassen in allen Bildern müssen gelabelt sein. Unvollständiges Labeling funktioniert nicht.
- Genauigkeit der Labels. Die Labels müssen jedes Objekt eng umschließen. Zwischen einem Objekt und seinem Begrenzungsrahmen darf kein Abstand sein. Kein Objekt darf ohne Label bleiben.
- Sorgfältige Aufteilung in Trainings- und Validierungsdaten. Achte darauf, dass Bilder aus Validierungs- und Testdaten nicht im Trainingsdatensatz vorkommen, damit die Metriken nicht zu optimistisch ausfallen. Die Klassenverteilungen sollten in den jeweiligen Teilmengen ähnlich sein.
- Überprüfung der Labels. Sieh dir beim Start des Trainings
train_batch*.jpgan, um zu überprüfen, ob deine Labels korrekt angezeigt werden, also etwa das Beispiel-Mosaik. - Hintergrundbilder. Hintergrundbilder enthalten keine Objekte und werden einem Datensatz hinzugefügt, um falsch-positive Ergebnisse (FP) zu reduzieren. Wir empfehlen, etwa 0–10 % Hintergrundbilder zu verwenden, um falsch-positive Ergebnisse (FPs) zu reduzieren (COCO enthält zum Vergleich 1000 Hintergrundbilder, also 1 % der Gesamtmenge). Für Hintergrundbilder sind keine Labels erforderlich.
Modellauswahl#
Größere Modelle wie YOLOv5x und YOLOv5x6 liefern in fast allen Fällen bessere Ergebnisse, haben jedoch mehr Parameter, benötigen beim Training mehr CUDA-Speicher und laufen langsamer. Für den mobilen Einsatz empfehlen wir YOLOv5s/m, für den Einsatz in der Cloud YOLOv5l/x. Einen vollständigen Vergleich aller Modelle findest du in der Tabelle unserer README.

-
Mit vortrainierten Gewichten starten. Empfohlen für kleine bis mittelgroße Datensätze (z. B. VOC, VisDrone, GlobalWheat). Übergib den Modellnamen an das Argument
--weights. Modelle werden automatisch aus der aktuellsten YOLOv5-Version heruntergeladen.python train.py --data custom.yaml --weights yolov5s.pt python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt -
Von Grund auf neu beginnen. Empfohlen für große Datensätze (z. B. COCO, Objects365, OIv6). Übergib die YAML-Datei der gewünschten Modellarchitektur zusammen mit einem leeren Argument
--weights '':python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
Trainingseinstellungen#
Bevor du etwas änderst, trainiere zuerst mit den Standardeinstellungen, um eine Ausgangsbasis für die Leistung zu erhalten. Eine vollständige Liste der Einstellungen für train.py findest du im Argumentparser von train.py.
- Epochen. Beginne mit 300 Epochen. Wenn das Modell früh überangepasst wird, kannst du die Anzahl der Epochen verringern. Tritt nach 300 Epochen keine Überanpassung auf, trainiere länger, z. B. 600, 1200 usw. Epochen.
- Bildgröße. COCO wird mit der nativen Auflösung von
--img 640trainiert. Aufgrund der vielen kleinen Objekte im Datensatz kann das Training mit höheren Auflösungen wie--img 1280jedoch Vorteile bringen. Bei vielen kleinen Objekten profitieren benutzerdefinierte Datensätze vom Training mit nativer oder höherer Auflösung. Die besten Inferenzresultate erhältst du bei derselben--img, mit der das Modell trainiert wurde. Wenn du also mit--img 1280trainierst, solltest du auch mit--img 1280testen und Objekte erkennen. - Batch-Größe. Verwende die größtmögliche
--batch-size, die deine Hardware unterstützt. Kleine Batch-Größen führen zu schlechten Statistiken bei der Batch-Normalisierung und sollten vermieden werden. Mit--batch-size -1kannst du automatisch die optimale Batch-Größe für deine GPU auswählen. - Lernrate. Der standardmäßige Lernratenplan funktioniert in den meisten Fällen gut. Für eine schnellere Konvergenz kannst du das Flag
--cos-lrverwenden, um einen Lernratenplan mit Kosinus-Abnahme zu aktivieren. Dabei wird die Lernrate im Verlauf der Epochen schrittweise entsprechend einer Kosinuskurve verringert. - Datenerweiterung. YOLOv5 bietet verschiedene Verfahren zur Datenerweiterung, etwa Mosaik, bei dem mehrere Trainingsbilder kombiniert werden. Passe die Stärke der Datenerweiterung über den Hyperparameter
mosaicin deiner Datei--hypan, um das Training zu stabilisieren. - Hyperparameter. Die Standard-Hyperparameter findest du in hyp.scratch-low.yaml. Wir empfehlen, zuerst mit den Standard-Hyperparametern zu trainieren, bevor du Änderungen in Betracht ziehst. Generell verringert eine Erhöhung der Hyperparameter für die Datenerweiterung die Überanpassung und verzögert sie. Dadurch sind längere Trainingsläufe und ein höherer endgültiger mAP möglich. Eine Verringerung der Verstärkungshyperparameter für Verlustkomponenten wie
hyp['obj']hilft, die Überanpassung bei den jeweiligen Verlustkomponenten zu reduzieren. Eine automatische Methode zur Optimierung dieser Hyperparameter findest du in unserem Tutorial zur Hyperparameter-Evolution. - Training mit gemischter Genauigkeit. YOLOv5 aktiviert automatisch Automatic Mixed Precision (AMP), sobald eine unterstützte GPU erkannt wird. Das beschleunigt das Training und senkt den Speicherbedarf, ohne die Modellgenauigkeit zu beeinträchtigen.
- Training mit mehreren GPUs. Wenn du mehrere GPUs hast, kannst du mit
--device 0,1,2,3das Training auf diese verteilen und so die Trainingszeit deutlich verkürzen. - Früher Abbruch. Mit
--patience 50kannst du das Training beenden, wenn sich die Validierungsmetriken 50 Epochen lang nicht verbessern. So sparst du Zeit und beugst Überanpassung vor.
Fortgeschrittene Optimierungsverfahren#
- Transferlernen. Beginne bei spezialisierten Datensätzen mit vortrainierten Gewichten und frieren optional Schichten ein, indem du
--freezeverwendest, um das Modell an deine spezifische Aufgabe anzupassen. - Modellbeschneidung. Du kannst dein Modell nach dem Training beschneiden, um überflüssige Gewichte zu entfernen und die Modellgröße ohne nennenswerte Leistungseinbußen zu verringern.
- Modellensemble. Trainiere für kritische Anwendungen mehrere Modelle mit unterschiedlichen Konfigurationen und kombiniere deren Vorhersagen, um die Genauigkeit zu verbessern.
- Testzeit-Augmentierung. Aktiviere TTA während der Inferenz mit
--augment, um die Vorhersagegenauigkeit zu verbessern, indem du die Ergebnisse augmentierter Versionen des Eingabebildes mittelst.
Weiterführende Lektüre#
Wenn du mehr erfahren möchtest, ist Karpathys „Rezept für das Training von neuronalen Netzen“ ein guter Einstieg. Es enthält hervorragende Trainingsideen, die sich auf viele Bereiche des maschinellen Lernens übertragen lassen: https://karpathy.github.io/2019/04/25/recipe/
Viel Erfolg 🍀 und lass uns wissen, wenn du noch Fragen hast!
Häufig gestellte Fragen#
Dein Modell könnte überangepasst sein, wenn der Trainingsverlust weiter sinkt, während der Validierungsverlust zu steigen beginnt. Beobachte den Validierungs-mAP: Wenn er stagniert oder sinkt, während sich der Trainingsverlust weiter verbessert, ist das ein Anzeichen für Überanpassung. Mögliche Lösungen sind zusätzliche Trainingsdaten, eine stärkere Datenerweiterung oder Regularisierungsverfahren.
Die optimale Batch-Größe hängt vom GPU-Speicher ab. Größere Batch-Größen liefern im Allgemeinen bessere Statistiken bei der Batch-Normalisierung und sorgen für ein stabileres Training. Verwende die größtmögliche Batch-Größe, die deine Hardware ohne Speichermangel bewältigt. Mit
--batch-size -1kannst du die optimale Batch-Größe für deine Konfiguration automatisch ermitteln.Um das Training zu beschleunigen, kannst du mehrere GPUs mit
--device 0,1,2,3verwenden, deinen Datensatz mit--cachezwischenspeichern und die Batch-Größe optimieren (auf unterstützten GPUs wird gemischte Genauigkeit automatisch aktiviert). Ziehe auch eine kleinere Modellvariante wie YOLOv5s in Betracht, wenn höchste Genauigkeit nicht entscheidend ist.
