Tipps für die besten YOLOv5-Trainingsergebnisse
📚 Dieser Leitfaden erklärt, 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 beschriftet. Wenn 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), PR-Kurve, Konfusionsmatrix, Trainingsmosaike, Testergebnisse und Datensatzstatistiken wie Bilder (labels.png). All diese Dateien befinden sich in deinem project/name-Verzeichnis, typischerweise yolov5/runs/train/exp.
Wir haben unten einen vollständigen Leitfaden für Nutzer zusammengestellt, die die besten Ergebnisse bei ihren YOLOv5-Trainings erzielen möchten.
Datensatz
- Bilder pro Klasse. ≥ 1500 Bilder pro Klasse empfohlen
- Instanzen pro Klasse. ≥ 10000 Instanzen (beschriftete Objekte) pro Klasse empfohlen
- Bildvielfalt. Diese müssen repräsentativ für die Einsatzumgebung sein. Für reale Anwendungsfälle empfehlen wir Bilder von verschiedenen Tageszeiten, Jahreszeiten, Wetterbedingungen, Beleuchtungen, Winkeln und aus verschiedenen Quellen (online gescrapt, lokal gesammelt, verschiedene Kameras) usw.
- Beschriftungskonsistenz. Alle Instanzen aller Klassen in allen Bildern müssen beschriftet sein. Teilweise Beschriftung funktioniert nicht.
- Beschriftungs-Genauigkeit. Beschriftungen müssen jedes Objekt eng umschließen. Es sollte kein Platz zwischen einem Objekt und seiner Begrenzungsbox vorhanden sein. Kein Objekt sollte ohne Beschriftung sein.
- Disziplin bei der Train/Val-Aufteilung. Stelle sicher, dass Validierungs- und Testbilder niemals im Trainingsset erscheinen, um übermäßig optimistische Metriken zu vermeiden. Halte die Klassenverteilungen zwischen den Splits ähnlich.
- Überprüfung der Beschriftung. Sieh dir zu Beginn des Trainings
train_batch*.jpgan, um zu überprüfen, ob deine Beschriftungen korrekt erscheinen, siehe z. B. das Beispiel für Mosaike. - 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 FPs zu reduzieren (COCO hat zum Vergleich 1000 Hintergrundbilder, 1 % der Gesamtzahl). Für Hintergrundbilder sind keine Beschriftungen 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 zum 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.

