Zum Inhalt springen

Ultralytics YOLO Hyperparameter-Optimierungs-Anleitung

Einführung

Die Hyperparameter-Optimierung ist nicht nur eine einmalige Einrichtung, sondern ein iterativer Prozess zur Optimierung der Leistungsmetriken des Machine-Learning-Modells, wie z. B. Genauigkeit, Präzision und Rückruf. Im Kontext von Ultralytics YOLO können diese Hyperparameter von der Lernrate bis hin zu architektonischen Details reichen, wie z. B. die Anzahl der Schichten oder die Art der verwendeten Aktivierungsfunktionen.



Ansehen: So optimieren Sie Hyperparameter für eine bessere Modellleistung 🚀

Was sind Hyperparameter?

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

  • Lernrate lr0: Bestimmt die Schrittweite bei jeder Iteration, während man sich einem Minimum in der Verlustfunktion nähert.
  • Batch-Größe batch: Anzahl der Bilder, die gleichzeitig in einem Forward Pass verarbeitet werden.
  • Anzahl der Epochen epochs: Eine Epoche ist ein vollständiger Forward- und Backward-Pass aller Trainingsbeispiele.
  • Architekturspezifika: Wie z. B. Kanalanzahl, Anzahl der Schichten, Arten von Aktivierungsfunktionen usw.

Visualisierung des Hyperparameter-Tunings

Eine vollständige Liste der in YOLO11 verwendeten Augmentations-Hyperparameter finden Sie auf der Konfigurationsseite.

Genetische Evolution und Mutation

Ultralytics YOLO verwendet genetische Algorithmen, um Hyperparameter zu optimieren. Genetische Algorithmen sind von den Mechanismen der natürlichen Selektion und Genetik inspiriert.

  • Mutation: Im Kontext von Ultralytics YOLO hilft die Mutation bei der lokalen Suche im Hyperparameterraum, indem sie kleine, zufällige Änderungen an bestehenden Hyperparametern vornimmt und so neue Kandidaten für die Evaluierung erzeugt.
  • Crossover: Obwohl Crossover eine beliebte Technik für genetische Algorithmen ist, wird sie derzeit in Ultralytics YOLO nicht für die Hyperparameter-Optimierung verwendet. Der Fokus liegt hauptsächlich auf der Mutation zur Erzeugung neuer Hyperparameter-Sätze.

Vorbereitung der Hyperparameter-Optimierung

Bevor Sie mit der Optimierung beginnen, ist es wichtig:

  1. Die Metriken identifizieren: Bestimmen Sie die Metriken, die Sie zur Bewertung der Modellleistung verwenden werden. Dies könnte AP50, F1-Score oder andere sein.
  2. Das Optimierungsbudget festlegen: Definieren Sie, wie viele Rechenressourcen Sie bereit sind zuzuweisen. Die Hyperparameter-Optimierung kann rechenintensiv sein.

Beteiligte Schritte

Hyperparameter initialisieren

Beginnen Sie mit einem vernünftigen Satz anfänglicher Hyperparameter. Dies könnten entweder die von Ultralytics YOLO festgelegten Standard-Hyperparameter sein oder etwas, das auf Ihrem Fachwissen oder früheren Experimenten basiert.

Hyperparameter mutieren

Verwenden Sie den _mutate Methode, um einen neuen Satz von Hyperparametern basierend auf dem vorhandenen Satz zu erstellen. Die Tuner-Klasse handhabt diesen Prozess automatisch.

Modell trainieren

Das Training wird mit dem mutierten Satz von Hyperparametern durchgeführt. Die Trainingsleistung wird dann anhand der von Ihnen gewählten Metriken bewertet.

Modell bewerten

Verwenden Sie Metriken wie AP50, F1-Score oder benutzerdefinierte Metriken, um die Leistung des Modells zu bewerten. Der Evaluierungsprozess hilft festzustellen, ob die aktuellen Hyperparameter besser sind als die vorherigen.

Ergebnisse protokollieren

Es ist entscheidend, sowohl die Performance-Metriken als auch die entsprechenden Hyperparameter für zukünftige Referenzzwecke zu protokollieren. Ultralytics YOLO speichert diese Ergebnisse automatisch im CSV-Format.

Wiederholen

