Ultralytics YOLO27:
Get Started

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 hyperparameter optimization workflow

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:

Installation
# 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=True

Verwendung#

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

ParameterTypBeschreibungStandardwert
datastrDie 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).
spacedict, optionalEin 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_periodint, optionalDie 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_trialint, optionalDie 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
iterationsint, optionalDie 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_algstr or Searcher, optionalDie 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_argsdict, optionalZusä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.

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 festlegt, wie stark die Lernrate bis zum Ende des Trainings sinkt.
momentumtune.uniform(0.7, 0.98)Momentum-Faktor des Optimierers, der das Training beschleunigt und dabei hilft, lokale Minima zu überwinden.
weight_decaytune.uniform(0.0, 0.001)Regularisierungsparameter, der Überanpassung verhindert, indem große Gewichtswerte bestraft werden.
warmup_epochstune.uniform(0.0, 5.0)Anzahl der Epochen, in denen die Lernrate schrittweise erhöht wird, um das Training zu Beginn zu stabilisieren.
warmup_momentumtune.uniform(0.0, 0.95)Anfänglicher Momentum-Wert, der während der Aufwärmphase schrittweise erhöht wird.
boxtune.uniform(1.0, 20.0)Gewichtung des BBox-Verlustanteils, die die Lokalisierungsgenauigkeit des Modells beeinflusst.
clstune.uniform(0.1, 4.0)Gewichtung des Klassifizierungsverlustanteils, die die Genauigkeit der Klassenvorhersagen des Modells beeinflusst.
cls_pwtune.uniform(0.0, 1.0)Stärke der Klassengewichtung: von deaktiviert (0.0) bis zur vollständigen inversen Häufigkeitsgewichtung (1.0).
dfltune.uniform(0.4, 12.0)Gewichtung des Regressionsanteils für die BBox-Abstände, die eine präzise Lokalisierung der BBox fördert.
hsv_htune.uniform(0.0, 0.1)Bereich der Farbtonaugmentation, die Farbvariationen einführt, damit das Modell besser generalisiert.
hsv_stune.uniform(0.0, 0.9)Bereich der Sättigungsaugmentation, die die Farbintensität variiert und so die Robustheit erhöht.
hsv_vtune.uniform(0.0, 0.9)Bereich der Helligkeitsaugmentation, der dem Modell hilft, unter unterschiedlichen Lichtverhältnissen zu arbeiten.
degreestune.uniform(0.0, 45.0)Bereich der Rotationsaugmentation in Grad, der die Erkennung gedrehter Objekte verbessert.
translatetune.uniform(0.0, 0.9)Bereich der Translationsaugmentation, die Bilder horizontal und vertikal verschiebt.
scaletune.uniform(0.0, 0.95)Bereich der Skalierungsaugmentation, die Objekte in unterschiedlichen Entfernungen simuliert.
sheartune.uniform(0.0, 10.0)Bereich der Scherungsaugmentation in Grad, der Perspektivverschiebungen simuliert.
perspectivetune.uniform(0.0, 0.001)Bereich der Perspektivaugmentation, die Änderungen des 3D-Blickwinkels simuliert.
flipudtune.uniform(0.0, 1.0)Wahrscheinlichkeit der vertikalen Spiegelung, durch die die Vielfalt des Datensatzes erhöht wird.
fliplrtune.uniform(0.0, 1.0)Wahrscheinlichkeit der horizontalen Spiegelung, die bei symmetrischen Objekten hilfreich ist.
bgrtune.uniform(0.0, 1.0)Wahrscheinlichkeit der Vertauschung der BGR-Kanäle, die zur Farbinvarianz beiträgt.
mosaictune.uniform(0.0, 1.0)Wahrscheinlichkeit der Mosaic-Augmentation, bei der vier Bilder zu einem Trainingsbeispiel kombiniert werden.
mixuptune.uniform(0.0, 1.0)Wahrscheinlichkeit der MixUp-Augmentation, bei der zwei Bilder und ihre Labels miteinander kombiniert werden.
cutmixtune.uniform(0.0, 1.0)Wahrscheinlichkeit der CutMix-Augmentation, bei der Bildbereiche kombiniert und lokale Merkmale beibehalten werden.
copy_pastetune.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_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 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.

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

Verwendung der Zeichenfolge `search_alg` mit `model.tune()`
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.

Verwendung des Objekts `OptunaSearch` mit `model.tune()`
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.

`resume=True` mit `model.tune()` verwenden
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:

    1. Erforderliche Pakete installieren:

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. 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:

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

    1. W&B installieren:

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

Kommentare