YOLO Vision 2026:

Tipps für optimale YOLOv5-Trainingsergebnisse#

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

In den meisten Fällen lassen sich gute Ergebnisse erzielen, ohne die Modelle oder Trainingseinstellungen zu ändern, sofern dein Datensatz ausreichend groß und gut annotiert ist. Wenn du zunächst keine guten Ergebnisse erzielst, kannst du möglicherweise einige Schritte zur Verbesserung unternehmen. Wir empfehlen jedoch immer, zuerst mit allen Standardeinstellungen zu trainieren, bevor du Änderungen in Betracht ziehst. So legst du eine Leistungsbaseline fest und erkennst Bereiche mit Verbesserungspotenzial.

Wenn du Fragen zu deinen Trainingsergebnissen hast, empfehlen wir dir, möglichst viele Informationen bereitzustellen, wenn du eine hilfreiche Antwort erwartest. Dazu gehören Ergebnisdiagramme (Trainingsverluste, Validierungsverluste, P, R, mAP), die PR-Kurve, die Konfusionsmatrix, Trainingsmosaike, Testergebnisse und Bilder mit Datensatzstatistiken wie labels.png. All diese Dateien befinden sich in deinem Verzeichnis project/name, normalerweise unter yolov5/runs/train/exp.

Nachfolgend haben wir einen vollständigen Leitfaden für alle zusammengestellt, die mit ihrem YOLOv5-Training 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. Muss für die Einsatzumgebung repräsentativ sein. Für Anwendungsfälle in der Praxis empfehlen wir Bilder aus unterschiedlichen Tageszeiten, Jahreszeiten, Wetterbedingungen und Beleuchtungssituationen sowie aus verschiedenen Blickwinkeln und Quellen (online gesammelt, lokal erfasst, mit unterschiedlichen Kameras) usw.
  • Konsistenz der Annotationen. Alle Instanzen aller Klassen in allen Bildern müssen annotiert sein. Teilweise Annotationen funktionieren nicht.
  • Genauigkeit der Annotationen. Die Annotationen müssen jedes Objekt eng umschließen. Zwischen einem Objekt und seiner Bounding Box darf kein Abstand bestehen. Kein Objekt darf ohne Annotation sein.
  • Konsequente Aufteilung in Training und Validierung. Stelle sicher, dass Validierungs- und Testbilder niemals im Trainingssatz erscheinen, um zu optimistische Metriken zu vermeiden. Halte die Klassenverteilungen zwischen den Aufteilungen ähnlich.
  • Überprüfung der Annotationen. Zeige train_batch*.jpg zu Beginn des Trainings an, um zu überprüfen, ob deine Annotationen korrekt erscheinen, also beispielsweise ein Mosaik zu sehen.
  • Hintergrundbilder. Hintergrundbilder enthalten keine Objekte und werden einem Datensatz hinzugefügt, um False Positives (FP) zu reduzieren. Wir empfehlen etwa 0–10 % Hintergrundbilder, um FPs zu verringern (COCO enthält zum Vergleich 1000 Hintergrundbilder, also 1 % der Gesamtmenge). Für Hintergrundbilder sind keine Annotationen erforderlich.

COCO dataset class distribution analysis

Modellauswahl#

Größere Modelle wie YOLOv5x und YOLOv5x6 liefern in nahezu allen Fällen bessere Ergebnisse, verfügen jedoch über mehr Parameter, benötigen beim Training mehr CUDA-Speicher und laufen langsamer. Für mobile Bereitstellungen empfehlen wir YOLOv5s/m, für Cloud-Bereitstellungen YOLOv5l/x. In der Tabelle unserer README findest du einen vollständigen Vergleich aller Modelle.

