Guida di Ultralytics YOLO all'ottimizzazione degli iperparametri#
L'ottimizzazione degli iperparametri in Ultralytics YOLO è una ricerca automatizzata e iterativa che ottimizza impostazioni — come il tasso di apprendimento, i pesi delle funzioni di perdita e l'intensità dell'aumento dei dati — per massimizzare le metriche di prestazione di un modello di machine learning, come accuratezza, precisione e richiamo. Invece di testare questi valori manualmente, Ultralytics YOLO esplora lo spazio degli iperparametri con un algoritmo genetico che modifica e valuta configurazioni candidate attraverso numerose sessioni di addestramento brevi.
Guarda: Come ottimizzare gli iperparametri per migliorare le prestazioni del modello 🚀
Cosa sono gli iperparametri?#
Gli iperparametri sono impostazioni strutturali di alto livello dell'algoritmo. Vengono definiti prima della fase di addestramento e rimangono costanti durante questa fase. Ecco alcuni degli iperparametri più comunemente ottimizzati in Ultralytics YOLO:
- Tasso di apprendimento
lr0: determina l'ampiezza del passo a ogni iterazione mentre ci si avvicina a un minimo della funzione di perdita. - Dimensione del batch
batch: numero di immagini elaborate contemporaneamente in un passaggio in avanti. - Numero di epoche
epochs: un'epoca corrisponde a un passaggio completo in avanti e all'indietro su tutti gli esempi di addestramento. - Dettagli dell'architettura: ad esempio, numero di canali, numero di livelli, tipi di funzioni di attivazione e così via. Questi elementi si trovano nella configurazione YAML del modello, non negli argomenti di addestramento.
Tra questi quattro, solo il tasso di apprendimento rientra nello spazio di ricerca predefinito: batch, epochs e l'architettura rimangono fissi. L'ottimizzatore modifica anche la pianificazione, i coefficienti delle funzioni di perdita e gli aumenti dei dati elencati di seguito.
Per l'elenco completo degli iperparametri di aumento dei dati usati in YOLO26, consulta la pagina delle configurazioni.
Evoluzione genetica e mutazione#
Ultralytics YOLO usa algoritmi genetici per ottimizzare gli iperparametri. Gli algoritmi genetici si ispirano ai meccanismi della selezione naturale e della genetica.
- Selezione: a ogni iterazione viene selezionata una delle configurazioni con il punteggio di fitness più alto, fino a un massimo di nove, con probabilità proporzionale al punteggio di fitness. Dopo 30 risultati, anche il 20% dei risultati migliori (fino a un massimo di 30) contribuisce a stimare la covarianza dei parametri, con un'influenza che aumenta man mano che si accumulano evidenze sulle configurazioni d'élite.
- Mutazione: a ogni iterazione viene modificata circa la metà dei parametri usando passi gaussiani normalizzati in base ai rispettivi intervalli di ricerca. Quando la covarianza è attiva, una quota ponderata in base al livello di confidenza, fino a un massimo del 40%, usa passi correlati; il ripiegamento riporta questi passi entro i limiti senza accumulare valori troncati. Man mano che si accumulano prove senza miglioramenti, le dimensioni dei passi si riducono linearmente fino al 20% nell'arco di 25 prove e vengono ripristinate quando si trova un nuovo risultato migliore. L'iterazione 1 non ha un elemento genitore e usa gli iperparametri di addestramento predefiniti come riferimento.
Preparazione all'ottimizzazione degli iperparametri#
Prima di iniziare il processo di ottimizzazione, è importante:
- Identificare le metriche: l'ottimizzatore integrato (
use_ray=False) classifica le prove in base al punteggiofitnessdell'attività, mentreuse_ray=Trueusa la metrica dell'attività. Decidi quali metriche secondarie esaminare, come AP50 o il punteggio F1. - Definire il budget di ottimizzazione: stabilisci quante risorse di calcolo vuoi allocare. L'ottimizzazione degli iperparametri può richiedere molte risorse di calcolo.
Come funziona il ciclo di ottimizzazione#
A ogni iterazione, l'ottimizzatore integrato ripete il ciclo seguente:
- Inizializzare gli iperparametri — partire da un riferimento ragionevole: gli iperparametri predefiniti impostati da Ultralytics YOLO oppure valori basati sulle tue conoscenze del dominio o su esperimenti precedenti.
- Modificare gli iperparametri — la classe
Tunergenera automaticamente un nuovo insieme di iperparametri a partire da quello esistente usando il metodo_mutate. - Addestrare il modello — addestrare il modello usando gli iperparametri modificati, quindi valutare le prestazioni di addestramento con le metriche scelte.
- Valutare il modello — il processo di valutazione produce il punteggio di fitness dell'iterazione, che viene confrontato con quelli delle iterazioni precedenti per determinare se gli iperparametri correnti rappresentano un miglioramento.
- Registrare i risultati — annotare le metriche di prestazione e i relativi iperparametri per consultarli in futuro. Ultralytics YOLO salva automaticamente questi risultati in formato NDJSON.
- Ripetere — continuare fino a raggiungere il numero di iterazioni stabilito; ogni iterazione si basa sulle conoscenze acquisite nelle esecuzioni precedenti. L'ottimizzatore integrato esegue tutti i
iterations; Ray Tune restituisce le metriche dopo ogni epoca di fit, consentendo ad ASHA di interrompere le prove poco promettenti una volta trascorso il periodo di tolleranza.
Numero di iterazioni e dimensione della popolazione#
Con l'ottimizzatore genetico integrato (use_ray=False), iterations controlla il numero totale di prove sequenziali e il valore predefinito è 300. Ogni prova addestra un modello con una configurazione di iperparametri: ad esempio, iterations=40 con epochs=50 pianifica 40 esecuzioni di addestramento indipendenti di 50 epoche ciascuna, non un'unica esecuzione di 50 epoche con una popolazione separata di 40 candidati.
L'algoritmo genetico integrato non ha un parametro esplicito per la dimensione della popolazione. Quando sono disponibili prove precedenti, seleziona fino a nove configurazioni con i punteggi di fitness più alti e modifica un candidato per iterazione.
Per eseguire prove in parallelo o usare strategie di ricerca più avanzate, imposta use_ray=True per usare Ray Tune, che adotta lo stesso valore predefinito di 300 prove e riceve iterations come num_samples. Per i dettagli, consulta la guida all'integrazione di Ray Tune.
Spazio di ricerca predefinito#
La tabella seguente elenca i parametri dello spazio di ricerca predefinito per l'ottimizzazione degli iperparametri in YOLO26. Ogni parametro ha un intervallo di valori specifico definito da una tupla (min, max).
| Parametro | Tipo | Intervallo di valori | Descrizione |
|---|---|---|---|
lr0 | float | (1e-5, 1e-2) | Tasso di apprendimento iniziale all'avvio dell'addestramento. Valori più bassi rendono l'addestramento più stabile, ma rallentano la convergenza. |
lrf | float | (0.01, 1.0) | Fattore del tasso di apprendimento finale come frazione di lr0. Controlla quanto diminuisce il tasso di apprendimento durante l'addestramento. |
momentum | float | (0.7, 0.98) | Fattore di momentum di SGD. Valori più alti aiutano a mantenere una direzione del gradiente costante e possono accelerare la convergenza. |
weight_decay | float | (0.0, 0.001) | Fattore di regolarizzazione L2 per prevenire l'overfitting. Valori più alti applicano una regolarizzazione più forte. |
warmup_epochs | float | (0.0, 5.0) | Numero di epoche per il riscaldamento lineare del tasso di apprendimento. Aiuta a prevenire l'instabilità nelle fasi iniziali dell'addestramento. |
warmup_momentum | float | (0.0, 0.95) | Momentum iniziale durante la fase di riscaldamento. Aumenta gradualmente fino al valore finale di momentum. |
box | float | (1.0, 20.0) | Peso della perdita dei riquadri di delimitazione nella funzione di perdita totale. Bilancia la regressione dei riquadri e la classificazione. |
cls | float | (0.1, 4.0) | Peso della perdita di classificazione nella funzione di perdita totale. Valori più alti danno maggiore importanza alla corretta previsione delle classi. |
cls_pw | float | (0.0, 1.0) | Esponente di ponderazione delle classi per gestire lo sbilanciamento tra le classi. Valori più alti aumentano il peso delle classi rare. |
dfl | float | (0.4, 12.0) | Peso del termine di regressione della distanza dei riquadri. YOLO26 senza DFL applica questo coefficiente a una perdita L1 sulle distanze normalizzate dei riquadri; valori più alti danno maggiore importanza alla precisione della localizzazione. |
hsv_h | float | (0.0, 0.1) | Intervallo di aumento casuale della tonalità nello spazio colore HSV. Aiuta il modello a generalizzare alle variazioni di colore. |
hsv_s | float | (0.0, 0.9) | Intervallo di aumento casuale della saturazione nello spazio HSV. Simula condizioni di illuminazione diverse. |
hsv_v | float | (0.0, 0.9) | Intervallo di aumento casuale del valore (luminosità). Aiuta il modello a gestire diversi livelli di esposizione. |
degrees | float | (0.0, 45.0) | Rotazione massima dell'aumento dei dati, in gradi. Aiuta il modello a diventare invariante all'orientamento degli oggetti. |
translate | float | (0.0, 0.9) | Traslazione massima dell'aumento dei dati, come frazione delle dimensioni dell'immagine. Migliora la robustezza rispetto alla posizione degli oggetti. |
scale | float | (0.0, 0.95) | Intervallo di ridimensionamento casuale. Aiuta il modello a rilevare oggetti di dimensioni diverse. |
shear | float | (0.0, 10.0) | Inclinazione massima dell'aumento dei dati, in gradi. Aggiunge distorsioni simili a quelle prospettiche alle immagini di addestramento. |
perspective | float | (0.0, 0.001) | Intervallo di prospettiva casuale dell'aumento dei dati. Simula angoli di visualizzazione diversi. |
flipud | float | (0.0, 1.0) | Probabilità di capovolgimento verticale dell'immagine durante l'addestramento. Utile per le immagini aeree o riprese dall'alto. |
fliplr | float | (0.0, 1.0) | Probabilità di capovolgimento orizzontale dell'immagine. Aiuta il modello a diventare invariante alla direzione degli oggetti. |
bgr | float | (0.0, 1.0) | Probabilità di applicare l'aumento BGR, che scambia i canali di colore. Può aiutare a ottenere l'invarianza rispetto ai colori. |
mosaic | float | (0.0, 1.0) | Probabilità di applicare l'aumento mosaic, che combina 4 immagini. Particolarmente utile per il rilevamento di oggetti piccoli. |
mixup | float | (0.0, 1.0) | Probabilità di applicare l'aumento mixup, che fonde due immagini. Può migliorare la robustezza del modello. |
cutmix | float | (0.0, 1.0) | Probabilità di applicare l'aumento cutmix. Combina regioni delle immagini mantenendo le caratteristiche locali. |
copy_paste | float | (0.0, 1.0) | In modalità flip, frazione degli oggetti idonei copiati; in modalità mixup, anche probabilità di applicazione. |
close_mosaic | int | (0.0, 10.0) | Disattiva mosaic nelle ultime N epoche per stabilizzare l'addestramento prima del completamento. Viene modificato come valore float e poi arrotondato a un numero intero di epoche. |
Esempio di spazio di ricerca personalizzato#
Ecco come definire uno spazio di ricerca e usare il metodo model.tune() per utilizzare la classe Tuner e ottimizzare gli iperparametri di YOLO26n su COCO8 per 30 epoche con un ottimizzatore AdamW, saltando la generazione dei grafici, il salvataggio dei checkpoint e la convalida, tranne che nell'epoca finale, per velocizzare l'ottimizzazione.
Questo esempio ha solo scopo dimostrativo. Gli iperparametri ricavati da sessioni di ottimizzazione brevi o su piccola scala raramente sono ottimali per l'addestramento nel mondo reale. In pratica, l'ottimizzazione dovrebbe svolgersi con impostazioni simili a quelle dell'addestramento completo — inclusi dataset, numero di epoche e aumenti dei dati comparabili — per garantire risultati affidabili e trasferibili. Un'ottimizzazione rapida può orientare gli iperparametri verso una convergenza più veloce o miglioramenti a breve termine nella convalida che non si generalizzano.
from ultralytics import YOLO
# Inizializza il modello YOLO
model = YOLO("yolo26n.pt")
# Definisci lo spazio di ricerca
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Ottimizza gli iperparametri su COCO8 per 30 epoche
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)Riprendere una sessione di ottimizzazione degli iperparametri interrotta#
Puoi riprendere una sessione di ottimizzazione degli iperparametri interrotta passando resume=True. Facoltativamente, puoi passare la directory name usata da runs/{task} per riprendere la sessione. Se non specifichi name, la ripresa avviene dalla directory chiamata letteralmente tune, che è il nome predefinito e non quello della sessione eseguita più di recente; quindi, passa name per qualsiasi esecuzione avviata con un nome personalizzato. Devi anche fornire tutti gli argomenti di addestramento precedenti, inclusi data, epochs, iterations e space.
from ultralytics import YOLO
# Definisci un modello YOLO
model = YOLO("yolo26n.pt")
# Definisci lo spazio di ricerca
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Riprendi l'esecuzione precedente
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Riprendi l'esecuzione di ottimizzazione con il nome 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)Risultati#
Al termine dell'ottimizzazione degli iperparametri, otterrai diversi file e directory che raccolgono i risultati dell'ottimizzazione. Di seguito è descritta ciascuna voce:
Struttura dei file#
Ecco come apparirà la struttura delle directory dei risultati. Le directory delle sessioni di ricerca, come multitrain/ e multitrain-2/, contengono le singole iterazioni di ottimizzazione: una per ogni modello addestrato su ciascun dataset con un insieme di iperparametri, in una sottodirectory denominata in base al dataset. Per risparmiare spazio, l'ottimizzatore elimina le directory delle esecuzioni per dataset delle iterazioni che non sono le migliori correnti. La directory tune/ contiene i risultati dell'ottimizzazione di tutti i singoli addestramenti dei modelli:
runs/
└── detect/
├── multitrain/
│ └── coco8/
├── multitrain-2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── tune_fitness.png
├── tune_results.ndjson
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.ptDescrizione dei file#
best_hyperparameters.yaml#
Questo file YAML contiene i migliori iperparametri individuati durante il processo di ottimizzazione. Puoi usare questo file per inizializzare gli addestramenti futuri con queste impostazioni ottimizzate.
-
Formato: YAML
-
Uso: 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/l1_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/tune/weights # 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
tune_fitness.png#
Questo grafico mostra il punteggio di fitness in funzione del numero di iterazioni. Ti aiuta a visualizzare l'andamento dell'algoritmo genetico nel tempo.
- Formato: PNG
- Uso: visualizzazione delle prestazioni
Il grafico contiene:
- Un indicatore per ogni iterazione e per ogni dataset: un'esecuzione con un solo dataset mostra un punto per iterazione, mentre un'esecuzione con più dataset mostra un punto per ciascun dataset a ogni iterazione.
- Una linea tratteggiata della "media smussata", calcolata applicando uno smoothing gaussiano (
sigma=3) ai valori di fitness di primo livello per ogni iterazione.
tune_results.ndjson#
Un file NDJSON che contiene i risultati dettagliati di ogni iterazione di ottimizzazione. Ogni riga è un oggetto JSON con il punteggio di fitness aggregato, gli iperparametri ottimizzati e le metriche per ciascun dataset. L'ottimizzazione con un singolo dataset e quella con più dataset usano lo stesso formato di file.
- Formato: NDJSON
- Uso: monitoraggio dei risultati per iterazione.
- Esempio:
Di seguito è riportato un esempio formattato per facilitarne la lettura; nel file .ndjson effettivo, ogni oggetto è memorizzato su una singola riga.
{
"iteration": 1,
"fitness": 0.48628,
"hyperparameters": {
"lr0": 0.01,
"lrf": 0.01,
"momentum": 0.937,
"weight_decay": 0.0005
},
"datasets": {
"coco8": {
"metrics/precision(B)": 0.65666,
"metrics/recall(B)": 0.85,
"metrics/mAP50(B)": 0.85086,
"metrics/mAP50-95(B)": 0.64104,
"val/box_loss": 1.57958,
"val/cls_loss": 1.04986,
"val/l1_loss": 1.32641,
"fitness": 0.64104
},
"coco8-grayscale": {
"metrics/precision(B)": 0.6582,
"metrics/recall(B)": 0.51667,
"metrics/mAP50(B)": 0.59106,
"metrics/mAP50-95(B)": 0.33152,
"val/box_loss": 1.95424,
"val/cls_loss": 1.64059,
"val/l1_loss": 1.70226,
"fitness": 0.33152
}
},
"save_dirs": {
"coco8": "runs/detect/multitrain/coco8",
"coco8-grayscale": "runs/detect/multitrain/coco8-grayscale"
}
}Il valore di primo livello fitness è la media aritmetica dei valori fitness di ciascun dataset. Nell'ottimizzazione con un solo dataset, il dizionario datasets contiene una voce, il cui valore fitness corrisponde al valore fitness di primo livello. Viene registrato un oggetto JSON per ogni iterazione completata. I percorsi save_dirs effettivi sono assoluti; qui sono abbreviati per facilitarne la lettura.
tune_scatter_plots.png#
Questo file contiene grafici a dispersione generati da tune_results.ndjson, che ti aiutano a visualizzare le relazioni tra diversi iperparametri e le metriche di prestazione. La mutazione usa l'intervallo configurato per ogni iperparametro, quindi i valori possono evolvere anche da impostazioni predefinite pari a zero come degrees e shear.
- Formato: PNG
- Uso: analisi esplorativa dei dati
weights/#
Questa directory contiene i modelli PyTorch salvati dall'iterazione con il punteggio di fitness migliore dell'esecuzione di ottimizzazione. Entrambi i file provengono dalla stessa iterazione:
last.pt: last.pt contiene i pesi dell'ultima epoca di addestramento.best.pt: i pesi best.pt appartengono all'iterazione che ha ottenuto il punteggio di fitness migliore.
Usando questi risultati, puoi prendere decisioni più consapevoli per i futuri addestramenti e le analisi dei modelli.
Conclusione#
L'ottimizzazione degli iperparametri in Ultralytics YOLO è semplice da avviare e potente al suo interno: utilizza una selezione ponderata in base alla fitness e una mutazione normalizzata rispetto all'intervallo in un algoritmo genetico. Seguendo il ciclo descritto in questa guida, puoi ottimizzare sistematicamente il tuo modello per ottenere prestazioni migliori e poi riutilizzare il risultato best_hyperparameters.yaml per inizializzare i futuri cicli di addestramento. Per estendere l'ottimizzazione a prove parallele e ad algoritmi di ricerca più avanzati, continua con la guida all'integrazione di Ray Tune, oppure esegui job gestiti con iperparametri configurabili e monitoraggio delle metriche in tempo reale su Ultralytics Platform tramite l'addestramento nel cloud.
Per le impostazioni non esposte da alcun argomento, come i tassi di apprendimento per livello o una metrica di fitness personalizzata, crea una sottoclasse del trainer. Per approfondire, esplora il codice sorgente della classe Tuner. Se hai domande o richieste di funzionalità, contattaci su GitHub o Discord.
Domande frequenti#
Imposta un valore iniziale con il parametro
lr0— i valori comuni vanno da0.001a0.01— e lascia che l'ottimizzazione lo modifichi per trovare il valore ottimale. Puoi automatizzare il processo con il metodomodel.tune(). Per esempio:Esempiofrom ultralytics import YOLO # Inizializza il modello YOLO model = YOLO("yolo26n.pt") # Ottimizza gli iperparametri su COCO8 per 30 epoche 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.
Gli algoritmi genetici in Ultralytics YOLO26 offrono un metodo robusto per esplorare lo spazio degli iperparametri e ottenere prestazioni del modello altamente ottimizzate. Tra i principali vantaggi:
- Ricerca efficiente: la selezione ponderata in base alla fitness conserva le configurazioni più efficaci, mentre la mutazione normalizzata rispetto all'intervallo esplora nuove candidate.
- Evitare i minimi locali: introducendo casualità, gli algoritmi aiutano a evitare i minimi locali e favoriscono una migliore ottimizzazione globale.
- Metriche di prestazione: si adattano in base a un punteggio di fitness specifico per l'attività (mAP50-95 per il rilevamento).
Per scoprire come gli algoritmi genetici possono ottimizzare gli iperparametri, consulta la guida all'evoluzione degli iperparametri.
Il tempo necessario per ottimizzare gli iperparametri con Ultralytics YOLO dipende in larga misura da diversi fattori, come le dimensioni del dataset, la complessità dell'architettura del modello, il numero di iterazioni e le risorse di calcolo disponibili. Per esempio, ottimizzare YOLO26n su un dataset come COCO8 per 30 epoche può richiedere da alcune ore a diversi giorni, a seconda dell'hardware.
Per gestire efficacemente i tempi di ottimizzazione, definisci in anticipo un budget chiaro, come spiegato in Prepararsi all'ottimizzazione degli iperparametri. Questo aiuta a bilanciare l'allocazione delle risorse e gli obiettivi di ottimizzazione.
Per valutare le prestazioni del modello durante l'ottimizzazione degli iperparametri in YOLO, puoi usare diverse metriche chiave:
- AP50: la precisione media alla soglia IoU di 0,50.
- Punteggio F1: la media armonica di precisione e richiamo.
- Precisione e richiamo: metriche distinte 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 delle prestazioni del modello. Per una panoramica completa, consulta la guida alle metriche di prestazione di Ultralytics YOLO.
Sì, Ultralytics YOLO26 si integra con Ray Tune per l'ottimizzazione avanzata degli iperparametri. Ray Tune offre algoritmi di ricerca sofisticati come l'ottimizzazione bayesiana e Hyperband, oltre all'esecuzione parallela per accelerare il processo di ottimizzazione.
Per usare Ray Tune con YOLO26, imposta semplicemente il parametro
use_ray=Truenella chiamata al metodomodel.tune(). Per ulteriori dettagli ed esempi, consulta la guida all'integrazione di Ray Tune.