Der Prozess wird wiederholt, bis entweder die festgelegte Anzahl von Iterationen erreicht ist oder die Leistungsmetrik zufriedenstellend ist. Jede Iteration baut auf den Erkenntnissen aus vorherigen Durchläufen auf.

Beschreibung des Standard-Suchraums

Die folgende Tabelle listet die Standardparameter des Suchraums für die Hyperparameter-Optimierung in YOLO11 auf. Jeder Parameter hat einen bestimmten Wertebereich, der durch ein Tupel definiert ist (min, max).

Parameter Typ Wertebereich Beschreibung
lr0 float (1e-5, 1e-1) Anfängliche Lernrate zu Beginn des Trainings. Niedrigere Werte sorgen für ein stabileres Training, aber eine langsamere Konvergenz
lrf float (0.01, 1.0) Finaler Lernraten-Faktor als Bruchteil von lr0. Steuert, wie stark die Lernrate während des Trainings sinkt.
momentum float (0.6, 0.98) SGD-Momentumfaktor. Höhere Werte tragen zur Aufrechterhaltung einer konsistenten Gradientenrichtung bei und können die Konvergenz beschleunigen
weight_decay float (0.0, 0.001) L2-Regularisierungsfaktor zur Verhinderung von Overfitting. Größere Werte erzwingen eine stärkere Regularisierung.
warmup_epochs float (0.0, 5.0) Anzahl der Epochen für das lineare Aufwärmen der Lernrate. Hilft, Instabilitäten im frühen Training zu vermeiden.
warmup_momentum float (0.0, 0.95) Anfänglicher Impuls während der Aufwärmphase. Steigt allmählich auf den endgültigen Impulswert an
box float (0.02, 0.2) Gewichtung des Begrenzungsrahmen-Verlusts in der gesamten Verlustfunktion. Gleicht Box-Regression und Klassifizierung aus.
cls float (0.2, 4.0) Gewichtung des Klassifikationsverlusts in der gesamten Verlustfunktion. Höhere Werte betonen die korrekte Klassen Vorhersage
hsv_h float (0.0, 0.1) Zufälliger Farbton-Augmentierungsbereich im HSV-Farbraum. Hilft dem Modell, über Farbvariationen zu generalisieren
hsv_s float (0.0, 0.9) Zufälliger Sättigungs-Augmentierungsbereich im HSV-Raum. Simuliert unterschiedliche Lichtverhältnisse
hsv_v float (0.0, 0.9) Zufälliger Wert- (Helligkeits-) Augmentierungsbereich. Hilft dem Modell, unterschiedliche Belichtungsstufen zu verarbeiten
degrees float (0.0, 45.0) Maximale Rotationsaugmentation in Grad. Hilft dem Modell, invariant gegenüber der Objektausrichtung zu werden.
translate float (0.0, 0.9) Maximale Translationsaugmentation als Bruchteil der Bildgröße. Verbessert die Robustheit gegenüber der Objektposition.
scale float (0.0, 0.9) Zufälliger Skalierungs-Augmentierungsbereich. Hilft dem Modell, Objekte in verschiedenen Größen zu erkennen
shear float (0.0, 10.0) Maximale Scherungsaugmentation in Grad. Fügt Trainingsbildern perspektivenartige Verzerrungen hinzu.
perspective float (0.0, 0.001) Zufälliger Perspektiven-Augmentierungsbereich. Simuliert verschiedene Betrachtungswinkel
flipud float (0.0, 1.0) Wahrscheinlichkeit für vertikale Bildspiegelung während des Trainings. Nützlich für Luftaufnahmen.
fliplr float (0.0, 1.0) Wahrscheinlichkeit für horizontale Bildspiegelung. Hilft dem Modell, invariant gegenüber der Objektausrichtung zu werden.
mosaic float (0.0, 1.0) Wahrscheinlichkeit der Verwendung von Mosaic-Augmentierung, die 4 Bilder kombiniert. Besonders nützlich für die Erkennung kleiner Objekte.
mixup float (0.0, 1.0) Wahrscheinlichkeit der Verwendung von Mixup-Augmentierung, die zwei Bilder vermischt. Kann die Robustheit des Modells verbessern.
copy_paste float (0.0, 1.0) Wahrscheinlichkeit der Verwendung von Copy-Paste-Augmentierung. Hilft, die Leistung der Instanzsegmentierung zu verbessern.

Beispiel für einen benutzerdefinierten Suchraum

