Vai al contenuto

Ottimizzazione efficiente degli iperparametri con Ray Tune e YOLO11

La messa a punto degli iperparametri è fondamentale per ottenere le massime prestazioni del modello, scoprendo il set ottimale di iperparametri. Ciò comporta l'esecuzione di prove con diversi iperparametri e la valutazione delle prestazioni di ciascuna prova.

Accelerare il tuning con Ultralytics YOLO11 e Ray Tune

Ultralytics YOLO11 incorpora Ray Tune per la messa a punto degli iperparametri, semplificando l'ottimizzazione degli iperparametri del modello YOLO11. Con Ray Tune, puoi utilizzare strategie di ricerca avanzate, parallelismo e arresto anticipato per accelerare il processo di ottimizzazione.

Ray Tune

Panoramica di Ray Tune

Ray Tune è una libreria di ottimizzazione degli iperparametri progettata per l'efficienza e la flessibilità. Supporta varie strategie di ricerca, parallelismo e strategie di early stopping e si integra perfettamente con i framework di machine learning più diffusi, tra cui Ultralytics YOLO11.

Integrazione con Weights & Biases

YOLO11 consente anche l'integrazione opzionale con Weights & Biases per il monitoraggio del processo di ottimizzazione.

Installazione

Per installare i pacchetti richiesti, esegui:

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() method in YOLO11 fornisce un'interfaccia facile da usare per la messa a punto degli iperparametri con Ray Tune. Accetta diversi argomenti che consentono di personalizzare il processo di messa a punto. Di seguito è riportata una spiegazione dettagliata di ciascun parametro:

ParametroTipoDescrizioneValore predefinito
datastrIl file di configurazione del dataset (in formato YAML) per eseguire il tuner. Questo file deve specificare i percorsi dei dati di addestramento e convalida, nonché altre impostazioni specifiche del dataset.
spacedict, optionalUn dizionario che definisce lo spazio di ricerca degli iperparametri per Ray Tune. Ogni chiave corrisponde a un nome di iperparametro e il valore specifica l'intervallo di valori da esplorare durante l'ottimizzazione. Se non fornito, YOLO11 utilizza uno spazio di ricerca predefinito con vari iperparametri.
grace_periodint, optionalIl 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 avere un addestramento minimo prima di prendere una decisione sull'arresto anticipato.10
gpu_per_trialint, optionalIl numero di GPU da allocare per prova durante la messa a punto. Questo aiuta a gestire l'utilizzo della GPU, in particolare in ambienti multi-GPU. Se non fornito, il sintonizzatore utilizzerà tutte le GPU disponibili.None
iterationsint, optionalIl numero massimo di tentativi da eseguire durante la messa a punto. Questo parametro aiuta a controllare il numero totale di combinazioni di iperparametri testate, assicurando che il processo di messa a punto non venga eseguito indefinitamente.10
**train_argsdict, optionalArgomenti aggiuntivi da passare al train() method durante la messa a punto. Questi argomenti possono includere impostazioni come il numero di epoche di addestramento, dimensione del batch, e altre configurazioni specifiche per l'addestramento.{}

Personalizzando questi parametri, è possibile ottimizzare il processo di ottimizzazione degli iperparametri per adattarlo alle proprie esigenze specifiche e alle risorse di calcolo disponibili.

Descrizione dello spazio di ricerca predefinito

La seguente tabella elenca i parametri predefiniti dello spazio di ricerca per la messa a punto degli iperparametri in YOLO11 con Ray Tune. Ogni parametro ha un intervallo di valori specifico definito da tune.uniform().

ParametroIntervalloDescrizione
lr0tune.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à.
lrftune.uniform(0.01, 1.0)Fattore finale del tasso di apprendimento che determina di quanto diminuisce il tasso di apprendimento alla fine dell'addestramento.
momentumtune.uniform(0.6, 0.98)Fattore di momentum per l'ottimizzatore che aiuta ad accelerare l'addestramento e a superare i minimi locali.
weight_decaytune.uniform(0.0, 0.001)Parametro di regolarizzazione che previene l'overfitting penalizzando valori di peso elevati.
warmup_epochstune.uniform(0.0, 5.0)Numero di epoche con aumento graduale del learning rate per stabilizzare l'addestramento iniziale.
warmup_momentumtune.uniform(0.0, 0.95)Valore di momentum iniziale che aumenta gradualmente durante il periodo di warmup.
boxtune.uniform(0.02, 0.2)Peso per la componente di perdita del bounding box, che bilancia l'accuratezza della localizzazione nel modello.
clstune.uniform(0.2, 4.0)Peso per la componente di perdita della classificazione, che bilancia l'accuratezza della previsione della classe nel modello.
hsv_htune.uniform(0.0, 0.1)Intervallo di aumento della tonalità che introduce variabilità del colore per aiutare il modello a generalizzare.
hsv_stune.uniform(0.0, 0.9)Intervallo di aumento della saturazione che varia l'intensità del colore per migliorare la robustezza.
hsv_vtune.uniform(0.0, 0.9)Intervallo di aumento del valore (luminosità) che aiuta il modello a funzionare in varie condizioni di illuminazione.
degreestune.uniform(0.0, 45.0)Intervallo di aumento della rotazione in gradi, migliorando il riconoscimento di oggetti ruotati.
translatetune.uniform(0.0, 0.9)Intervallo di aumento della traslazione che sposta le immagini orizzontalmente e verticalmente.
scaletune.uniform(0.0, 0.9)Intervallo di aumento della scala che simula oggetti a distanze diverse.
sheartune.uniform(0.0, 10.0)Intervallo di aumento del cisalgiamento in gradi, che simula spostamenti di prospettiva.
perspectivetune.uniform(0.0, 0.001)Intervallo di aumento della prospettiva che simula cambiamenti del punto di vista 3D.
flipudtune.uniform(0.0, 1.0)Probabilità di aumento del flip verticale, aumentando la diversità del dataset.
fliplrtune.uniform(0.0, 1.0)Probabilità di aumento tramite inversione orizzontale, utile per oggetti simmetrici.
mosaictune.uniform(0.0, 1.0)Probabilità di aumento del mosaico che combina quattro immagini in un unico campione di addestramento.
mixuptune.uniform(0.0, 1.0)Probabilità di aumento Mixup che fonde due immagini e le loro etichette insieme.
cutmixtune.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_pastetune.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, mostriamo come utilizzare uno spazio di ricerca personalizzato per la messa a punto degli iperparametri con Ray Tune e YOLO11. Fornendo uno spazio di ricerca personalizzato, puoi concentrare il processo di ottimizzazione 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,
)

