Sintonizzazione efficiente degli iperparametri con Ray Tune e YOLOv8
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.
Accelera la messa a punto con Ultralytics YOLOv8 e Ray Tune
Ultralytics YOLOv8 incorpora Ray Tune per la regolazione degli iperparametri, semplificando l'ottimizzazione degli iperparametri del modello YOLOv8 . Con Ray Tune puoi 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 YOLOv8 .
Integrazione con Weights & Biases
YOLOv8 consente anche l'integrazione opzionale con Weights & Biases per monitorare il processo di messa a punto.
Installazione
Per installare i pacchetti necessari, esegui:
Installazione
Utilizzo
Utilizzo
tune()
Parametri del metodo
Il tune()
di YOLOv8 fornisce un'interfaccia facile da usare per la sintonizzazione degli iperparametri con Ray Tune. Accetta diversi argomenti che ti permettono di personalizzare il processo di sintonizzazione. Di seguito trovi una spiegazione dettagliata di ogni parametro:
Parametro | Tipo | Descrizione | Valore predefinito |
---|---|---|---|
data |
str |
Il file di configurazione del dataset (in formato YAML) su cui eseguire il sintonizzatore. Questo file deve specificare i percorsi dei dati di addestramento e di convalida, 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, YOLOv8 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'utilizzo della GPU, in particolare negli ambienti multi-GPU. Se non viene fornito, il tuner utilizzerà tutte le GPU disponibili. | Nessuno |
iterations |
int, optional |
Il numero massimo di prove da eseguire durante la sintonizzazione. Questo parametro aiuta a controllare il numero totale di combinazioni di iperparametri testati, 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 messa a punto. Questi argomenti possono includere impostazioni come il numero di epoche di addestramento, la dimensione del batch e altre configurazioni specifiche per l'addestramento. |
{} |
Personalizzando questi parametri, puoi mettere a punto il processo di ottimizzazione degli iperparametri in base alle tue esigenze specifiche e alle risorse computazionali disponibili.
Spazio di ricerca predefinito Descrizione
La seguente tabella elenca i parametri predefiniti dello spazio di ricerca per la regolazione degli iperparametri in YOLOv8 con Ray Tune. Ogni parametro ha uno specifico intervallo di valori definito da tune.uniform()
.
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) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Decadimento del peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Epoche di riscaldamento |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Momento 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à |
hsv_s |
tune.uniform(0.0, 0.9) |
Intervallo di aumento della saturazione |
hsv_v |
tune.uniform(0.0, 0.9) |
Valore (luminosità ) intervallo di incremento |
degrees |
tune.uniform(0.0, 45.0) |
Intervallo di aumento della rotazione (gradi) |
translate |
tune.uniform(0.0, 0.9) |
Gamma di aumento della traduzione |
scale |
tune.uniform(0.0, 0.9) |
Intervallo di aumento della scala |
shear |
tune.uniform(0.0, 10.0) |
Intervallo di aumento del taglio (gradi) |
perspective |
tune.uniform(0.0, 0.001) |
Gamma di aumento della prospettiva |
flipud |
tune.uniform(0.0, 1.0) |
Probabilità di aumento del flip verticale |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilità di aumento del flip orizzontale |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilità di aumento del mosaico |
mixup |
tune.uniform(0.0, 1.0) |
Probabilità di aumento del mixup |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilità di aumento copia-incolla |
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 YOLOv8. Fornendo uno spazio di ricerca personalizzato, puoi concentrare il processo di regolazione su specifici iperparametri di interesse.
Utilizzo
Nel frammento di codice qui sopra, creiamo un modello YOLO con i pesi preaddestrati "yolov8n.pt". Poi, 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
.
Elaborazione dei risultati di Ray Tune
Dopo aver eseguito un esperimento di regolazione dell'iperparametro con Ray Tune, potresti voler eseguire diverse analisi sui risultati ottenuti. Questa guida ti illustrerà i flussi di lavoro più comuni per l'elaborazione e l'analisi di questi risultati.
Caricare i risultati dell'esperimento Tune da una directory
Dopo aver eseguito l'esperimento di sintonizzazione con tuner.fit()
puoi caricare i risultati da una directory. Questo è utile soprattutto se stai eseguendo l'analisi dopo che lo script di formazione 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
Ottieni una panoramica sull'andamento delle prove. Puoi verificare rapidamente se ci sono stati errori durante le prove.
Analisi di base a livello di processo
Accedi 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 riportate per una sperimentazione
Puoi 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 result in 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()
Sommario
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.
Approfondisci l'argomento consultando la pagina dei documenti di Ray Tune dedicata all'analisi dei risultati per ottenere il massimo dai tuoi esperimenti di regolazione degli iperparametri.