Hier erfahren Sie, wie Sie einen Suchraum definieren und die model.tune() Methode zur Nutzung der Tuner Klasse für die Hyperparameter-Optimierung von YOLO11n auf COCO8 für 30 Epochen mit einem AdamW-Optimierer und dem Überspringen von Plotting, Checkpointing und Validierung außer in der letzten Epoche für eine schnellere Optimierung.

Beispiel

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo11n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-1),
    "degrees": (0.0, 45.0),
}

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

Eine unterbrochene Hyperparameter-Optimierungssitzung fortsetzen

Sie können eine unterbrochene Hyperparameter-Tuning-Sitzung fortsetzen, indem Sie übergeben resume=TrueOptional können Sie das Verzeichnis übergeben name verwendet unter runs/{task} um fortzufahren. Andernfalls würde die letzte unterbrochene Sitzung fortgesetzt. Sie müssen auch alle vorherigen Trainingsargumente angeben, einschließlich data, epochs, iterations und space.

Verwendung von resume=True mit model.tune()

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo11n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-1),
    "degrees": (0.0, 45.0),
}

# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)

# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)

Ergebnisse

Nachdem Sie den Hyperparameter-Optimierungsprozess erfolgreich abgeschlossen haben, erhalten Sie mehrere Dateien und Verzeichnisse, die die Ergebnisse der Optimierung zusammenfassen. Im Folgenden werden diese beschrieben:

Dateistruktur

So sieht die Verzeichnisstruktur der Ergebnisse aus. Trainingsverzeichnisse wie train1/ enthalten einzelne Optimierungsiterationen, d. h. ein Modell, das mit einem Satz von Hyperparametern trainiert wurde. Das tune/ Verzeichnis enthält Optimierungsergebnisse aus allen 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

Dateibeschreibungen

best_hyperparameters.yaml

Diese YAML-Datei enthält die leistungsstärksten Hyperparameter, die während des Optimierungsprozesses gefunden wurden. Sie können 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 (typischerweise eine Leistungsmetrik wie AP50) im Verhältnis zur Anzahl der Iterationen darstellt. Es hilft Ihnen zu visualisieren, wie gut der genetische Algorithmus im Laufe der Zeit funktioniert hat.

  • Format: PNG
  • Verwendung: Visualisierung der Leistung

Fitness vs. Iteration beim Hyperparameter-Tuning

tune_results.csv

Eine CSV-Datei, die detaillierte Ergebnisse jeder Iteration während der Optimierung enthält. Jede Zeile in der Datei stellt eine Iteration dar und enthält Metriken wie Fitness-Score, Präzision, 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 generiert wurden aus tune_results.csv, die Ihnen helfen, Beziehungen zwischen verschiedenen Hyperparametern und Leistungsmetriken zu visualisieren. Beachten Sie, dass Hyperparameter, die auf 0 initialisiert wurden, nicht optimiert werden, wie z. B. degrees und shear unten.

  • Format: PNG
  • Verwendung: Explorative Datenanalyse

Streudiagramme zur Hyperparameter-Optimierung

weights/

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

  • last.pt: Die last.pt-Datei enthält die Gewichte der letzten Trainingsepoche.
  • best.pt: Die best.pt-Datei enthält die Gewichte der Iteration, die den besten Fitness-Score erzielt hat.

Mithilfe dieser Ergebnisse können Sie fundiertere Entscheidungen für Ihre zukünftigen Modelltrainings und -analysen treffen. Nutzen Sie diese Artefakte, um zu verstehen, wie gut Ihr Modell funktioniert hat und wie Sie es weiter verbessern können.

Fazit

Der Hyperparameter-Tuning-Prozess in Ultralytics YOLO ist dank seines auf Mutation basierenden genetischen Algorithmus vereinfacht, aber dennoch leistungsstark. Wenn Sie die in diesem Leitfaden beschriebenen Schritte befolgen, können Sie Ihr Modell systematisch optimieren, um eine bessere Leistung zu erzielen.

Weiterführende Informationen

  1. Hyperparameter-Optimierung in Wikipedia
  2. YOLOv5 Hyperparameter-Evolutions-Leitfaden
  3. Effizientes Hyperparameter-Tuning mit Ray Tune und YOLO11

