Effiziente Hyperparameteroptimierung mit Ray Tune und YOLO26#
Die Optimierung von Hyperparametern ist entscheidend, um die bestmögliche Modellleistung zu erzielen, indem die optimale Kombination von Hyperparametern gefunden wird. Dazu werden Versuche mit unterschiedlichen Hyperparametern durchgeführt und die Leistung jedes einzelnen Versuchs bewertet.
Beschleunige die Optimierung mit Ultralytics YOLO26 und Ray Tune#
Ultralytics YOLO26 integriert Ray Tune zur Optimierung von Hyperparametern und vereinfacht so die Optimierung der YOLO26-Modellparameter. Mit Ray Tune kannst du fortschrittliche Suchstrategien, Parallelisierung und vorzeitigen Abbruch nutzen, um den Optimierungsprozess zu beschleunigen.
Ray Tune#
Ray Tune ist eine Bibliothek zur Optimierung von Hyperparametern, die auf Effizienz und Flexibilität ausgelegt ist. Sie unterstützt verschiedene Suchstrategien, Parallelisierung und Strategien zum vorzeitigen Abbruch und lässt sich nahtlos in beliebte Frameworks für maschinelles Lernen integrieren, darunter Ultralytics YOLO26.
Integration mit Weights & Biases#
YOLO26 unterstützt außerdem die optionale Integration mit Weights & Biases, um den Optimierungsprozess zu überwachen.
Installation#
Führe zum Installieren der erforderlichen Pakete Folgendes aus:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna
# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=TrueVerwendung#
from ultralytics import YOLO
# Ein YOLO26n-Modell laden
model = YOLO("yolo26n.pt")
# Die Optimierung der Hyperparameter für das Training von YOLO26n mit dem COCO8-Datensatz starten
result_grid = model.tune(data="coco8.yaml", use_ray=True)Parameter der Methode tune()#
Die Methode tune() in YOLO26 bietet eine benutzerfreundliche Schnittstelle zur Optimierung von Hyperparametern mit Ray Tune. Sie akzeptiert mehrere Argumente, mit denen du den Optimierungsprozess anpassen kannst. Im Folgenden findest du eine ausführliche Erklärung der einzelnen Parameter:
| Parameter | Typ | Beschreibung | Standardwert |
|---|---|---|---|
data | str | Die YAML-Datei des Datensatzes, mit der der Optimierer ausgeführt wird. Sie gibt die Pfade zu den Trainings- und Validierungsdaten sowie weitere datensatzspezifische Einstellungen an. Bei der Klassifizierung wird stattdessen ein Datensatzverzeichnis oder der Name eines integrierten Datensatzes verwendet (z. B. imagenet10). | |
space | dict, optional | Ein Wörterbuch, das den Suchraum der Hyperparameter für Ray Tune definiert. Jeder Schlüssel entspricht einem Hyperparameternamen, und der Wert gibt den Wertebereich an, der während der Optimierung untersucht werden soll. Wenn kein Suchraum angegeben wird, verwendet YOLO26 einen Standard-Suchraum mit verschiedenen Hyperparametern. | |
grace_period | int, optional | Die Schonfrist in Epochen für den ASHA-Scheduler in Ray Tune. Der Scheduler beendet keinen Versuch, bevor diese Anzahl an Epochen erreicht ist. So kann das Modell zunächst eine Mindestanzahl von Epochen trainieren, bevor über einen vorzeitigen Abbruch entschieden wird. | 10 |
gpu_per_trial | int, optional | Die Anzahl der GPUs, die Ray jedem Versuch zuweist. Lege diesen Wert ausdrücklich fest, um das Training auf einer GPU zu nutzen. Wenn du ihn weglässt, erhalten die Versuche keine GPU-Ressourcen. | None |
iterations | int, optional | Die maximale Anzahl der Versuche während der Optimierung. Mit diesem Parameter kannst du die Gesamtzahl der getesteten Hyperparameterkombinationen begrenzen und verhindern, dass der Optimierungsprozess unbegrenzt weiterläuft. | 300 |
search_alg | str or Searcher, optional | Die zu verwendende Suchstrategie von Ray Tune. Du kannst direkt ein Ray-Sucherobjekt übergeben oder eine unterstützte Zeichenfolge wie optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax oder random verwenden. Bei Suchern, die über Zeichenfolgen angegeben werden, werden automatisch die Standardmetrik der jeweiligen Aufgabe und mode="max" verwendet. Standardmäßig wird Optunas multivariates TPE mit parallelitätsbewussten Vorschlägen genutzt. | "optuna" |
**train_args | dict, optional | Zusätzliche Argumente, die während der Optimierung an die Methode train() übergeben werden. Dazu gehören Einstellungen wie die Anzahl der Trainingsepochen, die Batchgröße und weitere trainingsspezifische Konfigurationen. | {} |
Wenn du diese Parameter anpasst, kannst du den Prozess der Hyperparameteroptimierung auf deine Anforderungen und verfügbaren Rechenressourcen abstimmen.
Beschreibung des Standardsuchraums#
Die folgende Tabelle enthält die Standardparameter des Suchraums für die Hyperparameteroptimierung mit YOLO26 und Ray Tune. Für jeden Parameter ist ein bestimmter Wertebereich festgelegt, der von tune.uniform() definiert wird. Eine Ausnahme ist close_mosaic, für das tune.randint() verwendet wird.
| Parameter | Bereich | Beschreibung |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Anfängliche Lernrate, die die Schrittweite 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) | Faktor für die endgültige Lernrate, der festlegt, wie stark die Lernrate bis zum Ende des Trainings sinkt. |
momentum | tune.uniform(0.7, 0.98) | Momentum-Faktor des Optimierers, der das Training beschleunigt und dabei hilft, lokale Minima zu überwinden. |
weight_decay | tune.uniform(0.0, 0.001) | Regularisierungsparameter, der Überanpassung verhindert, indem große Gewichtswerte bestraft werden. |
warmup_epochs | tune.uniform(0.0, 5.0) | Anzahl der Epochen, in denen die Lernrate schrittweise erhöht wird, um das Training zu Beginn zu stabilisieren. |
warmup_momentum | tune.uniform(0.0, 0.95) | Anfänglicher Momentum-Wert, der während der Aufwärmphase schrittweise erhöht wird. |
box | tune.uniform(1.0, 20.0) | Gewichtung des BBox-Verlustanteils, die die Lokalisierungsgenauigkeit des Modells beeinflusst. |
cls | tune.uniform(0.1, 4.0) | Gewichtung des Klassifizierungsverlustanteils, die die Genauigkeit der Klassenvorhersagen des Modells beeinflusst. |
cls_pw | tune.uniform(0.0, 1.0) | Stärke der Klassengewichtung: von deaktiviert (0.0) bis zur vollständigen inversen Häufigkeitsgewichtung (1.0). |
dfl | tune.uniform(0.4, 12.0) | Gewichtung des Regressionsanteils für die BBox-Abstände, die eine präzise Lokalisierung der BBox fördert. |
hsv_h | tune.uniform(0.0, 0.1) | Bereich der Farbtonaugmentation, die Farbvariationen einführt, damit das Modell besser generalisiert. |
hsv_s | tune.uniform(0.0, 0.9) | Bereich der Sättigungsaugmentation, die die Farbintensität variiert und so die Robustheit erhöht. |
hsv_v | tune.uniform(0.0, 0.9) | Bereich der Helligkeitsaugmentation, der dem Modell hilft, unter unterschiedlichen Lichtverhältnissen zu arbeiten. |
degrees | tune.uniform(0.0, 45.0) | Bereich der Rotationsaugmentation in Grad, der die Erkennung gedrehter Objekte verbessert. |
translate | tune.uniform(0.0, 0.9) | Bereich der Translationsaugmentation, die Bilder horizontal und vertikal verschiebt. |
scale | tune.uniform(0.0, 0.95) | Bereich der Skalierungsaugmentation, die Objekte in unterschiedlichen Entfernungen simuliert. |
shear | tune.uniform(0.0, 10.0) | Bereich der Scherungsaugmentation in Grad, der Perspektivverschiebungen simuliert. |
perspective | tune.uniform(0.0, 0.001) | Bereich der Perspektivaugmentation, die Änderungen des 3D-Blickwinkels simuliert. |
flipud | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der vertikalen Spiegelung, durch die die Vielfalt des Datensatzes erhöht wird. |
fliplr | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der horizontalen Spiegelung, die bei symmetrischen Objekten hilfreich ist. |
bgr | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der Vertauschung der BGR-Kanäle, die zur Farbinvarianz beiträgt. |
mosaic | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der Mosaic-Augmentation, bei der vier Bilder zu einem Trainingsbeispiel kombiniert werden. |
mixup | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der MixUp-Augmentation, bei der zwei Bilder und ihre Labels miteinander kombiniert werden. |
cutmix | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der CutMix-Augmentation, bei der Bildbereiche kombiniert und lokale Merkmale beibehalten werden. |
copy_paste | tune.uniform(0.0, 1.0) | Im Modus flip der Anteil geeigneter Objekte, die in ein Bild kopiert werden; im Modus mixup außerdem die Wahrscheinlichkeit, mit der die Augmentation ausgeführt wird. |
close_mosaic | tune.randint(0, 11) | Deaktiviert Mosaic in den letzten N Epochen, um das Training vor dem Abschluss zu stabilisieren. |
Beispiel für einen benutzerdefinierten Suchraum#
In diesem Beispiel zeigen wir, wie du mit einem benutzerdefinierten Suchraum die Hyperparameteroptimierung mit Ray Tune und YOLO26 durchführst. Mit einem benutzerdefinierten Suchraum kannst du die Optimierung auf bestimmte Hyperparameter konzentrieren, die dich interessieren.
from ray import tune
from ultralytics import YOLO
# YOLO-Modell definieren
model = YOLO("yolo26n.pt")
# Ray Tune für das Modell ausführen
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-2)},
epochs=50,
use_ray=True,
)Im obigen Codebeispiel erstellen wir ein YOLO-Modell mit den vortrainierten Gewichten "yolo26n.pt". Anschließend rufen wir die Methode tune() auf und geben mit "coco8.yaml" die Konfiguration des Datensatzes an. Für die anfängliche Lernrate lr0 legen wir mit einem Wörterbuch einen benutzerdefinierten Suchraum fest, dessen Schlüssel "lr0" und dessen Wert tune.uniform(1e-5, 1e-2) ist. Schließlich übergeben wir zusätzliche Trainingsargumente, beispielsweise die Anzahl der Epochen, direkt an die Tune-Methode als epochs=50.
Beispiel für einen Suchalgorithmus#
Du kannst eine Suchstrategie von Ray Tune anhand ihres Namens auswählen. Bei Suchalgorithmen, die über Zeichenfolgen angegeben werden, verwendet Ultralytics automatisch die Standardmetrik zur Optimierung für die aktuelle Aufgabe sowie mode="max". Wenn search_alg nicht angegeben ist, verwendet Ultralytics Optunas multivariates TPE mit parallelitätsbewussten Vorschlägen.
from ultralytics import YOLO
# YOLO-Modell definieren
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 möchtest, übergib statt einer Zeichenfolge ein instanziiertes Ray-Tune-Sucherobjekt.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# YOLO-Modell definieren
model = YOLO("yolo26n.pt")
# Einen Sucher definieren
searcher = OptunaSearch(
metric="metrics/mAP50-95(B)",
mode="max",
)
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg=searcher,
use_ray=True,
)Eine unterbrochene Hyperparameteroptimierungssitzung mit Ray Tune fortsetzen#
Du kannst eine unterbrochene Ray-Tune-Sitzung fortsetzen, indem du resume=True übergibst. Optional kannst du das Verzeichnis name übergeben, das Ray Tune unter runs/{task} verwendet, um die Sitzung fortzusetzen. Andernfalls wird die zuletzt unterbrochene Sitzung fortgesetzt. iterations und space musst du nicht erneut angeben, aber die übrigen Trainingsargumente musst du erneut übergeben, einschließlich data und epochs.
from ultralytics import YOLO
# YOLO-Modell definieren
model = YOLO("yolo26n.pt")
# Vorherigen Lauf fortsetzen
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Ray-Tune-Lauf mit dem Namen 'tune_exp_2' fortsetzen
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)Ray-Tune-Ergebnisse verarbeiten#
Nachdem du ein Hyperparameteroptimierungsexperiment mit Ray Tune ausgeführt hast, möchtest du möglicherweise verschiedene Analysen der erzielten Ergebnisse durchführen. Dieser Leitfaden führt dich durch gängige Arbeitsabläufe zur Verarbeitung und Analyse dieser Ergebnisse.
Ergebnisse eines Tune-Experiments aus einem Verzeichnis laden#
model.tune(use_ray=True) gibt ein Ray-ResultGrid zurück und speichert das Experiment unter runs/{task}/tune oder unter dem von dir angegebenen name. Um diese Ergebnisse nach Beendigung des ursprünglichen Skripts zu laden, setze die Sitzung fort. Dadurch werden die gespeicherten Versuche wiederhergestellt und dasselbe ResultGrid zurückgegeben:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)Grundlegende Analyse auf Experimenteebene#
Verschaffe dir einen Überblick über die Leistung der Versuche. Du kannst schnell prüfen, ob während der Versuche Fehler aufgetreten sind.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Grundlegende Analyse auf Versuchsebene#
Rufe die Hyperparameterkonfigurationen einzelner Versuche und die zuletzt gemeldeten Metriken ab.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Den gesamten Verlauf der für einen Versuch gemeldeten Metriken darstellen#
Du kannst den Verlauf der für jeden Versuch gemeldeten Metriken 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["metrics/mAP50-95(B)"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()Zusammenfassung#
In diesem Leitfaden haben wir gängige Arbeitsabläufe zur Analyse der Ergebnisse von mit Ultralytics ausgeführten Ray-Tune-Experimenten behandelt. Zu den wichtigsten Schritten gehören das Laden der Versuchsergebnisse aus einem Verzeichnis, grundlegende Analysen auf Experimente- und Versuchsebene sowie das Darstellen der Metriken.
Weitere Informationen findest du in der Ray-Tune-Dokumentation unter Ergebnisse analysieren, damit du das Beste aus deinen Hyperparameteroptimierungsexperimenten herausholst.
Häufig gestellte Fragen#
Gehe folgendermaßen vor, um die Hyperparameter deines Ultralytics-YOLO26-Modells mit Ray Tune zu optimieren:
-
Erforderliche Pakete installieren:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
YOLO26-Modell laden und Optimierung starten:
from ultralytics import YOLO # Ein YOLO26-Modell laden model = YOLO("yolo26n.pt") # Die Optimierung mit dem COCO8-Datensatz starten result_grid = model.tune(data="coco8.yaml", use_ray=True)
Dabei werden die fortschrittlichen Suchstrategien und die Parallelisierung von Ray Tune genutzt, um die Hyperparameter deines Modells effizient zu optimieren. Weitere Informationen findest du in der Ray-Tune-Dokumentation.
-
Ultralytics YOLO26 verwendet bei der Optimierung mit Ray Tune die folgenden Standardhyperparameter:
Parameter Wertebereich Beschreibung lr0tune.uniform(1e-5, 1e-2)Anfängliche Lernrate lrftune.uniform(0.01, 1.0)Faktor für die endgültige Lernrate momentumtune.uniform(0.7, 0.98)Momentum weight_decaytune.uniform(0.0, 0.001)Gewichtsabnahme warmup_epochstune.uniform(0.0, 5.0)Aufwärmepochen boxtune.uniform(1.0, 20.0)Gewichtung des BBox-Verlusts clstune.uniform(0.1, 4.0)Gewichtung des Klassifizierungsverlusts cls_pwtune.uniform(0.0, 1.0)Stärke der Klassengewichtung dfltune.uniform(0.4, 12.0)Gewichtung des BBox-Abstandsverlusts hsv_htune.uniform(0.0, 0.1)Bereich der Farbtonaugmentation translatetune.uniform(0.0, 0.9)Bereich der Translationsaugmentation Du kannst diese Hyperparameter an deine spezifischen Anforderungen anpassen. Eine vollständige Liste und weitere Einzelheiten findest du im Leitfaden zur Hyperparameteroptimierung.
So integrierst du Weights & Biases (W&B) in den Optimierungsprozess von Ultralytics YOLO26:
-
W&B installieren:
pip install wandb wandb login yolo settings wandb=True -
Optimierer ausführen:
from ultralytics import YOLO # YOLO-Modell laden model = YOLO("yolo26n.pt") # Jeder Ray-Testlauf erstellt einen eigenen W&B-Lauf in diesem Projekt result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)
Mit dieser Einrichtung kannst du den Abstimmungsprozess überwachen, Hyperparameterkonfigurationen nachverfolgen und Ergebnisse in W&B visualisieren.
-
Ray Tune bietet zahlreiche Vorteile für die Hyperparameteroptimierung:
- Erweiterte Suchstrategien: Nutzt Algorithmen wie Bayes'sche Optimierung und HyperOpt für eine effiziente Parametersuche.
- Parallelverarbeitung: Unterstützt die parallele Ausführung mehrerer Testläufe und beschleunigt den Abstimmungsprozess dadurch erheblich.
- Vorzeitiger Abbruch: Verwendet Strategien wie ASHA, um leistungsschwache Testläufe vorzeitig zu beenden und Rechenressourcen zu sparen.
Ray Tune lässt sich nahtlos in Ultralytics YOLO26 integrieren und bietet eine benutzerfreundliche Oberfläche, um Hyperparameter effektiv abzustimmen. In der Anleitung zur Hyperparameteroptimierung erfährst du, wie du loslegst.
So definierst du mit Ray Tune einen benutzerdefinierten Suchraum für die YOLO26-Hyperparameteroptimierung:
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)Damit legst du den Bereich der Hyperparameter fest, die während des Abstimmungsprozesses untersucht werden sollen, etwa die anfängliche Lernrate und den Impuls. Weitere Konfigurationsmöglichkeiten findest du im Abschnitt Beispiel für einen benutzerdefinierten Suchraum.