Ottimizzazione efficiente degli iperparametri con Ray Tune e YOLO26#
L'ottimizzazione degli iperparametri è fondamentale per ottenere le massime prestazioni del modello, individuando l'insieme ottimale di iperparametri. Questo processo consiste nell'eseguire prove con iperparametri diversi e nel valutare le prestazioni di ogni prova.
Accelera l'ottimizzazione con Ultralytics YOLO26 e Ray Tune#
Ultralytics YOLO26 integra Ray Tune per l'ottimizzazione degli iperparametri, semplificando l'ottimizzazione degli iperparametri del modello YOLO26. Con Ray Tune puoi utilizzare strategie di ricerca avanzate, il parallelismo e l'arresto anticipato per accelerare il processo di ottimizzazione.
Ray Tune#
Ray Tune è una libreria per l'ottimizzazione degli iperparametri progettata per garantire efficienza e flessibilità. Supporta diverse strategie di ricerca, il parallelismo e strategie di arresto anticipato e si integra perfettamente con i più diffusi framework di machine learning, tra cui Ultralytics YOLO26.
Integrazione con Weights & Biases#
YOLO26 consente anche l'integrazione facoltativa con Weights & Biases per monitorare il processo di ottimizzazione.
Installazione#
Per installare i pacchetti richiesti, esegui:
# 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=TrueUtilizzo#
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)Parametri del metodo tune()#
Il metodo tune() in YOLO26 offre un'interfaccia semplice da usare per l'ottimizzazione degli iperparametri con Ray Tune. Accetta diversi argomenti che ti consentono di personalizzare il processo di ottimizzazione. Di seguito trovi una spiegazione dettagliata di ogni parametro:
| Parametro | Tipo | Descrizione | Valore predefinito |
|---|---|---|---|
data | str | Il file YAML del dataset su cui eseguire il tuner, che specifica i percorsi dei dati di validazione e di addestramento, oltre ad altre impostazioni specifiche del dataset. Per la classificazione, invece, accetta una directory del dataset o il nome di un dataset integrato (ad esempio, imagenet10). | |
space | dict, optional | Un dizionario che definisce lo spazio di ricerca degli iperparametri per Ray Tune. Ogni chiave corrisponde al nome di un iperparametro e il valore specifica l'intervallo di valori da esplorare durante l'ottimizzazione. Se non viene fornito, YOLO26 utilizza uno spazio di ricerca predefinito con diversi iperparametri. | |
grace_period | int, optional | Il periodo di tolleranza in epoche per lo scheduler ASHA in Ray Tune. Lo scheduler non terminerà alcuna prova prima di questo numero di epoche, consentendo al modello di completare un addestramento minimo prima di decidere se eseguire l'arresto anticipato. | 10 |
gpu_per_trial | int, optional | Il numero di GPU che Ray assegna a ogni prova. Impostalo esplicitamente per utilizzare l'addestramento su GPU; se omesso, alle prove non vengono assegnate risorse GPU. | None |
iterations | int, optional | Il numero massimo di prove da eseguire durante l'ottimizzazione. Questo parametro aiuta a controllare il numero totale di combinazioni di iperparametri testate, evitando che il processo di ottimizzazione venga eseguito indefinitamente. | 300 |
search_alg | str or Searcher, optional | La strategia di ricerca di Ray Tune da utilizzare. Puoi passare direttamente un oggetto searcher di Ray oppure utilizzare una stringa supportata come optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax o random. I searcher basati su stringhe utilizzano automaticamente la metrica predefinita dell'attività e mode="max". Per impostazione predefinita viene utilizzato TPE multivariato di Optuna con suggerimenti consapevoli del parallelismo. | "optuna" |
**train_args | dict, optional | Argomenti aggiuntivi da passare al metodo train() durante l'ottimizzazione. Questi argomenti possono includere impostazioni come il numero di epoche di addestramento, la dimensione del batch e altre configurazioni specifiche dell'addestramento. | {} |
Personalizzando questi parametri, puoi perfezionare il processo di ottimizzazione degli iperparametri in base alle tue esigenze specifiche e alle risorse di calcolo disponibili.
Descrizione dello spazio di ricerca predefinito#
La tabella seguente elenca i parametri dello spazio di ricerca predefinito per l'ottimizzazione degli iperparametri in YOLO26 con Ray Tune. Ogni parametro ha un intervallo di valori specifico definito da tune.uniform().
| Parametro | Intervallo | Descrizione |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Tasso di apprendimento iniziale che controlla la dimensione del passo durante l'ottimizzazione. Valori più elevati accelerano l'addestramento, ma possono causare instabilità. |
lrf | tune.uniform(0.01, 1.0) | Fattore del tasso di apprendimento finale che determina quanto diminuisce il tasso di apprendimento al termine dell'addestramento. |
momentum | tune.uniform(0.7, 0.98) | Fattore di momentum dell'ottimizzatore che aiuta ad accelerare l'addestramento e a superare i minimi locali. |
weight_decay | tune.uniform(0.0, 0.001) | Parametro di regolarizzazione che previene l'overfitting penalizzando valori elevati dei pesi. |
warmup_epochs | tune.uniform(0.0, 5.0) | Numero di epoche con tasso di apprendimento gradualmente crescente per stabilizzare le fasi iniziali dell'addestramento. |
warmup_momentum | tune.uniform(0.0, 0.95) | Valore iniziale del momentum che aumenta gradualmente durante il periodo di warmup. |
box | tune.uniform(1.0, 20.0) | Peso della componente di perdita del bounding box, che bilancia la precisione della localizzazione nel modello. |
cls | tune.uniform(0.1, 4.0) | Peso della componente di perdita della classificazione, che bilancia la precisione della predizione delle classi nel modello. |
cls_pw | tune.uniform(0.0, 1.0) | Potenza di ponderazione delle classi, da disabilitata (0.0) alla ponderazione completa inversamente proporzionale alla frequenza (1.0). |
dfl | tune.uniform(0.4, 12.0) | Peso della componente di regressione della distanza del box, che enfatizza la localizzazione precisa del bounding box. |
hsv_h | tune.uniform(0.0, 0.1) | Intervallo dell'augmentation della tonalità che introduce variabilità cromatica per aiutare il modello a generalizzare. |
hsv_s | tune.uniform(0.0, 0.9) | Intervallo dell'augmentation della saturazione che varia l'intensità dei colori per migliorare la robustezza. |
hsv_v | tune.uniform(0.0, 0.9) | Intervallo dell'augmentation del valore (luminosità) che aiuta il modello a funzionare in condizioni di illuminazione diverse. |
degrees | tune.uniform(0.0, 45.0) | Intervallo dell'augmentation della rotazione in gradi, che migliora il riconoscimento degli oggetti ruotati. |
translate | tune.uniform(0.0, 0.9) | Intervallo dell'augmentation della traslazione che sposta le immagini orizzontalmente e verticalmente. |
scale | tune.uniform(0.0, 0.95) | Intervallo dell'augmentation del ridimensionamento che simula oggetti a distanze diverse. |
shear | tune.uniform(0.0, 10.0) | Intervallo dell'augmentation del taglio in gradi, che simula variazioni prospettiche. |
perspective | tune.uniform(0.0, 0.001) | Intervallo dell'augmentation della prospettiva che simula cambiamenti del punto di vista 3D. |
flipud | tune.uniform(0.0, 1.0) | Probabilità dell'augmentation del ribaltamento verticale, che aumenta la varietà del dataset. |
fliplr | tune.uniform(0.0, 1.0) | Probabilità dell'augmentation del ribaltamento orizzontale, utile per gli oggetti simmetrici. |
bgr | tune.uniform(0.0, 1.0) | Probabilità dell'augmentation con scambio dei canali BGR, che contribuisce all'invarianza cromatica. |
mosaic | tune.uniform(0.0, 1.0) | Probabilità dell'augmentation Mosaic, che combina quattro immagini in un unico campione di addestramento. |
mixup | tune.uniform(0.0, 1.0) | Probabilità dell'augmentation MixUp, che fonde due immagini e le relative etichette. |
cutmix | tune.uniform(0.0, 1.0) | Probabilità dell'augmentation CutMix, che combina regioni delle immagini mantenendo le caratteristiche locali. |
copy_paste | tune.uniform(0.0, 1.0) | Nella modalità flip indica la frazione di oggetti idonei copiati in un'immagine; nella modalità mixup indica anche la probabilità di eseguirla. |
close_mosaic | tune.randint(0, 11) | Disabilita Mosaic nelle ultime N epoche per stabilizzare l'addestramento prima del completamento. |
Esempio di spazio di ricerca personalizzato#
In questo esempio mostriamo come utilizzare uno spazio di ricerca personalizzato per l'ottimizzazione degli iperparametri con Ray Tune e YOLO26. Fornendo uno spazio di ricerca personalizzato, puoi concentrare il processo di ottimizzazione su specifici iperparametri di interesse.
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,
)Nel frammento di codice precedente, creiamo un modello YOLO con i pesi pretrained "yolo26n.pt". Quindi chiamiamo il metodo tune(), specificando la configurazione del dataset con "coco8.yaml". Forniamo uno spazio di ricerca personalizzato per il tasso di apprendimento iniziale lr0 utilizzando un dizionario con la chiave "lr0" e il valore tune.uniform(1e-5, 1e-2). Infine, passiamo argomenti aggiuntivi per l'addestramento, come il numero di epoche, direttamente al metodo tune come epochs=50.
Esempio di algoritmo di ricerca#
Puoi selezionare una strategia di ricerca di Ray Tune tramite il nome. Per gli algoritmi di ricerca basati su stringhe, Ultralytics utilizzerà automaticamente la metrica di ottimizzazione predefinita dell'attività corrente e mode="max". Se search_alg non viene fornito, Ultralytics utilizza TPE multivariato di Optuna con suggerimenti consapevoli del parallelismo.
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,
)Se devi personalizzare il sampler del searcher o sovrascrivere la relativa metrica e modalità di ottimizzazione, passa un oggetto searcher di Ray Tune istanziato invece di una stringa.
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,
)Ripresa di una sessione interrotta di ottimizzazione degli iperparametri con Ray Tune#
Puoi riprendere una sessione di Ray Tune interrotta passando resume=True. Facoltativamente, puoi passare la directory name utilizzata da Ray Tune in runs/{task} per riprendere la sessione. In caso contrario, verrà ripresa l'ultima sessione interrotta. Non è necessario fornire nuovamente iterations e space, ma devi fornire di nuovo il resto degli argomenti di addestramento, inclusi data e epochs.
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)Elaborazione dei risultati di Ray Tune#
Dopo aver eseguito un esperimento di ottimizzazione degli iperparametri con Ray Tune, potresti voler effettuare diverse analisi sui risultati ottenuti. Questa guida illustra i flussi di lavoro comuni per elaborare e analizzare questi risultati.
Caricamento dei risultati dell'esperimento Tune da una directory#
model.tune(use_ray=True) restituisce un ResultGrid di Ray e salva l'esperimento in runs/{task}/tune o in name che hai passato. Per caricare quei risultati dopo che lo script originale è uscito, riprendi la sessione, la quale ripristina le prove salvate e restituisce lo stesso ResultGrid:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)Analisi di base a livello di esperimento#
Ottieni una panoramica delle prestazioni delle prove. Puoi verificare rapidamente se si sono verificati errori durante le prove.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Analisi di base a livello di prova#
Accedi alle configurazioni degli iperparametri delle singole prove e alle metriche riportate più recentemente.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Tracciamento dell'intera cronologia delle metriche riportate per una prova#
Puoi tracciare la cronologia delle metriche riportate per ogni prova per vedere come si sono evolute nel tempo.
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()Riepilogo#
In questa guida abbiamo illustrato i flussi di lavoro comuni per analizzare i risultati degli esperimenti eseguiti con Ray Tune utilizzando Ultralytics. I passaggi principali includono il caricamento dei risultati dell'esperimento da una directory, l'esecuzione di analisi di base a livello di esperimento e di prova e la rappresentazione grafica delle metriche.
Per approfondire, consulta la pagina della documentazione di Ray Tune Analyze Results per ottenere il massimo dai tuoi esperimenti di ottimizzazione degli iperparametri.
FAQ#
Per ottimizzare gli iperparametri del tuo modello Ultralytics YOLO26 usando Ray Tune, segui questi passaggi:
-
Installa i pacchetti richiesti:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
Carica il modello YOLO26 e avvia l'ottimizzazione:
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)
Questo utilizza le strategie di ricerca avanzate e il parallelismo di Ray Tune per ottimizzare in modo efficiente gli iperparametri del modello. Per ulteriori informazioni, consulta la documentazione di Ray Tune.
-
Ultralytics YOLO26 utilizza i seguenti iperparametri predefiniti per l'ottimizzazione con Ray Tune:
Parametro Intervallo di valori Descrizione lr0tune.uniform(1e-5, 1e-2)Tasso di apprendimento iniziale lrftune.uniform(0.01, 1.0)Fattore del tasso di apprendimento finale momentumtune.uniform(0.7, 0.98)Momentum weight_decaytune.uniform(0.0, 0.001)Decadimento dei pesi warmup_epochstune.uniform(0.0, 5.0)Epoche di warmup boxtune.uniform(1.0, 20.0)Peso della perdita del box clstune.uniform(0.1, 4.0)Peso della perdita della classe cls_pwtune.uniform(0.0, 1.0)Potenza di ponderazione delle classi dfltune.uniform(0.4, 12.0)Peso della perdita della distanza del box hsv_htune.uniform(0.0, 0.1)Intervallo dell'augmentation della tonalità translatetune.uniform(0.0, 0.9)Intervallo dell'augmentation della traslazione Questi iperparametri possono essere personalizzati in base alle tue esigenze specifiche. Per un elenco completo e maggiori dettagli, consulta la guida Ottimizzazione degli iperparametri.
Per integrare Weights & Biases (W&B) nel processo di ottimizzazione del tuo Ultralytics YOLO26:
-
Installa W&B:
pip install wandb wandb login yolo settings wandb=True -
Esegui il tuner:
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)
Questa configurazione ti consentirà di monitorare il processo di ottimizzazione, tenere traccia delle configurazioni degli iperparametri e visualizzare i risultati in W&B.
-
Ray Tune offre numerosi vantaggi per l'ottimizzazione degli iperparametri:
- Strategie di ricerca avanzate: utilizza algoritmi come l'Ottimizzazione bayesiana e HyperOpt per una ricerca efficiente dei parametri.
- Parallelismo: supporta l'esecuzione parallela di più prove, accelerando significativamente il processo di ottimizzazione.
- Arresto anticipato: utilizza strategie come ASHA per terminare anticipatamente le prove con prestazioni insufficienti, risparmiando risorse di calcolo.
Ray Tune si integra perfettamente con Ultralytics YOLO26, offrendo un'interfaccia semplice da usare per ottimizzare efficacemente gli iperparametri. Per iniziare, consulta la guida Ottimizzazione degli iperparametri.
Per definire uno spazio di ricerca personalizzato per l'ottimizzazione degli iperparametri di YOLO26 con Ray Tune:
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)Questa configurazione personalizza l'intervallo degli iperparametri, come il tasso di apprendimento iniziale e il momentum, da esplorare durante il processo di ottimizzazione. Per configurazioni avanzate, consulta la sezione Esempio di spazio di ricerca personalizzato.