Guida alla ottimizzazione degli iperparametri di Ultralytics YOLO#
L'ottimizzazione degli iperparametri in Ultralytics YOLO è una ricerca automatizzata e iterativa che ottimizza le impostazioni, come il tasso di apprendimento, i pesi della perdita e l'intensità di augmentazione, 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 muta e valuta le configurazioni candidate attraverso molte brevi esecuzioni di addestramento.
Watch: How to Tune Hyperparameters for Better Model Performance 🚀
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 a ogni iterazione mentre ci si sposta verso un minimo nella funzione di perdita. - Dimensione del batch
batch: Numero di immagini elaborate simultaneamente in un passaggio in avanti. - Numero di epoche
epochs: Un'epoca è un passaggio completo in avanti e all'indietro di tutti gli esempi di addestramento. - Specifiche dell'architettura: Come conteggio dei canali, numero di livelli, tipi di funzioni di attivazione, ecc. Questi si trovano nella configurazione YAML del modello anziché negli argomenti di training.
Di questi quattro, solo il learning rate si trova nello spazio di ricerca predefinito: batch, epochs e l'architettura rimangono fissi. Il tuner muta anche la pianificazione, i guadagni di loss e le augmentations elencate di seguito.
Per un elenco completo degli iperparametri di augmentazione utilizzati in YOLO26, fai riferimento alla pagina delle configurazioni.
Evoluzione genetica e mutazione#
Ultralytics YOLO utilizza algoritmi genetici per ottimizzare gli iperparametri. Gli algoritmi genetici traggono ispirazione dal meccanismo della selezione naturale e della genetica.
- Crossover: Ogni iterazione combina geni provenienti da un massimo di nove delle configurazioni con la fitness più alta viste finora, utilizzando il crossover BLX-α con selezione dei genitori basata sulla fitness.
- Mutazione: Il candidato ricombinato viene quindi perturbato da un fattore moltiplicativo log-normale applicato a ciascun iperparametro (con probabilità 0.5 per parametro). La forza della mutazione sigma decade linearmente da 0.2 a 0.1 nelle prime 300 iterazioni, in modo che l'algoritmo esplori ampiamente all'inizio e si rifinisca man mano che converge. L'iterazione 1 non ha genitori da cui eseguire il crossover e utilizza gli iperparametri di addestramento predefiniti come base.
Preparazione per l'ottimizzazione degli iperparametri#
Prima di iniziare il processo di ottimizzazione, è importante:
- Identifica le metriche: Il tuner integrato (
use_ray=False) ordina le prove in base al punteggiofitnessdel task, mentreuse_ray=Trueutilizza la metrica del task. Scegli quali metriche secondarie ispezionare, come AP50 o F1-score. - Impostare il budget di ottimizzazione: Definisci quante risorse computazionali sei disposto ad allocare. L'ottimizzazione degli iperparametri può essere intensiva dal punto di vista computazionale.
Come funziona il ciclo di sintonizzazione#
Per ogni iterazione, il sintonizzatore integrato ripete il seguente ciclo:
- Inizializzazione degli iperparametri — parti da una base di riferimento ragionevole, ovvero gli iperparametri predefiniti impostati da Ultralytics YOLO o valori basati sulla tua conoscenza del dominio o su esperimenti precedenti.
- Muta gli iperparametri — la
Tunerclass produce automaticamente un nuovo set di iperparametri da quello esistente con il suo metodo_mutate. - Addestramento del modello — addestra utilizzando gli iperparametri mutati, quindi valuta le prestazioni dell'addestramento con le metriche che hai scelto.
- Valuta il modello — il processo di valutazione produce il punteggio di fitness dell'iterazione, che viene confrontato con le iterazioni precedenti per determinare se gli iperparametri attuali rappresentano un miglioramento.
- Registrazione dei risultati — registra sia le metriche di prestazione che gli iperparametri corrispondenti per riferimento futuro. Ultralytics YOLO salva automaticamente questi risultati in formato NDJSON.
- Ripeti — continua fino a raggiungere il numero stabilito di iterazioni, in cui ogni iterazione si basa sulle conoscenze acquisite dalle esecuzioni precedenti. Il tuner integrato esegue tutte le
iterations; Ray Tune riporta le metriche dopo ogni epoca di fit, consentendo ad ASHA di interrompere i tentativi deboli dopo il periodo di grazia.
Iterazioni e dimensione della popolazione#
Con il sintonizzatore integrato (use_ray=False), iterations controlla il numero totale di prove sequenziali. Ciascuna prova addestra un modello con una configurazione di iperparametri — ad esempio, iterations=40 con epochs=50 pianifica 40 sessioni di addestramento indipendenti di 50 epoche, non una singola sessione di 50 epoche con una popolazione separata di 40 candidati.
L'algoritmo genetico integrato non ha un parametro esplicito per la dimensione della popolazione. Una volta che esistono prove precedenti, campiona fino a nove delle configurazioni con la fitness più alta come genitori, applica il crossover BLX-α e la mutazione, e produce un candidato per iterazione.
Per prove parallele o strategie di ricerca più avanzate, imposta use_ray=True per utilizzare Ray Tune, che riceve iterations come num_samples. Consulta la guida all'integrazione di Ray Tune per i dettagli.
Spazio di ricerca predefinito#
La tabella seguente elenca i parametri dello spazio di ricerca predefiniti per l'ottimizzazione degli iperparametri in YOLO26. Ciascun 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'inizio dell'addestramento. Valori più bassi forniscono un addestramento più stabile ma una convergenza più lenta |
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 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à all'inizio dell'addestramento |
warmup_momentum | float | (0.0, 0.95) | Momentum iniziale durante la fase di warmup. Aumenta gradualmente fino al valore finale di momentum |
box | float | (1.0, 20.0) | Peso della perdita del riquadro di delimitazione (BBox) nella funzione di perdita totale. Bilancia la regressione del riquadro rispetto alla classificazione |
cls | float | (0.1, 4.0) | Peso della perdita di classificazione nella funzione di perdita totale. Valori più alti enfatizzano la corretta previsione della classe |
cls_pw | float | (0.0, 1.0) | Potenza di ponderazione della classe per gestire lo squilibrio tra le classi. Valori più alti aumentano il peso sulle classi rare |
dfl | float | (0.4, 12.0) | Peso del termine di regressione della distanza del box. YOLO26 senza DFL applica questo guadagno a una loss L1 sulle distanze dei box normalizzate; valori più alti enfatizzano la localizzazione precisa |
hsv_h | float | (0.0, 0.1) | Intervallo di aumento casuale della tonalità nello spazio colore HSV. Aiuta il modello a generalizzare tra le variazioni di colore |
hsv_s | float | (0.0, 0.9) | Intervallo di aumento casuale della saturazione nello spazio HSV. Simula diverse condizioni di illuminazione |
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) | Aumento massimo della rotazione in gradi. Aiuta il modello a diventare invariante rispetto all'orientamento dell'oggetto |
translate | float | (0.0, 0.9) | Aumento massimo della traslazione come frazione della dimensione dell'immagine. Migliora la robustezza rispetto alla posizione dell'oggetto |
scale | float | (0.0, 0.95) | Intervallo di aumento casuale della scala. Aiuta il modello a rilevare oggetti di dimensioni diverse |
shear | float | (0.0, 10.0) | Aumento massimo del taglio (shear) in gradi. Aggiunge distorsioni simili alla prospettiva alle immagini di addestramento |
perspective | float | (0.0, 0.001) | Intervallo di aumento casuale della prospettiva. Simula angoli di visione diversi |
flipud | float | (0.0, 1.0) | Probabilità di capovolgimento verticale dell'immagine durante l'addestramento. Utile per immagini dall'alto/aeree |
fliplr | float | (0.0, 1.0) | Probabilità di capovolgimento orizzontale dell'immagine. Aiuta il modello a diventare invariante rispetto alla direzione dell'oggetto |
bgr | float | (0.0, 1.0) | Probabilità di utilizzare l'aumento BGR, che scambia i canali di colore. Può aiutare con l'invarianza del colore |
mosaic | float | (0.0, 1.0) | Probabilità di utilizzare l'aumento 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 mescola due immagini. Può migliorare la robustezza del modello |
cutmix | float | (0.0, 1.0) | Probabilità di utilizzare l'aumento cutmix. Combina regioni dell'immagine mantenendo le caratteristiche locali |
copy_paste | float | (0.0, 1.0) | Nella modalità flip la frazione di oggetti idonei copiati, nella modalità mixup anche la probabilità di applicarlo |
close_mosaic | int | (0.0, 10.0) | Disabilita il mosaic nelle ultime N epoche per stabilire il training prima del completamento. Mutato come float, quindi arrotondato a un numero intero di epoche |
Esempio di spazio di ricerca personalizzato#
Ecco come definire uno spazio di ricerca e utilizzare il metodo model.tune() per sfruttare la classe Tuner per l'ottimizzazione degli iperparametri di YOLO26n su COCO8 per 30 epoche con un ottimizzatore AdamW, saltando plotting, salvataggio dei checkpoint e validazione tranne che nell'epoca finale per una sintonizzazione più rapida.
Questo esempio è solo a scopo dimostrativo. Gli iperparametri derivati da esecuzioni di ottimizzazione brevi o su piccola scala sono raramente ottimali per l'addestramento nel mondo reale. In pratica, l'ottimizzazione dovrebbe essere eseguita con impostazioni simili all'addestramento completo — inclusi set di dati, epoche e aumenti confrontabili — per garantire risultati affidabili e trasferibili. Un'ottimizzazione rapida potrebbe distorcere i parametri verso una convergenza più rapida o guadagni di validazione a breve termine che non si generalizzano.
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo26n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-2),
"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,
)Riprendere una sessione di ottimizzazione degli iperparametri interrotta#
Puoi riprendere una sessione di hyperparameter tuning interrotta passando resume=True. Puoi facoltativamente passare la directory name utilizzata sotto runs/{task} per riprendere. Senza un name, riprende la directory chiamata letteralmente tune, che è il nome predefinito anziché la sessione eseguita più recentemente, quindi passa name per qualsiasi esecuzione avviata con una personalizzata. Devi anche fornire tutti i precedenti argomenti di training inclusi data, epochs, iterations e space.
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-2),
"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, otterrai diversi file e directory che racchiudono i risultati dell'ottimizzazione. Di seguito viene descritto ciascuno:
Struttura dei file#
Ecco come apparirà la struttura delle directory dei risultati. Le directory di training come train/ e train-2/ contengono singole iterazioni di tuning, ovvero un modello addestrato con un set di iperparametri. La directory tune/ contiene i risultati del tuning di tutti i singoli addestramenti dei modelli:
runs/
└── detect/
├── train/
├── train-2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── tune_fitness.png
├── tune_results.ndjson
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.ptDescrizioni dei file#
best_hyperparameters.yaml#
Questo file YAML contiene gli iperparametri con le migliori prestazioni trovati durante il processo di ottimizzazione. Puoi utilizzare questo file per inizializzare futuri addestramenti 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/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 è un grafico che mostra la fitness rispetto al numero di iterazioni. Ti aiuta a visualizzare come l'algoritmo genetico ha performato nel tempo.
- Formato: PNG
- Utilizzo: Visualizzazione delle performance
Il grafico contiene:
- Un marcatore per iterazione per set di dati, quindi un'esecuzione su singolo set di dati mostra un punto per iterazione, e un'esecuzione su più set di dati mostra un punto per set di dati per iterazione.
- Una linea "smoothed mean" tratteggiata calcolata come smoothing gaussiano (
sigma=3) sui valori di idoneità di livello superiore per iterazione.
tune_results.ndjson#
Un file NDJSON contenente risultati dettagliati di ogni iterazione di ottimizzazione. Ogni riga è un oggetto JSON con la fitness aggregata, gli iperparametri ottimizzati e le metriche per set di dati. L'ottimizzazione su set di dati singolo e su set di dati multipli utilizza lo stesso formato di file.
- Formato: NDJSON
- Utilizzo: Tracciamento dei risultati per iterazione.
- Esempio:
Segue un esempio formattato per leggibilità; nel file effettivo .ndjson, ciascun 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/coco8",
"coco8-grayscale": "runs/detect/coco8-grayscale"
}
}Il livello superiore fitness è la media aritmetica dei valori per dataset fitness. Per la sintonizzazione su singolo dataset, il dizionario datasets ha una voce il cui fitness è uguale al livello superiore fitness. Viene registrato un oggetto JSON per ciascuna iterazione completata. I percorsi effettivi save_dirs sono assoluti; sono stati abbreviati sopra per leggibilità.
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 metriche di prestazione. Gli iperparametri il cui valore predefinito è 0 (ad esempio, degrees e shear di seguito) potrebbero evolvere solo lentamente rispetto al loro seed iniziale perché il fattore di mutazione moltiplicativa ha ben poco margine di espansione da un valore prossimo allo zero.
- Formato: PNG
- Utilizzo: Analisi esplorativa dei dati
weights/#
Questa directory contiene i modelli PyTorch salvati dall'iterazione con la migliore fitness dell'esecuzione di tuning. Entrambi i file provengono dalla stessa iterazione:
last.pt: last.pt sono i pesi dall'ultima epoca di addestramento.best.pt: i pesi best.pt per l'iterazione che ha ottenuto il miglior punteggio di idoneità.
Utilizzando questi risultati, puoi prendere decisioni più informate per futuri addestramenti e analisi dei modelli.
Conclusione#
L'ottimizzazione degli iperparametri in Ultralytics YOLO è sia semplice da avviare che potente sotto il cofano, combinando il crossover BLX-α con la mutazione log-normale in un algoritmo genetico. Seguendo il ciclo delineato in questa guida puoi sintonizzare sistematicamente il tuo modello per ottenere prestazioni migliori, quindi riutilizzare il risultato best_hyperparameters.yaml per inizializzare future esecuzioni di addestramento. Per scalare la sintonizzazione su prove parallele e algoritmi di ricerca più avanzati, continua con la guida all'integrazione di Ray Tune, oppure esegui lavori gestiti con iperparametri configurabili e tracciamento delle metriche in tempo reale sulla Piattaforma Ultralytics tramite addestramento su cloud.
Per impostazioni che nessun argomento espone, come learning rate per livello o una metrica di fitness personalizzata, crea una sottoclasse del trainer invece. Per approfondimenti, esplora il codice sorgente della classe Tuner. Se hai domande o richieste di nuove funzionalità, contattaci su GitHub o Discord.
FAQ#
Imposta un valore iniziale con il parametro
lr0— i valori comuni variano da0.001a0.01— e lascia che la sintonizzazione lo muti a partire da lì per trovare l'optimum. Puoi automatizzare questa operazione con il metodomodel.tune(). Ad esempio:Esempiofrom ultralytics import YOLO # Initialize the YOLO model model = YOLO("yolo26n.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, controlla la pagina di configurazione di Ultralytics YOLO.
Gli algoritmi genetici in Ultralytics YOLO26 forniscono un metodo robusto per esplorare lo spazio degli iperparametri, portando a prestazioni del modello altamente ottimizzate. I vantaggi principali includono:
- Ricerca efficiente: Il crossover BLX-α combina i geni dei genitori con la fitness più alta, mentre la mutazione log-normale perturba il risultato per scoprire nuovi candidati.
- Evitare i minimi locali: Introducendo casualità, aiutano a evitare i minimi locali, garantendo una migliore ottimizzazione globale.
- Metriche di performance: Si adattano in base a un punteggio di fitness specifico per il compito (mAP50-95 per il rilevamento).
Per vedere come gli algoritmi genetici possono ottimizzare gli iperparametri, dai un'occhiata alla guida all'evoluzione degli iperparametri.
Il tempo necessario per l'ottimizzazione degli iperparametri con Ultralytics YOLO dipende in gran parte da diversi fattori come la dimensione del dataset, la complessità dell'architettura del modello, il numero di iterazioni e le risorse computazionali disponibili. Ad esempio, ottimizzare YOLO26n su un dataset come COCO8 per 30 epoche potrebbe richiedere da diverse ore a giorni, a seconda dell'hardware.
Per gestire efficacemente il tempo di sintonizzazione, definisci preventivamente un chiaro budget di sintonizzazione, come descritto in Preparazione all'ottimizzazione degli iperparametri. Questo aiuta a bilanciare l'allocazione delle risorse e gli obiettivi di ottimizzazione.
Quando valuti le performance del modello durante l'ottimizzazione degli iperparametri in YOLO, puoi utilizzare diverse metriche chiave:
- AP50: La precisione media con una soglia IoU di 0.50.
- F1-Score: La media armonica tra precision e recall.
- Precisione e richiamo: Metriche individuali che indicano l'accuratezza del modello nell'identificare veri positivi rispetto a falsi positivi e falsi negativi.
Queste metriche ti aiutano a comprendere diversi aspetti delle prestazioni del tuo modello. Fai riferimento alla guida sulle metriche di prestazione di Ultralytics YOLO per una panoramica completa.
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, insieme a capacità di esecuzione parallela per accelerare il processo di sintonizzazione.
Per utilizzare Ray Tune con YOLO26, imposta semplicemente il parametro
use_ray=Truenella chiamata al tuo metodomodel.tune(). Per maggiori dettagli ed esempi, dai un'occhiata alla guida all'integrazione di Ray Tune.