Tipps für beste YOLOv5 Trainingsergebnisse
📚 In diesem Leitfaden wird erklärt, wie man mit YOLOv5 die besten mAP- und Trainingsergebnisse erzielt 🚀.
In den meisten Fällen lassen sich gute Ergebnisse erzielen, ohne dass die Modelle oder Trainingseinstellungen geändert werden müssen, vorausgesetzt, Ihr Datensatz ist ausreichend groß und gut beschriftet. Wenn Sie zunächst keine guten Ergebnisse erzielen, können Sie möglicherweise Schritte zur Verbesserung unternehmen. Wir empfehlen jedoch immer, zunächst mit allen Standardeinstellungen zu trainieren, bevor Sie Änderungen in Betracht ziehen. Auf diese Weise können Sie eine Leistungsbasis erstellen und Bereiche mit Verbesserungspotenzial erkennen.
Wenn Sie Fragen zu Ihren Trainingsergebnissen haben wir empfehlen Ihnen, so viele Informationen wie möglich anzugeben wenn Sie eine hilfreiche Antwort erwarten, einschließlich Ergebnisdiagrammen (Zugverluste, Wertverluste, P, R, mAP), PR-Kurve, Verwirrungsmatrix, Trainingsmosaike, Testergebnisse und statistische Bilder des Datensatzes wie labels.png. Alle diese Bilder befinden sich in Ihrem project/name
Verzeichnis, typischerweise yolov5/runs/train/exp
.
Im Folgenden haben wir einen vollständigen Leitfaden für Benutzer zusammengestellt, die die besten Ergebnisse bei ihren YOLOv5 Schulungen erzielen möchten.
Datensatz
- Bilder pro Klasse. ≥ 1500 Bilder pro Klasse empfohlen
- Instanzen pro Klasse. ≥ 10000 Instanzen (markierte Objekte) pro Klasse empfohlen
- Bildvielfalt. Sie müssen repräsentativ für die eingesetzte Umgebung sein. Für reale Anwendungsfälle empfehlen wir Bilder aus verschiedenen Tageszeiten, verschiedenen Jahreszeiten, verschiedenen Wetterlagen, verschiedenen Beleuchtungen, verschiedenen Blickwinkeln, verschiedenen Quellen (online gescannt, lokal gesammelt, verschiedene Kameras) usw.
- Konsistenz der Beschriftung. Alle Instanzen aller Klassen in allen Bildern müssen beschriftet werden. Eine teilweise Beschriftung ist nicht möglich.
- Genauigkeit der Etiketten. Die Beschriftungen müssen jedes Objekt eng umschließen. Zwischen einem Objekt und seinem Begrenzungsrahmen sollte kein Platz sein. Bei keinem Objekt darf eine Beschriftung fehlen.
- Überprüfung des Etiketts. Siehe
train_batch*.jpg
beim Start des Zuges, um zu überprüfen, ob Ihre Beschriftungen korrekt sind, d. h. siehe Beispiel Mosaik. - Hintergrundbilder. Hintergrundbilder sind Bilder ohne Objekte, die zu einem Datensatz hinzugefügt werden, um False Positives (FP) zu reduzieren. Wir empfehlen etwa 0-10 % Hintergrundbilder, um FP zu reduzieren (COCO hat 1000 Hintergrundbilder als Referenz, 1 % der Gesamtmenge). Für Hintergrundbilder sind keine Beschriftungen erforderlich.
Auswahl des Modells
Größere Modelle wie YOLOv5x und YOLOv5x6 liefern in fast allen Fällen bessere Ergebnisse, haben aber mehr Parameter, benötigen mehr CUDA Speicher zum Trainieren und sind langsamer in der Ausführung. Für mobile Einsätze empfehlen wir YOLOv5s/m, für Cloud-Einsätze empfehlen wir YOLOv5l/x. In unserer README-Tabelle finden Sie einen vollständigen Vergleich aller Modelle.
- Starten Sie mit vortrainierten Gewichten. Empfohlen für kleine bis mittelgroße Datensätze (d. h. VOC, VisDrone, GlobalWheat). Übergeben Sie den Namen des Modells an die Funktion
--weights
Argument. Modelle werden automatisch von der neueste Version YOLOv5.
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
- Ganz von vorne anfangen. Empfohlen für große Datensätze (d.h. COCO, Objekte365, OIv6). Übergeben Sie die YAML-Modellarchitektur, an der Sie interessiert sind, 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 Sie irgendetwas ändern, trainieren Sie zunächst mit den Standardeinstellungen, um eine Leistungsbasis zu schaffen. Eine vollständige Liste der train.py-Einstellungen finden Sie in der train.py-Argparser-Datei.
- Epochen. Beginnen Sie mit 300 Epochen. Wenn es zu früh zu einer Überanpassung kommt, können Sie die Epochenanzahl verringern. Wenn nach 300 Epochen keine Überanpassung auftritt, trainieren Sie länger, d. h. 600, 1200 usw. Epochen.
- Bildgröße. COCO trainiert mit einer nativen Auflösung von
--img 640
Aufgrund des hohen Anteils kleiner Objekte im Datensatz kann das Training bei höheren Auflösungen wie--img 1280
. Wenn es viele kleine Objekte gibt, profitieren benutzerdefinierte Datensätze vom Training in nativer oder höherer Auflösung. Die besten Inferenzergebnisse werden mit der gleichen--img
wie das Training durchgeführt wurde, d.h. wenn Sie bei--img 1280
sollten Sie auch prüfen und feststellen, ob--img 1280
. - Chargengröße. Verwenden Sie die größte
--batch-size
die Ihre Hardware zulässt. Kleine Losgrößen erzeugen schlechte Batch-Normalisierung Statistiken und sollten vermieden werden. Sie können verwenden--batch-size -1
um automatisch die optimale Stapelgröße für Ihre GPU auszuwählen. - Lerntempo. Der standardmäßige Lernratenplan funktioniert in den meisten Fällen gut. Um eine schnellere Konvergenz zu erreichen, können Sie versuchen, die
--cos-lr
Flagge, um die kosinusförmige Lernratenplanung zu aktivieren, die die Lernrate schrittweise entlang einer Kosinuskurve über Epochen hinweg reduziert. - Datenerweiterung. YOLOv5 umfasst verschiedene Augmentierungstechniken wie das Mosaik, das mehrere Trainingsbilder kombiniert. Für die letzten paar Epochen sollten Sie Folgendes in Betracht ziehen
--close-mosaic 10
um die Mosaikvergrößerung zu deaktivieren, was zur Stabilisierung des Trainings beitragen kann. - Hyperparameter. Standard-Hyperparameter sind in hyp.scratch-low.yaml. Wir empfehlen Ihnen, zunächst mit den Standard-Hyperparametern zu trainieren, bevor Sie eine Änderung in Erwägung ziehen. Im Allgemeinen reduziert und verzögert eine Erhöhung der Augmentierungs-Hyperparameter die Überanpassung, was längere Trainings und höhere endgültige mAP ermöglicht. Verringerung der Verlustkomponentenverstärkungs-Hyperparameter wie
hyp['obj']
wird dazu beitragen, die Überanpassung in diesen spezifischen Verlustkomponenten zu reduzieren. Eine automatische Methode zur Optimierung dieser Hyperparameter finden Sie in unserer Hyperparameter Evolution Tutorial. - Gemischtes Präzisionstraining. Ermöglichen Sie gemischtes Präzisionstraining mit
--amp
um das Training zu beschleunigen und die Speichernutzung zu reduzieren, ohne die Modellgenauigkeit zu beeinträchtigen. - GPU . Wenn Sie mehrere GPUs haben, verwenden Sie
--device 0,1,2,3
um die Ausbildung auf sie zu verteilen, was die Ausbildungszeit erheblich verkürzen kann. - Frühes Aufhören. Verwenden Sie
--patience 50
um das Training abzubrechen, wenn sich die Validierungsmetriken 50 Epochen lang nicht verbessern, was Zeit spart und eine Überanpassung verhindert.
Fortgeschrittene Optimierungstechniken
- Transfer-Lernen. Beginnen Sie bei spezialisierten Datensätzen mit vortrainierten Gewichten und lösen Sie während des Trainings schrittweise Schichten auf, um das Modell an Ihre spezielle Aufgabe anzupassen.
- Modellbereinigung. Nach dem Training sollten Sie Ihr Modell bereinigen, um überflüssige Gewichte zu entfernen und die Modellgröße ohne signifikante Leistungseinbußen zu reduzieren.
- Modell-Ensemble. Trainieren Sie für kritische Anwendungen mehrere Modelle mit unterschiedlichen Konfigurationen und kombinieren Sie deren Vorhersagen, um die Genauigkeit zu verbessern.
- Vergrößerung der Testzeit. Aktivieren Sie TTA während der Inferenz mit
--augment
um die Vorhersagegenauigkeit zu verbessern, indem die Ergebnisse von erweiterten Versionen des Eingangsbildes gemittelt werden.
Weitere Lektüre
Wenn Sie mehr wissen möchten, ist Karpathys "Rezept für das Training neuronaler Netze" ein guter Ausgangspunkt. Es enthält großartige Ideen für das Training, die für alle ML-Domänen gelten: https://karpathy.github.io/2019/04/25/recipe/
Ausführlichere Informationen zu den Trainingseinstellungen und -konfigurationen finden Sie in der Ultralytics zu den Trainingseinstellungen, die umfassende Erläuterungen zu allen verfügbaren Parametern enthält.
Viel Glück 🍀 und lassen Sie uns wissen, wenn Sie weitere Fragen haben!
FAQ
Wie erkenne ich, ob mein Modell überangepasst ist?
Ihr Modell ist möglicherweise überangepasst, wenn der Trainingsverlust weiter abnimmt, während der Validierungsverlust zu steigen beginnt. Überwachen Sie den Validierungs-MAP - wenn er sich auf einem Plateau einpendelt oder abnimmt, während der Trainingsverlust weiter zunimmt, ist das ein Zeichen für eine Überanpassung. Zu den Lösungen gehören das Hinzufügen weiterer Trainingsdaten, die Erhöhung der Datenvergrößerung oder die Implementierung von Regularisierungstechniken.
Was ist die optimale Losgröße für das Training von YOLOv5?
Die optimale Stapelgröße hängt von Ihrem GPU ab. Größere Stapelgrößen bieten im Allgemeinen bessere Stapelnormalisierungsstatistiken und Trainingsstabilität. Verwenden Sie die größte Stapelgröße, die Ihre Hardware verarbeiten kann, ohne dass der Speicher knapp wird. Sie können verwenden --batch-size -1
um automatisch die optimale Chargengröße für Ihre Einrichtung zu ermitteln.
Wie kann ich das YOLOv5 beschleunigen?
Um das Training zu beschleunigen, versuchen Sie: gemischtes Präzisionstraining zu aktivieren mit --amp
unter Verwendung mehrerer GPUs mit --device 0,1,2,3
, Zwischenspeichern Ihres Datensatzes mit --cache
und die Optimierung der Losgröße. Erwägen Sie auch die Verwendung einer kleineren Modellvariante wie YOLOv5s, wenn die absolute Genauigkeit nicht entscheidend ist.