Ultralytics YOLO Hyperparameter-Optimierung Anleitung
Einführung
Hyperparameter-Optimierung ist nicht nur eine einmalige Einrichtung, sondern ein iterativer Prozess, der darauf abzielt, die Machine Learning Leistungsmetriken des Modells zu optimieren, wie etwa Genauigkeit, Präzision und Recall. Im Kontext von Ultralytics YOLO können diese Hyperparameter von der Lernrate bis zu architektonischen Details reichen, wie beispielsweise der Anzahl der Layer oder den verwendeten Arten von Aktivierungsfunktionen. an, oder verwende die unterstützt zudem Cloud-Training mit konfigurierbaren Hyperparametern und Echtzeit-Metrikverfolgung.
Watch: How to Tune Hyperparameters for Better Model Performance 🚀
Was sind Hyperparameter?
Hyperparameter sind übergeordnete, strukturelle Einstellungen für den Algorithmus. Sie werden vor der Trainingsphase festgelegt und bleiben währenddessen konstant. Hier sind einige häufig optimierte Hyperparameter in Ultralytics YOLO:
- Lernrate
lr0: Bestimmt die Schrittweite bei jeder Iteration auf dem Weg zu einem Minimum in der Verlustfunktion. - Batch Size
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. - Architektur-Spezifikationen: Wie Kanalanzahl, Anzahl der Layer, Arten der Aktivierungsfunktionen etc.
Eine vollständige Liste der in YOLO26 verwendeten Augmentierungs-Hyperparameter findest du auf der Konfigurationsseite.
Genetische Evolution und Mutation
Ultralytics YOLO verwendet genetische Algorithmen, um Hyperparameter zu optimieren. Genetische Algorithmen sind vom Mechanismus der natürlichen Selektion und Genetik inspiriert.
- Crossover: Jede Iteration kombiniert Gene aus bis zu neun der bisher besten Konfigurationen unter Verwendung des BLX-α-Crossovers mit fitnessgewichteter Elternauswahl.
- Mutation: Der rekombinierte Kandidat wird dann durch einen log-normalen multiplikativen Faktor gestört, der auf jeden Hyperparameter angewendet wird (mit einer Wahrscheinlichkeit von 0,5 pro Parameter). Die Mutationsstärke Sigma nimmt über die ersten 300 Iterationen linear von 0,2 auf 0,1 ab, sodass der Algorithmus zu Beginn breit sucht und sich bei der Konvergenz verfeinert. Iteration 1 hat keine Eltern für Crossover und verwendet die standardmäßigen Trainings-Hyperparameter als Basis.
Vorbereitung auf die Hyperparameter-Optimierung
Bevor du mit dem Optimierungsprozess beginnst, ist es wichtig, Folgendes zu tun:
- Metriken identifizieren: Bestimme die Metriken, die du zur Bewertung der Modellleistung verwendest. Das könnten AP50, F1-Score oder andere sein.
- Budget für die Optimierung festlegen: Lege fest, wie viele Rechenressourcen du bereit bist zuzuweisen. Hyperparameter-Optimierung kann rechenintensiv sein.
Schritte
Hyperparameter initialisieren
Beginne mit einem vernünftigen Satz initialer Hyperparameter. Dies können entweder die Standard-Hyperparameter von Ultralytics YOLO sein oder Werte, die auf deinem Fachwissen oder früheren Experimenten basieren.
Hyperparameter mutieren
Verwende den _mutate Methode, um einen neuen Satz von Hyperparametern basierend auf dem bestehenden Satz zu erstellen. Die Tuner-Klasse handhabt diesen Prozess automatisch.
Modell trainieren
Das Training wird mit dem mutierten Satz an Hyperparametern durchgeführt. Die Trainingsleistung wird dann anhand deiner gewählten Metriken bewertet.
Modell evaluieren
Verwende Metriken wie AP50, F1-Score oder benutzerdefinierte Metriken, um die Modellleistung zu bewerten. Der Evaluierungsprozess hilft festzustellen, ob die aktuellen Hyperparameter besser sind als die vorherigen.
Ergebnisse protokollieren
Es ist entscheidend, sowohl die Leistungsmetriken als auch die entsprechenden Hyperparameter für zukünftige Referenzzwecke zu protokollieren. Ultralytics YOLO speichert diese Ergebnisse automatisch im NDJSON-Format.
Wiederholen
Der Prozess wird wiederholt, bis entweder die festgelegte Anzahl an Iterationen erreicht ist oder die Leistungsmetrik zufriedenstellend ist. Jede Iteration baut auf dem Wissen aus vorherigen Läufen auf.
Beschreibung des Standard-Suchraums
Die folgende Tabelle listet die Standard-Suchraumparameter für die Hyperparameter-Optimierung in YOLO26 auf. Jeder Parameter hat einen spezifischen Wertebereich, der durch ein Tupel definiert ist (min, max).
| Parameter | Typ | Wertebereich | Beschreibung |
|---|---|---|---|
lr0 | float | (1e-5, 1e-2) | Initiale Lernrate zu Beginn des Trainings. Niedrigere Werte sorgen für ein stabileres Training, aber langsamere Konvergenz |
lrf | float | (0.01, 1.0) | Faktor für die finale Lernrate als Anteil von lr0. Steuert, wie stark die Lernrate während des Trainings abnimmt |
momentum | float | (0.7, 0.98) | SGD-Momentum-Faktor. Höhere Werte helfen, eine konsistente Gradientenrichtung beizubehalten und können die Konvergenz beschleunigen |
weight_decay | float | (0.0, 0.001) | L2-Regularisierungsfaktor zur Vermeidung von Overfitting. Größere Werte erzwingen eine stärkere Regularisierung |
warmup_epochs | float | (0.0, 5.0) | Anzahl der Epochen für lineares Lernraten-Warmup. Hilft, Instabilität zu Beginn des Trainings zu vermeiden |
warmup_momentum | float | (0.0, 0.95) | Initiales Momentum während der Warmup-Phase. Steigt allmählich auf den finalen Momentum-Wert an |
box | float | (1.0, 20.0) | Gewichtung des Bounding-Box-Loss in der gesamten Loss-Funktion. Gleicht Box-Regression und Klassifizierung aus |
cls | float | (0.1, 4.0) | Gewichtung des Klassifizierungs-Loss in der gesamten Loss-Funktion. Höhere Werte betonen korrekte Klassenvorhersagen |
cls_pw | float | (0.0, 1.0) | Potenz der Klassengewichtung für den Umgang mit Klassen-Imbalancen. Höhere Werte erhöhen das Gewicht seltener Klassen |
dfl | float | (0.4, 12.0) | Gewichtung des DFL (Distribution Focal Loss) in der gesamten Loss-Funktion. Höhere Werte betonen eine präzise Bounding-Box-Lokalisierung |
hsv_h | float | (0.0, 0.1) | Bereich für zufällige Farbton-Augmentierung im HSV-Farbraum. Hilft dem Modell, über Farbvariationen hinweg zu generalisieren |
hsv_s | float | (0.0, 0.9) | Bereich für zufällige Sättigungs-Augmentierung im HSV-Raum. Simuliert unterschiedliche Lichtverhältnisse |
hsv_v | float | (0.0, 0.9) | Bereich für zufällige Wert- (Helligkeits-) Augmentierung. Hilft dem Modell beim Umgang mit verschiedenen Belichtungsstufen |
degrees | float | (0.0, 45.0) | Maximale Rotations-Augmentierung in Grad. Hilft dem Modell, invariant gegenüber der Objektorientierung zu werden |
translate | float | (0.0, 0.9) | Maximale Translations-Augmentierung als Bruchteil der Bildgröße. Verbessert die Robustheit gegenüber der Objektposition |
scale | float | (0.0, 0.95) | Bereich für zufällige Skalierungs-Augmentierung. Hilft dem Modell, Objekte unterschiedlicher Größe zu erkennen |
shear | float | (0.0, 10.0) | Maximale Scherungs-Augmentierung in Grad. Fügt den Trainingsbildern perspektivähnliche Verzerrungen hinzu |
perspective | float | (0.0, 0.001) | Bereich für zufällige Perspektiv-Augmentierung. Simuliert unterschiedliche Blickwinkel |
flipud | float | (0.0, 1.0) | Wahrscheinlichkeit für vertikales Spiegeln von Bildern während des Trainings. Nützlich für Overhead-/Luftaufnahmen |
fliplr | float | (0.0, 1.0) | Wahrscheinlichkeit für horizontales Spiegeln. Hilft dem Modell, invariant gegenüber der Objektausrichtung zu werden |
bgr | float | (0.0, 1.0) | Wahrscheinlichkeit für die Verwendung von BGR-Augmentierung, die Farbkanäle tauscht. Kann bei der Farbinvarianz helfen |
mosaic | float | (0.0, 1.0) | Wahrscheinlichkeit für die Verwendung von Mosaic-Augmentierung, die 4 Bilder kombiniert. Besonders nützlich für die Erkennung kleiner Objekte |
mixup | float | (0.0, 1.0) | Wahrscheinlichkeit für die Verwendung von Mixup-Augmentierung, die zwei Bilder vermischt. Kann die Modellrobustheit verbessern |
cutmix | float | (0.0, 1.0) | Wahrscheinlichkeit für die Verwendung von Cutmix-Augmentierung. Kombiniert Bildregionen unter Beibehaltung lokaler Merkmale |
copy_paste | float | (0.0, 1.0) | Wahrscheinlichkeit für die Verwendung von Copy-Paste-Augmentierung. Hilft bei der Verbesserung der Instanz-Segmentierungsleistung |
close_mosaic | float | (0.0, 10.0) | Deaktiviert Mosaic in den letzten N Epochen, um das Training vor Abschluss zu stabilisieren |
Beispiel für einen benutzerdefinierten Suchraum
Hier erfährst du, wie du einen Suchraum definierst und die model.tune() Methode verwendest, um die Tuner Klasse für die Hyperparameter-Optimierung von YOLO26n auf COCO8 für 30 Epochen mit einem AdamW-Optimizer zu nutzen, wobei Plotting, Checkpointing und Validierung außer in der letzten Epoche übersprungen werden, um die Optimierung zu beschleunigen.
Dieses Beispiel dient nur zu Demonstrationszwecken. Hyperparameter, die aus kurzen oder kleinskaligen Optimierungsläufen abgeleitet wurden, sind selten optimal für das Training in der Praxis. In der Realität sollte die Optimierung unter Einstellungen durchgeführt werden, die dem vollständigen Training ähnlich sind – einschließlich vergleichbarer Datensätze, Epochen und Augmentierungen –, um zuverlässige und übertragbare Ergebnisse zu gewährleisten. Eine schnelle Optimierung kann Parameter in Richtung schnellerer Konvergenz oder kurzfristiger Validierungsgewinne verzerren, die nicht generalisierbar sind.
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo26n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-2),
"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,
)Wiederaufnahme einer unterbrochenen Hyperparameter-Optimierungssitzung
Du kannst eine unterbrochene Hyperparameter-Optimierungssitzung wiederaufnehmen, indem du resume=True übergibst. Du kannst optional das Verzeichnis name angeben, das unter runs/{task} verwendet wurde, um fortzufahren. Andernfalls wird die letzte unterbrochene Sitzung wiederaufgenommen. Du musst auch alle vorherigen Trainingsargumente inklusive data, epochs, iterations und space.
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-2),
"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)Results
Nachdem du den Hyperparameter-Optimierungsprozess erfolgreich abgeschlossen hast, erhältst du mehrere Dateien und Verzeichnisse, die die Ergebnisse zusammenfassen. Im Folgenden wird jeder Punkt beschrieben:
Dateistruktur
So sieht die Verzeichnisstruktur der Ergebnisse aus. Trainingsverzeichnisse wie train1/ enthalten einzelne Optimierungsiterationen, d. h. ein Modell, das mit einem Satz Hyperparameter trainiert wurde. Das tune/ Verzeichnis enthält Optimierungsergebnisse aller individuellen Modelltrainings:
runs/
└── detect/
├── train1/
├── train2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── tune_fitness.png
├── tune_results.ndjson
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.ptDateibeschreibungen
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
-
Usage: 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
tune_fitness.png
Dies ist ein Diagramm, das die Fitness im Verhältnis zur Anzahl der Iterationen anzeigt. Es hilft dir dabei, die Leistung des genetischen Algorithmus im Zeitverlauf zu visualisieren.
- Format: PNG
- Usage: Performance-Visualisierung
Das Diagramm enthält:
- Einen Marker pro Iteration und Datensatz, daher zeigt ein Lauf mit einem einzelnen Datensatz einen Punkt pro Iteration, und ein Lauf mit mehreren Datensätzen zeigt einen Punkt pro Datensatz und Iteration.
- Eine gepunktete Linie für den "geglätteten Mittelwert", berechnet als Gaußsche Glättung (
sigma=3) über die Fitnesswerte der obersten Ebene pro Iteration.
tune_results.ndjson
Eine NDJSON-Datei, die detaillierte Ergebnisse jeder Tuning-Iteration enthält. Jede Zeile ist ein JSON-Objekt mit der aggregierten Fitness, den optimierten Hyperparametern und den Metriken pro Datensatz. Das Tuning für einzelne und mehrere Datensätze verwendet dasselbe Dateiformat.
- Format: NDJSON
- Usage: Nachverfolgung der Ergebnisse pro Iteration.
- Beispiel:
Ein übersichtlich formatiertes Beispiel ist unten zur besseren Lesbarkeit dargestellt. In der eigentlichen .ndjson-Datei wird jedes Objekt in einer einzelnen Zeile gespeichert.
{
"iteration": 1,
"fitness": 0.48628,
"hyperparameters": {
"lr0": 0.01,
"lrf": 0.01,
"momentum": 0.937,
"weight_decay": 0.0005
},
"datasets": {
"coco8": {
"metrics/precision(B)": 0.65666,
"metrics/recall(B)": 0.85,
"metrics/mAP50(B)": 0.85086,
"metrics/mAP50-95(B)": 0.64104,
"val/box_loss": 1.57958,
"val/cls_loss": 1.04986,
"val/dfl_loss": 1.32641,
"fitness": 0.64104
},
"coco8-grayscale": {
"metrics/precision(B)": 0.6582,
"metrics/recall(B)": 0.51667,
"metrics/mAP50(B)": 0.59106,
"metrics/mAP50-95(B)": 0.33152,
"val/box_loss": 1.95424,
"val/cls_loss": 1.64059,
"val/dfl_loss": 1.70226,
"fitness": 0.33152
}
},
"save_dirs": {
"coco8": "runs/detect/coco8",
"coco8-grayscale": "runs/detect/coco8-grayscale"
}
}Der oberste fitness ist das arithmetische Mittel der fitness-Werte pro Datensatz. Beim Tuning für einen einzelnen Datensatz hat das datasets-Dictionary einen Eintrag, dessen fitness gleich dem obersten fitness ist. Pro abgeschlossener Iteration wird ein JSON-Objekt aufgezeichnet. Die tatsächlichen save_dirs-Pfade sind absolut; sie wurden oben zur besseren Lesbarkeit abgekürzt.
tune_scatter_plots.png
Diese Datei enthält Streudiagramme, die aus tune_results.ndjson generiert wurden, um dir zu helfen, die Beziehungen zwischen verschiedenen Hyperparametern und Leistungsmetriken zu visualisieren. Hyperparameter, deren Standardwert 0 ist (zum Beispiel degrees und shear unten), entwickeln sich möglicherweise nur langsam von ihrem anfänglichen Startwert, da der multiplikative Mutationsfaktor bei einem Wert nahe Null nur sehr wenig Spielraum zur Erweiterung hat.
- Format: PNG
- Usage: Explorative Datenanalyse
weights/
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 erreicht hat.
Anhand dieser Ergebnisse kannst du fundiertere Entscheidungen für deine zukünftigen Modelltrainings und Analysen treffen. Zögere nicht, diese Artefakte heranzuziehen, um zu verstehen, wie gut dein Modell abgeschnitten hat und wie du es weiter verbessern kannst.
Fazit
Der Hyperparameter-Tuning-Prozess in Ultralytics YOLO ist einfach und dennoch leistungsstark, dank seines auf genetischen Algorithmen basierenden Ansatzes, der BLX-α-Crossover mit log-normaler Mutation kombiniert. Die Befolgung der Schritte in diesem Leitfaden hilft dir dabei, dein Modell systematisch zu tunen, um eine bessere Leistung zu erzielen.
Weiterführende Literatur
- Hyperparameter-Optimierung in Wikipedia
- YOLOv5 Hyperparameter-Evolutionsleitfaden
- Effizientes Hyperparameter-Tuning mit Ray Tune und YOLO26
Für tiefere Einblicke kannst du den Tuner Klasse aufgerufen werden Quellcode und die begleitende Dokumentation erkunden. Solltest du Fragen oder Feature-Anfragen haben oder weitere Unterstützung benötigen, melde dich gerne bei uns auf GitHubSAM 2.1Discord.
FAQ
Wie optimiere ich die Lernraten-Scheduler für Ultralytics YOLO während des Hyperparameter-Tunings?
Um die Lernrate für Ultralytics YOLO zu optimieren, beginne damit, eine anfängliche Lernrate mit dem lr0 Parameter festzulegen. Übliche Werte liegen im Bereich von 0.001 bis 0.01. Während des Hyperparameter-Tuning-Prozesses wird dieser Wert mutiert, um die optimale Einstellung zu finden. Du kannst die model.tune() Methode verwenden, um diesen Prozess zu automatisieren. Zum 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)Modell verwenden, um deinen Datensatz im Segmentierungsformat automatisch zu annotieren. Hier ist ein Beispiel:Konfigurationsseite von Ultralytics YOLO.
Was sind die Vorteile der Verwendung genetischer Algorithmen für das Hyperparameter-Tuning in YOLO26?
Genetische Algorithmen in Ultralytics YOLO26 bieten eine robuste Methode zur Erkundung des Hyperparameter-Raums, was zu einer hochgradig optimierten Modellleistung führt. Zu den Hauptvorteilen gehören:
- Effiziente Suche: BLX-α-Crossover kombiniert Gene von Eltern mit der höchsten Fitness, während eine log-normale Mutation das Ergebnis stört, um neue Kandidaten zu entdecken.
- Vermeidung lokaler Minima: Durch die Einführung von Zufälligkeit helfen sie dabei, lokale Minima zu vermeiden und eine bessere globale Optimierung sicherzustellen.
- Leistungskennzahlen: Sie passen sich basierend auf einem aufgabenspezifischen Fitness-Score (mAP50-95 für Detektion) an.
Um zu sehen, wie genetische Algorithmen Hyperparameter optimieren können, schau dir den Hyperparameter-Evolutionsleitfaden.
Wie lange dauert der Hyperparameter-Tuning-Prozess für Ultralytics YOLO?
Die für das Hyperparameter-Tuning mit Ultralytics YOLO erforderliche Zeit hängt weitgehend 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 das Tuning von YOLO26n auf einem Datensatz wie COCO8 für 30 Epochen je nach Hardware mehrere Stunden bis Tage dauern.
Um die Tuning-Zeit effektiv zu verwalten, definiere vorab ein klares Tuning-Budget (interner Abschnitts-Link). Dies hilft dabei, die Ressourcenzuweisung und die Optimierungsziele auszubalancieren.
Welche Metriken sollte ich verwenden, um die Modellleistung während des Hyperparameter-Tunings in YOLO zu bewerten?
Wenn du die Modellleistung während des Hyperparameter-Tunings in YOLO bewertest, kannst du mehrere Schlüsselmetriken verwenden:
- AP50: Die durchschnittliche Genauigkeit bei einer IoU-Schwelle von 0,50.
- F1-Score: Das harmonische Mittel aus Präzision und Recall.
- Präzision und Recall: Individuelle Metriken, die die accuracy des Modells bei der Identifizierung von echten Positiven gegenüber falschen Positiven und falschen Negativen angeben.
Diese Metriken helfen dir dabei, verschiedene Aspekte der Leistung deines Modells zu verstehen. Siehe dir den Ultralytics YOLO Leistungsmetriken Leitfaden für einen umfassenden Überblick an.
Kann ich Ray Tune für eine erweiterte Hyperparameter-Optimierung mit YOLO26 verwenden?
Ja, Ultralytics YOLO26 lässt sich mit Ray Tune für eine erweiterte Hyperparameter-Optimierung integrieren. Ray Tune bietet ausgefeilte Suchalgorithmen wie Bayesian Optimization und Hyperband sowie Funktionen zur parallelen Ausführung, um den Tuning-Prozess zu beschleunigen.
Um Ray Tune mit YOLO26 zu verwenden, setze einfach den use_ray=True Parameter in deinem model.tune() Methodenaufruf. Für weitere Details und Beispiele schau dir den Ray Tune Integrationsleitfaden.