Tipps für beste 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 darf kein Abstand bestehen. 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
yolov5m.pt
yolov5l.pt
yolov5x.pt
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
yolov5m.yaml
yolov5l.yaml
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 führen zu schlechten Batchnorm-Statistiken und sollten vermieden werden. - 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.
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/
Viel Glück 🍀 und lassen Sie uns wissen, wenn Sie weitere Fragen haben!