Zum Inhalt springen

Tipps für beste YOLOv5 Trainingsergebnisse

📚 Dieser Leitfaden erklärt, wie Sie mit YOLOv5 🚀 die besten mAP- und Trainingsergebnisse erzielen.

In den meisten Fällen lassen sich gute Ergebnisse erzielen, ohne Änderungen an den Modellen oder Trainingseinstellungen vorzunehmen, vorausgesetzt, Ihr Datensatz ist ausreichend groß und gut beschriftet. Wenn Sie nicht auf Anhieb gute Ergebnisse erzielen, gibt es Schritte, die Sie unternehmen können, um sich zu verbessern, aber wir empfehlen den Benutzern immer, zuerst mit allen Standardeinstellungen zu trainieren, bevor sie Änderungen in Erwägung ziehen. Dies hilft, eine Performance-Baseline zu erstellen und Bereiche für Verbesserungen zu 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 Ergebnisdiagramme (Trainingsverluste, Validierungsverluste, P, R, mAP), PR-Kurve, Konfusionsmatrix, Trainingsmosaike, Testergebnisse und Datensatzstatistikbilder wie labels.png. All diese befinden sich in Ihrem project/name Verzeichnis, typischerweise yolov5/runs/train/exp.

Wir haben einen umfassenden Leitfaden für Benutzer zusammengestellt, die die besten Ergebnisse bei ihren YOLOv5-Trainingsläufen erzielen möchten.

Datensatz

  • Bilder pro Klasse. ≥ 1500 Bilder pro Klasse werden empfohlen
  • Instanzen pro Klasse. ≥ 10000 Instanzen (beschriftete Objekte) pro Klasse werden empfohlen
  • Bildvielfalt. Muss repräsentativ für die Einsatzumgebung sein. Für reale Anwendungsfälle empfehlen wir Bilder von verschiedenen Tageszeiten, verschiedenen Jahreszeiten, verschiedenen Wetterbedingungen, unterschiedlicher Beleuchtung, unterschiedlichen Winkeln, unterschiedlichen Quellen (online gescraped, lokal gesammelt, verschiedene Kameras) usw.
  • Label-Konsistenz. Alle Instanzen aller Klassen in allen Bildern müssen beschriftet sein. Teilweise Beschriftung funktioniert nicht.
  • Label Genauigkeit. Labels müssen jedes Objekt eng umschließen. Zwischen einem Objekt und seiner Bounding Box darf kein Platz sein. Bei keinen Objekten darf ein Label fehlen.
  • Label-Verifizierung. Ansicht train_batch*.jpg beim Trainingsstart, um zu überprüfen, ob Ihre Labels korrekt erscheinen, d. h. siehe Beispiel Mosaik.
  • Hintergrundbilder. Hintergrundbilder sind Bilder ohne Objekte, die einem Datensatz hinzugefügt werden, um False Positives (FP) zu reduzieren. Wir empfehlen etwa 0-10% Hintergrundbilder, um FPs zu reduzieren (COCO hat 1000 Hintergrundbilder als Referenz, 1% der Gesamtzahl). Für Hintergrundbilder sind keine Beschriftungen erforderlich.

COCO-Analyse

Modellauswahl

Größere Modelle wie YOLOv5x und YOLOv5x6 erzielen 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 Anwendungen empfehlen wir YOLOv5s/m, für Cloud Anwendungen empfehlen wir YOLOv5l/x. Eine vollständige Vergleichstabelle aller Modelle finden Sie in unserer README Tabelle.

