Effiziente Hyperparameter-Optimierung mit Ray Tune und YOLO26
Die Hyperparameter-Optimierung ist entscheidend, um durch das Finden der optimalen Hyperparameter-Sets eine Spitzenleistung des Modells zu erzielen. Dies beinhaltet die Durchführung von Testläufen mit verschiedenen Hyperparametern und die anschließende Bewertung der Performance jedes einzelnen Laufs.
Beschleunige die Optimierung mit Ultralytics YOLO26 und Ray Tune
Ultralytics YOLO26 integriert Ray Tune zur Hyperparameter-Optimierung, was die Optimierung der YOLO26-Modell-Hyperparameter vereinfacht. Mit Ray Tune kannst du fortschrittliche Suchstrategien, Parallelisierung und frühzeitiges Stoppen nutzen, um den Optimierungsprozess zu beschleunigen.
Ray Tune
Ray Tune ist eine Bibliothek für Hyperparameter-Optimierung, die auf Effizienz und Flexibilität ausgelegt ist. Sie unterstützt verschiedene Suchstrategien, Parallelisierung sowie Strategien zum frühzeitigen Stoppen und lässt sich nahtlos in gängige Machine Learning-Frameworks integrieren, einschließlich Ultralytics YOLO26.
Integration mit Weights & Biases
YOLO26 ermöglicht zudem eine optionale Integration mit Weights & Biases zur Überwachung des Optimierungsprozesses.
Installation
Um die erforderlichen Pakete zu installieren, führe Folgendes aus:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandbVerwendung
from ultralytics import YOLO
# Load a YOLO26n model
model = YOLO("yolo26n.pt")
# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)tune()-Methodenparameter
Die tune()-Methode in YOLO26 bietet eine einfach zu bedienende Schnittstelle für die Hyperparameter-Optimierung mit Ray Tune. Sie akzeptiert verschiedene Argumente, mit denen du den Optimierungsprozess anpassen kannst. Nachfolgend findest du eine detaillierte Erläuterung jedes Parameters:
| 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 zu den Trainings- und Validierungsdaten sowie weitere datensatzspezifische Einstellungen enthalten. | |
space | dict, optional | Ein Dictionary, das den Hyperparameter-Suchraum für Ray Tune definiert. Jeder Key entspricht einem Hyperparameter-Namen, und der Wert legt den Bereich fest, der während der Optimierung erkundet werden soll. Wenn kein Wert angegeben wird, verwendet YOLO26 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 Testlauf vor Ablauf dieser Anzahl an Epochen, wodurch das Modell eine Mindesttrainingszeit erhält, bevor eine Entscheidung über ein frühzeitiges Stoppen getroffen wird. | 10 |
gpu_per_trial | int, optional | Die Anzahl der GPUs, die pro Testlauf während der Optimierung zugewiesen werden. Dies hilft, die GPU-Auslastung zu steuern, insbesondere in Umgebungen mit mehreren GPUs. Wenn nicht angegeben, nutzt der Tuner alle verfügbaren GPUs. | None |
iterations | int, optional | Die maximale Anzahl der Testläufe, die während der Optimierung ausgeführt werden. Dieser Parameter hilft dabei, die Gesamtzahl der getesteten Hyperparameter-Kombinationen zu begrenzen, um sicherzustellen, dass der Optimierungsprozess nicht unendlich läuft. | 10 |
search_alg | str or Searcher, optional | Die zu verwendende Ray Tune-Suchstrategie. Du kannst direkt ein Ray-Searcher-Objekt übergeben oder einen unterstützten String wie optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax oder random verwenden. String-basierte Sucher verwenden automatisch die Standard-Task-Metrik und mode="max". Falls kein Sucher angegeben ist, greift Ray Tune auf die standardmäßige Zufallssuchstrategie BasicVariantGenerator zurück. | None |
**train_args | dict, optional | Zusätzliche Argumente, die während der Optimierung an die train()-Methode übergeben werden. Diese Argumente können Einstellungen wie die Anzahl der Trainingsepochen, die Batch-Größe und andere trainingsspezifische Konfigurationen enthalten. | {} |
Durch die Anpassung dieser Parameter kannst du den Hyperparameter-Optimierungsprozess so feinabstimmen, dass er deinen spezifischen Anforderungen und den verfügbaren Rechenressourcen entspricht.
Beschreibung des Standard-Suchraums
Die folgende Tabelle listet die Standard-Suchraumparameter für die Hyperparameter-Optimierung in YOLO26 mit Ray Tune auf. Jeder Parameter hat einen spezifischen Wertebereich, der durch tune.uniform() definiert ist.
| Parameter | Bereich | Beschreibung |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Die initiale Lernrate, die die Schrittweite während der Optimierung steuert. Höhere Werte beschleunigen das Training, können aber Instabilität verursachen. |
lrf | tune.uniform(0.01, 1.0) | Der finale Lernratenfaktor, der bestimmt, wie stark die Lernrate bis zum Ende des Trainings abnimmt. |
momentum | tune.uniform(0.7, 0.98) | Der Impulsfaktor (Momentum) für den Optimierer, der hilft, das Training zu beschleunigen und lokale Minima zu überwinden. |
weight_decay | tune.uniform(0.0, 0.001) | Der Regularisierungsparameter, der Overfitting verhindert, indem er große Gewichtswerte 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) | Der initiale Impulswert, der während der Aufwärmphase allmählich ansteigt. |
box | tune.uniform(1.0, 20.0) | Gewichtung für die Bounding-Box-Verlustkomponente, die die Lokalisierungsgenauigkeit im Modell ausbalanciert. |
cls | tune.uniform(0.1, 4.0) | Gewichtung für die Klassifikationsverlustkomponente, die die Genauigkeit der Klassenvorhersage im Modell ausbalanciert. |
dfl | tune.uniform(0.4, 12.0) | Gewichtung für die Distribution Focal Loss-Komponente, die eine präzise Lokalisierung der Bounding-Box betont. |
hsv_h | tune.uniform(0.0, 0.1) | Farbton-Augmentationsbereich, der Farbvariabilität einführt, um die Generalisierung des Modells zu verbessern. |
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) | Helligkeits-Augmentationsbereich, der dem Modell hilft, unter verschiedenen Lichtbedingungen zu funktionieren. |
degrees | tune.uniform(0.0, 45.0) | Rotations-Augmentationsbereich in Grad, was die Erkennung rotierter Objekte verbessert. |
translate | tune.uniform(0.0, 0.9) | Übersetzungs-Augmentationsbereich, der Bilder horizontal und vertikal verschiebt. |
scale | tune.uniform(0.0, 0.95) | Skalierungs-Augmentationsbereich, der Objekte in unterschiedlichen Entfernungen simuliert. |
shear | tune.uniform(0.0, 10.0) | Scherungs-Augmentationsbereich in Grad, der perspektivische Verschiebungen simuliert. |
perspective | tune.uniform(0.0, 0.001) | Perspektiv-Augmentationsbereich, der 3D-Blickwinkeländerungen simuliert. |
flipud | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für vertikale Spiegelung bei der Augmentation, was die Diversität des Datensatzes erhöht. |
fliplr | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für horizontale Spiegelung bei der Augmentation, nützlich für symmetrische Objekte. |
bgr | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für BGR-Kanaltausch-Augmentation, was bei Farbinvarianz hilft. |
mosaic | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für Mosaic-Augmentation, die vier Bilder zu einer Trainingsprobe kombiniert. |
mixup | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für Mixup-Augmentation, die zwei Bilder und deren Labels miteinander vermischt. |
cutmix | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für Cutmix-Augmentation, die Bildbereiche kombiniert und gleichzeitig lokale Merkmale beibehält. |
copy_paste | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit für Copy-Paste-Augmentation, die Objekte zwischen Bildern überträgt, um die Instanzdiversität zu erhöhen. |
close_mosaic | tune.randint(0.0, 11) | Deaktiviert Mosaic in den letzten N Epochen, um das Training vor Abschluss zu stabilisieren. |
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 YOLO26 verwendet. Durch die Bereitstellung eines benutzerdefinierten Suchraums kannst du den Optimierungsprozess auf spezifische Hyperparameter von Interesse konzentrieren.
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-2)},
epochs=50,
use_ray=True,
)Im Code-Snippet oben erstellen wir ein YOLO-Modell mit den vortrainierten Gewichten "yolo26n.pt". Dann rufen wir die tune()-Methode auf und spezifizieren die Dataset-Konfiguration mit "coco8.yaml". Wir stellen einen benutzerdefinierten Suchraum für die initiale Lernrate lr0 bereit, indem wir ein Dictionary mit dem Key "lr0" und dem Wert tune.uniform(1e-5, 1e-2) verwenden. Schließlich übergeben wir zusätzliche Trainingsargumente, wie etwa die Anzahl der Epochen, direkt an die Tune-Methode mit epochs=50.
Beispiel für Suchalgorithmus
Du kannst eine Ray Tune-Suchstrategie nach Namen auswählen. Bei string-basierten Suchalgorithmen verwendet Ultralytics automatisch die Standard-Optimierungsmetrik des aktuellen Tasks und mode="max". Wenn search_alg nicht angegeben ist, verwendet Ray Tune seine Standard-Zufallssuchstrategie BasicVariantGenerator.
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg="optuna",
use_ray=True,
)Wenn du den Sampler des Suchers anpassen oder dessen Metrik und Optimierungsmodus überschreiben musst, übergib stattdessen ein instanziiertes Ray Tune-Sucher-Objekt anstelle eines Strings.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Define a searcher
searcher = OptunaSearch(
metric="metrics/mAP50-95(B)",
mode="max",
)
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg=searcher,
use_ray=True,
)Wiederaufnahme einer unterbrochenen Hyperparameter-Optimierungssitzung mit Ray Tune
Du kannst eine unterbrochene Ray Tune-Sitzung fortsetzen, indem du resume=True übergibst. Optional kannst du den Verzeichnisnamen name übergeben, den Ray Tune unter runs/{task} verwendet hat. Andernfalls wird die zuletzt unterbrochene Sitzung fortgesetzt. Du musst iterations und space nicht erneut angeben, aber du musst die restlichen Trainingsargumente inklusive data und epochs erneut übermitteln.
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.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
Nach der Durchführung eines Hyperparameter-Optimierungsexperiments mit Ray Tune möchtest du möglicherweise verschiedene Analysen der erhaltenen Ergebnisse durchführen. Dieser Leitfaden führt dich durch gängige Workflows zur Verarbeitung und Analyse dieser Ergebnisse.
Laden von Tune-Experiment-Ergebnissen aus einem Verzeichnis
Nachdem das Optimierungsexperiment mit tuner.fit() ausgeführt wurde, kannst du die Ergebnisse aus einem Verzeichnis laden. Dies ist nützlich, insbesondere 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 Testläufe abgeschnitten haben. Du kannst schnell überprüfen, ob während der Testläufe Fehler aufgetreten sind.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Grundlegende Analyse auf Trial-Ebene
Greife auf die Hyperparameter-Konfigurationen einzelner Testläufe 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 der gesamten Historie gemeldeter Metriken für einen Testlauf
Du kannst die Historie der für jeden Testlauf gemeldeten Metriken plotten, 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 diesem Leitfaden haben wir gängige Workflows behandelt, um die Ergebnisse von Experimenten zu analysieren, 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.
Erkunde weiter, indem du dir die Analyze Results-Dokumentationsseite von Ray Tune ansiehst, um das Beste aus deinen Hyperparameter-Optimierungsexperimenten herauszuholen.
FAQ
Wie optimiere ich die Hyperparameter meines YOLO26-Modells mit Ray Tune?
Um die Hyperparameter deines Ultralytics YOLO26-Modells mit Ray Tune zu optimieren, befolge diese Schritte:
-
Installiere die erforderlichen Pakete:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging -
Lade dein YOLO26-Modell und starte die Optimierung:
from ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
Dies nutzt die fortschrittlichen Suchstrategien und die Parallelisierung von Ray Tune, um die Hyperparameter deines Modells effizient zu optimieren. Weitere Informationen findest du in der Ray Tune-Dokumentation.
Was sind die Standard-Hyperparameter für die YOLO26-Optimierung mit Ray Tune?
Ultralytics YOLO26 verwendet die folgenden Standard-Hyperparameter für die Optimierung mit Ray Tune:
| Parameter | Wertebereich | Beschreibung |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Initiale Lernrate |
lrf | tune.uniform(0.01, 1.0) | Finaler Lernratenfaktor |
momentum | tune.uniform(0.7, 0.98) | Impuls (Momentum) |
weight_decay | tune.uniform(0.0, 0.001) | Gewichtsabnahme (Weight decay) |
warmup_epochs | tune.uniform(0.0, 5.0) | Warmup-Epochen |
box | tune.uniform(1.0, 20.0) | Box-Loss-Gewichtung |
cls | tune.uniform(0.1, 4.0) | Klassen-Loss-Gewichtung |
dfl | tune.uniform(0.4, 12.0) | DFL-Loss-Gewichtung |
hsv_h | tune.uniform(0.0, 0.1) | Farbton-Augmentierungsbereich (Hue augmentation range) |
translate | tune.uniform(0.0, 0.9) | Translations-Augmentierungsbereich |
Diese Hyperparameter können an deine spezifischen Anforderungen angepasst werden. Eine vollständige Liste und weitere Details findest du im Leitfaden zur Hyperparameter-Optimierung.
Wie kann ich Weights & Biases in mein YOLO26-Modell-Tuning integrieren?
So integrierst du Weights & Biases (W&B) in deinen Ultralytics YOLO26-Tuning-Prozess:
-
Installiere W&B:
pip install wandb -
Passe dein Tuning-Skript an:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo26n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
Dieses Setup ermöglicht es dir, den Tuning-Prozess zu überwachen, Hyperparameter-Konfigurationen nachzuverfolgen und Ergebnisse in W&B zu visualisieren.
Warum sollte ich Ray Tune für die Hyperparameter-Optimierung mit YOLO26 verwenden?
Ray Tune bietet zahlreiche Vorteile für die Hyperparameter-Optimierung:
- Fortgeschrittene Suchstrategien: Nutzt Algorithmen wie Bayesian Optimization und HyperOpt für eine effiziente Parametersuche.
- Parallelisierung: Unterstützt die parallele Ausführung mehrerer Versuche, was den Tuning-Prozess erheblich beschleunigt.
- Early Stopping: Verwendet Strategien wie ASHA, um leistungsschwache Versuche frühzeitig zu beenden und Rechenressourcen zu sparen.
Ray Tune lässt sich nahtlos in Ultralytics YOLO26 integrieren und bietet eine einfach zu bedienende Schnittstelle für eine effektive Hyperparameter-Optimierung. Um loszulegen, schau dir den Leitfaden zur Hyperparameter-Optimierung an.
Wie kann ich einen benutzerdefinierten Suchraum für das YOLO26-Hyperparameter-Tuning definieren?
So definierst du einen benutzerdefinierten Suchraum für dein YOLO26-Hyperparameter-Tuning mit Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)Dies passt den Bereich der Hyperparameter wie die initiale Lernrate und das Momentum an, die während des Tuning-Prozesses untersucht werden sollen. Für fortgeschrittene Konfigurationen siehe den Abschnitt Beispiel für einen benutzerdefinierten Suchraum.