Vai al contenuto

Sintonizzazione efficiente degli iperparametri con Ray Tune e YOLOv8

L'ottimizzazione degli iperparametri è fondamentale per ottenere le massime prestazioni del modello individuando il set ottimale di iperparametri. Ciò comporta l'esecuzione di prove con iperparametri diversi 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

Panoramica di 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

# 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 YOLOv8n model
model = YOLO("yolov8n.pt")

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

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'uso di GPU , in particolare in ambienti multiGPU . 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

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.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 "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.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

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.

DOMANDE FREQUENTI

Come faccio a sintonizzare gli iperparametri del mio modello YOLOv8 utilizzando Ray Tune?

Per sintonizzare gli iperparametri del tuo modello Ultralytics YOLOv8 utilizzando Ray Tune, segui i seguenti passaggi:

  1. Installa i pacchetti necessari:

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

    from ultralytics import YOLO
    
    # Load a YOLOv8 model
    model = YOLO("yolov8n.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 tuo modello. Per maggiori informazioni, consulta la documentazione di Ray Tune.

Quali sono gli iperparametri predefiniti per la sintonizzazione di YOLOv8 con Ray Tune?

Ultralytics YOLOv8 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) Momentum
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 in base alle tue esigenze specifiche. Per un elenco completo e maggiori dettagli, consulta la guida alla regolazione degli iperparametri.

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

Per integrare Weights & Biases (W&B) con il processo di messa a punto di Ultralytics YOLOv8 :

  1. Installa W&B:

    pip install wandb
    
  2. Modifica lo script di sintonizzazione:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolov8n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

Questa configurazione ti permetterà di monitorare il processo di messa a punto, di tenere traccia delle configurazioni degli iperparametri e di visualizzare i risultati in W&B.

Perché dovrei usare Ray Tune per l'ottimizzazione degli iperparametri con YOLOv8?

Ray Tune offre numerosi vantaggi per l'ottimizzazione degli iperparametri:

  • Strategie di ricerca avanzate: Utilizza algoritmi come l'Ottimizzazione Bayesiana e l'HyperOpt per una ricerca efficiente dei parametri.
  • Parallelismo: Supporta l'esecuzione parallela di più prove, velocizzando notevolmente il processo di messa a punto.
  • Arresto precoce: Utilizza strategie come ASHA per terminare precocemente le prove che non funzionano bene, risparmiando risorse computazionali.

Ray Tune si integra perfettamente con Ultralytics YOLOv8 , fornendo un'interfaccia facile da usare per regolare efficacemente gli iperparametri. Per iniziare, consulta la guida Efficient Hyperparameter Tuning with Ray Tune and YOLOv8.

Come posso definire uno spazio di ricerca personalizzato per la regolazione degli iperparametri di YOLOv8 ?

Per definire uno spazio di ricerca personalizzato per la regolazione degli iperparametri di YOLOv8 con Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolov8n.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 il momento, da esplorare durante il processo di sintonizzazione. Per configurazioni avanzate, consulta la sezione Esempio di spazio di ricerca personalizzato.



Creato 2023-11-12, Aggiornato 2024-07-05
Autori: glenn-jocher (10)

Commenti