YOLOv5 Models

  • Mit vortrainierten Gewichten beginnen. Empfohlen für kleine bis mittelgroße Datensätze (z. B. VOC, VisDrone, GlobalWheat). Übergebe den Namen des Modells an das Argument --weights. Modelle werden automatisch aus 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
  • Bei null beginnen. Empfohlen für große Datensätze (z. B. COCO, Objects365, OIv6). Übergebe die YAML-Datei der gewünschten Modellarchitektur zusammen mit einem leeren Argument --weights '':

    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 Leistungsbaseline festzulegen. Eine vollständige Liste der Einstellungen von train.py findest du im Argumentparser von train.py.

  • Epochen. Beginne mit 300 Epochen. Wenn es früh zu einer Überanpassung kommt, kannst du die Anzahl der Epochen reduzieren. Tritt nach 300 Epochen keine Überanpassung auf, trainiere länger, z. B. 600, 1200 usw. Epochen.
  • Bildgröße. COCO wird mit der nativen Auflösung --img 640 trainiert. Aufgrund der großen Anzahl kleiner Objekte im Datensatz kann das Training mit höheren Auflösungen wie --img 1280 jedoch Vorteile bieten. Wenn viele kleine Objekte vorhanden sind, profitieren benutzerdefinierte Datensätze vom Training mit nativer oder höherer Auflösung. Die besten Inferenz-Ergebnisse werden mit derselben --img erzielt, mit der trainiert wurde. Wenn du also mit --img 1280 trainierst, solltest du auch mit --img 1280 testen und Objekte erkennen.
  • Batchgröße. Verwende die größte --batch-size, die deine Hardware zulässt. Kleine Batchgrößen führen zu schlechten Statistiken für die Batch-Normalisierung und sollten vermieden werden. Mit --batch-size -1 kannst du die optimale Batchgröße für deine GPU automatisch auswählen.
  • Lernrate. Der standardmäßige Lernratenplan funktioniert in den meisten Fällen gut. Für eine schnellere Konvergenz kannst du das Flag --cos-lr verwenden, um eine Lernratenplanung nach einer Kosinuskurve zu aktivieren. Dabei wird die Lernrate über die Epochen hinweg schrittweise entsprechend einer Kosinuskurve reduziert.
  • Datenerweiterung. YOLOv5 umfasst verschiedene Erweiterungstechniken wie Mosaike, bei denen mehrere Trainingsbilder kombiniert werden. Passe die Stärke der Datenerweiterung über den Hyperparameter mosaic in deiner Datei --hyp an, um das Training zu stabilisieren.
  • Hyperparameter. Die Standard-Hyperparameter befinden sich in hyp.scratch-low.yaml. Wir empfehlen, zuerst mit den Standard-Hyperparametern zu trainieren, bevor du Änderungen in Betracht ziehst. Im Allgemeinen verringert und verzögert das Erhöhen der Hyperparameter für die Datenerweiterung die Überanpassung und ermöglicht längere Trainings sowie einen höheren finalen mAP. Das Verringern von Hyperparametern für den Verstärkungsfaktor von Verlustkomponenten wie hyp['obj'] hilft, die Überanpassung in den jeweiligen Verlustkomponenten zu reduzieren. Eine automatisierte Methode zur Optimierung dieser Hyperparameter findest du in unserem Tutorial zur Hyperparameter-Evolution.
  • Training mit gemischter Präzision. YOLOv5 aktiviert automatisch Automatic Mixed Precision (AMP), sobald eine unterstützte GPU erkannt wird. Dadurch wird das Training beschleunigt und der Speicherbedarf reduziert, ohne die Modellgenauigkeit zu beeinträchtigen.
  • Training mit mehreren GPUs. Wenn du mehrere GPUs hast, verwende --device 0,1,2,3, um das Training auf sie zu verteilen und dadurch die Trainingszeit deutlich zu verkürzen.
  • Früher Abbruch. Verwende --patience 50, um das Training zu beenden, wenn sich die Validierungsmetriken 50 Epochen lang nicht verbessern. So sparst du Zeit und verhinderst eine Überanpassung.

Fortgeschrittene Optimierungstechniken#

  • Transferlernen. Beginne bei spezialisierten Datensätzen mit vortrainierten Gewichten und setze während des Trainings schrittweise weitere Schichten frei, um das Modell an deine spezifische Aufgabe anzupassen.
  • Modellbeschneidung. Erwäge nach dem Training, dein Modell zu beschneiden, um redundante Gewichte zu entfernen und die Modellgröße ohne wesentlichen Leistungsverlust zu reduzieren.
  • Modellensemble. Trainiere für kritische Anwendungen mehrere Modelle mit unterschiedlichen Konfigurationen und kombiniere ihre Vorhersagen, um die Genauigkeit zu verbessern.
  • Testzeit-Datenerweiterung. Aktiviere TTA während der Inferenz mit --augment, um die Vorhersagegenauigkeit zu verbessern, indem die Ergebnisse erweiterter Versionen des Eingabebildes gemittelt werden.

Weiterführende Informationen#

Wenn du mehr erfahren möchtest, ist Karpathys „Rezept für das Training neuronaler Netze“ ein guter Ausgangspunkt. Es enthält hervorragende Trainingsideen, die sich auf viele Bereiche des maschinellen Lernens übertragen lassen: https://karpathy.github.io/2019/04/25/recipe/

Ausführlichere Informationen zu Trainingseinstellungen und Konfigurationen findest du in der Dokumentation zu den Ultralytics-Trainingseinstellungen. Sie enthält umfassende Erläuterungen zu allen verfügbaren Parametern.

Viel Erfolg 🍀 und lass uns wissen, wenn du weitere Fragen hast!

FAQ#

  • Dein Modell könnte überangepasst sein, wenn der Trainingsverlust weiter sinkt, während der Validierungsverlust zu steigen beginnt. Beobachte den Validierungs-mAP: Wenn er stagniert oder sinkt, während sich der Trainingsverlust weiter verbessert, ist das ein Anzeichen für Überanpassung. Mögliche Lösungen sind zusätzliche Trainingsdaten, eine stärkere Datenerweiterung oder die Anwendung von Regularisierungstechniken.

  • Die optimale Batchgröße hängt vom Speicher deiner GPU ab. Größere Batchgrößen liefern im Allgemeinen bessere Statistiken für die Batch-Normalisierung und eine höhere Trainingsstabilität. Verwende die größte Batchgröße, die deine Hardware ohne Speichermangel verarbeiten kann. Mit --batch-size -1 kannst du die optimale Batchgröße für deine Konfiguration automatisch bestimmen.

  • Um das Training zu beschleunigen, kannst du Folgendes versuchen: Verwende mehrere GPUs mit --device 0,1,2,3, cache deinen Datensatz mit --cache und optimiere deine Batchgröße (gemischte Präzision wird auf unterstützten GPUs automatisch aktiviert). Erwäge außerdem eine kleinere Modellvariante wie YOLOv5s, wenn maximale Genauigkeit nicht entscheidend ist.

Kommentare