Zum Inhalt springen

Ultralytics YOLO Hyperparameter-Abstimmungsleitfaden

EinfĂĽhrung

Die Abstimmung der Hyperparameter ist nicht nur eine einmalige Einstellung, sondern ein iterativer Prozess, der darauf abzielt, die Leistungskennzahlen des maschinellen Lernmodells wie Genauigkeit, Präzision und Wiedererkennung zu optimieren. Im Kontext von Ultralytics YOLO können diese Hyperparameter von der Lernrate bis hin zu architektonischen Details wie der Anzahl der Schichten oder der Art der verwendeten Aktivierungsfunktionen reichen.

Was sind Hyperparameter?

Hyperparameter sind übergeordnete, strukturelle Einstellungen für den Algorithmus. Sie werden vor der Trainingsphase festgelegt und bleiben während der Trainingsphase konstant. Hier sind einige häufig eingestellte Hyperparameter in Ultralytics YOLO :

  • Lernrate lr0: Legt die Schrittweite bei jeder Iteration fest, während du dich auf ein Minimum der Verlustfunktion zubewegst.
  • Chargengröße batch: Anzahl der Bilder, die gleichzeitig in einem Vorwärtsdurchlauf verarbeitet werden.
  • Anzahl der Epochen epochs: Eine Epoche ist ein vollständiger Vorwärts- und RĂĽckwärtsdurchlauf aller Trainingsbeispiele.
  • Besonderheiten der Architektur: Wie z.B. die Anzahl der Kanäle, die Anzahl der Schichten, die Art der Aktivierungsfunktionen, etc.

Hyperparameter-Abstimmung Visuell

Eine vollständige Liste der Augmentations-Hyperparameter, die in YOLOv8 verwendet werden, findest du auf der Seite mit den Konfigurationen.

Genetische Evolution und Mutation

Ultralytics YOLO verwendet genetische Algorithmen zur Optimierung der Hyperparameter. Genetische Algorithmen sind von den Mechanismen der natĂĽrlichen Selektion und der Genetik inspiriert.

  • Mutation: Im Zusammenhang mit Ultralytics YOLO hilft die Mutation bei der lokalen Suche nach Hyperparametern, indem sie kleine, zufällige Ă„nderungen an bestehenden Hyperparametern vornimmt und so neue Kandidaten fĂĽr die Auswertung erzeugt.
  • Crossover: Obwohl Crossover eine beliebte Technik der genetischen Algorithmen ist, wird sie in Ultralytics YOLO derzeit nicht zur Abstimmung der Hyperparameter verwendet. Das Hauptaugenmerk liegt auf der Mutation, um neue Hyperparametersätze zu erzeugen.

Vorbereitungen fĂĽr die Hyperparameter-Abstimmung

Bevor du mit dem Tuning beginnst, ist es wichtig, dass du:

  1. Bestimme die Metriken: Bestimme die Kennzahlen, die du zur Bewertung der Leistung des Modells verwenden willst. Das können AP50, F1-Score oder andere sein.
  2. Lege das Tuning-Budget fest: Lege fest, wie viele Rechenressourcen du bereit bist, zur VerfĂĽgung zu stellen. Die Abstimmung der Hyperparameter kann sehr rechenintensiv sein.

Beteiligte Schritte

Hyperparameter initialisieren

Beginne mit einem vernünftigen Satz von Anfangshyperparametern. Das können entweder die Standard-Hyperparameter von Ultralytics YOLO sein oder etwas, das auf deinem Fachwissen oder früheren Experimenten basiert.

Hyperparameter mutieren

Verwenden Sie die _mutate Methode, um einen neuen Satz von Hyperparametern auf der Grundlage des bestehenden Satzes zu erstellen.

Zugmodell

Das Training wird mit dem veränderten Satz von Hyperparametern durchgeführt. Anschließend wird die Trainingsleistung bewertet.

Modell evaluieren

Verwende Metriken wie AP50, F1-Score oder benutzerdefinierte Metriken, um die Leistung des Modells zu bewerten.

Log-Ergebnisse

Es ist wichtig, sowohl die Leistungskennzahlen als auch die entsprechenden Hyperparameter zu protokollieren, damit du später darauf zurückgreifen kannst.

Wiederholen Sie

Der Prozess wird so lange wiederholt, bis entweder die festgelegte Anzahl von Iterationen erreicht ist oder die Leistungskennzahl zufriedenstellend ist.

Verwendungsbeispiel

Hier erfährst du, wie du die model.tune() Methode zur Nutzung der Tuner Klasse für das Hyperparameter-Tuning von YOLOv8n auf COCO8 für 30 Epochen mit einem AdamW-Optimierer und Überspringen von Plotting, Checkpointing und Validierung außer in der letzten Epoche für ein schnelleres Tuning.

Beispiel

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO('yolov8n.pt')

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data='coco8.yaml', epochs=30, iterations=300, optimizer='AdamW', plots=False, save=False, val=False)

Ergebnisse

