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 ciascuna prova.
Accelera l'ottimizzazione con Ultralytics YOLO26 e Ray Tune#
Ultralytics YOLO26 integra Ray Tune per ottimizzare gli iperparametri, semplificando l'ottimizzazione degli iperparametri dei modelli YOLO26. Con Ray Tune puoi sfruttare 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 necessari, 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
# Carica un modello YOLO26n
model = YOLO("yolo26n.pt")
# Avvia l'ottimizzazione degli iperparametri per l'addestramento di YOLO26n sul dataset COCO8
result_grid = model.tune(data="coco8.yaml", use_ray=True)Parametri del metodo tune()#
Il metodo tune() di YOLO26 offre un'interfaccia intuitiva 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 ciascun 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 convalida e di addestramento e altre impostazioni specifiche del dataset. Per la classificazione, invece, si usa una directory del dataset o il nome di un dataset integrato (ad es. 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 usa uno spazio di ricerca predefinito con vari iperparametri. | |
grace_period | int, optional | Il periodo di tolleranza, espresso in epoche, per lo scheduler ASHA in Ray Tune. Lo scheduler non interrompe alcuna prova prima che sia trascorso questo numero di epoche, consentendo al modello di completare un minimo di addestramento prima di decidere se arrestarlo in anticipo. | 10 |
gpu_per_trial | int, optional | Il numero di GPU che Ray assegna a ciascuna prova. Imposta esplicitamente questo valore per usare l'addestramento su GPU; se omesso, le prove non ricevono risorse GPU. | None |
iterations | int, optional | Il numero massimo di prove da eseguire durante l'ottimizzazione. Questo parametro consente di controllare il numero totale di combinazioni di iperparametri testate, evitando che il processo di ottimizzazione prosegua all'infinito. | 300 |
search_alg | str or Searcher, optional | La strategia di ricerca di Ray Tune da usare. Puoi passare direttamente un oggetto searcher di Ray oppure usare una stringa supportata, come optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax o random. I searcher basati su stringhe usano automaticamente la metrica predefinita dell'attività e mode="max". Per impostazione predefinita viene usato TPE multivariato di Optuna con suggerimenti che tengono conto del parallelismo. | "optuna" |
**train_args | dict, optional | Argomenti aggiuntivi da passare al metodo train() durante l'ottimizzazione. Possono includere impostazioni come il numero di epoche di addestramento, la dimensione del batch e altre configurazioni specifiche dell'addestramento. | {} |
Personalizzando questi parametri, puoi adattare il processo di ottimizzazione degli iperparametri 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(), ad eccezione di close_mosaic, che usa tune.randint().
| Parametro | Intervallo | Descrizione |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Tasso di apprendimento iniziale che controlla l'ampiezza del passo durante l'ottimizzazione. Valori più alti accelerano l'addestramento, ma possono causare instabilità. |
lrf | tune.uniform(0.01, 1.0) | Fattore del tasso di apprendimento finale che determina la riduzione del tasso di apprendimento entro la fine dell'addestramento. |
momentum | tune.uniform(0.7, 0.98) | Fattore di momentum per l'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 i valori elevati dei pesi. |
warmup_epochs | tune.uniform(0.0, 5.0) | Numero di epoche durante le quali il tasso di apprendimento aumenta gradualmente per stabilizzare le prime fasi 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 loss dei riquadri di delimitazione, che bilancia la precisione della localizzazione nel modello. |
cls | tune.uniform(0.1, 4.0) | Peso della componente di loss di 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 disattivata (0.0) a ponderazione inversamente proporzionale alla frequenza (1.0). |
dfl | tune.uniform(0.4, 12.0) | Peso della componente di regressione della distanza dei riquadri, che privilegia una localizzazione precisa dei riquadri di delimitazione. |
hsv_h | tune.uniform(0.0, 0.1) | Intervallo di aumento dei dati relativo alla tonalità, che introduce variabilità cromatica per aiutare il modello a generalizzare. |
hsv_s | tune.uniform(0.0, 0.9) | Intervallo di aumento dei dati relativo alla saturazione, che varia l'intensità del colore per migliorare la robustezza. |
hsv_v | tune.uniform(0.0, 0.9) | Intervallo di aumento dei dati relativo al valore (luminosità), che aiuta il modello a funzionare in diverse condizioni di illuminazione. |
degrees | tune.uniform(0.0, 45.0) | Intervallo di aumento dei dati relativo alla rotazione, espresso in gradi, che migliora il riconoscimento degli oggetti ruotati. |
translate | tune.uniform(0.0, 0.9) | Intervallo di aumento dei dati relativo alla traslazione, che sposta le immagini in orizzontale e in verticale. |
scale | tune.uniform(0.0, 0.95) | Intervallo di aumento dei dati relativo alla scala, che simula oggetti a distanze diverse. |
shear | tune.uniform(0.0, 10.0) | Intervallo di aumento dei dati relativo alla deformazione, espresso in gradi, che simula variazioni prospettiche. |
perspective | tune.uniform(0.0, 0.001) | Intervallo di aumento dei dati relativo alla prospettiva, che simula cambiamenti del punto di vista 3D. |
flipud | tune.uniform(0.0, 1.0) | Probabilità di aumento dei dati tramite riflessione verticale, che amplia la diversità del dataset. |
fliplr | tune.uniform(0.0, 1.0) | Probabilità di aumento dei dati tramite riflessione orizzontale, utile per gli oggetti simmetrici. |
bgr | tune.uniform(0.0, 1.0) | Probabilità di aumento dei dati tramite scambio dei canali BGR, utile per rendere il modello invariante ai colori. |
mosaic | tune.uniform(0.0, 1.0) | Probabilità di aumento dei dati Mosaic, che combina quattro immagini in un unico campione di addestramento. |
mixup | tune.uniform(0.0, 1.0) | Probabilità di aumento dei dati MixUp, che fonde due immagini e le relative etichette. |
cutmix | tune.uniform(0.0, 1.0) | Probabilità di aumento dei dati CutMix, che combina regioni delle immagini mantenendo le caratteristiche locali. |
copy_paste | tune.uniform(0.0, 1.0) | In modalità flip, la frazione degli oggetti idonei copiata in un'immagine; in modalità mixup, anche la probabilità di eseguire l'operazione. |
close_mosaic | tune.randint(0, 11) | Disattiva Mosaic nelle ultime N epoche per stabilizzare l'addestramento prima del suo completamento. |
Esempio di spazio di ricerca personalizzato#
In questo esempio mostriamo come usare uno spazio di ricerca personalizzato per ottimizzare gli iperparametri con Ray Tune e YOLO26. Specificando uno spazio di ricerca personalizzato, puoi concentrare l'ottimizzazione sugli iperparametri che ti interessano.
from ray import tune
from ultralytics import YOLO
# Definisci un modello YOLO
model = YOLO("yolo26n.pt")
# Esegui Ray Tune sul modello
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-2)},
epochs=50,
use_ray=True,
)Nel frammento di codice qui sopra creiamo un modello YOLO con i pesi preaddestrati "yolo26n.pt". Poi chiamiamo il metodo tune(), specificando la configurazione del dataset con "coco8.yaml". Definiamo uno spazio di ricerca personalizzato per il tasso di apprendimento iniziale lr0 usando un dizionario con la chiave "lr0" e il valore tune.uniform(1e-5, 1e-2). Infine, passiamo al metodo tune altri argomenti di addestramento, come il numero di epoche, tramite epochs=50.
Esempio di algoritmo di ricerca#
Puoi selezionare una strategia di ricerca di Ray Tune specificandone il nome. Per gli algoritmi di ricerca specificati come stringhe, Ultralytics usa automaticamente la metrica di ottimizzazione predefinita dell'attività corrente e mode="max". Se search_alg non viene specificato, Ultralytics usa TPE multivariato di Optuna con suggerimenti che tengono conto del parallelismo.
from ultralytics import YOLO
# Definisci un modello YOLO
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 sovrascriverne la metrica e la modalità di ottimizzazione, passa un oggetto searcher di Ray Tune già istanziato invece di una stringa.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Definisci un modello YOLO
model = YOLO("yolo26n.pt")
# Definisci un 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,
)Riprendere una sessione di ottimizzazione degli iperparametri interrotta con Ray Tune#
Puoi riprendere una sessione di Ray Tune interrotta passando resume=True. Facoltativamente, puoi passare la directory name usata da Ray Tune in runs/{task} per riprendere la sessione. In caso contrario, verrà ripresa l'ultima sessione interrotta. Non devi fornire di nuovo iterations e space, ma devi passare nuovamente gli altri argomenti di addestramento, inclusi data e epochs.
from ultralytics import YOLO
# Definisci un modello YOLO
model = YOLO("yolo26n.pt")
# Riprendi l'esecuzione precedente
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Riprendi l'esecuzione di Ray Tune con il nome '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 analizzare i risultati ottenuti in vari modi. Questa guida illustra i flussi di lavoro più 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 oppure nella directory name che hai specificato. Per caricare i risultati dopo la chiusura dello script originale, riprendi la sessione: così verranno ripristinate le prove salvate e verrà restituito 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 dei risultati 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ù di recente.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Creazione di un grafico dell'intera cronologia delle metriche riportate per una prova#
Puoi tracciare la cronologia delle metriche riportate per ciascuna prova e osservare come sono cambiate 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 più comuni per analizzare i risultati degli esperimenti eseguiti con Ray Tune tramite Ultralytics. I passaggi principali consistono nel caricare i risultati dell'esperimento da una directory, eseguire analisi di base a livello di esperimento e di prova e tracciare le metriche.
Per approfondire, consulta la pagina della documentazione di Ray Tune Analizzare i risultati e sfrutta al meglio i tuoi esperimenti di ottimizzazione degli iperparametri.
Domande frequenti#
Per ottimizzare gli iperparametri del tuo modello Ultralytics YOLO26 con 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 tuo modello YOLO26 e avvia l'ottimizzazione:
from ultralytics import YOLO # Carica un modello YOLO26 model = YOLO("yolo26n.pt") # Avvia l'ottimizzazione con il dataset COCO8 result_grid = model.tune(data="coco8.yaml", use_ray=True)
Questa procedura sfrutta le strategie di ricerca avanzate e il parallelismo di Ray Tune per ottimizzare in modo efficiente gli iperparametri del tuo modello. Per ulteriori informazioni, consulta la documentazione di Ray Tune.
-
Ultralytics YOLO26 usa 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 loss dei riquadri clstune.uniform(0.1, 4.0)Peso della loss delle classi cls_pwtune.uniform(0.0, 1.0)Potenza di ponderazione delle classi dfltune.uniform(0.4, 12.0)Peso della loss della distanza dei riquadri hsv_htune.uniform(0.0, 0.1)Intervallo di aumento dei dati relativo alla tonalità translatetune.uniform(0.0, 0.9)Intervallo di aumento dei dati relativo alla traslazione Puoi personalizzare questi iperparametri in base alle tue esigenze specifiche. Per l'elenco completo e ulteriori dettagli, consulta la guida all'ottimizzazione degli iperparametri.
Per integrare Weights & Biases (W&B) nel processo di ottimizzazione di Ultralytics YOLO26:
-
Installa W&B:
pip install wandb wandb login yolo settings wandb=True -
Esegui il tuner:
from ultralytics import YOLO # Carica il modello YOLO model = YOLO("yolo26n.pt") # Ogni trial Ray crea una propria esecuzione W&B in questo progetto 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ù trial, accelerando notevolmente il processo di ottimizzazione.
- Arresto anticipato: impiega strategie come ASHA per terminare in anticipo i trial con prestazioni insufficienti, risparmiando risorse di calcolo.
Ray Tune si integra perfettamente con Ultralytics YOLO26, offrendo un'interfaccia facile da usare per ottimizzare efficacemente gli iperparametri. Per iniziare, consulta la guida Ottimizzazione degli iperparametri.
Per definire uno spazio di ricerca personalizzato per ottimizzare gli 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)In questo modo personalizzi 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.