Effizientes Hyperparameter-Tuning mit Ray Tune und YOLO11
Hyperparameter-Tuning ist entscheidend, um eine maximale Modellleistung zu erzielen, indem der optimale Satz von Hyperparametern gefunden wird. Dies beinhaltet das Durchführen von Trials mit verschiedenen Hyperparametern und die Bewertung der Leistung jedes Trials.
Beschleunigen des Tunings mit Ultralytics YOLO11 und Ray Tune
Ultralytics YOLO11 integriert Ray Tune für das Hyperparameter-Tuning und optimiert so die Optimierung der YOLO11-Modell-Hyperparameter. Mit Ray Tune können Sie fortschrittliche Suchstrategien, Parallelität und Early Stopping nutzen, um den Tuning-Prozess zu beschleunigen.
Ray Tune
Ray Tune ist eine Hyperparameter-Tuning-Bibliothek, die auf Effizienz und Flexibilität ausgelegt ist. Sie unterstützt verschiedene Suchstrategien, Parallelität und Early-Stopping-Strategien und lässt sich nahtlos in gängige Machine-Learning-Frameworks integrieren, darunter Ultralytics YOLO11.
Integration mit Weights & Biases
YOLO11 ermöglicht auch die optionale Integration mit Weights & Biases zur Überwachung des Tuning-Prozesses.
Installation
Um die erforderlichen Pakete zu installieren, führen Sie Folgendes 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
Nutzung
Nutzung
from ultralytics import YOLO
# Load a YOLO11n model
model = YOLO("yolo11n.pt")
# Start tuning hyperparameters for YOLO11n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)
tune()
Methodenparameter
Die tune()
Die Methode in YOLO11 bietet eine benutzerfreundliche Schnittstelle für das Hyperparameter-Tuning mit Ray Tune. Sie akzeptiert mehrere Argumente, mit denen Sie den Tuning-Prozess anpassen können. Nachfolgend finden Sie eine detaillierte Erläuterung der einzelnen Parameter:
Parameter | Typ | Beschreibung | Standardwert |
---|---|---|---|
data |
str |
Die Dataset-Konfigurationsdatei (im YAML-Format), auf der der Tuner ausgeführt werden soll. Diese Datei sollte die Pfade der Trainings- und Validierungsdaten sowie andere datasetspezifische Einstellungen enthalten. | |
space |
dict, optional |
Ein Dictionary, das den Hyperparameter-Suchraum für Ray Tune definiert. Jeder Schlüssel entspricht einem Hyperparameter-Namen, und der Wert gibt den Wertebereich an, der während des Tunings untersucht werden soll. Wenn nicht angegeben, verwendet YOLO11 einen Standard-Suchraum mit verschiedenen Hyperparametern. | |
grace_period |
int, optional |
Die Karenzzeit in Epochen für den ASHA-Scheduler in Ray Tune. Der Scheduler beendet keinen Trial vor dieser Anzahl von Epochen, wodurch das Modell ein minimales Training absolvieren kann, bevor eine Entscheidung über Early Stopping getroffen wird. | 10 |
gpu_per_trial |
int, optional |
Die Anzahl der GPUs, die pro Trial während des Tunings zugewiesen werden sollen. Dies hilft bei der Verwaltung der GPU-Auslastung, insbesondere in Multi-GPU-Umgebungen. Wenn nicht angegeben, verwendet der Tuner alle verfügbaren GPUs. | None |
iterations |
int, optional |
Die maximale Anzahl von Trials, die während des Tunings durchgeführt werden sollen. Dieser Parameter hilft, die Gesamtzahl der getesteten Hyperparameter-Kombinationen zu steuern und stellt sicher, dass der Tuning-Prozess nicht unbegrenzt läuft. | 10 |
**train_args |
dict, optional |
Zusätzliche Argumente, die an die train() Methode während des Tunings übergeben werden sollen. Diese Argumente können Einstellungen wie die Anzahl der Trainingsepochen, Batch-Größeund andere trainingsspezifische Konfigurationen enthalten. |
{} |
Durch die Anpassung dieser Parameter können Sie den Hyperparameter-Optimierungsprozess an Ihre spezifischen Bedürfnisse und verfügbaren Rechenressourcen anpassen.
Beschreibung des Standard-Suchraums
Die folgende Tabelle listet die Standard-Suchraumparameter für das Hyperparameter-Tuning in YOLO11 mit Ray Tune auf. Jeder Parameter hat einen spezifischen Wertebereich, der durch tune.uniform()
.
Parameter | Bereich | Beschreibung |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Anfängliche Lernrate, die die Schrittgröße während der Optimierung steuert. Höhere Werte beschleunigen das Training, können aber zu Instabilität führen. |
lrf |
tune.uniform(0.01, 1.0) |
Finaler Lernraten-Faktor, der bestimmt, um wie viel die Lernrate am Ende des Trainings sinkt. |
momentum |
tune.uniform(0.6, 0.98) |
Momentumfaktor für den Optimierer, der hilft, das Training zu beschleunigen und lokale Minima zu überwinden. |
weight_decay |
tune.uniform(0.0, 0.001) |
Regularisierungsparameter, der eine Überanpassung verhindert, indem er hohe Gewichtungswerte bestraft. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Anzahl der Epochen mit allmählich steigender Lernrate, um das frühe Training zu stabilisieren. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Anfänglicher Momentum-Wert, der während der Aufwärmphase allmählich ansteigt. |
box |
tune.uniform(0.02, 0.2) |
Gewichtung für die Verlustkomponente der Begrenzungsbox, die die Lokalisierungsgenauigkeit im Modell ausgleicht. |
cls |
tune.uniform(0.2, 4.0) |
Gewichtung für die Klassifizierungsverlustkomponente, die die Genauigkeit der Klassen Vorhersage im Modell ausgleicht. |
hsv_h |
tune.uniform(0.0, 0.1) |
Der Bereich der Farbton-Augmentierung, der Farbvariabilität einführt, um dem Modell zu helfen, zu generalisieren. |
hsv_s |
tune.uniform(0.0, 0.9) |
Sättigungs-Augmentationsbereich, der die Farbintensität variiert, um die Robustheit zu verbessern. |
hsv_v |
tune.uniform(0.0, 0.9) |
Wertebereich für die Helligkeitserweiterung, der dem Modell hilft, unter verschiedenen Lichtverhältnissen zu arbeiten. |
degrees |
tune.uniform(0.0, 45.0) |
Rotationsaugmentationsbereich in Grad, wodurch die Erkennung von rotierten Objekten verbessert wird. |
translate |
tune.uniform(0.0, 0.9) |
Übersetzungs-Augmentierungsbereich, der Bilder horizontal und vertikal verschiebt. |
scale |
tune.uniform(0.0, 0.9) |
Skalierungs-Augmentationsbereich, der Objekte in unterschiedlichen Entfernungen simuliert. |
shear |
tune.uniform(0.0, 10.0) |
Scherungs-Augmentierungsbereich in Grad, der Perspektivenverschiebungen simuliert. |
perspective |
tune.uniform(0.0, 0.001) |
Perspektiven-Augmentationsbereich, der 3D-Ansichtsänderungen simuliert. |
flipud |
tune.uniform(0.0, 1.0) |
Wahrscheinlichkeit für vertikale Spiegelung zur Erhöhung der Datensatzvielfalt. |
fliplr |
tune.uniform(0.0, 1.0) |
Horizontale Spiegelung Augmentationswahrscheinlichkeit, nützlich für symmetrische Objekte. |
mosaic |
tune.uniform(0.0, 1.0) |
Mosaik-Augmentierungswahrscheinlichkeit, die vier Bilder zu einem Trainingsbeispiel kombiniert. |
mixup |
tune.uniform(0.0, 1.0) |
Mixup-Augmentationswahrscheinlichkeit, die zwei Bilder und ihre Beschriftungen miteinander vermischt. |
cutmix |
tune.uniform(0.0, 1.0) |
Cutmix-Augmentationswahrscheinlichkeit, die Bildregionen kombiniert und gleichzeitig lokale Merkmale beibehält, wodurch die Erkennung von teilweise verdeckten Objekten verbessert wird. |
copy_paste |
tune.uniform(0.0, 1.0) |
Copy-Paste-Augmentationswahrscheinlichkeit, die Objekte zwischen Bildern überträgt, um die Instanzvielfalt zu erhöhen. |
Beispiel für einen benutzerdefinierten Suchraum
In diesem Beispiel zeigen wir, wie man einen benutzerdefinierten Suchraum für die Hyperparameter-Optimierung mit Ray Tune und YOLO11 verwendet. Durch die Bereitstellung eines benutzerdefinierten Suchraums können Sie den Optimierungsprozess auf bestimmte Hyperparameter von Interesse konzentrieren.
Nutzung
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-1)},
epochs=50,
use_ray=True,
)
Im obigen Code-Snippet erstellen wir ein YOLO-Modell mit den vortrainierten Gewichten "yolo11n.pt". Dann rufen wir die tune()
Methode auf und geben die Dataset-Konfiguration mit "coco8.yaml" an. Wir stellen einen benutzerdefinierten Suchraum für die anfängliche Lernrate bereit lr0
unter Verwendung eines Dictionary mit dem Schlüssel "lr0" und dem Wert tune.uniform(1e-5, 1e-1)
. Abschließend übergeben wir zusätzliche Trainingsargumente, wie z. B. die Anzahl der Epochen, direkt an die Tune-Methode als epochs=50
.
Eine unterbrochene Hyperparameter-Optimierungssitzung mit Ray Tune fortsetzen
Sie können eine unterbrochene Ray Tune-Sitzung fortsetzen, indem Sie übergeben resume=True
Optional können Sie das Verzeichnis übergeben name
verwendet von Ray Tune unter runs/{task}
um fortzufahren. Andernfalls würde die letzte unterbrochene Sitzung fortgesetzt. Sie müssen die iterations
und space
erneut, aber Sie müssen die restlichen Trainingsargumente erneut angeben, einschließlich data
und epochs
.
Verwendung von resume=True
mit model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)
Verarbeitung von Ray Tune Ergebnissen
Nachdem Sie ein Hyperparameter-Optimierungsexperiment mit Ray Tune durchgeführt haben, möchten Sie möglicherweise verschiedene Analysen der erhaltenen Ergebnisse durchführen. Diese Anleitung führt Sie durch gängige Workflows zur Verarbeitung und Analyse dieser Ergebnisse.
Laden von Tune-Experimentergebnissen aus einem Verzeichnis
Nachdem Sie das Tuning-Experiment mit tuner.fit()
ausgeführt haben, können Sie die Ergebnisse aus einem Verzeichnis laden. Dies ist besonders nützlich, wenn Sie die Analyse durchführen, 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 Experimentebene
Verschaffen Sie sich einen Überblick über die Leistung der Trials. Sie können schnell überprüfen, ob während der Trials Fehler aufgetreten sind.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")
Grundlegende Analyse auf Trial-Ebene
Greifen Sie auf die Hyperparameter-Konfigurationen der einzelnen Trials und die zuletzt gemeldeten Metriken zu.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Darstellung des gesamten Verlaufs der gemeldeten Metriken für einen Trial
Sie können den Verlauf der gemeldeten Metriken für jeden Trial darstellen, um zu sehen, wie sich die Metriken im Laufe der Zeit entwickelt haben.
import matplotlib.pyplot as plt
for i, result in enumerate(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 Workflows zur Analyse der Ergebnisse von Experimenten behandelt, die mit Ray Tune unter Verwendung von Ultralytics durchgeführt wurden. Die wichtigsten Schritte umfassen das Laden der Experimentergebnisse aus einem Verzeichnis, die Durchführung grundlegender Analysen auf Experiment- und Trial-Ebene sowie das Plotten von Metriken.
Erfahren Sie mehr auf der Ray Tune-Dokumentationsseite Ergebnisse analysieren, um das Beste aus Ihren Hyperparameter-Optimierungsexperimenten herauszuholen.
FAQ
Wie kann ich die Hyperparameter meines YOLO11-Modells mit Ray Tune optimieren?
Um die Hyperparameter Ihres Ultralytics YOLO11-Modells mit Ray Tune zu optimieren, führen Sie die folgenden Schritte aus:
-
Installieren Sie die erforderlichen Pakete:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Laden Sie Ihr YOLO11-Modell und starten Sie das Tuning:
from ultralytics import YOLO # Load a YOLO11 model model = YOLO("yolo11n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
Dies nutzt die fortschrittlichen Suchstrategien und den Parallelismus von Ray Tune, um die Hyperparameter Ihres Modells effizient zu optimieren. Weitere Informationen finden Sie in der Ray Tune-Dokumentation.
Was sind die Standard-Hyperparameter für das YOLO11-Tuning mit Ray Tune?
Ultralytics YOLO11 verwendet die folgenden Standard-Hyperparameter für das Tuning mit Ray Tune:
Parameter | Wertebereich | Beschreibung |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Anfängliche Lernrate |
lrf |
tune.uniform(0.01, 1.0) |
Faktor der finalen Lernrate |
momentum |
tune.uniform(0.6, 0.98) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Gewichtsverfall |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Warmup-Epochen |
box |
tune.uniform(0.02, 0.2) |
Gewicht des Box-Verlusts |
cls |
tune.uniform(0.2, 4.0) |
Gewicht des Klassenverlusts |
hsv_h |
tune.uniform(0.0, 0.1) |
Bereich der Farbton-Augmentierung |
translate |
tune.uniform(0.0, 0.9) |
Bereich der Translations-Augmentierung |
Diese Hyperparameter können an Ihre spezifischen Bedürfnisse angepasst werden. Eine vollständige Liste und weitere Details finden Sie im Hyperparameter-Tuning-Leitfaden.
Wie kann ich Weights & Biases in mein YOLO11-Modell-Tuning integrieren?
So integrieren Sie Weights & Biases (W&B) in Ihren Ultralytics YOLO11-Tuning-Prozess:
-
W&B installieren:
pip install wandb
-
Passen Sie Ihr Tuning-Skript an:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo11n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
Diese Einrichtung ermöglicht es Ihnen, den Tuning-Prozess zu überwachen, Hyperparameter-Konfigurationen zu verfolgen und Ergebnisse in W&B zu visualisieren.
Warum sollte ich Ray Tune für die Hyperparameteroptimierung mit YOLO11 verwenden?
Ray Tune bietet zahlreiche Vorteile für die Hyperparameter-Optimierung:
- Fortschrittliche Suchstrategien: Verwendet Algorithmen wie Bayesianische Optimierung und HyperOpt für eine effiziente Parametersuche.
- Parallelität: Unterstützt die parallele Ausführung mehrerer Versuche, was den Tuning-Prozess erheblich beschleunigt.
- Vorzeitiges Stoppen: Wendet Strategien wie ASHA an, um leistungsschwache Versuche frühzeitig zu beenden und so Rechenressourcen zu sparen.
Ray Tune lässt sich nahtlos in Ultralytics YOLO11 integrieren und bietet eine benutzerfreundliche Oberfläche für die effektive Optimierung von Hyperparametern. Informationen zu den ersten Schritten finden Sie im Leitfaden zur Hyperparameter-Optimierung.
Wie kann ich einen benutzerdefinierten Suchraum für das YOLO11-Hyperparametertuning definieren?
So definieren Sie einen benutzerdefinierten Suchraum für Ihr YOLO11-Hyperparameter-Tuning mit Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
Dies passt den Bereich der Hyperparameter wie anfängliche Lernrate und Momentum an, die während des Tuning-Prozesses untersucht werden sollen. Für erweiterte Konfigurationen lesen Sie den Abschnitt Beispiel für einen benutzerdefinierten Suchraum.