Nachdem du die Abstimmung der Hyperparameter erfolgreich abgeschlossen hast, erhältst du mehrere Dateien und Verzeichnisse, in denen die Ergebnisse der Abstimmung gespeichert sind. Im Folgenden werden sie beschrieben:

Dateistruktur

So sieht die Verzeichnisstruktur der Ergebnisse aus. Trainingsverzeichnisse wie train1/ enthalten einzelne Abstimmungsiterationen, d.h. ein Modell, das mit einem Satz von Hyperparametern trainiert wurde. Die tune/ Verzeichnis enthält die Abstimmungsergebnisse aller einzelnen Modelltrainings:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── best_fitness.png
        ├── tune_results.csv
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Datei-Beschreibungen

best_hyperparameters.yaml

Diese YAML-Datei enthält die leistungsfähigsten Hyperparameter, die während des Optimierungsprozesses gefunden wurden. Du kannst diese Datei verwenden, um zukünftige Trainings mit diesen optimierten Einstellungen zu initialisieren.

  • Format: YAML
  • Verwendung: Hyperparameter-Ergebnisse
  • Beispiel:
      # 558/900 iterations complete âś… (45536.81s)
      # Results saved to /usr/src/ultralytics/runs/detect/tune
      # Best fitness=0.64297 observed at iteration 498
      # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297}
      # Best fitness model is /usr/src/ultralytics/runs/detect/train498
      # Best fitness hyperparameters are printed below.
    
      lr0: 0.00269
      lrf: 0.00288
      momentum: 0.73375
      weight_decay: 0.00015
      warmup_epochs: 1.22935
      warmup_momentum: 0.1525
      box: 18.27875
      cls: 1.32899
      dfl: 0.56016
      hsv_h: 0.01148
      hsv_s: 0.53554
      hsv_v: 0.13636
      degrees: 0.0
      translate: 0.12431
      scale: 0.07643
      shear: 0.0
      perspective: 0.0
      flipud: 0.0
      fliplr: 0.08631
      mosaic: 0.42551
      mixup: 0.0
      copy_paste: 0.0
    

best_fitness.png

Dies ist ein Diagramm, das die Fitness (normalerweise eine Leistungskennzahl wie AP50) gegen die Anzahl der Iterationen anzeigt. So kannst du sehen, wie gut der genetische Algorithmus im Laufe der Zeit abgeschnitten hat.

  • Format: PNG
  • Verwendung: Leistungsvisualisierung

Hyperparameter-Tuning Fitness vs. Iteration

tune_results.csv

Eine CSV-Datei mit den detaillierten Ergebnissen jeder Iteration während der Optimierung. Jede Zeile in der Datei steht für eine Iteration und enthält Metriken wie Fitness Score, Precision, Recall sowie die verwendeten Hyperparameter.

  • Format: CSV
  • Verwendung: Nachverfolgung der Ergebnisse pro Iteration.
  • Beispiel:
      fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste
      0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0
      0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0
      0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
    

tune_scatter_plots.png

Diese Datei enthält Streudiagramme, die aus tune_results.csvund hilft dir, die Beziehungen zwischen verschiedenen Hyperparametern und Leistungskennzahlen zu visualisieren. Beachte, dass Hyperparameter, die auf 0 initialisiert sind, nicht abgestimmt werden, wie z. B. degrees und shear unten.

  • Format: PNG
  • Verwendung: Explorative Datenanalyse

Hyperparameter-Abstimmung Streudiagramme

Gewichte/

Dieses Verzeichnis enthält die gespeicherten PyTorch Modelle für die letzte und die beste Iteration während des Hyperparameter-Tuning-Prozesses.

  • last.pt: Die last.pt sind die Gewichte aus der letzten Epoche des Trainings.
  • best.pt: Die best.pt-Gewichte fĂĽr die Iteration, die den besten Fitnesswert erzielt hat.

Anhand dieser Ergebnisse kannst du fundiertere Entscheidungen fĂĽr deine zukĂĽnftigen Modellschulungen und Analysen treffen. Du kannst diese Artefakte gerne zu Rate ziehen, um zu verstehen, wie gut dein Modell abgeschnitten hat und wie du es weiter verbessern kannst.

Fazit

Das Hyperparameter-Tuning in Ultralytics YOLO ist dank des auf Mutation basierenden genetischen Algorithmus vereinfacht und dennoch leistungsstark. Wenn du die in diesem Leitfaden beschriebenen Schritte befolgst, kannst du dein Modell systematisch optimieren, um eine bessere Leistung zu erzielen.

Weitere LektĂĽre

  1. Hyperparameter-Optimierung in Wikipedia
  2. YOLOv5 Leitfaden fĂĽr die Entwicklung von Hyperparametern
  3. Effizientes Hyperparameter-Tuning mit Ray Tune und YOLOv8

Für tiefere Einblicke kannst du die Tuner Quellcode der Klasse und die dazugehörige Dokumentation. Solltest du Fragen oder Funktionswünsche haben oder weitere Unterstützung benötigen, kannst du dich gerne an uns wenden unter GitHub oder Discord.



Erstellt am 2023-11-12, Aktualisiert am 2024-03-03
Autoren: glenn-jocher (7)

Kommentare