YOLOv5-Modelle

  • Beginnen 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 das --weights Argument genannt. Modelle werden automatisch von der neueste YOLOv5-Version.

    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 (d. h. COCO, Objects365, OIv6). Übergeben Sie die YAML-Datei der Modellarchitektur, an der Sie interessiert sind, zusammen mit einer 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 etwas ändern, trainieren Sie zuerst mit den Standardeinstellungen, um eine Leistungsbasislinie festzulegen. Eine vollständige Liste der train.py-Einstellungen finden Sie im train.py Argparser.

  • Epochen. Beginnen Sie mit 300 Epochen. Wenn dies frühzeitig zu Overfitting führt, können Sie die Anzahl der Epochen reduzieren. Wenn nach 300 Epochen kein Overfitting auftritt, trainieren Sie länger, d. h. 600, 1200 usw. Epochen.
  • Bildgröße. COCO trainiert mit einer nativen Auflösung von --img 640, profitiert jedoch aufgrund der hohen Anzahl kleiner Objekte im Datensatz von einem Training mit höheren Auflösungen wie --img 1280. Wenn es viele kleine Objekte gibt, profitieren benutzerdefinierte Datensätze vom Training mit nativer oder höherer Auflösung. Die besten Inferenz-Ergebnisse werden bei derselben --img als das Training durchgeführt wurde, d.h. wenn Sie bei --img 1280 sollten Sie auch bei --img 1280.
  • Batch-Größe. Verwenden Sie die größte --batch-size die Ihre Hardware zulässt. Kleine Batch-Größen führen zu schlechten Batch-Normalisierung Statistiken und sollte vermieden werden. Sie können --batch-size -1 um automatisch die optimale Batch-Größe für Ihre GPU auszuwählen.
  • Lernrate. Der Standard-Lernratenplan funktioniert in den meisten Fällen gut. Für eine schnellere Konvergenz können Sie Folgendes ausprobieren: --cos-lr um das Cosinus-Lernraten-Scheduling zu aktivieren, das die Lernrate schrittweise entlang einer Cosinuskurve über Epochen reduziert.
  • Datenaugmentierung. YOLOv5 beinhaltet verschiedene Augmentationstechniken wie Mosaic, das mehrere Trainingsbilder kombiniert. Für die letzten Epochen sollte man die Verwendung von --close-mosaic 10 um die Mosaic-Augmentierung zu deaktivieren, was zur Stabilisierung des Trainings beitragen kann.
  • Hyperparameter. Die Standard-Hyperparameter befinden sich in hyp.scratch-low.yaml. Wir empfehlen Ihnen, zuerst mit den Standard-Hyperparametern zu trainieren, bevor Sie darüber nachdenken, etwas zu ändern. Im Allgemeinen reduziert und verzögert die Erhöhung der Augmentations-Hyperparameter das Overfitting, was längere Trainings und eine höhere endgültige mAP ermöglicht. Die Reduzierung von Verlustkomponenten-Verstärkungs-Hyperparametern wie hyp['obj'] wird helfen, Overfitting in diesen spezifischen Verlustkomponenten zu reduzieren. Für eine automatisierte Methode zur Optimierung dieser Hyperparameter, siehe unsere Tutorial zur Hyperparameter-Evolution.
  • Gemischte Präzision beim Training. Aktivieren Sie 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 Sie mehrere GPUs haben, verwenden Sie --device 0,1,2,3 um das Training auf diese zu verteilen, was die Trainingszeit erheblich verkürzen kann.
  • Vorzeitiges Stoppen. Verwenden Sie --patience 50 das Training zu stoppen, wenn sich die Validierungsmetriken über 50 Epochen nicht verbessern, wodurch Zeit gespart und Overfitting verhindert wird.

Fortgeschrittene Optimierungstechniken

  • Transfer Learning. Beginnen Sie für spezielle Datensätze mit vortrainierten Gewichten und lösen Sie die Schichten während des Trainings schrittweise auf, um das Modell an Ihre spezifische Aufgabe anzupassen.
  • Model Pruning. Erwägen Sie nach dem Training, Ihr Modell zu stutzen, um redundante Gewichtungen zu entfernen und die Modellgröße ohne wesentliche Leistungseinbußen zu reduzieren.
  • Model Ensembling. Für kritische Anwendungen sollten Sie mehrere Modelle mit unterschiedlichen Konfigurationen trainieren und deren Vorhersagen kombinieren, um die Genauigkeit zu verbessern.
  • Testzeit-Augmentierung. Aktivieren Sie TTA während der Inferenz mit --augment um die Vorhersagegenauigkeit zu verbessern, indem Ergebnisse von erweiterten Versionen des Eingangsbildes gemittelt werden.

Weiterführende Informationen

Wenn Sie mehr erfahren möchten, ist Karpathys 'Recipe for Training Neural Networks' ein guter Ausgangspunkt. Es enthält großartige Ideen für das Training, die allgemein für alle ML-Bereiche gelten: https://karpathy.github.io/2019/04/25/recipe/

Für detailliertere Informationen zu Trainingseinstellungen und -konfigurationen konsultieren Sie die Ultralytics Dokumentation zu Trainingseinstellungen, die umfassende Erklärungen aller verfügbaren Parameter bietet.

Viel Erfolg 🍀 und lassen Sie uns wissen, wenn Sie weitere Fragen haben!

FAQ

Woher weiß ich, ob mein Modell überangepasst ist (Overfitting)?

Ihr Modell könnte überangepasst sein, wenn der Trainingsverlust weiter abnimmt, während der Validierungsverlust zu steigen beginnt. Überwachen Sie die Validierungs-mAP – wenn sie stagniert oder abnimmt, während sich der Trainingsverlust weiter verbessert, ist das ein Zeichen für Überanpassung. Lösungen umfassen das Hinzufügen weiterer Trainingsdaten, das Erhöhen der Datenaugmentation oder das Implementieren von Regularisierungstechniken.

Was ist die optimale Batch-Größe für das Training von YOLOv5?

Die optimale Batch-Größe hängt von Ihrem GPU-Speicher ab. Größere Batch-Größen bieten im Allgemeinen bessere Batch-Normalisierungsstatistiken und Trainingsstabilität. Verwenden Sie die größte Batch-Größe, die Ihre Hardware verarbeiten kann, ohne dass der Speicherplatz ausgeht. Sie können --batch-size -1 um automatisch die optimale Batch-Größe für Ihre Konfiguration zu bestimmen.

Wie kann ich das YOLOv5-Training beschleunigen?

Um das Training zu beschleunigen, versuchen Sie Folgendes: Aktivieren Sie das Training mit gemischter Präzision mit --amp, unter Verwendung mehrerer GPUs mit --device 0,1,2,3, Caching Ihres Datensatzes mit --cache, und optimieren Sie Ihre Batch-Größe. Erwägen Sie auch die Verwendung einer kleineren Modellvariante wie YOLOv5s, wenn absolute Genauigkeit nicht entscheidend ist.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare