Effizientes Hyperparameter-Tuning mit Ray Tune und YOLOv8
Die Abstimmung der Hyperparameter ist wichtig, um die beste Leistung des Modells zu erreichen, indem der optimale Satz von Hyperparametern ermittelt wird. Dazu werden Versuche mit verschiedenen Hyperparametern durchgeführt und die Leistung der einzelnen Versuche bewertet.
Beschleunige das Tuning mit Ultralytics YOLOv8 und Ray Tune
Ultralytics YOLOv8 enthält Ray Tune für die Abstimmung der Hyperparameter, wodurch die Optimierung der Hyperparameter des YOLOv8 Modells vereinfacht wird. Mit Ray Tune kannst du fortschrittliche Suchstrategien, Parallelität und frühzeitiges Anhalten nutzen, um den Abstimmungsprozess zu beschleunigen.
Ray Tune
Ray Tune ist eine Bibliothek zum Abstimmen von Hyperparametern, die auf Effizienz und Flexibilität ausgelegt ist. Sie unterstützt verschiedene Suchstrategien, Parallelität und Frühstoppstrategien und lässt sich nahtlos in gängige Machine-Learning-Frameworks integrieren, darunter Ultralytics YOLOv8 .
Integration mit Weights & Biases
YOLOv8 ermöglicht auch die optionale Integration mit Weights & Biases zur Überwachung des Tuning-Prozesses.
Installation
Um die benötigten Pakete zu installieren, führe sie aus:
Installation
Verwendung
Verwendung
tune()
Parameter der Methode
Die tune()
Methode in YOLOv8 bietet eine einfach zu bedienende Schnittstelle für die Abstimmung der Hyperparameter mit Ray Tune. Sie akzeptiert mehrere Argumente, mit denen du den Abstimmungsprozess anpassen kannst. Nachfolgend findest du eine ausführliche Erklärung der einzelnen Parameter:
Parameter | Typ | Beschreibung | Standardwert |
---|---|---|---|
data |
str |
Die Dataset-Konfigurationsdatei (im YAML-Format), mit der der Tuner ausgeführt werden soll. Diese Datei sollte die Pfade für die Trainings- und Validierungsdaten sowie andere datensatzspezifische Einstellungen enthalten. | |
space |
dict, optional |
Ein Wörterbuch, das den Hyperparameter-Suchraum für Ray Tune definiert. Jeder Schlüssel entspricht einem Hyperparameternamen, und der Wert gibt den Wertebereich an, der bei der Abstimmung untersucht werden soll. Wenn nichts angegeben wird, verwendet YOLOv8 einen Standardsuchraum mit verschiedenen Hyperparametern. | |
grace_period |
int, optional |
Die Karenzzeit in Epochen für den ASHA-Scheduler in Ray Tune. Der Scheduler bricht keinen Versuch vor dieser Anzahl von Epochen ab, damit das Modell eine gewisse Mindesttrainingszeit hat, bevor es eine Entscheidung über einen vorzeitigen Abbruch trifft. | 10 |
gpu_per_trial |
int, optional |
Die Anzahl der GPUs, die während der Abstimmung pro Versuch zugewiesen werden. Dies hilft bei der Verwaltung der GPU-Nutzung, insbesondere in Multi-GPU-Umgebungen. Wenn keine Angabe gemacht wird, nutzt der Tuner alle verfügbaren GPUs. | Keine |
iterations |
int, optional |
Die maximale Anzahl der Versuche, die während der Abstimmung durchgeführt werden. Mit diesem Parameter kannst du die Gesamtzahl der getesteten Hyperparameterkombinationen steuern und sicherstellen, dass der Abstimmungsprozess nicht unendlich lange dauert. | 10 |
**train_args |
dict, optional |
Zusätzliche Argumente zur Übergabe an die train() Methode während der Abstimmung. Diese Argumente können Einstellungen wie die Anzahl der Trainingsepochen, die Stapelgröße und andere trainingsspezifische Konfigurationen beinhalten. |
{} |
Indem du diese Parameter anpasst, kannst du den Hyperparameter-Optimierungsprozess genau auf deine Bedürfnisse und die verfügbaren Rechenressourcen abstimmen.
Standard-Suchraum Beschreibung
In der folgenden Tabelle sind die Standard-Suchraumparameter für das Hyperparameter-Tuning in YOLOv8 mit Ray Tune aufgeführt. Jeder Parameter hat einen bestimmten Wertebereich, der durch tune.uniform()
.
Parameter | Wertebereich | Beschreibung |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Anfängliche Lernrate |
lrf |
tune.uniform(0.01, 1.0) |
Endgültiger Lernratenfaktor |
momentum |
tune.uniform(0.6, 0.98) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Gewichtsabnahme |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Aufwärm-Epochen |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Aufwärmschwung |
box |
tune.uniform(0.02, 0.2) |
Box Verlust Gewicht |
cls |
tune.uniform(0.2, 4.0) |
Klasse Verlust Gewicht |
hsv_h |
tune.uniform(0.0, 0.1) |
Bereich der Farbtonvergrößerung |
hsv_s |
tune.uniform(0.0, 0.9) |
Bereich der Sättigungserweiterung |
hsv_v |
tune.uniform(0.0, 0.9) |
Wert (Helligkeit) Vergrößerungsbereich |
degrees |
tune.uniform(0.0, 45.0) |
Bereich der Rotationsvergrößerung (Grad) |
translate |
tune.uniform(0.0, 0.9) |
Bereich der Übersetzungserweiterung |
scale |
tune.uniform(0.0, 0.9) |
Skalierung des Vergrößerungsbereichs |
shear |
tune.uniform(0.0, 10.0) |
Bereich der Scherungserhöhung (Grad) |
perspective |
tune.uniform(0.0, 0.001) |
Bereich der Perspektivvergrößerung |
flipud |
tune.uniform(0.0, 1.0) |
Vertikale Flip-Augmentationswahrscheinlichkeit |
fliplr |
tune.uniform(0.0, 1.0) |
Horizontale Flip-Augmentationswahrscheinlichkeit |
mosaic |
tune.uniform(0.0, 1.0) |
Wahrscheinlichkeit der Mosaikvergrößerung |
mixup |
tune.uniform(0.0, 1.0) |
Verwechslungswahrscheinlichkeit der Vergrößerung |
copy_paste |
tune.uniform(0.0, 1.0) |
Kopieren-Einfügen-Erweiterungswahrscheinlichkeit |
Beispiel für einen benutzerdefinierten Suchraum
In diesem Beispiel zeigen wir dir, wie du einen benutzerdefinierten Suchraum für die Abstimmung der Hyperparameter mit Ray Tune und YOLOv8 verwenden kannst. Indem du einen benutzerdefinierten Suchraum angibst, kannst du den Abstimmungsprozess auf bestimmte Hyperparameter von Interesse konzentrieren.
Verwendung
Im obigen Codeschnipsel erstellen wir ein YOLO Modell mit den vortrainierten Gewichten "yolov8n.pt". Dann rufen wir die tune()
Methode, wobei die Datensatzkonfiguration mit "coco8.yaml" angegeben wird. Wir stellen einen eigenen Suchraum für die anfängliche Lernrate zur Verfügung lr0
unter Verwendung eines Wörterbuchs mit dem Schlüssel "lr0" und dem Wert tune.uniform(1e-5, 1e-1)
. Schließlich übergeben wir zusätzliche Trainingsargumente, wie die Anzahl der Epochen, direkt an die Tune-Methode als epochs=50
.
Verarbeitung der Ray Tune Ergebnisse
Nachdem du ein Hyperparameter-Tuning-Experiment mit Ray Tune durchgeführt hast, möchtest du vielleicht verschiedene Analysen der erhaltenen Ergebnisse durchführen. Dieser Leitfaden führt dich durch gängige Arbeitsabläufe zur Verarbeitung und Analyse dieser Ergebnisse.
Tune Experiment Ergebnisse aus einem Verzeichnis laden
Nach der Durchführung des Tuning-Experiments mit tuner.fit()
kannst du die Ergebnisse aus einem Verzeichnis laden. Das ist besonders nützlich, wenn du die Analyse durchführst, nachdem das ursprüngliche Trainingsskript beendet wurde.
experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")
restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()
Grundlegende Analyse auf Experiment-Ebene
Verschaffe dir einen Überblick darüber, wie die Versuche gelaufen sind. Du kannst schnell überprüfen, ob es bei den Versuchen Fehler gab.
Grundlegende Analyse auf Trial-Ebene
Zugriff auf die Konfigurationen der einzelnen Versuchshyperparameter und die zuletzt gemeldeten Metriken.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Darstellung der gesamten Historie der gemeldeten Metriken für eine Prüfung
Du kannst den Verlauf der gemeldeten Kennzahlen für jeden Versuch darstellen, um zu sehen, wie sich die Kennzahlen im Laufe der Zeit entwickelt haben.
import matplotlib.pyplot as plt
for result in result_grid:
plt.plot(result.metrics_dataframe["training_iteration"], result.metrics_dataframe["mean_accuracy"], label=f"Trial {i}")
plt.xlabel('Training Iterations')
plt.ylabel('Mean Accuracy')
plt.legend()
plt.show()
Zusammenfassung
In dieser Dokumentation haben wir gängige Arbeitsabläufe zur Analyse der Ergebnisse von Ray Tune-Experimenten mit Ultralytics behandelt. Zu den wichtigsten Schritten gehören das Laden der Versuchsergebnisse aus einem Verzeichnis, die Durchführung grundlegender Analysen auf Versuchs- und Experimentsebene und das Erstellen von Diagrammen für die Metriken.
Um das Beste aus deinen Hyperparameter-Tuning-Experimenten herauszuholen, kannst du die Dokumentseite von Ray Tune zum Thema " Ergebnisse analysieren " lesen.