Effizientes Hyperparameter-Tuning mit Ray Tune und YOLO11
Die Abstimmung der Hyperparameter ist von entscheidender Bedeutung für die Erzielung einer Spitzenleistung des Modells, indem der optimale Satz von Hyperparametern ermittelt wird. Dazu werden Versuche mit verschiedenen Hyperparametern durchgeführt und die Leistung der einzelnen Versuche bewertet.
Beschleunigen Sie das Tuning mit Ultralytics YOLO11 und Ray Tune
Ultralytics YOLO11 beinhaltet Ray Tune für die Abstimmung von Hyperparametern, wodurch die Optimierung von YOLO11 Modellhyperparametern rationalisiert wird. Mit Ray Tune können Sie erweiterte Suchstrategien, Parallelität und frühzeitiges Anhalten nutzen, um den Abstimmungsprozess zu beschleunigen.
Ray Tune
Ray Tune ist eine Bibliothek zur Abstimmung von Hyperparametern, die auf Effizienz und Flexibilität ausgelegt ist. Sie unterstützt verschiedene Suchstrategien, Parallelität und Frühstopp-Strategien und lässt sich nahtlos in gängige Frameworks für maschinelles Lernen integrieren, darunter Ultralytics YOLO11 .
Integration mit Weights & Biases
YOLO11 ermöglicht auch die optionale Integration mit Weights & Biases zur Überwachung des Abstimmungsprozesses.
Einrichtung
Um die erforderlichen Pakete zu installieren, führen Sie aus:
Einrichtung
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandb
Verwendung
Verwendung
from ultralytics import YOLO
# Load a YOLO11n model
model = YOLO("yolo11n.pt")
# Start tuning hyperparameters for YOLO11n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)
tune()
Parameter der Methode
Die tune()
Methode in YOLO11 bietet eine einfach zu bedienende Schnittstelle für die Abstimmung von Hyperparametern mit Ray Tune. Sie akzeptiert mehrere Argumente, mit denen Sie den Abstimmungsprozess anpassen können. Nachfolgend finden Sie eine detaillierte Erläuterung der einzelnen Parameter:
Parameter | Typ | Beschreibung | Standardwert |
---|---|---|---|
data |
str |
Die Dataset-Konfigurationsdatei (im YAML-Format), mit der der Tuner ausgeführt werden soll. In dieser Datei sollten die Pfade für die Trainings- und Validierungsdaten sowie andere datensatzspezifische Einstellungen angegeben werden. | |
space |
dict, optional |
Ein Wörterbuch, das den Hyperparametersuchraum für Ray Tune definiert. Jeder Schlüssel entspricht einem Hyperparameternamen, und der Wert gibt den Wertebereich an, der während der Abstimmung untersucht werden soll. Wenn nichts angegeben wird, verwendet YOLO11 einen Standardsuchraum mit verschiedenen Hyperparametern. | |
grace_period |
int, optional |
Die Karenzzeit in Epochen für den ASHA-Scheduler in Ray Tune. Der Scheduler bricht keinen Versuch vor dieser Anzahl von Epochen ab, damit das Modell eine gewisse Mindesttrainingszeit hat, bevor es eine Entscheidung über das vorzeitige Abbrechen trifft. | 10 |
gpu_per_trial |
int, optional |
Die Anzahl der GPUs, die während der Abstimmung pro Versuch zugewiesen werden. Dies hilft bei der Verwaltung der GPU Nutzung, insbesondere in Umgebungen mit mehrerenGPU . Wenn keine Angabe gemacht wird, verwendet der Tuner alle verfügbaren GPUs. | None |
iterations |
int, optional |
Die maximale Anzahl der Versuche, die während der Abstimmung durchgeführt werden. Mit diesem Parameter lässt sich die Gesamtzahl der getesteten Hyperparameterkombinationen steuern, um sicherzustellen, dass der Abstimmungsprozess nicht unendlich lange läuft. | 10 |
**train_args |
dict, optional |
Zusätzliche Argumente zur Übergabe an die train() Methode während der Abstimmung. Diese Argumente können Einstellungen wie die Anzahl der Trainingsepochen enthalten, Chargengrößeund andere ausbildungsspezifische Konfigurationen. |
{} |
Durch die Anpassung dieser Parameter können Sie den Hyperparameter-Optimierungsprozess auf Ihre spezifischen Bedürfnisse und die verfügbaren Rechenressourcen abstimmen.
Standard-Suchraum Beschreibung
In der folgenden Tabelle sind die Standardsuchraumparameter für die Hyperparameterabstimmung in YOLO11 mit Ray Tune aufgeführt. Jeder Parameter hat einen bestimmten Wertebereich, der durch tune.uniform()
.
Parameter | Bereich | Beschreibung |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Anfängliche Lernrate, die die Schrittgröße 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) |
Endgültiger Lernratenfaktor, der bestimmt, wie stark die Lernrate am Ende des Trainings abnimmt. |
momentum |
tune.uniform(0.6, 0.98) |
Momentum-Faktor für den Optimierer, der dazu beiträgt, das Training zu beschleunigen und lokale Minima zu überwinden. |
weight_decay |
tune.uniform(0.0, 0.001) |
Regularisierungsparameter, der eine Überanpassung durch Bestrafung großer Gewichtswerte verhindert. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Anzahl der Epochen mit allmählich steigender Lernrate zur Stabilisierung des frühen Trainings. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Anfangsimpulswert, der während der Aufwärmphase allmählich ansteigt. |
box |
tune.uniform(0.02, 0.2) |
Gewicht für die Bounding-Box-Verlustkomponente, die die Lokalisierungsgenauigkeit des Modells ausgleicht. |
cls |
tune.uniform(0.2, 4.0) |
Gewicht für die Klassifizierungsverlustkomponente, die die Genauigkeit der Klassenvorhersage im Modell ausgleicht. |
hsv_h |
tune.uniform(0.0, 0.1) |
Farbtonvergrößerungsbereich, der die Farbvariabilität einführt, um die Verallgemeinerung des Modells zu unterstützen. |
hsv_s |
tune.uniform(0.0, 0.9) |
Sättigungserweiterung, die die Farbintensität variiert, um die Robustheit zu verbessern. |
hsv_v |
tune.uniform(0.0, 0.9) |
Wertebereich (Helligkeit), der die Leistung des Modells bei verschiedenen Lichtverhältnissen unterstützt. |
degrees |
tune.uniform(0.0, 45.0) |
Rotationsvergrößerung in Grad, um die Erkennung von gedrehten Objekten zu verbessern. |
translate |
tune.uniform(0.0, 0.9) |
Bereich der Übersetzungserweiterung, der die Bilder horizontal und vertikal verschiebt. |
scale |
tune.uniform(0.0, 0.9) |
Skalierender Vergrößerungsbereich, der Objekte in unterschiedlichen Entfernungen simuliert. |
shear |
tune.uniform(0.0, 10.0) |
Scherungserweiterung in Grad, um perspektivische Verschiebungen zu simulieren. |
perspective |
tune.uniform(0.0, 0.001) |
Bereich der perspektivischen Augmentation, der 3D-Punktwechsel simuliert. |
flipud |
tune.uniform(0.0, 1.0) |
Vertikale Flip-Augmentationswahrscheinlichkeit, Erhöhung der Datensatzvielfalt. |
fliplr |
tune.uniform(0.0, 1.0) |
Horizontale Spiegelungswahrscheinlichkeit, nützlich für symmetrische Objekte. |
mosaic |
tune.uniform(0.0, 1.0) |
Mosaikvergrößerungswahrscheinlichkeit, die vier Bilder zu einem Trainingsmuster kombiniert. |
mixup |
tune.uniform(0.0, 1.0) |
Verwechslungswahrscheinlichkeit, die zwei Bilder und ihre Beschriftungen miteinander vermischt. |
cutmix |
tune.uniform(0.0, 1.0) |
Cutmix-Augmentierungswahrscheinlichkeit, die Bildregionen unter Beibehaltung lokaler Merkmale kombiniert und so die Erkennung von teilweise verdeckten Objekten verbessert. |
copy_paste |
tune.uniform(0.0, 1.0) |
Kopieren-Einfügen-Ergänzungswahrscheinlichkeit, die Objekte zwischen Bildern überträgt, um die Instanzenvielfalt zu erhöhen. |
Beispiel für einen benutzerdefinierten Suchraum
In diesem Beispiel wird demonstriert, wie man einen benutzerdefinierten Suchraum für die Abstimmung von Hyperparametern mit Ray Tune und YOLO11 verwendet. Durch die Angabe eines benutzerdefinierten Suchraums können Sie den Abstimmungsprozess auf bestimmte Hyperparameter von Interesse konzentrieren.
Verwendung
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-1)},
epochs=50,
use_ray=True,
)
Im obigen Codeschnipsel erstellen wir ein Modell YOLO mit den vortrainierten Gewichten "yolo11n.pt". Dann rufen wir die tune()
Methode, wobei die Konfiguration des Datensatzes mit "coco8.yaml" angegeben wird. Wir bieten einen benutzerdefinierten Suchraum für die anfängliche Lernrate lr0
unter Verwendung eines Wörterbuchs mit dem Schlüssel "lr0" und dem Wert tune.uniform(1e-5, 1e-1)
. Schließlich übergeben wir zusätzliche Trainingsargumente, wie die Anzahl der Epochen, direkt an die Tune-Methode als epochs=50
.
Wiederaufnahme einer unterbrochenen Hyperparameter-Tuning-Sitzung mit Ray Tune
Sie können eine unterbrochene Ray Tune-Sitzung fortsetzen, indem Sie resume=True
. Optional können Sie das Verzeichnis name
verwendet von Ray Tune unter runs/{task}
fortzusetzen. Andernfalls wird die zuletzt unterbrochene Sitzung fortgesetzt. Sie müssen nicht die iterations
und space
wieder, aber Sie müssen den Rest der Argumente für die Ausbildung erneut vorbringen, einschließlich data
und epochs
.
Verwendung von resume=True
mit model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.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
Nachdem Sie ein Hyperparameter-Tuning-Experiment mit Ray Tune durchgeführt haben, möchten Sie vielleicht verschiedene Analysen der erhaltenen Ergebnisse durchführen. Dieser Leitfaden führt Sie durch gängige Arbeitsabläufe zur Verarbeitung und Analyse dieser Ergebnisse.
Laden von Tune-Experiment-Ergebnissen aus einem Verzeichnis
Nach der Durchführung des Tuning-Experiments mit tuner.fit()
können Sie die Ergebnisse aus einem Verzeichnis laden. Dies ist vor allem dann nützlich, wenn Sie die Analyse durchführen, 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
Verschaffen Sie sich einen Überblick über die Durchführung der Versuche. Sie können schnell überprüfen, ob bei den Versuchen Fehler aufgetreten sind.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")
Grundlegende Analyse auf Versuchsebene
Zugriff auf die Hyperparameterkonfigurationen der einzelnen Versuche und die zuletzt gemeldeten Metriken.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Aufzeichnung der gesamten Historie der berichteten Metriken für eine Studie
Sie können den Verlauf der gemeldeten Kennzahlen für jeden Versuch darstellen, um zu sehen, wie sich die Kennzahlen 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 dieser Dokumentation werden gängige Arbeitsabläufe zur Analyse der Ergebnisse von mit Ray Tune durchgeführten Experimenten unter Ultralytics behandelt. Zu den wichtigsten Schritten gehören das Laden der Versuchsergebnisse aus einem Verzeichnis, die Durchführung grundlegender Analysen auf Experiment- und Versuchsebene und das Plotten von Metriken.
Schauen Sie sich die Dokumentseite Analyze Results von Ray Tune an, um das Beste aus Ihren Hyperparameter-Tuning-Experimenten herauszuholen.
FAQ
Wie kann ich die Hyperparameter meines YOLO11 Modells mit Ray Tune abstimmen?
Führen Sie die folgenden Schritte aus, um die Hyperparameter Ihres Ultralytics YOLO11 Modells mit Ray Tune abzustimmen:
-
Installieren Sie die erforderlichen Pakete:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Laden Sie Ihr YOLO11 Modell und beginnen Sie mit der Abstimmung:
from ultralytics import YOLO # Load a YOLO11 model model = YOLO("yolo11n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
Dabei werden die fortschrittlichen Suchstrategien von Ray Tune und die Parallelität genutzt, um die Hyperparameter Ihres Modells effizient zu optimieren. Weitere Informationen finden Sie in der Ray Tune-Dokumentation.
Was sind die Standard-Hyperparameter für die YOLO11 Abstimmung mit Ray Tune?
Ultralytics YOLO11 verwendet die folgenden Standard-Hyperparameter für die Abstimmung mit Ray Tune:
Parameter | Wertebereich | Beschreibung |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Anfängliche Lernrate |
lrf |
tune.uniform(0.01, 1.0) |
Faktor für die endgültige Lernrate |
momentum |
tune.uniform(0.6, 0.98) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Gewichtsabnahme |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Aufwärm-Epochen |
box |
tune.uniform(0.02, 0.2) |
Box Verlust Gewicht |
cls |
tune.uniform(0.2, 4.0) |
Klassenverlust Gewicht |
hsv_h |
tune.uniform(0.0, 0.1) |
Bereich der Farbtonvergrößerung |
translate |
tune.uniform(0.0, 0.9) |
Bereich der Übersetzungserweiterung |
Diese Hyperparameter können an Ihre speziellen Bedürfnisse angepasst werden. Eine vollständige Liste und weitere Einzelheiten finden Sie in der Anleitung zur Hyperparameter-Einstellung.
Wie kann ich Weights & Biases in mein YOLO11 Modelltuning integrieren?
Zur Integration von Weights & Biases (W&B) in Ihren Ultralytics YOLO11 Tuning-Prozess:
-
W&B installieren:
pip install wandb
-
Ändern Sie Ihr Tuning-Skript:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo11n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
Mit diesem Setup können Sie den Abstimmungsprozess überwachen, Hyperparameterkonfigurationen verfolgen und die Ergebnisse in W&B visualisieren.
Warum sollte ich Ray Tune für die Hyperparameteroptimierung mit YOLO11 verwenden?
Ray Tune bietet zahlreiche Vorteile für die Hyperparameteroptimierung:
- Erweiterte Suchstrategien: Nutzt Algorithmen wie Bayes'sche Optimierung und HyperOpt für eine effiziente Parametersuche.
- Parallelität: Unterstützt die parallele Ausführung von mehreren Versuchen, was den Abstimmungsprozess erheblich beschleunigt.
- Frühzeitige Beendigung: Setzt Strategien wie ASHA ein, um Studien mit unzureichender Leistung frühzeitig abzubrechen und so Rechenressourcen zu sparen.
Ray Tune lässt sich nahtlos in Ultralytics YOLO11 integrieren und bietet eine einfach zu bedienende Schnittstelle für die effektive Abstimmung von Hyperparametern. Weitere Informationen finden Sie in der Anleitung zum Hyperparameter-Tuning.
Wie kann ich einen benutzerdefinierten Suchraum für die Abstimmung der Hyperparameter von YOLO11 definieren?
So definieren Sie einen benutzerdefinierten Suchraum für Ihr YOLO11 Hyperparameter-Tuning mit Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
Damit lässt sich der Bereich der Hyperparameter, wie z. B. die anfängliche Lernrate und das Momentum, das während des Abstimmungsprozesses untersucht werden soll, anpassen. Erweiterte Konfigurationen finden Sie im Abschnitt " Beispiel für einen benutzerdefinierten Suchraum ".