Ultralytics YOLO Hyperparameter-Tuning-Leitfaden
Einführung
Die Abstimmung von Hyperparametern ist nicht nur eine einmalige Einrichtung, 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 reichen, wie z. B. die Anzahl der Schichten oder die Art der verwendeten Aktivierungsfunktionen.
Beobachten: Abstimmen von Hyperparametern 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 der Trainingsphase konstant. Hier sind einige häufig eingestellte Hyperparameter in Ultralytics YOLO :
- Lernrate
lr0
: Bestimmt die Schrittweite bei jeder Iteration und bewegt sich dabei auf ein Minimum in der Verlustfunktion. - Größe der Charge
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. Anzahl der Kanäle, Anzahl der Schichten, Arten von Aktivierungsfunktionen, usw.
Eine vollständige Liste der in YOLO11 verwendeten Augmentationshyperparameter finden Sie auf der Seite Konfigurationen.
Genetische Evolution und Mutation
Ultralytics YOLO verwendet genetische Algorithmen zur Optimierung von Hyperparametern. 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 im Hyperparameterraum, indem kleine, zufällige Änderungen an bestehenden Hyperparametern vorgenommen werden, die neue Kandidaten für die Bewertung hervorbringen.
- Crossover: Obwohl Crossover eine beliebte Technik der genetischen Algorithmen ist, wird sie derzeit in Ultralytics YOLO nicht zur Abstimmung der Hyperparameter verwendet. Der Schwerpunkt liegt hauptsächlich auf der Mutation zur Erzeugung neuer Hyperparametersätze.
Vorbereiten der Hyperparameter-Abstimmung
Bevor Sie mit dem Tuning beginnen, ist es wichtig, dass Sie:
- Bestimmen Sie die Metriken: Bestimmen Sie die Metriken, die Sie zur Bewertung der Leistung des Modells verwenden wollen. Dies können AP50, F1-Score oder andere sein.
- Legen Sie das Tuning-Budget fest: Legen Sie fest, wie viele Rechenressourcen Sie bereit sind, zuzuweisen. Die Abstimmung von Hyperparametern kann rechenintensiv sein.
Beteiligte Schritte
Initialisierung von Hyperparametern
Beginnen Sie mit einem vernünftigen Satz von Anfangshyperparametern. Dies können entweder die Standard-Hyperparameter sein, die von Ultralytics YOLO festgelegt wurden, oder etwas, das auf Ihrem 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. Die Tuner-Klasse übernimmt diesen Vorgang automatisch.
Zugmodell
Das Training wird mit dem veränderten Satz von Hyperparametern durchgeführt. Die Trainingsleistung wird dann anhand der von Ihnen gewählten Metriken bewertet.
Modell auswerten
Verwenden Sie Metriken wie AP50, F1-Score oder benutzerdefinierte Metriken, um die Leistung des Modells zu bewerten. Der Bewertungsprozess hilft dabei festzustellen, ob die aktuellen Hyperparameter besser sind als die vorherigen.
Log-Ergebnisse
Es ist von entscheidender Bedeutung, sowohl die Leistungsmetriken als auch die entsprechenden Hyperparameter zu protokollieren, um später darauf zurückgreifen zu können. Ultralytics YOLO speichert diese Ergebnisse automatisch im CSV-Format.
Wiederholen Sie
Der Prozess wird so lange wiederholt, bis entweder die festgelegte Anzahl von Iterationen erreicht ist oder die Leistungskennzahl zufriedenstellend ist. Jede Iteration baut auf den Erkenntnissen der vorherigen Durchläufe auf.
Standard-Suchraum Beschreibung
In der folgenden Tabelle sind die Standard-Suchraumparameter für das Hyperparameter-Tuning in YOLO11 aufgeführt. Jeder Parameter hat einen bestimmten Wertebereich, der durch ein Tupel (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) |
Endgültiger Lernratenfaktor als Bruchteil von lr0. Steuert, wie stark die Lernrate während des Trainings sinkt |
momentum |
float |
(0.6, 0.98) |
SGD-Dynamikfaktor. Höhere Werte helfen, die Gradientenrichtung konsistent zu halten und können die Konvergenz beschleunigen. |
weight_decay |
float |
(0.0, 0.001) |
L2-Regularisierungsfaktor, um eine Überanpassung zu verhindern. Größere Werte erzwingen eine stärkere Regularisierung |
warmup_epochs |
float |
(0.0, 5.0) |
Anzahl der Epochen für das Aufwärmen der linearen Lernrate. Hilft, eine frühe Trainingsinstabilität zu verhindern |
warmup_momentum |
float |
(0.0, 0.95) |
Anfangsimpuls während der Aufwärmphase. Allmählicher Anstieg bis zum endgültigen Impulswert |
box |
float |
(0.02, 0.2) |
Bounding-Box-Verlustgewicht in der Gesamtverlustfunktion. Gleichgewicht zwischen Box-Regression und Klassifizierung |
cls |
float |
(0.2, 4.0) |
Gewicht des Klassifizierungsverlusts in der Gesamtverlustfunktion. Höhere Werte betonen die korrekte Klassenvorhersage |
hsv_h |
float |
(0.0, 0.1) |
Zufälliger Farbtonvergrößerungsbereich im HSV-Farbraum. Hilft, das Modell über Farbvariationen hinweg zu verallgemeinern |
hsv_s |
float |
(0.0, 0.9) |
Zufälliger Bereich der Sättigungserhöhung im HSV-Raum. Simuliert unterschiedliche Lichtverhältnisse |
hsv_v |
float |
(0.0, 0.9) |
Bereich der Zufallswertvergrößerung (Helligkeit). Hilft dem Modell bei der Handhabung verschiedener Belichtungsstufen |
degrees |
float |
(0.0, 45.0) |
Maximale Rotationsvergrößerung in Grad. Hilft dem Modell, invariant gegenüber der Objektausrichtung zu werden |
translate |
float |
(0.0, 0.9) |
Maximale Übersetzungserweiterung als Bruchteil der Bildgröße. Verbessert die Robustheit gegenüber der Objektposition |
scale |
float |
(0.0, 0.9) |
Zufällige Skalierung des Vergrößerungsbereichs. Hilft dem Modell, Objekte in verschiedenen Größen zu erkennen |
shear |
float |
(0.0, 10.0) |
Maximale Scherungserweiterung in Grad. Fügt den Trainingsbildern perspektivisch anmutende Verzerrungen hinzu |
perspective |
float |
(0.0, 0.001) |
Zufälliger Bereich der perspektivischen Vergrößerung. Simuliert verschiedene Blickwinkel |
flipud |
float |
(0.0, 1.0) |
Wahrscheinlichkeit, dass das Bild während des Trainings vertikal gekippt wird. Nützlich für Überkopf-/Luftbildaufnahmen |
fliplr |
float |
(0.0, 1.0) |
Wahrscheinlichkeit der horizontalen Bildumkehr. Hilft, das Modell invariant gegenüber der Objektrichtung zu machen |
mosaic |
float |
(0.0, 1.0) |
Wahrscheinlichkeit der Verwendung einer Mosaikvergrößerung, die 4 Bilder kombiniert. Besonders nützlich für die Erkennung kleiner Objekte |
mixup |
float |
(0.0, 1.0) |
Wahrscheinlichkeit der Verwendung der Verwechslungs-Augmentation, die zwei Bilder vermischt. Kann die Robustheit des Modells verbessern |
copy_paste |
float |
(0.0, 1.0) |
Wahrscheinlichkeit der Verwendung der Copy-Paste-Erweiterung. Hilft, die Leistung der Instanzsegmentierung zu verbessern |
Beispiel für einen benutzerdefinierten Suchraum
So definieren Sie einen Suchraum und verwenden die model.tune()
Methode zur Nutzung der Tuner
Klasse für das Hyperparameter-Tuning von YOLO11n auf COCO8 für 30 Epochen mit einem AdamW-Optimierer und Überspringen von Plotten, 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("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,
)
Ergebnisse
Nachdem Sie die Abstimmung der Hyperparameter erfolgreich abgeschlossen haben, erhalten Sie mehrere Dateien und Verzeichnisse, in denen die Ergebnisse der Abstimmung enthalten sind. Im Folgenden werden die einzelnen Dateien 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/
enthält die Abstimmungsergebnisse 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
Datei-Beschreibungen
best_hyperparameters.yaml
Diese YAML-Datei enthält die besten Hyperparameter, die während des Tuning-Prozesses 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
beste_fitness.png
Dies ist ein Diagramm, das die Fitness (in der Regel eine Leistungskennzahl wie AP50) gegen die Anzahl der Iterationen darstellt. So können Sie sich ein Bild davon machen, wie gut der genetische Algorithmus im Laufe der Zeit abgeschnitten hat.
- Format: PNG
- Verwendung: Leistungsvisualisierung
tune_results.csv
Eine CSV-Datei mit 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, Präzision, Recall sowie die verwendeten Hyperparameter.
- Format: CSV
- Verwendung: Verfolgung 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.csv
und hilft Ihnen, die Beziehungen zwischen verschiedenen Hyperparametern und Leistungsmetriken zu visualisieren. Beachten Sie, dass Hyperparameter, die auf 0 initialisiert sind, nicht abgestimmt werden, wie z. B. degrees
und shear
unten.
- Format: PNG
- Verwendung: Explorative Datenanalyse
Gewichte/
Dieses Verzeichnis enthält die gespeicherten PyTorch Modelle für die letzten und besten Iterationen während des Hyperparameter-Tuning-Prozesses.
last.pt
: Die letzten.pt sind die Gewichte der letzten Trainingsepoche.best.pt
: Die best.pt-Gewichte für die Iteration, die das beste Fitness-Ergebnis erzielt hat.
Anhand dieser Ergebnisse können Sie fundiertere Entscheidungen für Ihre zukünftigen Modellschulungen und Analysen treffen. Sie können diese Artefakte gerne einsehen, um zu verstehen, wie gut Ihr Modell abgeschnitten hat und wie Sie es weiter verbessern können.
Schlussfolgerung
Der Prozess der Abstimmung der Hyperparameter in Ultralytics YOLO ist dank des auf Mutation basierenden genetischen Algorithmus vereinfacht und dennoch leistungsstark. Wenn Sie die in diesem Leitfaden beschriebenen Schritte befolgen, können Sie Ihr Modell systematisch abstimmen, um eine bessere Leistung zu erzielen.
Weitere Lektüre
- Hyperparameter-Optimierung in Wikipedia
- YOLOv5 Leitfaden für die Entwicklung von Hyperparametern
- Effizientes Hyperparameter-Tuning mit Ray Tune und YOLO11
Wenn Sie tiefere Einblicke erhalten möchten, können Sie die Tuner
Klasse Quellcode und die dazugehörige Dokumentation. Sollten Sie Fragen oder Funktionswünsche haben oder weitere Unterstützung benötigen, können Sie sich gerne an uns wenden unter GitHub oder Diskord.
FAQ
Wie kann ich die Lernrate für Ultralytics YOLO während der Abstimmung der Hyperparameter optimieren?
Um die Lernrate für Ultralytics YOLO zu optimieren, legen Sie zunächst eine anfängliche Lernrate fest, indem Sie die lr0
Parameter. Übliche Werte reichen von 0.001
zu 0.01
. Während der Abstimmung der Hyperparameter wird dieser Wert verändert, um die optimale Einstellung zu finden. Sie können die model.tune()
Methode, um diesen Prozess zu automatisieren. Zum Beispiel:
Beispiel
Weitere Einzelheiten sind auf der KonfigurationsseiteUltralytics YOLO zu finden.
Welche Vorteile bietet die Verwendung genetischer Algorithmen für die Abstimmung der Hyperparameter in YOLO11?
Genetische Algorithmen in Ultralytics YOLO11 bieten eine robuste Methode zur Erkundung des Hyperparameterraums, die zu einer hoch optimierten Modellleistung führt. Die wichtigsten Vorteile sind:
- Effiziente Suche: Genetische Algorithmen wie die Mutation können schnell einen großen Satz von Hyperparametern untersuchen.
- Vermeidung lokaler Minima: Durch die Einführung von Zufälligkeiten helfen sie bei der Vermeidung lokaler Minima und gewährleisten eine bessere globale Optimierung.
- Leistungsmetriken: Sie passen sich auf der Grundlage von Leistungsmetriken wie AP50 und F1-Score an.
Wie genetische Algorithmen Hyperparameter optimieren können, erfahren Sie im Leitfaden zur Entwicklung von Hyperparametern.
Wie lange dauert der Prozess der Abstimmung der Hyperparameter für Ultralytics YOLO ?
Die Zeit, die für die Abstimmung der Hyperparameter mit Ultralytics YOLO benötigt wird, hängt weitgehend von mehreren Faktoren ab, wie z. B. 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 YOLO11n auf einem Datensatz wie COCO8 für 30 Epochen je nach Hardware mehrere Stunden bis Tage dauern.
Um die Abstimmungszeit effektiv zu verwalten, sollten Sie im Vorfeld ein klares Abstimmungsbudget festlegen(Link zum internen Abschnitt). Dies hilft bei der Abwägung zwischen Ressourcenzuweisung und Optimierungszielen.
Welche Metriken sollte ich zur Bewertung der Modellleistung während der Abstimmung der Hyperparameter in YOLO verwenden?
Bei der Bewertung der Modellleistung während der Abstimmung der Hyperparameter in YOLO können Sie mehrere Schlüsselmetriken verwenden:
- AP50: Die durchschnittliche Genauigkeit bei einem IoU-Schwellenwert von 0,50.
- F1-Score: Das harmonische Mittel aus Precision und Recall.
- Präzision und Rückgewinnung: Einzelne Metriken, die die Genauigkeit des Modells bei der Identifizierung von echten Positiven gegenüber falschen Positiven und falschen Negativen angeben.
Diese Metriken helfen Ihnen, verschiedene Aspekte der Leistung Ihres Modells zu verstehen. Einen umfassenden Überblick finden Sie im Leitfaden für Leistungskennzahlen unterUltralytics YOLO .
Kann ich Ray Tune für die erweiterte Hyperparameter-Optimierung mit YOLO11 verwenden?
Ja, Ultralytics YOLO11 ist mit Ray Tune für die erweiterte Hyperparameter-Optimierung integriert. Ray Tune bietet hochentwickelte Suchalgorithmen wie Bayes'sche Optimierung und Hyperband sowie parallele Ausführungsmöglichkeiten, um den Abstimmungsprozess zu beschleunigen.
Um Ray Tune mit YOLO11 zu verwenden, setzen Sie einfach die use_ray=True
Parameter in Ihrem model.tune()
Methodenaufruf. Weitere Einzelheiten und Beispiele finden Sie in der Ray Tune Integrationsleitfaden.