YOLO Vision 2026:

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.

Hyperparameter optimization search space visualization

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:

  1. Identifica le metriche: Il tuner integrato (use_ray=False) ordina le prove in base al punteggio fitness del task, mentre use_ray=True utilizza la metrica del task. Scegli quali metriche secondarie ispezionare, come AP50 o F1-score.
  2. 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:

  1. 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.
  2. Muta gli iperparametri — la Tuner class produce automaticamente un nuovo set di iperparametri da quello esistente con il suo metodo _mutate.
  3. Addestramento del modello — addestra utilizzando gli iperparametri mutati, quindi valuta le prestazioni dell'addestramento con le metriche che hai scelto.
  4. 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.
  5. 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.
  6. 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).

ParametroTipoIntervallo di valoriDescrizione
lr0float(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
lrffloat(0.01, 1.0)Fattore del tasso di apprendimento finale come frazione di lr0. Controlla quanto diminuisce il tasso di apprendimento durante l'addestramento
momentumfloat(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_decayfloat(0.0, 0.001)Fattore di regolarizzazione L2 per prevenire l'overfitting. Valori più grandi impongono una regolarizzazione più forte
warmup_epochsfloat(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_momentumfloat(0.0, 0.95)Momentum iniziale durante la fase di warmup. Aumenta gradualmente fino al valore finale di momentum
boxfloat(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
clsfloat(0.1, 4.0)Peso della perdita di classificazione nella funzione di perdita totale. Valori più alti enfatizzano la corretta previsione della classe
cls_pwfloat(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
dflfloat(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_hfloat(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_sfloat(0.0, 0.9)Intervallo di aumento casuale della saturazione nello spazio HSV. Simula diverse condizioni di illuminazione
hsv_vfloat(0.0, 0.9)Intervallo di aumento casuale del valore (luminosità). Aiuta il modello a gestire diversi livelli di esposizione
degreesfloat(0.0, 45.0)Aumento massimo della rotazione in gradi. Aiuta il modello a diventare invariante rispetto all'orientamento dell'oggetto
translatefloat(0.0, 0.9)Aumento massimo della traslazione come frazione della dimensione dell'immagine. Migliora la robustezza rispetto alla posizione dell'oggetto
scalefloat(0.0, 0.95)Intervallo di aumento casuale della scala. Aiuta il modello a rilevare oggetti di dimensioni diverse
shearfloat(0.0, 10.0)Aumento massimo del taglio (shear) in gradi. Aggiunge distorsioni simili alla prospettiva alle immagini di addestramento
perspectivefloat(0.0, 0.001)Intervallo di aumento casuale della prospettiva. Simula angoli di visione diversi
flipudfloat(0.0, 1.0)Probabilità di capovolgimento verticale dell'immagine durante l'addestramento. Utile per immagini dall'alto/aeree
fliplrfloat(0.0, 1.0)Probabilità di capovolgimento orizzontale dell'immagine. Aiuta il modello a diventare invariante rispetto alla direzione dell'oggetto
bgrfloat(0.0, 1.0)Probabilità di utilizzare l'aumento BGR, che scambia i canali di colore. Può aiutare con l'invarianza del colore
mosaicfloat(0.0, 1.0)Probabilità di utilizzare l'aumento mosaico, che combina 4 immagini. Particolarmente utile per il rilevamento di piccoli oggetti
mixupfloat(0.0, 1.0)Probabilità di utilizzare l'aumento MixUp, che mescola due immagini. Può migliorare la robustezza del modello
cutmixfloat(0.0, 1.0)Probabilità di utilizzare l'aumento cutmix. Combina regioni dell'immagine mantenendo le caratteristiche locali
copy_pastefloat(0.0, 1.0)Nella modalità flip la frazione di oggetti idonei copiati, nella modalità mixup anche la probabilità di applicarlo
close_mosaicint(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.

Avviso

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.

Esempio
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.

Utilizzo di `resume=True` con `model.tune()`
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.pt

Descrizioni 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

Hyperparameter Tuning Fitness vs Iteration

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

Hyperparameter tuning results scatter plot analysis

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 da 0.001 a 0.01 — e lascia che la sintonizzazione lo muti a partire da lì per trovare l'optimum. Puoi automatizzare questa operazione con il metodo model.tune(). Ad esempio:

    Esempio
    from 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=True nella chiamata al tuo metodo model.tune(). Per maggiori dettagli ed esempi, dai un'occhiata alla guida all'integrazione di Ray Tune.

Commenti