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.
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:
- Die Metriken identifizieren: Bestimmen Sie die Metriken, die Sie zur Bewertung der Modellleistung verwenden werden. Dies könnte AP50, F1-Score oder andere sein.
- 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=True
Optional 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
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
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
- Hyperparameter-Optimierung in Wikipedia
- YOLOv5 Hyperparameter-Evolutions-Leitfaden
- 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.