Zum Inhalt springen

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 ├ťbersicht

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

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

Verwendung

Verwendung

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO('yolov8n.pt')

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data='coco8.yaml', use_ray=True)

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 detaillierte 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

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.pt")

# Run Ray Tune on the model
result_grid = model.tune(data="coco128.yaml",
                         space={"lr0": tune.uniform(1e-5, 1e-1)},
                         epochs=50,
                         use_ray=True)

Im obigen Codeschnipsel erstellen wir ein YOLO Modell mit den vortrainierten Gewichten "yolov8n.pt". Dann rufen wir die tune() Methode, wobei die Datensatzkonfiguration mit "coco128.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.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

Grundlegende Analyse auf Trial-Ebene

Zugriff auf die Hyperparameter-Konfigurationen der einzelnen Versuche 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 Experimenten zum Tuning von Hyperparametern herauszuholen, kannst du dir die Dokumentseite von Ray Tune zum Thema " Ergebnisse analysieren " ansehen.



Erstellt am 2023-11-12, Aktualisiert am 2023-11-18
Autoren: glenn-jocher (2)

Kommentare