Nello snippet di codice sopra, creiamo un modello YOLO con i pesi pre-addestrati "yolo11n.pt". Quindi, chiamiamo il tune() metodo, specificando la configurazione del dataset con "coco8.yaml". Forniamo uno spazio di ricerca personalizzato per il learning rate iniziale lr0 utilizzando un dizionario con la chiave "lr0" e il valore tune.uniform(1e-5, 1e-1). Infine, passiamo argomenti di addestramento aggiuntivi, come il numero di epoche direttamente al metodo di ottimizzazione 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.

L'utilizzo di 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 di Ray Tune

Dopo aver eseguito un esperimento di ottimizzazione degli iperparametri con Ray Tune, potresti voler eseguire varie analisi sui risultati ottenuti. Questa guida ti illustrerà i flussi di lavoro comuni per l'elaborazione e l'analisi di questi risultati.

Caricamento dei risultati dell'esperimento di ottimizzazione da una directory

Dopo aver eseguito l'esperimento di tuning con tuner.fit(), puoi caricare i risultati da una directory. Ciò è utile, soprattutto se si esegue l'analisi dopo che lo script di training iniziale è terminato.

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 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 singole configurazioni degli iperparametri di prova e alle ultime metriche riportate.

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 segnalate per una prova

È possibile tracciare la cronologia delle metriche riportate per ogni prova per vedere come le metriche 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["mean_accuracy"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
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. Le fasi principali comprendono il caricamento dei risultati degli esperimenti da una directory, l'esecuzione di analisi di base a livello di esperimento e di prova e il grafico delle metriche.

Approfondisci consultando la pagina della documentazione di Ray Tune sull'Analisi dei risultati per ottenere il massimo dai tuoi esperimenti di ottimizzazione degli iperparametri.

FAQ

Come posso ottimizzare gli iperparametri del mio modello YOLO11 usando Ray Tune?

Per ottimizzare gli iperparametri del tuo modello Ultralytics YOLO11 utilizzando Ray Tune, segui questi passaggi:

  1. Installa i pacchetti necessari:

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
    
  2. Carica il tuo modello YOLO11 e inizia a ottimizzarlo:

    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)
    

Questo utilizza le strategie di ricerca avanzate e il parallelismo di Ray Tune per ottimizzare in modo efficiente gli iperparametri del tuo modello. Per maggiori informazioni, consulta la documentazione di Ray Tune.

Quali sono gli iperparametri predefiniti per la messa a punto di YOLO11 con Ray Tune?

Ultralytics YOLO11 utilizza i seguenti iperparametri predefiniti per la messa a punto con Ray Tune:

ParametroIntervallo di valoriDescrizione
lr0tune.uniform(1e-5, 1e-1)Tasso di apprendimento iniziale
lrftune.uniform(0.01, 1.0)Fattore finale del learning rate
momentumtune.uniform(0.6, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Weight decay
warmup_epochstune.uniform(0.0, 5.0)Epoche di Warmup
boxtune.uniform(0.02, 0.2)Peso della loss del riquadro
clstune.uniform(0.2, 4.0)Peso della loss di classe
hsv_htune.uniform(0.0, 0.1)Intervallo di aumento della tonalità
translatetune.uniform(0.0, 0.9)Intervallo di aumento della traslazione

Questi iperparametri possono essere personalizzati per soddisfare le tue esigenze specifiche. Per un elenco completo e maggiori dettagli, consulta la guida all'Ottimizzazione degli iperparametri.

Come posso integrare Weights & Biases con la messa a punto del mio modello YOLO11?

Per integrare Weights & Biases (W&B) con il processo di ottimizzazione di Ultralytics YOLO11:

  1. Installa W&B:

    pip install wandb
    
  2. Modifica il tuo script di ottimizzazione:

    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 configurazione ti consentirà di monitorare il processo di ottimizzazione, tenere traccia delle configurazioni degli iperparametri e visualizzare i risultati in W&B.

Perché dovrei usare 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 significativamente il processo di ottimizzazione.
  • Early Stopping: Impiega strategie come ASHA per terminare anticipatamente 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 messa a punto degli iperparametri di YOLO11?

Per definire uno spazio di ricerca personalizzato per l'ottimizzazione 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)

Questo personalizza l'intervallo di iperparametri come il tasso di apprendimento iniziale e il momentum da esplorare durante il processo di ottimizzazione. Per configurazioni avanzate, fare riferimento alla sezione Esempio di spazio di ricerca personalizzato.



📅C reato 2 anni fa ✏️ Aggiornato 5 giorni fa
glenn-jocherY-T-GUltralyticsAssistantartzurosMatthewNoyceRizwanMunawarmfloto

Commenti