Sintonizzazione efficiente degli iperparametri con Ray Tune e YOLO11
La messa a punto degli iperparametri è fondamentale per ottenere le massime prestazioni del modello, scoprendo l'insieme ottimale di iperparametri. Ciò comporta l'esecuzione di prove con diversi iperparametri e la valutazione delle prestazioni di ciascuna prova.
Accelerare la messa a punto con Ultralytics YOLO11 e Ray Tune
Ultralytics YOLO11 incorpora Ray Tune per la regolazione degli iperparametri, semplificando l'ottimizzazione degli iperparametri del modello YOLO11 . Con Ray Tune è possibile utilizzare strategie di ricerca avanzate, il parallelismo e l'arresto anticipato per accelerare il processo di messa a punto.
Ray Tune
Ray Tune è una libreria per la regolazione degli iperparametri progettata per garantire efficienza e flessibilità. Supporta diverse strategie di ricerca, parallelismo e strategie di arresto anticipato e si integra perfettamente con i più diffusi framework di apprendimento automatico, tra cui Ultralytics YOLO11 .
Integrazione con Weights & Biases
YOLO11 consente anche l'integrazione opzionale con Weights & Biases per il monitoraggio del processo di messa a punto.
Installazione
Per installare i pacchetti richiesti, eseguire:
Installazione
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandb
Utilizzo
Utilizzo
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()
Parametri del metodo
Il tune()
di YOLO11 fornisce un'interfaccia facile da usare per la sintonizzazione degli iperparametri con Ray Tune. Accetta diversi argomenti che consentono di personalizzare il processo di sintonizzazione. Di seguito è riportata una spiegazione dettagliata di ciascun parametro:
Parametro | Tipo | Descrizione | Valore predefinito |
---|---|---|---|
data |
str |
Il file di configurazione del set di dati (in formato YAML) su cui eseguire il sintonizzatore. Questo file deve specificare i percorsi dei dati di addestramento e di validazione, oltre ad altre impostazioni specifiche del set di dati. | |
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 la sintonizzazione. Se non viene fornito, YOLO11 utilizza uno spazio di ricerca predefinito con vari iperparametri. | |
grace_period |
int, optional |
Il periodo di grazia 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 avere un minimo di addestramento prima di prendere una decisione sull'arresto anticipato. | 10 |
gpu_per_trial |
int, optional |
Il numero di GPU da allocare per prova durante la messa a punto. Questo aiuta a gestire l'uso di GPU , in particolare negli ambienti multiGPU . Se non viene fornito, il sintonizzatore utilizzerà tutte le GPU disponibili. | None |
iterations |
int, optional |
Numero massimo di prove da eseguire durante la sintonizzazione. Questo parametro aiuta a controllare il numero totale di combinazioni di iperparametri testate, assicurando che il processo di sintonizzazione non si svolga all'infinito. | 10 |
**train_args |
dict, optional |
Argomenti aggiuntivi da passare al metodo train() durante la sintonizzazione. Questi argomenti possono includere impostazioni come il numero di epoche di addestramento, Dimensione del lottoe altre configurazioni specifiche per la formazione. |
{} |
Personalizzando questi parametri, è possibile regolare con precisione il processo di ottimizzazione degli iperparametri in base alle proprie esigenze specifiche e alle risorse computazionali disponibili.
Spazio di ricerca predefinito Descrizione
La tabella seguente elenca i parametri predefiniti dello spazio di ricerca per la regolazione degli iperparametri in YOLO11 con Ray Tune. Ogni parametro ha un intervallo di valori specifico definito da tune.uniform()
.
Parametro | Gamma | Descrizione |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Learning rate iniziale che controlla la dimensione del passo durante l'ottimizzazione. Valori più alti accelerano l'addestramento ma possono causare instabilità. |
lrf |
tune.uniform(0.01, 1.0) |
Fattore finale del tasso di apprendimento che determina di quanto diminuisce il tasso di apprendimento alla fine dell'addestramento. |
momentum |
tune.uniform(0.6, 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 valori di peso elevati. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Numero di epoche con aumento graduale del learning rate per stabilizzare l'addestramento iniziale. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Valore di momentum iniziale che aumenta gradualmente durante il periodo di warmup. |
box |
tune.uniform(0.02, 0.2) |
Peso per la componente di perdita del bounding box, che bilancia l'accuratezza della localizzazione nel modello. |
cls |
tune.uniform(0.2, 4.0) |
Peso per la componente di perdita della classificazione, che bilancia l'accuratezza della previsione della classe nel modello. |
hsv_h |
tune.uniform(0.0, 0.1) |
Intervallo di aumento della tonalità che introduce variabilità del colore per aiutare il modello a generalizzare. |
hsv_s |
tune.uniform(0.0, 0.9) |
Intervallo di aumento della saturazione che varia l'intensità del colore per migliorare la robustezza. |
hsv_v |
tune.uniform(0.0, 0.9) |
Intervallo di aumento del valore (luminosità) che aiuta il modello a funzionare in varie condizioni di illuminazione. |
degrees |
tune.uniform(0.0, 45.0) |
Intervallo di aumento della rotazione in gradi, migliorando il riconoscimento di oggetti ruotati. |
translate |
tune.uniform(0.0, 0.9) |
Intervallo di aumento della traslazione che sposta le immagini orizzontalmente e verticalmente. |
scale |
tune.uniform(0.0, 0.9) |
Intervallo di aumento della scala che simula oggetti a distanze diverse. |
shear |
tune.uniform(0.0, 10.0) |
Intervallo di aumento del cisalgiamento in gradi, che simula spostamenti di prospettiva. |
perspective |
tune.uniform(0.0, 0.001) |
Intervallo di aumento della prospettiva che simula cambiamenti del punto di vista 3D. |
flipud |
tune.uniform(0.0, 1.0) |
Probabilità di aumento del flip verticale, aumentando la diversità del dataset. |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilità di aumento tramite inversione orizzontale, utile per oggetti simmetrici. |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilità di aumento del mosaico che combina quattro immagini in un unico campione di addestramento. |
mixup |
tune.uniform(0.0, 1.0) |
Probabilità di aumento Mixup che fonde due immagini e le loro etichette insieme. |
cutmix |
tune.uniform(0.0, 1.0) |
Probabilità di aumento Cutmix che combina regioni di immagini mantenendo le caratteristiche locali, migliorando il rilevamento di oggetti parzialmente occlusi. |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilità di aumento della copia-incolla che trasferisce oggetti tra le immagini per aumentare la diversità delle istanze. |
Esempio di spazio di ricerca personalizzato
In questo esempio, dimostriamo come utilizzare uno spazio di ricerca personalizzato per la regolazione degli iperparametri con Ray Tune e YOLO11. Fornendo uno spazio di ricerca personalizzato, è possibile concentrare il processo di regolazione su specifici iperparametri di interesse.
Utilizzo
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,
)
Nel frammento di codice qui sopra, creiamo un modello YOLO con i pesi preaddestrati "yolo11n.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-1)
. Infine, passiamo ulteriori argomenti di addestramento, come il numero di epoche, direttamente al metodo tune come epochs=50
.
Ripresa di una sessione di ottimizzazione degli iperparametri interrotta con Ray Tune
Puoi riprendere una sessione di Ray Tune interrotta passando resume=True
. Puoi facoltativamente passare la directory name
utilizzato da Ray Tune in runs/{task}
per riprendere. Altrimenti, riprenderebbe l'ultima sessione interrotta. Non è necessario fornire il iterations
e space
di nuovo, ma è necessario fornire nuovamente il resto degli argomenti di addestramento, inclusi data
e epochs
.
Utilizzo resume=True
con 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)
Elaborazione dei risultati della sintonizzazione dei raggi
Dopo aver eseguito un esperimento di regolazione dell'iperparametro con Ray Tune, è possibile che si vogliano eseguire varie analisi sui risultati ottenuti. Questa guida illustra i flussi di lavoro più comuni per l'elaborazione e l'analisi di questi risultati.
Caricamento dei risultati dell'esperimento Tune da una directory
Dopo aver eseguito l'esperimento di sintonizzazione con tuner.fit()
è possibile caricare i risultati da una directory. Questo è utile soprattutto se si esegue l'analisi dopo che lo script di addestramento iniziale è uscito.
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()
Analisi di base a livello di esperimento
Ottenere una panoramica dell'andamento delle prove. È possibile verificare rapidamente se ci sono stati errori durante le prove.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")
Analisi di base a livello di processo
Accedere alle configurazioni degli iperparametri delle singole prove e alle ultime metriche riportate.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Tracciare l'intera storia delle metriche segnalate per una sperimentazione
È possibile tracciare la storia delle metriche riportate per ogni studio per vedere come si sono evolute le metriche nel tempo.
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()
Sintesi
In questa documentazione abbiamo illustrato i flussi di lavoro comuni per analizzare i risultati degli esperimenti eseguiti con Ray Tune utilizzando Ultralytics. I passaggi chiave includono il caricamento dei risultati dell'esperimento da una directory, l'esecuzione di analisi di base a livello di esperimento e di prova e il grafico delle metriche.
Per ottenere il massimo dai vostri esperimenti di messa a punto degli iperparametri, consultate la pagina dei documenti di Ray Tune dedicata all'analisi dei risultati.
FAQ
Come si sintonizzano gli iperparametri del modello YOLO11 utilizzando Ray Tune?
Per sintonizzare gli iperparametri del modello Ultralytics YOLO11 utilizzando Ray Tune, procedere come segue:
-
Installare i pacchetti necessari:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Caricare il modello YOLO11 e iniziare la messa a punto:
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)
Utilizza le strategie di ricerca avanzate e il parallelismo di Ray Tune per ottimizzare in modo efficiente gli iperparametri del modello. Per ulteriori informazioni, consultare la documentazione di Ray Tune.
Quali sono gli iperparametri predefiniti per la sintonizzazione di YOLO11 con Ray Tune?
Ultralytics YOLO11 utilizza i seguenti iperparametri predefiniti per la sintonizzazione con Ray Tune:
Parametro | Intervallo di valori | Descrizione |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Tasso di apprendimento iniziale |
lrf |
tune.uniform(0.01, 1.0) |
Fattore di apprendimento finale |
momentum |
tune.uniform(0.6, 0.98) |
Momento |
weight_decay |
tune.uniform(0.0, 0.001) |
Decadimento del peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Epoche di riscaldamento |
box |
tune.uniform(0.02, 0.2) |
Box perdita di peso |
cls |
tune.uniform(0.2, 4.0) |
Perdita di peso della classe |
hsv_h |
tune.uniform(0.0, 0.1) |
Gamma di aumento della tonalità |
translate |
tune.uniform(0.0, 0.9) |
Gamma di aumento della traduzione |
Questi iperparametri possono essere personalizzati per soddisfare le vostre esigenze specifiche. Per un elenco completo e maggiori dettagli, consultare la guida alla regolazione degli iperparametri.
Come posso integrare Weights & Biases con la messa a punto del modello YOLO11 ?
Per integrare Weights & Biases (W&B) con il processo di messa a punto di Ultralytics YOLO11 :
-
Installare W&B:
pip install wandb
-
Modificare lo script di sintonizzazione:
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)
Questa impostazione consente di monitorare il processo di messa a punto, di tenere traccia delle configurazioni degli iperparametri e di visualizzare i risultati in W&B.
Perché utilizzare Ray Tune per l'ottimizzazione degli iperparametri con YOLO11?
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 in modo significativo il processo di messa a punto.
- Arresto precoce: Utilizza strategie come ASHA per terminare precocemente le prove con prestazioni insufficienti, risparmiando risorse computazionali.
Ray Tune si integra perfettamente con Ultralytics YOLO11, fornendo un'interfaccia facile da usare per la regolazione efficace degli iperparametri. Per iniziare, consulta la guida all'ottimizzazione degli iperparametri.
Come posso definire uno spazio di ricerca personalizzato per la regolazione degli iperparametri di YOLO11 ?
Per definire uno spazio di ricerca personalizzato per la sintonizzazione degli iperparametri di YOLO11 con 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)
In questo modo si personalizza la gamma di iperparametri, come il tasso di apprendimento iniziale e la quantità di moto, da esplorare durante il processo di sintonizzazione. Per configurazioni avanzate, consultare la sezione Esempio di spazio di ricerca personalizzato.