Guida all'ottimizzazione degli iperparametri di Ultralytics YOLO
Introduzione
L'ottimizzazione degli iperparametri non è solo una configurazione una tantum, ma un processo iterativo volto a ottimizzare le metriche di performance del modello di machine learning, come accuratezza, precisione e richiamo. Nel contesto di Ultralytics YOLO, questi iperparametri potrebbero variare dal tasso di apprendimento ai dettagli architetturali, come il numero di livelli o i tipi di funzioni di attivazione utilizzate.
Guarda: Come ottimizzare gli iperparametri per migliorare le prestazioni del modello 🚀
Cosa sono gli iperparametri?
Gli iperparametri sono impostazioni strutturali di alto livello per l'algoritmo. Vengono impostati prima della fase di addestramento e rimangono costanti durante la stessa. Ecco alcuni iperparametri comunemente ottimizzati in Ultralytics YOLO:
- Tasso di apprendimento
lr0
: Determina la dimensione del passo ad ogni iterazione mentre ci si sposta verso un minimo nella funzione di perdita. - Dimensione Batch
batch
: Numero di immagini elaborate simultaneamente in un passaggio in avanti. - Numero di Epoche
epochs
: Un'epoca è un passaggio completo in avanti e indietro di tutti gli esempi di training. - Specifiche dell'Architettura: Come il numero di canali, il numero di livelli, i tipi di funzioni di attivazione, ecc.
Per un elenco completo degli iperparametri di aumento dati utilizzati in YOLO11, consultare la pagina delle configurazioni.
Evoluzione e mutazione genetica
Ultralytics YOLO utilizza algoritmi genetici per ottimizzare gli iperparametri. Gli algoritmi genetici si ispirano al meccanismo della selezione naturale e della genetica.
- Mutazione: Nel contesto di Ultralytics YOLO, la mutazione aiuta a cercare localmente lo spazio degli iperparametri applicando piccole modifiche casuali agli iperparametri esistenti, producendo nuovi candidati per la valutazione.
- Crossover: Sebbene il crossover sia una tecnica popolare degli algoritmi genetici, attualmente non viene utilizzata in Ultralytics YOLO per la messa a punto degli iperparametri. L'attenzione si concentra principalmente sulla mutazione per la generazione di nuovi set di iperparametri.
Prepararsi per la messa a punto degli iperparametri
Prima di iniziare il processo di ottimizzazione, è importante:
- Identificare le Metriche: Determinare le metriche che verranno utilizzate per valutare le prestazioni del modello. Potrebbe trattarsi di AP50, F1-score o altro.
- Impostare il Budget di Ottimizzazione: Definire quante risorse computazionali si è disposti ad allocare. L'ottimizzazione degli iperparametri può essere computazionalmente intensiva.
Passaggi coinvolti
Inizializza gli iperparametri
Inizia con un set ragionevole di iperparametri iniziali. Potrebbe trattarsi degli iperparametri predefiniti impostati da Ultralytics YOLO o di qualcosa basato sulla tua conoscenza del dominio o su esperimenti precedenti.
Modifica degli iperparametri
Utilizzare il _mutate
metodo per produrre un nuovo set di iperparametri basato sul set esistente. Il Classe Tuner gestisce automaticamente questo processo.
Addestramento del modello
L'addestramento viene eseguito utilizzando l'insieme mutato di iperparametri. Le prestazioni dell'addestramento vengono quindi valutate utilizzando le metriche scelte.
Valutazione del modello
Utilizza metriche come AP50, F1-score o metriche personalizzate per valutare le prestazioni del modello. Il processo di valutazione aiuta a determinare se gli iperparametri correnti sono migliori di quelli precedenti.
Registrazione dei risultati
È fondamentale registrare sia le metriche di performance sia gli iperparametri corrispondenti per riferimento futuro. Ultralytics YOLO salva automaticamente questi risultati in formato CSV.
Ripeti
Il processo viene ripetuto fino a quando non viene raggiunto il numero di iterazioni impostato o la metrica di performance è soddisfacente. Ogni iterazione si basa sulle conoscenze acquisite dalle esecuzioni precedenti.
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. Ogni parametro ha uno specifico intervallo di valori definito da una tupla (min, max)
.
Parametro | Tipo | Intervallo di valori | Descrizione |
---|---|---|---|
lr0 |
float |
(1e-5, 1e-1) |
Tasso di apprendimento iniziale all'inizio dell'addestramento. Valori più bassi forniscono un addestramento più stabile ma una convergenza più lenta |
lrf |
float |
(0.01, 1.0) |
Fattore finale del learning rate come frazione di lr0. Controlla di quanto diminuisce il learning rate durante l'addestramento |
momentum |
float |
(0.6, 0.98) |
Fattore di momentum SGD. Valori più alti aiutano a mantenere una direzione del gradiente coerente e possono accelerare la convergenza |
weight_decay |
float |
(0.0, 0.001) |
Fattore di regolarizzazione L2 per prevenire l'overfitting. Valori più grandi impongono una regolarizzazione più forte. |
warmup_epochs |
float |
(0.0, 5.0) |
Numero di epoche per il warmup lineare del tasso di apprendimento. Aiuta a prevenire l'instabilità iniziale dell'addestramento |
warmup_momentum |
float |
(0.0, 0.95) |
Momentum iniziale durante la fase di warmup. Aumenta gradualmente fino al valore di momentum finale |
box |
float |
(0.02, 0.2) |
Peso della loss del riquadro di delimitazione nella funzione di loss totale. Bilancia la regressione del riquadro rispetto alla classificazione |
cls |
float |
(0.2, 4.0) |
Peso della loss di classificazione nella funzione di loss totale. Valori più alti enfatizzano la predizione corretta della classe |
hsv_h |
float |
(0.0, 0.1) |
Intervallo casuale di aumento della tonalità nello spazio colore HSV. Aiuta il modello a generalizzare tra le variazioni di colore |
hsv_s |
float |
(0.0, 0.9) |
Intervallo casuale di aumento della saturazione nello spazio HSV. Simula diverse condizioni di illuminazione |
hsv_v |
float |
(0.0, 0.9) |
Intervallo casuale di aumento del valore (luminosità). Aiuta il modello a gestire diversi livelli di esposizione |
degrees |
float |
(0.0, 45.0) |
Massima aumentazione della rotazione in gradi. Aiuta il modello a diventare invariante all'orientamento dell'oggetto |
translate |
float |
(0.0, 0.9) |
Massima aumentazione della traslazione come frazione della dimensione dell'immagine. Migliora la robustezza alla posizione dell'oggetto |
scale |
float |
(0.0, 0.9) |
Intervallo casuale di aumento della scala. Aiuta il modello a rilevare oggetti di diverse dimensioni |
shear |
float |
(0.0, 10.0) |
Massima aumentazione del taglio in gradi. Aggiunge distorsioni simili alla prospettiva alle immagini di allenamento |
perspective |
float |
(0.0, 0.001) |
Intervallo casuale di aumento della prospettiva. Simula diverse angolazioni di visualizzazione |
flipud |
float |
(0.0, 1.0) |
Probabilità di inversione verticale dell'immagine durante l'addestramento. Utile per immagini aeree/dall'alto |
fliplr |
float |
(0.0, 1.0) |
Probabilità di inversione orizzontale dell'immagine. Aiuta il modello a diventare invariante rispetto alla direzione dell'oggetto |
mosaic |
float |
(0.0, 1.0) |
Probabilità di utilizzare l'aumento a mosaico, che combina 4 immagini. Particolarmente utile per il rilevamento di piccoli oggetti |
mixup |
float |
(0.0, 1.0) |
Probabilità di utilizzare l'aumento mixup, che fonde due immagini. Può migliorare la robustezza del modello |
copy_paste |
float |
(0.0, 1.0) |
Probabilità di utilizzare l'aumento copy-paste. Aiuta a migliorare le prestazioni della segmentazione delle istanze |
Esempio di spazio di ricerca personalizzato
Ecco come definire uno spazio di ricerca e utilizzare il model.tune()
metodo per utilizzare la Tuner
classe per l'ottimizzazione degli iperparametri di YOLO11n su COCO8 per 30 epoche con un ottimizzatore AdamW e saltando il plotting, il checkpointing e la convalida diversi da quelli sull'epoca finale per un'ottimizzazione più rapida.
Esempio
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)
Ripresa di una sessione di ottimizzazione degli iperparametri interrotta
Puoi riprendere una sessione di ottimizzazione degli iperparametri interrotta passando resume=True
. Puoi facoltativamente passare la directory name
utilizzato in runs/{task}
per riprendere. Altrimenti, riprenderebbe l'ultima sessione interrotta. Devi anche fornire tutti gli argomenti di addestramento precedenti, inclusi data
, epochs
, iterations
e space
.
L'utilizzo di resume=True
con model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)
Risultati
Dopo aver completato con successo il processo di ottimizzazione degli iperparametri, si otterranno diversi file e directory che incapsulano i risultati dell'ottimizzazione. Di seguito viene descritto ciascuno di essi:
Struttura dei file
Ecco come apparirà la struttura delle directory dei risultati. Le directory di training come train1/
contengono singole iterazioni di ottimizzazione, ovvero un modello addestrato con un set di iperparametri. La directory tune/
contiene i risultati dell'ottimizzazione di tutti i singoli training del modello:
runs/
└── detect/
├── train1/
├── train2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── best_fitness.png
├── tune_results.csv
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.pt
Descrizioni dei file
best_hyperparameters.yaml
Questo file YAML contiene gli iperparametri con le migliori prestazioni riscontrate durante il processo di ottimizzazione. Puoi utilizzare questo file per inizializzare i training futuri con queste impostazioni ottimizzate.
- Formato: YAML
- Utilizzo: Risultati degli iperparametri
-
Esempio:
# 558/900 iterations complete ✅ (45536.81s) # Results saved to /usr/src/ultralytics/runs/detect/tune # Best fitness=0.64297 observed at iteration 498 # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/train498 # Best fitness hyperparameters are printed below. lr0: 0.00269 lrf: 0.00288 momentum: 0.73375 weight_decay: 0.00015 warmup_epochs: 1.22935 warmup_momentum: 0.1525 box: 18.27875 cls: 1.32899 dfl: 0.56016 hsv_h: 0.01148 hsv_s: 0.53554 hsv_v: 0.13636 degrees: 0.0 translate: 0.12431 scale: 0.07643 shear: 0.0 perspective: 0.0 flipud: 0.0 fliplr: 0.08631 mosaic: 0.42551 mixup: 0.0 copy_paste: 0.0
best_fitness.png
Questo è un grafico che mostra la fitness (in genere una metrica di performance come AP50) rispetto al numero di iterazioni. Ti aiuta a visualizzare le prestazioni dell'algoritmo genetico nel tempo.
- Formato: PNG
- Utilizzo: Visualizzazione delle prestazioni
tune_results.csv
Un file CSV contenente i risultati dettagliati di ogni iterazione durante l'ottimizzazione. Ogni riga del file rappresenta un'iterazione e include metriche come il punteggio di fitness, la precisione, il richiamo, nonché gli iperparametri utilizzati.
- Formato: CSV
- Utilizzo: Monitoraggio dei risultati per iterazione.
- Esempio:
fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste 0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0 0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0 0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
tune_scatter_plots.png
Questo file contiene grafici a dispersione generati da tune_results.csv
, aiutandoti a visualizzare le relazioni tra diversi iperparametri e metriche di performance. Si noti che gli iperparametri inizializzati a 0 non verranno ottimizzati, come ad esempio degrees
e shear
sotto.
- Formato: PNG
- Utilizzo: Analisi esplorativa dei dati
weights/
Questa directory contiene i modelli PyTorch salvati per l'ultima e la migliore iterazione durante il processo di ottimizzazione degli iperparametri.
last.pt
: last.pt sono i pesi dell'ultima epoca di training.best.pt
: best.pt sono i pesi per l'iterazione che ha ottenuto il miglior punteggio di fitness.
Utilizzando questi risultati, puoi prendere decisioni più informate per i tuoi futuri training e analisi del modello. Sentiti libero di consultare questi artefatti per capire quanto bene ha funzionato il tuo modello e come potresti migliorarlo ulteriormente.
Conclusione
Il processo di ottimizzazione degli iperparametri in Ultralytics YOLO è semplificato ma potente, grazie al suo approccio basato su algoritmi genetici focalizzati sulla mutazione. Seguire i passaggi descritti in questa guida ti aiuterà a ottimizzare sistematicamente il tuo modello per ottenere prestazioni migliori.
Letture aggiuntive
- Ottimizzazione degli iperparametri su Wikipedia
- Guida all'evoluzione degli iperparametri di YOLOv5
- Ottimizzazione efficiente degli iperparametri con Ray Tune e YOLO11
Per approfondimenti, puoi esplorare il Tuner
classe codice sorgente e documentazione di accompagnamento. In caso di domande, richieste di funzionalità o necessità di ulteriore assistenza, non esitate a contattarci su GitHub oppure Discord.
FAQ
Come posso ottimizzare il tasso di apprendimento per Ultralytics YOLO durante l'ottimizzazione degli iperparametri?
Per ottimizzare il tasso di apprendimento per Ultralytics YOLO, inizia impostando un tasso di apprendimento iniziale usando il lr0
parametro. I valori comuni variano da 0.001
a 0.01
. Durante il processo di ottimizzazione degli iperparametri, questo valore verrà modificato per trovare l'impostazione ottimale. Puoi utilizzare il model.tune()
metodo per automatizzare questo processo. Ad esempio:
Esempio
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)
Per maggiori dettagli, consulta la pagina di configurazione di Ultralytics YOLO.
Quali sono i vantaggi dell'utilizzo di algoritmi genetici per l'ottimizzazione degli iperparametri in YOLO11?
Gli algoritmi genetici in Ultralytics YOLO11 forniscono un metodo robusto per esplorare lo spazio degli iperparametri, portando a prestazioni del modello altamente ottimizzate. I vantaggi principali includono:
- Ricerca efficiente: gli algoritmi genetici come la mutazione possono esplorare rapidamente un ampio set di iperparametri.
- Evitare i minimi locali: introducendo la casualità, aiutano a evitare i minimi locali, garantendo una migliore ottimizzazione globale.
- Metriche di performance: si adattano in base alle metriche di performance come AP50 e F1-score.
Per vedere come gli algoritmi genetici possono ottimizzare gli iperparametri, consulta la guida all'evoluzione degli iperparametri.
Quanto tempo richiede il processo di ottimizzazione degli iperparametri per Ultralytics YOLO?
Il tempo necessario per l'ottimizzazione degli iperparametri con Ultralytics YOLO dipende in gran parte da diversi fattori, come le dimensioni del set di dati, la complessità dell'architettura del modello, il numero di iterazioni e le risorse computazionali disponibili. Ad esempio, l'ottimizzazione di YOLO11n su un set di dati come COCO8 per 30 epoche potrebbe richiedere da diverse ore a giorni, a seconda dell'hardware.
Per gestire efficacemente il tempo di ottimizzazione, definisci in anticipo un budget di ottimizzazione chiaro (collegamento alla sezione interna). Questo aiuta a bilanciare l'allocazione delle risorse e gli obiettivi di ottimizzazione.
Quali metriche dovrei usare per valutare le prestazioni del modello durante l'ottimizzazione degli iperparametri in YOLO?
Quando si valuta la performance del modello durante l'ottimizzazione degli iperparametri in YOLO, è possibile utilizzare diverse metriche chiave:
- AP50: Precisione media alla soglia IoU di 0.50.
- Punteggio F1: La media armonica di precisione e richiamo.
- Precisione e richiamo: Metriche individuali che indicano l'accuratezza del modello nell'identificare i veri positivi rispetto ai falsi positivi e ai falsi negativi.
Queste metriche ti aiutano a comprendere diversi aspetti della performance del tuo modello. Consulta la guida alle metriche di performance di Ultralytics YOLO per una panoramica completa.
Posso usare Ray Tune per l'ottimizzazione avanzata degli iperparametri con YOLO11?
Sì, Ultralytics YOLO11 si integra con Ray Tune per l'ottimizzazione avanzata degli iperparametri. Ray Tune offre sofisticati algoritmi di ricerca come Bayesian Optimization e Hyperband, insieme a capacità di esecuzione parallela per accelerare il processo di ottimizzazione.
Per utilizzare Ray Tune con YOLO11, imposta semplicemente il use_ray=True
parametro nel tuo model.tune()
chiamata al metodo. Per maggiori dettagli ed esempi, consultare la Guida all'integrazione di Ray Tune.