Für tiefere Einblicke können Sie den Tuner Klasse Quellcode und zugehörige Dokumentation. Bei Fragen, Funktionswünschen oder weiterem Unterstützungsbedarf können Sie sich gerne an uns wenden auf GitHub oder Discord.

FAQ

Wie optimiere ich die Lernrate für Ultralytics YOLO während des Hyperparameter-Tunings?

Um die Lernrate für Ultralytics YOLO zu optimieren, legen Sie zunächst eine anfängliche Lernrate mit dem lr0 Parameter fest. Gängige Werte liegen im Bereich von 0.001 zu 0.01. Während des Hyperparameter-Tuning-Prozesses wird dieser Wert mutiert, um die optimale Einstellung zu finden. Sie können die model.tune() Methode verwenden, um diesen Prozess zu automatisieren. Zum Beispiel:

Beispiel

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo11n.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)

Weitere Informationen finden Sie auf der Ultralytics YOLO-Konfigurationsseite.

Welche Vorteile bietet die Verwendung genetischer Algorithmen für die Hyperparameter-Optimierung in YOLO11?

Genetische Algorithmen in Ultralytics YOLO11 bieten eine robuste Methode zur Erkundung des Hyperparameterraums, was zu einer hochoptimierten Modellleistung führt. Zu den wichtigsten Vorteilen gehören:

  • Effiziente Suche: Genetische Algorithmen wie Mutation können schnell eine große Anzahl von Hyperparametern untersuchen.
  • Vermeidung lokaler Minima: Durch die Einführung von Zufälligkeit helfen sie, lokale Minima zu vermeiden und eine bessere globale Optimierung zu gewährleisten.
  • Leistungsmetriken: Sie passen sich basierend auf Leistungsmetriken wie AP50 und F1-Score an.

Um zu sehen, wie genetische Algorithmen Hyperparameter optimieren können, lesen Sie den Hyperparameter-Evolutions-Leitfaden.

Wie lange dauert der Hyperparameter-Optimierungsprozess für Ultralytics YOLO?

Die für das Hyperparameter-Tuning mit Ultralytics YOLO benötigte Zeit hängt stark von verschiedenen Faktoren ab, wie z. B. der Größe des Datensatzes, der Komplexität der Modellarchitektur, der Anzahl der Iterationen und den verfügbaren Rechenressourcen. Beispielsweise kann das Tuning von YOLO11n auf einem Datensatz wie COCO8 für 30 Epochen je nach Hardware mehrere Stunden bis Tage dauern.

Um die Tuning-Zeit effektiv zu verwalten, definieren Sie vorab ein klares Tuning-Budget (interner Abschnittslink). Dies hilft, die Ressourcenzuweisung und die Optimierungsziele in Einklang zu bringen.

Welche Metriken sollte ich verwenden, um die Modellleistung während der Hyperparameter-Optimierung in YOLO zu bewerten?

Bei der Bewertung der Modellleistung während des Hyperparameter-Tunings in YOLO können Sie verschiedene Schlüsselmetriken verwenden:

  • AP50: Die durchschnittliche Präzision bei einem IoU-Schwellenwert von 0,50.
  • F1-Score: Das harmonische Mittel aus Präzision und Rückruf (Recall).
  • Präzision und Rückruf (Recall): Einzelne Metriken, die die Genauigkeit des Modells bei der Identifizierung von True Positives im Vergleich zu False Positives und False Negatives anzeigen.

Diese Metriken helfen Ihnen, verschiedene Aspekte der Leistung Ihres Modells zu verstehen. Weitere Informationen finden Sie im Leitfaden zu den Ultralytics YOLO-Leistungsmetriken.

Kann ich Ray Tune für die fortgeschrittene Hyperparameter-Optimierung mit YOLO11 verwenden?

Ja, Ultralytics YOLO11 ist in Ray Tune für die erweiterte Hyperparameteroptimierung integriert. Ray Tune bietet hochentwickelte Suchalgorithmen wie Bayesian Optimization und Hyperband sowie parallele Ausführungsfunktionen, um den Optimierungsprozess zu beschleunigen.

Um Ray Tune mit YOLO11 zu verwenden, setzen Sie einfach den folgenden Parameter: use_ray=True Parameter in Ihrer model.tune() Methodenaufruf. Weitere Details und Beispiele finden Sie im Ray Tune-Integrationsanleitung.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 4 Monaten

Kommentare