YOLO Vision 2026:

Effiziente Hyperparameter-Optimierung mit Ray Tune und YOLO26#

Die Hyperparameter-Optimierung ist entscheidend, um die maximale Modellleistung durch das Finden der optimalen Hyperparameter-Sets zu erreichen. Dies umfasst das Durchführen von Testläufen mit verschiedenen Hyperparametern und die Bewertung der Leistung jedes Durchlaufs.

Beschleunige die Optimierung mit Ultralytics YOLO26 und Ray Tune#

Ultralytics YOLO26 integriert Ray Tune für das Hyperparameter-Tuning und optimiert so die Hyperparameter des YOLO26-Modells. Mit Ray Tune kannst du fortschrittliche Suchstrategien, Parallelisierung und Early Stopping nutzen, um den Tuning-Prozess zu beschleunigen.

Ray Tune#

Ray Tune hyperparameter optimization workflow

Ray Tune ist eine auf Effizienz und Flexibilität ausgelegte Bibliothek für Hyperparameter-Tuning. Sie unterstützt verschiedene Suchstrategien, Parallelisierung sowie Early-Stopping-Strategien und lässt sich nahtlos in gängige Machine-Learning-Frameworks, einschließlich Ultralytics YOLO26, integrieren.

Integration mit Weights & Biases#

YOLO26 ermöglicht zudem eine optionale Integration mit Weights & Biases zur Überwachung des Tuning-Prozesses.

Installation#

Um die erforderlichen Pakete zu installieren, führe aus:

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

# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True

Verwendung#

Verwendung
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)

Methodenparameter für tune()#

Die Methode tune() in YOLO26 bietet eine benutzerfreundliche Schnittstelle für das Hyperparameter-Tuning mit Ray Tune. Sie akzeptiert mehrere Argumente, mit denen du den Tuning-Prozess anpassen kannst. Unten findest du eine detaillierte Erklärung der einzelnen Parameter:

ParameterTypBeschreibungStandardwert
datastrDas Dataset-YAML, auf dem der Tuner ausgeführt werden soll. Es legt die Pfade zu den Trainings- und Validierungsdaten sowie weitere modellspezifische Einstellungen fest. Bei der Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder ein integrierter Dataset-Name (z. B. imagenet10) verwendet.
spacedict, optionalEin Dictionary, das den Suchraum für Hyperparameter für Ray Tune definiert. Jeder Schlüssel entspricht einem Hyperparameter-Namen, und der Wert legt den Bereich fest, der während der Optimierung erkundet werden soll. Wenn nicht angegeben, verwendet YOLO26 einen Standard-Suchraum mit verschiedenen Hyperparametern.
grace_periodint, optionalDie Karenzzeit in Epochen für den ASHA scheduler in Ray Tune. Der Scheduler beendet vor Ablauf dieser Anzahl von Epochen keinen Versuch, sodass das Modell ein Mindesttraining durchlaufen kann, bevor eine Entscheidung über das Early Stopping getroffen wird.10
gpu_per_trialint, optionalDie Anzahl der GPUs, die Ray jedem Testlauf zuweist. Setze dies explizit, um das GPU-Training zu nutzen; wenn es weggelassen wird, erhalten Testläufe keine GPU-Ressourcen.None
iterationsint, optionalDie maximale Anzahl der Testläufe während der Optimierung. Dieser Parameter hilft, die Gesamtzahl der getesteten Hyperparameter-Kombinationen zu begrenzen und sicherzustellen, dass der Optimierungsprozess nicht unendlich läuft.10
search_algstr or Searcher, optionalDie 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 Searcher verwenden automatisch die Standard-Aufgabenmetrik und mode="max". Falls nicht angegeben, greift Ray Tune auf seine Standard-Zufallssuchstrategie BasicVariantGenerator zurück.None
**train_argsdict, optionalZusätzliche Argumente, die während des Tunings an die Methode train() übergeben werden. Diese Argumente können Einstellungen wie die Anzahl der Trainingsepochen, die Batch-Größe und andere trainingsspezifische Konfigurationen umfassen.{}

Durch die Anpassung dieser Parameter kannst du den Hyperparameter-Optimierungsprozess genau auf deine Bedürfnisse und verfügbaren Rechenressourcen abstimmen.

Beschreibung des Standard-Suchraums#

Die folgende Tabelle listet die Standardparameter des Suchraums für das Hyperparameter-Tuning in YOLO26 mit Ray Tune auf. Jeder Parameter hat einen bestimmten Wertebereich, der durch tune.uniform() definiert ist.

