Tipps für die besten YOLOv5 Trainingsergebnisse#
📚 Dieser Leitfaden erklärt dir, wie du mit YOLOv5 die besten mAP- und Trainingsergebnisse erzielst 🚀.
Meistens lassen sich gute Ergebnisse ohne Änderungen an den Modellen oder Trainingseinstellungen erzielen, vorausgesetzt, dein Datensatz ist ausreichend groß und gut annotiert. Falls du anfangs keine guten Ergebnisse erhältst, gibt es Schritte, die du zur Verbesserung unternehmen kannst. Wir empfehlen jedoch immer, zuerst mit allen Standardeinstellungen zu trainieren, bevor du Änderungen in Betracht ziehst. Dies hilft dabei, eine Leistungsbasis zu schaffen und Bereiche für Verbesserungen zu identifizieren.
Wenn du Fragen zu deinen Trainingsergebnissen hast, empfehlen wir dir, so viele Informationen wie möglich bereitzustellen, wenn du eine hilfreiche Antwort erwartest. Dazu gehören Ergebnisdiagramme (Trainingsverluste, Validierungsverluste, P, R, mAP), die PR-Kurve, die Konfusionsmatrix, Trainingsmosaike, Testergebnisse und Dataset-Statistikbilder wie labels.png. All diese befinden sich in deinem project/name-Verzeichnis, typischerweise yolov5/runs/train/exp.
Wir haben unten einen vollständigen Leitfaden für Nutzer zusammengestellt, die bei ihren YOLOv5-Trainings die besten Ergebnisse erzielen möchten.
Datensatz#
- Bilder pro Klasse. ≥ 1500 Bilder pro Klasse empfohlen
- Instanzen pro Klasse. ≥ 10000 Instanzen (annotierte Objekte) pro Klasse empfohlen
- Bildvielfalt. Diese muss repräsentativ für die Einsatzumgebung sein. Für reale Anwendungsfälle empfehlen wir Bilder von verschiedenen Tageszeiten, Jahreszeiten, Wetterbedingungen, Beleuchtungen, Blickwinkeln und aus verschiedenen Quellen (online gescrapt, lokal gesammelt, verschiedene Kameras) etc.
- Label-Konsistenz. Alle Instanzen aller Klassen müssen in allen Bildern annotiert sein. Teilweise Annotierung funktioniert nicht.
- Label-Genauigkeit. Labels müssen jedes Objekt eng umschließen. Zwischen einem Objekt und seinem Bounding Box darf kein Abstand bestehen. Bei keinem Objekt darf ein Label fehlen.
- Disziplin bei der Train/Val-Aufteilung. Stelle sicher, dass Validierungs- und Testbilder niemals im Trainingsdatensatz erscheinen, um allzu optimistische Metriken zu vermeiden. Halte die Klassenverteilungen zwischen den Splits ähnlich.
- Label-Überprüfung. Sieh dir
train_batch*.jpgzu Beginn des Trainings an, um zu überprüfen, ob deine Labels korrekt erscheinen, d. h. siehe das Beispiel-Mosaik. - Hintergrundbilder. Hintergrundbilder sind Bilder ohne Objekte, die einem Datensatz hinzugefügt werden, um falsch-positive Ergebnisse (FP) zu reduzieren. Wir empfehlen etwa 0-10 % Hintergrundbilder, um die FPs zu verringern (COCO hat als Referenz 1000 Hintergrundbilder, das entspricht 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, erfordern mehr CUDA-Speicher beim Training und sind langsamer in der Ausführung. Für Mobile-Bereitstellungen empfehlen wir YOLOv5s/m, für Cloud-Bereitstellungen empfehlen wir YOLOv5l/x. Siehe unsere README-Tabelle für einen vollständigen Vergleich aller Modelle.

-
Starte mit vortrainierten Gewichten. Empfohlen für kleine bis mittlere Datensätze (d. h. VOC, VisDrone, GlobalWheat). Übergib den Namen des Modells an das Argument
--weights. Modelle werden automatisch aus dem neuesten YOLOv5-Release 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 -
Starte von Grund auf. Empfohlen für große Datensätze (d. h. COCO, Objects365, OIv6). Übergib die Modellarchitektur-YAML, die dich interessiert, zusammen mit einem leeren
--weights ''-Argument: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 Leistungsbasis zu schaffen. Eine vollständige Liste der train.py-Einstellungen findest du im train.py-Argparser.
- Epochen. Starte mit 300 Epochen. Wenn dies zu früh überanpasst (Overfitting), kannst du die Epochen reduzieren. Wenn nach 300 Epochen kein Overfitting auftritt, trainiere länger, z. B. 600, 1200 usw. Epochen.
- Bildgröße. COCO trainiert mit nativer Auflösung von
--img 640, profitiert jedoch aufgrund der vielen kleinen Objekte im Datensatz möglicherweise vom Training bei höheren Auflösungen wie--img 1280. Wenn es viele kleine Objekte gibt, profitieren eigene Datensätze vom Training bei naiver oder höherer Auflösung. Die besten Inferenzergebnisse werden bei demselben--imgerzielt, bei dem auch das Training ausgeführt wurde, d. h. wenn du bei--img 1280trainierst, solltest du auch bei--img 1280testen und erkennen. - Batch-Größe. Verwende die größte
--batch-size, die deine Hardware zulässt. Kleine Batch-Größen erzeugen schlechte Batch-Normalisierung-Statistiken und sollten vermieden werden. Du kannst--batch-size -1verwenden, um die optimale Batch-Größe für deine GPU automatisch auszuwählen. - L Lernrate. Der Standard-Lernratenplan funktioniert in den meisten Fällen gut. Für eine schnellere Konvergenz kannst du versuchen, das Flag
--cos-lrzu verwenden, um ein Cosinus-Lernraten-Scheduling zu aktivieren, das die Lernrate über die Epochen hinweg allmählich nach einer Cosinus-Kurve reduziert. - Datenaugmentation. YOLOv5 enthält verschiedene Augmentationstechniken wie Mosaik, das mehrere Trainingsbilder kombiniert. Passe die Augmentationsstärke über den Hyperparameter
mosaicin deiner--hyp-Datei an, um das Training zu stabilisieren. - Hyperparameter. Standard-Hyperparameter befinden sich in hyp.scratch-low.yaml. Wir empfehlen dir, zuerst mit den Standard-Hyperparametern zu trainieren, bevor du über änderungen nachdenkst. Im Allgemeinen verringern und verzögern erhöhte Augmentations-Hyperparameter das Overfitting, was längere Trainings und einen höheren finalen mAP ermöglicht. Eine Reduzierung der Verlustkomponenten-Gain-Hyperparameter wie
hyp['obj']trägt dazu bei, Overfitting in diesen spezifischen Verlustkomponenten zu reduzieren. Eine automatisierte Methode zur Optimierung dieser Hyperparameter findest du in unserem Hyperparameter-Evolutions-Tutorial. - Gemischte Präzision-Training. YOLOv5 aktiviert Automatic Mixed Precision (AMP) automatisch, wenn eine unterstützte GPU erkannt wird. Dies beschleunigt das Training und reduziert den Speicherverbrauch, ohne die Modellgenauigkeit zu beeinträchtigen.
- Multi-GPU-Training. Wenn du mehrere GPUs hast, verwende
--device 0,1,2,3, um das Training auf diese zu verteilen, was die Trainingszeit erheblich verkürzen kann. - Frühes stoppen (Early Stopping). Verwende
--patience 50, um das Training zu stoppen, wenn sich die Validierungsmetriken 50 Epochen lang nicht verbessern, was Zeit spart und Overfitting verhindert.
Fortgeschrittene Optimierungstechniken#
- Transferlernen. Starte bei spezialisierten Datensätzen mit vortrainierten Gewichten und entriegele während des Trainings schrittweise Schichten, um das Modell an deine spezifische Aufgabe anzupassen.
- Modell-Pruning. Erwäge nach dem Training das Pruning deines Modells, um redundante Gewichte zu entfernen und die Modellgröße ohne signifikanten Leistungsverlust zu reduzieren.
- Modell-Ensembling. Trainiere für kritische Anwendungen mehrere Modelle mit unterschiedlichen Konfigurationen und kombiniere deren Vorhersagen für eine verbesserte Genauigkeit.
- Test-Time Augmentation. Aktiviere TTA während der Inferenz mit
--augment, um die Vorhersagegenauigkeit zu verbessern, indem die Ergebnisse aus augmentierten Versionen des Eingabebildes gemittelt werden.
Weiterführende Literatur#
Wenn du mehr wissen möchtest, ist Karpathys „Recipe for Training Neural Networks“ ein guter Startpunkt. Es bietet großartige Ideen für das Training, die branchenweit über alle ML-Bereiche hinweg anwendbar sind: https://karpathy.github.io/2019/04/25/recipe/
Ausführlichere Informationen zu Trainingseinstellungen und Konfigurationen findest du in der Dokumentation zu Ultralytics-Traineinstellungen, die umfassende Erklärungen aller verfügbaren Parameter bietet.
Viel Erfolg 🍀 und sag uns Bescheid, wenn du weitere Fragen hast!
FAQ#
Dein Modell könnte überanpassen, wenn der Trainingsverlust weiter sinkt, während der Validierungsverlust zu steigen beginnt. Überwache den Validierungs-mAP – wenn er stagniert oder sinkt, während sich der Trainingsverlust weiter verbessert, ist das ein Anzeichen für Overfitting. Lösungen umfassen das Hinzufügen von mehr Trainingsdaten, die Erhöhung der Datenaugmentation oder die Implementierung von Regularisierungstechniken.
Die optimale Batch-Größe hängt von deinem GPU-Speicher ab. Größere Batch-Größen bieten im Allgemeinen bessere Batch-Normalisierungsstatistiken und Trainingsstabilität. Verwende die größte Batch-Größe, die deine Hardware verarbeiten kann, ohne dass der Speicher ausgeht. Du kannst
--batch-size -1verwenden, um die optimale Batch-Größe für dein Setup automatisch zu ermitteln.Um das Training zu beschleunigen, versuche Folgendes: Verwende mehrere GPUs mit
--device 0,1,2,3, cache deinen Datensatz mit--cacheund optimiere deine Batch-Größe (Mixed Precision wird auf unterstützten GPUs automatisch aktiviert). Erwäge außerdem die Verwendung einer kleineren Modellvariante wie YOLOv5s, wenn absolute Genauigkeit nicht entscheidend ist.