-
Start mit vortrainierten Gewichten. Empfohlen für kleine bis mittelgroße Datensätze (z. B. VOC, VisDrone, GlobalWheat). Übergib den Namen des Modells an das
--weights-Argument. Die Modelle werden automatisch von der neuesten 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 -
Start von Grund auf (Scratch). Empfohlen für große Datensätze (z. B. COCO, Objects365, OIv6). Übergib die YAML-Datei der Modellarchitektur, an der du interessiert bist, 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 Standardeinstellungen, um eine Leistungsbasis festzulegen. Eine vollständige Liste der Einstellungen für train.py findest du im train.py Argparser.
- Epochen. Beginne mit 300 Epochen. Wenn dies zu früh zu Overfitting führt, kannst du die Epochen reduzieren. Wenn nach 300 Epochen kein Overfitting auftritt, trainiere länger, z. B. 600, 1200 etc. Epochen.
- Bildgröße. COCO trainiert mit einer nativen Auflösung von
--img 640, obwohl es aufgrund der hohen Anzahl kleiner Objekte im Datensatz von einem Training mit höheren Auflösungen wie--img 1280profitieren kann. Wenn es viele kleine Objekte gibt, profitieren benutzerdefinierte Datensätze vom Training mit nativer oder höherer Auflösung. Die besten Inferenz-Ergebnisse werden mit derselben--img-Größe wie beim Training erzielt, 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 erlaubt. Kleine Batch-Größen führen zu schlechten Statistiken bei der Batch-Normalisierung und sollten vermieden werden. Du kannst--batch-size -1verwenden, um die optimale Batch-Größe für deine GPU automatisch auszuwählen. - 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 eine Kosinus-Lernratenplanung zu aktivieren, die die Lernrate schrittweise entlang einer Kosinuskurve über die Epochen reduziert. - Datenaugmentierung. YOLOv5 enthält verschiedene Augmentierungstechniken wie Mosaik, das mehrere Trainingsbilder kombiniert. Erwäge für die letzten paar Epochen die Verwendung von
--close-mosaic 10, um die Mosaik-Augmentierung zu deaktivieren, was zur Stabilisierung des Trainings beitragen kann. - 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 reduziert und verzögert das Erhöhen von Augmentierungs-Hyperparametern Overfitting, was längere Trainings und einen höheren finalen mAP ermöglicht. Eine Reduzierung der Gewinn-Hyperparameter der Verlustkomponenten wie
hyp['obj']hilft, Overfitting in diesen spezifischen Verlustkomponenten zu reduzieren. Für eine automatisierte Methode zur Optimierung dieser Hyperparameter siehe unser Tutorial zur Hyperparameter-Evolution. - Training mit gemischter Präzision. Aktiviere das Training mit gemischter Präzision mit
--amp, um das Training zu beschleunigen und den Speicherverbrauch zu reduzieren, 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ühzeitiger Stopp. Verwende
--patience 50, um das Training zu stoppen, wenn sich die Validierungsmetriken für 50 Epochen nicht verbessern. Das spart Zeit und verhindert Overfitting.
Fortgeschrittene Optimierungstechniken
- Transfer Learning. Beginne bei spezialisierten Datensätzen mit vortrainierten Gewichten und friere während des Trainings schrittweise Ebenen ein/aus, 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-Ensemble. 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 durch Mittelung der Ergebnisse aus augmentierten Versionen des Eingabebildes zu verbessern.
Weiterführende Literatur
Wenn du mehr wissen möchtest, ist Karpathys 'Recipe for Training Neural Networks' ein guter Einstieg, das großartige Ideen für das Training bietet, die allgemein für alle ML-Bereiche gelten: https://karpathy.github.io/2019/04/25/recipe/
Für detailliertere Informationen zu Trainingseinstellungen und Konfigurationen, siehe die Ultralytics Dokumentation zu Trainingseinstellungen, die umfassende Erklärungen zu allen verfügbaren Parametern bietet.
Viel Erfolg 🍀 und lass uns wissen, wenn du weitere Fragen hast!
FAQ
Woher weiß ich, ob mein Modell Overfitting betreibt?
Dein Modell könnte Overfitting betreiben, wenn der Trainingsverlust weiter abnimmt, während der Validierungsverlust zu steigen beginnt. Überwache den Validierungs-mAP – wenn er stagniert oder abnimmt, während sich der Trainingsverlust weiter verbessert, ist das ein Zeichen für Overfitting. Lösungen umfassen das Hinzufügen von mehr Trainingsdaten, die Erhöhung der Datenaugmentierung oder die Implementierung von Regularisierungstechniken.
Was ist die optimale Batch-Größe für das Training von YOLOv5?
Die optimale Batch-Größe hängt von deinem GPU-Speicher ab. Größere Batch-Größen bieten im Allgemeinen bessere Statistiken für die Batch-Normalisierung und Trainingsstabilität. Verwende die größte Batch-Größe, die deine Hardware ohne Speicherüberlauf verarbeiten kann. Du kannst --batch-size -1 verwenden, um automatisch die optimale Batch-Größe für dein Setup zu bestimmen.
Wie kann ich das YOLOv5-Training beschleunigen?
Um das Training zu beschleunigen, versuche Folgendes: Aktiviere das Training mit gemischter Präzision mit --amp, verwende mehrere GPUs mit --device 0,1,2,3, cäche deinen Datensatz mit --cache und optimiere deine Batch-Größe. Erwäge auch die Verwendung einer kleineren Modellvariante wie YOLOv5s, wenn die absolute Genauigkeit nicht kritisch ist.