ParameterBereichBeschreibung
lr0tune.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.
lrftune.uniform(0.01, 1.0)Faktor für die endgültige Lernrate, der bestimmt, wie stark die Lernrate bis zum Ende des Trainings abnimmt.
momentumtune.uniform(0.7, 0.98)Momentum-Faktor für den Optimierer, der hilft, das Training zu beschleunigen und lokale Minima zu überwinden.
weight_decaytune.uniform(0.0, 0.001)Regularisierungsparameter, der Overfitting verhindert, indem er große Gewichtswerte bestraft.
warmup_epochstune.uniform(0.0, 5.0)Anzahl der Epochen mit schrittweise ansteigender Lernrate, um das frühe Training zu stabilisieren.
warmup_momentumtune.uniform(0.0, 0.95)Anfänglicher Momentum-Wert, der während der Warmup-Phase allmählich ansteigt.
boxtune.uniform(1.0, 20.0)Gewichtung für die Bounding-Box-Verlustkomponente, die die Lokalisierungsgenauigkeit im Modell ausbalanciert.
clstune.uniform(0.1, 4.0)Gewichtung für die Klassifizierungs-Verlustkomponente, die die Genauigkeit der Klassenvorhersage im Modell ausbalanciert.
cls_pwtune.uniform(0.0, 1.0)Gewichtungspotenz der Klassen, von deaktiviert (0.0) bis zur vollständigen inversen Frequenzgewichtung (1.0).
dfltune.uniform(0.4, 12.0)Gewichtung für die Box-Entfernungs-Regressionskomponente, die eine präzise Bounding-Box-Lokalisierung betont.
hsv_htune.uniform(0.0, 0.1)Hue-Augmentationsbereich, der Farbvariabilität einführt, um die Generalisierung des Modells zu unterstützen.
hsv_stune.uniform(0.0, 0.9)Sättigungs-Augmentationsbereich, der die Farbintensität variiert, um die Robustheit zu verbessern.
hsv_vtune.uniform(0.0, 0.9)Value (Helligkeits)-Augmentationsbereich, der dem Modell hilft, unter verschiedenen Lichtbedingungen zu arbeiten.
degreestune.uniform(0.0, 45.0)Rotations-Augmentationsbereich in Grad, um die Erkennung rotierter Objekte zu verbessern.
translatetune.uniform(0.0, 0.9)Translations-Augmentationsbereich, der Bilder horizontal und vertikal verschiebt.
scaletune.uniform(0.0, 0.95)Skalierungs-Augmentationsbereich, der Objekte in unterschiedlichen Entfernungen simuliert.
sheartune.uniform(0.0, 10.0)Scherungs-Augmentationsbereich in Grad, um Perspektivverschiebungen zu simulieren.
perspectivetune.uniform(0.0, 0.001)Perspektiv-Augmentationsbereich, der 3D-Blickwinkeländerungen simuliert.
flipudtune.uniform(0.0, 1.0)Wahrscheinlichkeit für vertikale Spiegelung als Augmentation, um die Diversität des Datensatzes zu erhöhen.
fliplrtune.uniform(0.0, 1.0)Wahrscheinlichkeit für horizontale Spiegelung als Augmentation, nützlich bei symmetrischen Objekten.
bgrtune.uniform(0.0, 1.0)Wahrscheinlichkeit für BGR-Kanaltausch-Augmentation, was bei der Farbinvarianz hilft.
mosaictune.uniform(0.0, 1.0)Wahrscheinlichkeit für Mosaic-Augmentation, die vier Bilder zu einem Trainingsbeispiel kombiniert.
mixuptune.uniform(0.0, 1.0)Wahrscheinlichkeit für Mixup-Augmentation, die zwei Bilder und deren Labels miteinander vermischt.
cutmixtune.uniform(0.0, 1.0)Wahrscheinlichkeit für Cutmix-Augmentation, die Bildbereiche kombiniert und gleichzeitig lokale Merkmale beibehält.
copy_pastetune.uniform(0.0, 1.0)Im Modus flip der Bruchteil der in ein Bild kopierten berechtigten Objekte, im Modus mixup zusätzlich die Wahrscheinlichkeit für die Ausführung.
close_mosaictune.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 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 bestimmte Hyperparameter von Interesse fokussieren.

Verwendung
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 Code-Snippet erstellen wir ein YOLO-Modell mit den vortrainierten Gewichten "yolo26n.pt". Dann rufen wir die Methode tune() auf und geben die Dataset-Konfiguration mit "coco8.yaml" an. Wir stellen einen benutzerdefinierten Suchraum für die initiale Lernrate lr0 bereit, indem wir ein Wörterbuch mit dem Schlüssel "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 als epochs=50 an die Tune-Methode.

Beispiel für Suchalgorithmen#

Du kannst eine Ray-Tune-Suchstrategie nach Namen auswählen. Bei string-basierten Suchalgorithmen verwendet Ultralytics automatisch die Standard-Optimierungsmetrik der aktuellen Aufgabe und mode="max". Wenn search_alg nicht angegeben wird, verwendet Ray Tune seine Standard-Zufallssuchstrategie BasicVariantGenerator.

