Zum Inhalt springen

Ultralytics YOLO Hyperparameter-Optimierungs-Anleitung

Einführung

Die Hyperparameter-Optimierung ist nicht nur eine einmalige Einrichtung, sondern ein iterativer Prozess, der darauf abzielt, die Leistungsmetriken des Machine-Learning-Modells, wie Genauigkeit, Präzision und Recall, zu optimieren. Im Kontext von Ultralytics YOLO können diese Hyperparameter von der Lernrate bis zu architektonischen Details, wie der Anzahl der Schichten oder den verwendeten Aktivierungsfunktionstypen, reichen.



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 Suchraums für die Hyperparameteroptimierung

Eine vollständige Liste der in YOLO26 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. Metriken identifizieren: Bestimmen Sie die Metriken, die Sie zur Bewertung der Modellleistung verwenden werden. Dies könnten 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 Standard-Suchraumparameter für die Hyperparameter-Abstimmung in YOLO26 auf. Jeder Parameter hat einen spezifischen Wertebereich, der durch ein Tupel definiert ist (min, max).

ParameterTypWertebereichBeschreibung
lr0float(1e-5, 1e-1)Anfängliche Lernrate zu Beginn des Trainings. Niedrigere Werte sorgen für ein stabileres Training, aber eine langsamere Konvergenz
lrffloat(0.01, 1.0)Finaler Lernraten-Faktor als Bruchteil von lr0. Steuert, wie stark die Lernrate während des Trainings sinkt.
momentumfloat(0.6, 0.98)SGD-Momentum-Faktor. Höhere Werte helfen, eine konsistente Gradientenrichtung beizubehalten und können die Konvergenz beschleunigen.
weight_decayfloat(0.0, 0.001)L2-Regularisierungsfaktor zur Verhinderung von Overfitting. Größere Werte erzwingen eine stärkere Regularisierung.
warmup_epochsfloat(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_momentumfloat(0.0, 0.95)Anfänglicher Impuls während der Aufwärmphase. Steigt allmählich auf den endgültigen Impulswert an
boxfloat(0.02, 0.2)Gewichtung des Begrenzungsrahmen-Verlusts in der gesamten Verlustfunktion. Gleicht Box-Regression und Klassifizierung aus.
clsfloat(0.2, 4.0)Gewichtung des Klassifikationsverlusts in der gesamten Verlustfunktion. Höhere Werte betonen die korrekte Klassen Vorhersage
dflfloat(0.4, 6.0)DFL (Distribution Focal Loss)-Gewichtung in der gesamten Verlustfunktion. Höhere Werte betonen eine präzise Bounding-Box-Lokalisierung
hsv_hfloat(0.0, 0.1)Zufälliger Farbton-Augmentierungsbereich im HSV-Farbraum. Hilft dem Modell, über Farbvariationen zu generalisieren
hsv_sfloat(0.0, 0.9)Zufälliger Sättigungs-Augmentierungsbereich im HSV-Raum. Simuliert unterschiedliche Lichtverhältnisse
hsv_vfloat(0.0, 0.9)Zufälliger Wert- (Helligkeits-) Augmentierungsbereich. Hilft dem Modell, unterschiedliche Belichtungsstufen zu verarbeiten
degreesfloat(0.0, 45.0)Maximale Rotationsaugmentation in Grad. Hilft dem Modell, invariant gegenüber der Objektausrichtung zu werden.
translatefloat(0.0, 0.9)Maximale Translationsaugmentation als Bruchteil der Bildgröße. Verbessert die Robustheit gegenüber der Objektposition.
scalefloat(0.0, 0.9)Bereich für zufällige Skalierungs-Augmentierung. Hilft dem Modell, Objekte unterschiedlicher Größe zu detect.
shearfloat(0.0, 10.0)Maximale Scherungsaugmentation in Grad. Fügt Trainingsbildern perspektivenartige Verzerrungen hinzu.
perspectivefloat(0.0, 0.001)Zufälliger Perspektiven-Augmentierungsbereich. Simuliert verschiedene Betrachtungswinkel
flipudfloat(0.0, 1.0)Wahrscheinlichkeit für vertikale Bildspiegelung während des Trainings. Nützlich für Luftaufnahmen.
fliplrfloat(0.0, 1.0)Wahrscheinlichkeit für horizontale Bildspiegelung. Hilft dem Modell, invariant gegenüber der Objektausrichtung zu werden.
bgrfloat(0.0, 1.0)Wahrscheinlichkeit der Verwendung von BGR-Augmentierung, die Farbkanäle tauscht. Kann bei Farbinvarianz helfen
mosaicfloat(0.0, 1.0)Wahrscheinlichkeit der Verwendung von Mosaic-Augmentierung, die 4 Bilder kombiniert. Besonders nützlich für die Erkennung kleiner Objekte.
mixupfloat(0.0, 1.0)Wahrscheinlichkeit der Verwendung von Mixup-Augmentierung, die zwei Bilder vermischt. Kann die Robustheit des Modells verbessern.
copy_pastefloat(0.0, 1.0)Wahrscheinlichkeit der Verwendung von Copy-Paste-Augmentierung. Hilft, die Leistung der Instanzsegmentierung zu verbessern.
close_mosaicint(0, 10)Deaktiviert Mosaik in den letzten N Epochen, um das Training vor dem Abschluss zu stabilisieren.

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-Abstimmung von YOLO26n auf COCO8 über 30 Epochen mit einem AdamW-Optimierer und Überspringen von Plotting, Checkpointing und Validierung außer in der letzten Epoche für schnelleres Tuning.

Warnung

Dieses Beispiel dient ausschließlich zu Demonstrationszwecken. Hyperparameter, die aus kurzen oder kleinskaligen Tuning-Läufen abgeleitet werden, sind selten optimal für das Training in der realen Welt. In der Praxis sollte das Tuning unter Einstellungen durchgeführt werden, die einem vollständigen Training ähneln – einschließlich vergleichbarer Datensätze, Epochen und Augmentierungen –, um zuverlässige und übertragbare Ergebnisse zu gewährleisten. Schnelles Tuning kann Parameter in Richtung schnellerer Konvergenz oder kurzfristiger Validierungsgewinne verzerren, die nicht generalisierbar sind.

Beispiel

from ultralytics import YOLO

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

Fortsetzen einer unterbrochenen Hyperparameter-Optimierungssitzung

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("yolo26n.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/ contain individual tuning iterations, i.e., one model trained with one set of hyperparameters. The 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) in Abhängigkeit von der Anzahl der Iterationen darstellt. Es hilft Ihnen zu visualisieren, wie gut der genetische Algorithmus über die Zeit performt 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

Streudiagramm-Analyse der Ergebnisse der 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. Effiziente Hyperparameter-Abstimmung mit Ray Tune und YOLO26

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("yolo26n.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 von genetischen Algorithmen für die Hyperparameter-Abstimmung in YOLO26?

Genetische Algorithmen in Ultralytics YOLO26 bieten eine robuste Methode zur Erkundung des Hyperparameterraums, was zu einer hochoptimierten Modellleistung führt. Zu den Hauptvorteilen 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.
  • Leistungskennzahlen: Sie passen sich basierend auf Leistungskennzahlen 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?

Der Zeitaufwand für die Hyperparameter-Abstimmung mit Ultralytics YOLO hängt maßgeblich von mehreren Faktoren ab, wie der Größe des Datensatzes, der Komplexität der Modellarchitektur, der Anzahl der Iterationen und den verfügbaren Rechenressourcen. Zum Beispiel kann die Abstimmung von YOLO26n auf einem Datensatz wie COCO8 über 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 erweiterte Hyperparameter-Optimierung mit YOLO26 verwenden?

Ja, Ultralytics YOLO26 lässt sich für die erweiterte Hyperparameter-Optimierung in Ray Tune integrieren. Ray Tune bietet ausgeklügelte Suchalgorithmen wie Bayes'sche Optimierung und Hyperband sowie parallele Ausführungsfunktionen, um den Abstimmungsprozess zu beschleunigen.

Um Ray Tune mit YOLO26 zu verwenden, stellen Sie einfach die use_ray=True Parameter in Ihrer model.tune() Methodenaufruf. Weitere Details und Beispiele finden Sie im Ray Tune-Integrationsanleitung.



📅 Erstellt vor 2 Jahren ✏️ Aktualisiert vor 5 Tagen
glenn-jocherY-T-GRizwanMunawarUltralyticsAssistantraimbekovmpderrenger1490435889@qq.comMatthewNoyce

Kommentare