Effiziente Hyperparameterabstimmung mit Ray Tune und YOLO26#
Die Hyperparameterabstimmung ist entscheidend, um die maximale Modellleistung zu erreichen, indem die optimale Kombination von Hyperparametern ermittelt wird. Dazu werden Durchläufe mit unterschiedlichen Hyperparametern ausgeführt und deren Leistung bewertet.
Beschleunigte Abstimmung mit Ultralytics YOLO26 und Ray Tune#
Ultralytics YOLO26 nutzt Ray Tune zur Hyperparameterabstimmung und vereinfacht dadurch die Optimierung der YOLO26-Modellhyperparameter. Mit Ray Tune kannst du fortschrittliche Suchstrategien, Parallelisierung und frühzeitiges Beenden nutzen, um den Abstimmungsprozess zu beschleunigen.
Ray Tune#
Ray Tune ist eine auf Effizienz und Flexibilität ausgelegte Bibliothek zur Hyperparameterabstimmung. Sie unterstützt verschiedene Suchstrategien, Parallelisierung und Strategien zum frühzeitigen Beenden und lässt sich nahtlos in gängige Frameworks für maschinelles Lernen integrieren, darunter Ultralytics YOLO26.
Integration mit Weights & Biases#
YOLO26 ermöglicht außerdem die optionale Integration mit Weights & Biases zur Überwachung des Abstimmungsprozesses.
Installation#
Führe zur Installation 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
# 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)Parameter der Methode tune()#
Die Methode tune() in YOLO26 bietet eine benutzerfreundliche Schnittstelle zur Hyperparameterabstimmung mit Ray Tune. Sie akzeptiert mehrere Argumente, mit denen du den Abstimmungsprozess anpassen kannst. Im Folgenden werden die einzelnen Parameter ausführlich erläutert:
| Parameter | Typ | Beschreibung | Standardwert |
|---|---|---|---|
data | str | Die Dataset-YAML-Datei, mit der der Tuner ausgeführt wird und die die Pfade zu den Trainings- und Validierungsdaten sowie weitere datensatzspezifische Einstellungen angibt. Für die Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder der Name eines integrierten Datasets verwendet, z. B. imagenet10. | |
space | dict, optional | Ein Dictionary, das den Hyperparameter-Suchraum für Ray Tune definiert. Jeder Schlüssel entspricht dem Namen eines Hyperparameters, und der Wert gibt den Wertebereich an, der während der Abstimmung untersucht werden soll. Wenn kein Suchraum angegeben wird, verwendet YOLO26 einen Standardsuchraum mit verschiedenen Hyperparametern. | |
grace_period | int, optional | Die Kulanzperiode in Epochen für den ASHA-Scheduler in Ray Tune. Der Scheduler beendet keinen Durchlauf vor Ablauf dieser Anzahl von Epochen, sodass das Modell zunächst eine minimale Trainingsdauer erhält, bevor über ein frühzeitiges Beenden entschieden wird. | 10 |
gpu_per_trial | int, optional | Die Anzahl der GPUs, die Ray jedem Durchlauf zuweist. Lege diesen Wert explizit fest, um das Training auf der GPU zu verwenden. Wenn er nicht angegeben wird, erhalten die Durchläufe keine GPU-Ressourcen. | None |
iterations | int, optional | Die maximale Anzahl der Durchläufe, die während der Abstimmung ausgeführt werden. Dieser Parameter hilft dabei, die Gesamtzahl der getesteten Hyperparameterkombinationen zu begrenzen und verhindert, dass der Abstimmungsprozess unbegrenzt läuft. | 300 |
search_alg | str or Searcher, optional | Die zu verwendende Suchstrategie von Ray Tune. Du kannst direkt ein Ray-Suchobjekt übergeben oder eine unterstützte Zeichenfolge wie optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax oder random verwenden. Suchobjekte auf Zeichenfolgenbasis nutzen automatisch die Standardmetrik der Aufgabe und mode="max". Standardmäßig wird multivariates TPE von Optuna mit parallelisierungsbewussten Vorschlägen verwendet. | "optuna" |
**train_args | dict, optional | Zusätzliche Argumente, die während der Abstimmung an die Methode train() übergeben werden. Dazu können Einstellungen wie die Anzahl der Trainingsepochen, die Batchgröße und weitere trainingsspezifische Konfigurationen gehören. | {} |
Durch die Anpassung dieser Parameter kannst du den Hyperparameter-Optimierungsprozess auf deine spezifischen Anforderungen und die verfügbaren Rechenressourcen abstimmen.
Beschreibung des Standardsuchraums#
Die folgende Tabelle enthält die Standardsuchraumparameter für die Hyperparameterabstimmung von YOLO26 mit Ray Tune. Für jeden Parameter ist durch tune.uniform() ein bestimmter Wertebereich definiert.
| 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 jedoch zu Instabilität führen. |
lrf | tune.uniform(0.01, 1.0) | Faktor der finalen Lernrate, der bestimmt, wie stark die Lernrate bis zum Ende des Trainings abnimmt. |
momentum | tune.uniform(0.7, 0.98) | Momentum-Faktor für den Optimierer, der das Training beschleunigt und 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 mit schrittweise steigender Lernrate zur Stabilisierung des frühen Trainings. |
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 der Komponente für den Bounding-Box-Verlust, die die Lokalisierungsgenauigkeit des Modells ausbalanciert. |
cls | tune.uniform(0.1, 4.0) | Gewichtung der Komponente für den Klassifizierungsverlust, die die Genauigkeit der Klassenvorhersage im Modell ausbalanciert. |
cls_pw | tune.uniform(0.0, 1.0) | Gewichtungsexponent für Klassen, von deaktiviert (0.0) bis zur vollständigen inversen Häufigkeitsgewichtung (1.0). |
dfl | tune.uniform(0.4, 12.0) | Gewichtung der Regressionskomponente für die Box-Distanz, die eine präzise Lokalisierung der Bounding-Box hervorhebt. |
hsv_h | tune.uniform(0.0, 0.1) | Bereich der Farbton-Augmentierung, der Farbvariationen einführt, damit das Modell besser generalisiert. |
hsv_s | tune.uniform(0.0, 0.9) | Bereich der Sättigungsaugmentierung, der die Farbintensität variiert, um die Robustheit zu verbessern. |
hsv_v | tune.uniform(0.0, 0.9) | Bereich der Wert- bzw. Helligkeitsaugmentierung, der dem Modell hilft, unter unterschiedlichen Lichtbedingungen zu arbeiten. |
degrees | tune.uniform(0.0, 45.0) | Bereich der Rotationsaugmentierung in Grad, der die Erkennung gedrehter Objekte verbessert. |
translate | tune.uniform(0.0, 0.9) | Bereich der Translationsaugmentierung, der Bilder horizontal und vertikal verschiebt. |
scale | tune.uniform(0.0, 0.95) | Bereich der Skalierungsaugmentierung, der Objekte in unterschiedlichen Entfernungen simuliert. |
shear | tune.uniform(0.0, 10.0) | Bereich der Scherungsaugmentierung in Grad, der perspektivische Verschiebungen simuliert. |
perspective | tune.uniform(0.0, 0.001) | Bereich der Perspektivaugmentierung, der Änderungen des 3D-Blickwinkels simuliert. |
flipud | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der vertikalen Spiegelaugmentierung zur Erhöhung der Datensatzvielfalt. |
fliplr | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der horizontalen Spiegelaugmentierung, die für symmetrische Objekte nützlich ist. |
bgr | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der Augmentierung durch Vertauschen der BGR-Kanäle, was die Farbinvarianz verbessert. |
mosaic | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der Mosaikaugmentierung, bei der vier Bilder zu einem Trainingsbeispiel kombiniert werden. |
mixup | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der MixUp-Augmentierung, bei der zwei Bilder und ihre Beschriftungen miteinander vermischt werden. |
cutmix | tune.uniform(0.0, 1.0) | Wahrscheinlichkeit der CutMix-Augmentierung, bei der Bildbereiche kombiniert und lokale Merkmale erhalten werden. |
copy_paste | tune.uniform(0.0, 1.0) | Im Modus flip der Anteil der geeigneten Objekte, die in ein Bild kopiert werden, und im Modus mixup zusätzlich die Wahrscheinlichkeit, dass der Vorgang ausgeführt wird. |
close_mosaic | tune.randint(0, 11) | Deaktiviert die Mosaikaugmentierung 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 einen benutzerdefinierten Suchraum für die Hyperparameterabstimmung mit Ray Tune und YOLO26 verwendest. Mit einem benutzerdefinierten Suchraum kannst du den Abstimmungsprozess auf bestimmte interessante Hyperparameter 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 obigen Codeausschnitt erstellen wir ein YOLO-Modell mit den vortrainierten Gewichten „yolo26n.pt“. Anschließend rufen wir die Methode tune() auf und geben die Dataset-Konfiguration mit „coco8.yaml“ an. Für die anfängliche Lernrate lr0 übergeben wir einen benutzerdefinierten Suchraum als Dictionary mit dem Schlüssel „lr0“ und dem Wert tune.uniform(1e-5, 1e-2). Schließlich übergeben wir zusätzliche Trainingsargumente, beispielsweise die Anzahl der Epochen, direkt als epochs=50 an die Tune-Methode.
Beispiel für einen Suchalgorithmus#
Du kannst eine Suchstrategie von Ray Tune anhand ihres Namens auswählen. Bei Suchalgorithmen auf Zeichenfolgenbasis verwendet Ultralytics automatisch die standardmäßige Optimierungsmetrik der aktuellen Aufgabe und mode="max". Wenn search_alg nicht angegeben wird, verwendet Ultralytics multivariates TPE von Optuna mit parallelisierungsbewussten Vorschlägen.
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 Suchobjekts anpassen oder dessen Metrik und Optimierungsmodus überschreiben möchtest, übergib statt einer Zeichenfolge ein instanziiertes Ray-Tune-Suchobjekt.
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,
)Eine unterbrochene Hyperparameterabstimmungssitzung mit Ray Tune fortsetzen#
Du kannst eine unterbrochene Ray-Tune-Sitzung fortsetzen, indem du resume=True übergibst. Optional kannst du das von Ray Tune unter runs/{task} verwendete Verzeichnis name angeben, um die Sitzung fortzusetzen. Andernfalls wird die zuletzt unterbrochene Sitzung fortgesetzt. iterations und space musst du nicht erneut angeben, aber die übrigen Trainingsargumente einschließlich data und epochs müssen erneut übergeben werden.
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)Ray-Tune-Ergebnisse verarbeiten#
Nach einem Hyperparameterabstimmungsexperiment mit Ray Tune 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.
Tune-Experimentergebnisse aus einem Verzeichnis laden#
model.tune(use_ray=True) gibt einen Ray ResultGrid zurück und speichert das Experiment unter runs/{task}/tune oder unter dem von dir übergebenen name. Um diese Ergebnisse nach dem Beenden des ursprünglichen Skripts zu laden, nimm die Sitzung wieder auf, wodurch die gespeicherten Versuche wiederhergestellt werden und denselben ResultGrid zurückgibt:
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 Durchläufe. Du kannst schnell prüfen, ob während der Durchläufe Fehler aufgetreten sind.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Grundlegende Analyse auf Durchlaufebene#
Greife auf die Hyperparameterkonfigurationen einzelner Durchlä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}")Den vollständigen Verlauf der gemeldeten Metriken eines Durchlaufs darstellen#
Du kannst den Verlauf der gemeldeten Metriken für jeden Durchlauf 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 Experimenten mit Ray Tune und Ultralytics behandelt. Zu den wichtigsten Schritten gehören das Laden der Experimentergebnisse aus einem Verzeichnis, die grundlegende Analyse auf Experiment- und Durchlaufebene sowie die Darstellung der Metriken.
Weitere Informationen findest du auf der Ray-Tune-Dokumentationsseite „Ergebnisse analysieren“, um das Beste aus deinen Hyperparameterabstimmungsexperimenten herauszuholen.
FAQ#
Gehe folgendermaßen vor, um die Hyperparameter deines Ultralytics-YOLO26-Modells mit Ray Tune abzustimmen:
-
Erforderliche Pakete installieren:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
Dein YOLO26-Modell laden und die Abstimmung starten:
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)
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 für die Abstimmung 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 der finalen Lernrate momentumtune.uniform(0.7, 0.98)Momentum weight_decaytune.uniform(0.0, 0.001)Gewichtszerfall warmup_epochstune.uniform(0.0, 5.0)Aufwärmepochen boxtune.uniform(1.0, 20.0)Gewichtung des Box-Verlusts clstune.uniform(0.1, 4.0)Gewichtung des Klassenverlusts cls_pwtune.uniform(0.0, 1.0)Gewichtungsexponent für Klassen dfltune.uniform(0.4, 12.0)Gewichtung des Box-Distanzverlusts hsv_htune.uniform(0.0, 0.1)Bereich der Farbtonaugmentierung translatetune.uniform(0.0, 0.9)Bereich der Translationsaugmentierung Diese Hyperparameter können an deine spezifischen Anforderungen angepasst werden. Eine vollständige Liste und weitere Informationen findest du im Leitfaden zur Hyperparameterabstimmung.
So integrierst du Weights & Biases (W&B) in den Abstimmungsprozess deines Ultralytics YOLO26-Modells:
-
W&B installieren:
pip install wandb wandb login yolo settings wandb=True -
Den Tuner ausführen:
from ultralytics import YOLO # Load YOLO model model = YOLO("yolo26n.pt") # Each Ray trial creates its own W&B run in this project result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)
Mit dieser Einrichtung kannst du den Abstimmungsprozess überwachen, Hyperparameterkonfigurationen verfolgen und Ergebnisse in W&B visualisieren.
-
Ray Tune bietet zahlreiche Vorteile für die Hyperparameteroptimierung:
- Fortschrittliche Suchstrategien: Nutzt Algorithmen wie Bayes'sche Optimierung und HyperOpt für eine effiziente Parametersuche.
- Parallelisierung: Unterstützt die parallele Ausführung mehrerer Durchläufe und beschleunigt dadurch den Abstimmungsprozess erheblich.
- Frühzeitiges Beenden: Verwendet Strategien wie ASHA, um leistungsschwache Durchläufe frühzeitig zu beenden und Rechenressourcen zu sparen.
Ray Tune lässt sich nahtlos in Ultralytics YOLO26 integrieren und bietet eine benutzerfreundliche Schnittstelle zur effektiven Abstimmung von Hyperparametern. Für den Einstieg findest du weitere Informationen im Leitfaden zur Hyperparameterabstimmung.
So definierst du mit Ray Tune einen benutzerdefinierten Suchraum für die Hyperparameterabstimmung deines YOLO26-Modells:
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 passt du den Wertebereich von Hyperparametern wie der anfänglichen Lernrate und dem Momentum an, die während des Abstimmungsprozesses untersucht werden sollen. Für fortgeschrittene Konfigurationen findest du weitere Informationen im Abschnitt Beispiel für einen benutzerdefinierten Suchraum.