Verwendung von String `search_alg` mit `model.tune()`
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-Suchobjekt anstelle eines Strings.

Verwendung des `OptunaSearch`-Objekts mit `model.tune()`
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. Du kannst optional das von Ray Tune unter runs/{task} verwendete Verzeichnis name für die Fortsetzung übergeben. Andernfalls wird die zuletzt unterbrochene Sitzung fortgesetzt. Du musst die Argumente iterations und space nicht erneut angeben, aber du musst die übrigen Trainingsargumente einschließlich data und epochs erneut bereitstellen.

Verwendung von `resume=True` mit `model.tune()`
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 der Ray Tune-Ergebnisse#

Nachdem du ein Hyperparameter-Optimierungsexperiment mit Ray Tune durchgeführt hast, möchtest du möglicherweise verschiedene Analysen der erhaltenen Ergebnisse durchführen. Dieser Leitfaden führt dich durch gängige Arbeitsabläufe zur Verarbeitung und Analyse dieser Ergebnisse.

Laden von Tune-Experimentergebnissen aus einem Verzeichnis#

Nachdem du das Tuning-Experiment mit tuner.fit() ausgeführt hast, kannst du die Ergebnisse aus einem Verzeichnis laden. Dies ist besonders dann nützlich, wenn du die Analyse durchführst, nachdem das initiale 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#

Erhalte einen Überblick darüber, wie die Versuche abgeschnitten haben. 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#

Greife auf einzelne Hyperparameter-Konfigurationen der Versuche 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 Versuch#

Du kannst den Verlauf der gemeldeten Metriken für jeden Versuch grafisch 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 diesem Leitfaden haben wir gängige Arbeitsabläufe 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 Versuchsebene sowie die grafische Darstellung der Metriken.

Erfahre mehr, indem du in der Analyze Results-Dokumentationsseite von Ray Tune nachliest, um das Beste aus deinen Hyperparameter-Tuning-Experimenten herauszuholen.

FAQ#

  • Um die Hyperparameter deines Ultralytics YOLO26 Modells mit Ray Tune abzustimmen, befolge diese Schritte:

    1. Installiere die erforderlichen Pakete:

      pip install -U ultralytics "ray[tune]"
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. Lade dein YOLO26 Modell und starte das Tuning:

      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.

  • Ultralytics YOLO26 verwendet die folgenden Standard-Hyperparameter für das Tuning mit Ray Tune:

    ParameterWertebereichBeschreibung
    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)Impuls (Momentum)
    weight_decaytune.uniform(0.0, 0.001)Gewichtsabfall (Weight decay)
    warmup_epochstune.uniform(0.0, 5.0)Aufwärmepochen (Warmup epochs)
    boxtune.uniform(1.0, 20.0)Gewichtung des Box-Verlusts
    clstune.uniform(0.1, 4.0)Gewichtung des Klassen-Verlusts
    cls_pwtune.uniform(0.0, 1.0)Gewichtungspotenz der Klassen
    dfltune.uniform(0.4, 12.0)Box-Distanz-Verlustgewicht
    hsv_htune.uniform(0.0, 0.1)Bereich der Farbton-Augmentierung
    translatetune.uniform(0.0, 0.9)Bereich der Translations-Augmentierung

    Diese Hyperparameter können an deine spezifischen Anforderungen angepasst werden. Eine vollständige Liste und weitere Details findest du im Leitfaden zum Hyperparameter Tuning.

  • Um Weights & Biases (W&B) in deinen Ultralytics YOLO26 Tuning-Prozess zu integrieren:

    1. Installiere W&B:

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. 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)

    Diese Einrichtung ermöglicht es dir, den Tuning-Prozess zu überwachen, Hyperparameter-Konfigurationen zu verfolgen und Ergebnisse in W&B zu visualisieren.

  • Ray Tune bietet zahlreiche Vorteile für die Hyperparameter-Optimierung:

    • Fortschrittliche 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.
    • Vorzeitiges Abbrechen (Early Stopping): Setzt Strategien wie ASHA ein, um leistungsschwache Versuche frühzeitig zu beenden und Rechenressourcen zu sparen.

    Ray Tune lässt sich nahtlos in Ultralytics YOLO26 integrieren und bietet eine benutzerfreundliche Schnittstelle für die effektive Abstimmung von Hyperparametern. Schau dir den Leitfaden zum Hyperparameter Tuning an, um zu beginnen.

  • Um einen benutzerdefinierten Suchraum für dein YOLO26 Hyperparameter-Tuning mit Ray Tune zu definieren:

    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 von Hyperparametern wie der initialen Lernrate und dem Momentum an, die während des Tuning-Prozesses untersucht werden sollen. Für fortgeschrittene Konfigurationen siehe den Abschnitt Custom Search Space Example.

Kommentare