Ultralytics YOLO27:

Guida Ultralytics YOLO alla regolazione degli iperparametri#

La regolazione degli iperparametri in Ultralytics YOLO è una ricerca automatizzata e iterativa che ottimizza impostazioni — come il learning rate, i pesi della loss e l'intensità dell'augmentation — per massimizzare metriche delle prestazioni del modello di machine learning come accuratezza, precisione e recall. Invece di testare manualmente questi valori, Ultralytics YOLO esplora lo spazio degli iperparametri con un algoritmo genetico che modifica e valuta configurazioni candidate attraverso numerose brevi esecuzioni di training.



Watch: How to Tune Hyperparameters for Better Model Performance 🚀

Cosa sono gli iperparametri?#

Gli iperparametri sono impostazioni strutturali di alto livello dell'algoritmo. Vengono impostati prima della fase di training e rimangono costanti durante quest'ultima. Ecco alcuni degli iperparametri comunemente regolati in Ultralytics YOLO:

  • Learning rate lr0: determina la dimensione del passo a ogni iterazione mentre ci si avvicina a un minimo nella funzione di loss.
  • Dimensione del batch batch: numero di immagini elaborate simultaneamente in un forward pass.
  • Numero di epoche epochs: un'epoca è un forward pass e backward pass completi di tutti gli esempi di training.
  • Dettagli dell'architettura: ad esempio numero di canali, numero di layer, tipi di funzioni di attivazione, ecc. Questi elementi si trovano nella configurazione YAML del modello, non negli argomenti di training.

Di questi quattro, solo il learning rate fa parte dello spazio di ricerca predefinito: batch, epochs e l'architettura rimangono fissi. Il tuner modifica anche lo schedule, i coefficienti della loss e le augmentation elencate di seguito.

Hyperparameter optimization search space visualization

Per un elenco completo degli iperparametri di augmentation utilizzati in YOLO26, consulta 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.

  • Selezione: a ogni iterazione viene selezionata una delle configurazioni con fitness più elevata, fino a un massimo di nove, con ponderazione basata sulla fitness. Dopo 30 risultati, il 20% migliore di tutti i risultati (fino a 30) stima anche la covarianza dei parametri, con un'influenza che cresce man mano che si accumulano evidenze sulle configurazioni d'élite.
  • Mutazione: a ogni iterazione viene modificata circa la metà dei parametri utilizzando passi gaussiani normalizzati in base ai rispettivi intervalli di ricerca. Quando la covarianza è attiva, una quota ponderata per la confidenza, pari al massimo al 40%, utilizza passi correlati, mentre la riflessione riporta tali passi entro i limiti senza accumulare valori troncati. Man mano che si accumulano trial senza miglioramenti, le dimensioni dei passi si restringono linearmente fino al 20% nell'arco di 25 trial e vengono reimpostate quando viene trovato un nuovo risultato migliore. L'iterazione 1 non ha un genitore e utilizza gli iperparametri di training predefiniti come baseline.

Preparazione alla regolazione degli iperparametri#

Prima di iniziare il processo di regolazione, è importante:

  1. Identificare le metriche: il tuner integrato (use_ray=False) classifica i trial in base al punteggio fitness dell'attività, mentre use_ray=True utilizza la metrica dell'attività. Decidi quali metriche secondarie esaminare, come AP50 o F1-score.
  2. Impostare il budget di regolazione: definisci quante risorse computazionali sei disposto ad allocare. La regolazione degli iperparametri può richiedere molte risorse computazionali.

Come funziona il ciclo di regolazione#

A ogni iterazione, il tuner integrato ripete il ciclo seguente:

  1. Inizializzare gli iperparametri — parti da una baseline ragionevole, costituita dagli iperparametri predefiniti impostati da Ultralytics YOLO oppure da valori basati sulle tue conoscenze del dominio o su esperimenti precedenti.
  2. Modificare gli iperparametri — la classe Tuner produce automaticamente un nuovo insieme di iperparametri a partire da quello esistente tramite il metodo _mutate.
  3. Eseguire il training del modello — esegui il training utilizzando gli iperparametri modificati, quindi valuta le prestazioni del training con le metriche scelte.
  4. Valutare il modello — il processo di valutazione produce il punteggio di fitness dell'iterazione, che viene confrontato con quello delle iterazioni precedenti per determinare se gli iperparametri correnti rappresentano un miglioramento.
  5. Registrare i risultati — registra sia le metriche delle prestazioni sia gli iperparametri corrispondenti per riferimento futuro. Ultralytics YOLO salva automaticamente questi risultati in formato NDJSON.
  6. Ripetere — continua fino al raggiungimento del numero di iterazioni impostato, facendo sì che ogni iterazione si basi sulle conoscenze acquisite nelle esecuzioni precedenti. Il tuner integrato esegue tutti i iterations; Ray Tune riporta le metriche dopo ogni epoca di fit, consentendo ad ASHA di interrompere i trial deboli al termine del relativo periodo di tolleranza.

Iterazioni e dimensione della popolazione#

Con il tuner integrato (use_ray=False), iterations controlla il numero totale di trial sequenziali e ha come valore predefinito 300. Ogni trial esegue il training di un modello con una configurazione di iperparametri — ad esempio, iterations=40 con epochs=50 pianifica 40 esecuzioni indipendenti di training da 50 epoche, non un'unica esecuzione da 50 epoche con una popolazione separata di 40 candidati.

L'algoritmo genetico integrato non dispone di un parametro esplicito per la dimensione della popolazione. Quando esistono trial precedenti, seleziona fino a nove configurazioni con la fitness più elevata e modifica un candidato per iterazione.

Per trial paralleli o strategie di ricerca più avanzate, imposta use_ray=True per utilizzare Ray Tune, che usa lo stesso valore predefinito di 300 trial e riceve iterations come num_samples. Per maggiori 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 la regolazione degli iperparametri in YOLO26. Ogni parametro ha un intervallo di valori specifico definito da una tupla (min, max).

ParametroTipoIntervallo di valoriDescrizione
lr0float(1e-5, 1e-2)Learning rate iniziale all'inizio del training. Valori inferiori forniscono un training più stabile, ma una convergenza più lenta
lrffloat(0.01, 1.0)Fattore del learning rate finale come frazione di lr0. Controlla quanto diminuisce il learning rate durante il training
momentumfloat(0.7, 0.98)Fattore di momentum di SGD. Valori più elevati aiutano a mantenere costante la direzione del gradiente e possono accelerare la convergenza
weight_decayfloat(0.0, 0.001)Fattore di regolarizzazione L2 per prevenire l'overfitting. Valori più elevati impongono una regolarizzazione più forte
warmup_epochsfloat(0.0, 5.0)Numero di epoche per il warmup lineare del learning rate. Aiuta a prevenire l'instabilità nelle prime fasi del training
warmup_momentumfloat(0.0, 0.95)Momentum iniziale durante la fase di warmup. Aumenta gradualmente fino al valore finale del momentum
boxfloat(1.0, 20.0)Peso della loss dei bounding box nella funzione di loss totale. Bilancia la regressione dei box rispetto alla classificazione
clsfloat(0.1, 4.0)Peso della loss di classificazione nella funzione di loss totale. Valori più elevati enfatizzano la previsione corretta della classe
cls_pwfloat(0.0, 1.0)Potenza di ponderazione delle classi per gestire lo sbilanciamento tra classi. Valori più elevati aumentano il peso delle classi rare
dflfloat(0.4, 12.0)Peso del termine di regressione della distanza dei box. YOLO26 senza DFL applica questo guadagno a una loss L1 sulle distanze normalizzate dei box; valori più elevati enfatizzano una localizzazione precisa
hsv_hfloat(0.0, 0.1)Intervallo di augmentation casuale della tonalità nello spazio colore HSV. Aiuta il modello a generalizzare tra variazioni di colore
hsv_sfloat(0.0, 0.9)Intervallo di augmentation casuale della saturazione nello spazio HSV. Simula condizioni di illuminazione diverse
hsv_vfloat(0.0, 0.9)Intervallo di augmentation casuale del valore (luminosità). Aiuta il modello a gestire diversi livelli di esposizione
degreesfloat(0.0, 45.0)Rotazione massima dell'augmentation in gradi. Aiuta il modello a diventare invariante all'orientamento degli oggetti
translatefloat(0.0, 0.9)Traslazione massima dell'augmentation come frazione delle dimensioni dell'immagine. Migliora la robustezza rispetto alla posizione degli oggetti
scalefloat(0.0, 0.95)Intervallo di augmentation del ridimensionamento casuale. Aiuta il modello a rilevare oggetti di dimensioni diverse
shearfloat(0.0, 10.0)Shear massimo dell'augmentation in gradi. Aggiunge distorsioni simili alla prospettiva alle immagini di training
perspectivefloat(0.0, 0.001)Intervallo di augmentation della prospettiva casuale. Simula angoli di visualizzazione diversi
flipudfloat(0.0, 1.0)Probabilità del flip verticale dell'immagine durante il training. Utile per immagini aeree o riprese dall'alto
fliplrfloat(0.0, 1.0)Probabilità del flip orizzontale dell'immagine. Aiuta il modello a diventare invariante alla direzione degli oggetti
bgrfloat(0.0, 1.0)Probabilità di utilizzare l'augmentation BGR, che scambia i canali colore. Può aiutare a ottenere l'invarianza al colore
mosaicfloat(0.0, 1.0)Probabilità di utilizzare l'augmentation mosaic, che combina 4 immagini. Particolarmente utile per il rilevamento di oggetti piccoli
mixupfloat(0.0, 1.0)Probabilità di utilizzare l'augmentation mixup, che fonde due immagini. Può migliorare la robustezza del modello
cutmixfloat(0.0, 1.0)Probabilità di utilizzare l'augmentation cutmix. Combina regioni dell'immagine mantenendo le caratteristiche locali
copy_pastefloat(0.0, 1.0)In modalità flip, la frazione di oggetti idonei copiati; in modalità mixup, anche la probabilità di applicarla
close_mosaicint(0.0, 10.0)Disabilita il mosaic nelle ultime N epoche per stabilizzare il training prima del completamento. Viene modificato 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 usare la classe Tuner per la regolazione degli iperparametri di YOLO26n su COCO8 per 30 epoche con un ottimizzatore AdamW, saltando plotting, checkpoint e validation, tranne che nell'epoca finale, per velocizzare la regolazione.

Attenzione

Questo esempio è destinato esclusivamente alla dimostrazione. Gli iperparametri derivati da esecuzioni di regolazione brevi o su piccola scala sono raramente ottimali per il training nel mondo reale. In pratica, la regolazione dovrebbe essere eseguita con impostazioni simili a quelle del training completo — inclusi dataset, numero di epoche e augmentation comparabili — per garantire risultati affidabili e trasferibili. Una regolazione rapida può orientare i parametri verso una convergenza più veloce o miglioramenti a breve termine nella validation che non 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,
)

Ripresa di una sessione di regolazione degli iperparametri interrotta#

Puoi riprendere una sessione di regolazione degli iperparametri interrotta passando resume=True. Facoltativamente, puoi passare la directory name utilizzata in runs/{task} per riprendere la sessione. Senza un name, la sessione riprende la directory denominata letteralmente tune, che è il nome predefinito e non quello della sessione eseguita più di recente; passa quindi name per qualsiasi esecuzione avviata con un nome personalizzato. Devi inoltre fornire tutti gli argomenti di training precedenti, 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 correttamente il processo di regolazione degli iperparametri, otterrai diversi file e directory che raccolgono i risultati della regolazione. Di seguito viene descritto ciascuno di essi:

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 regolazione, ovvero un modello addestrato con un insieme di iperparametri. La directory tune/ contiene i risultati della regolazione di tutti i singoli training 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 regolazione. Puoi utilizzare questo file per inizializzare 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/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 le prestazioni dell'algoritmo genetico nel tempo.

  • Formato: PNG
  • Utilizzo: visualizzazione delle prestazioni

Hyperparameter Tuning Fitness vs Iteration

Il grafico contiene:

  • Un indicatore per ogni iterazione per dataset, quindi un'esecuzione su un singolo dataset mostra un punto per iterazione, mentre un'esecuzione su più dataset mostra un punto per dataset per iterazione.
  • Una linea puntinata della "media livellata" calcolata come smoothing gaussiano (sigma=3) sui valori di fitness di primo livello per iterazione.

tune_results.ndjson#

Un file NDJSON contenente i risultati dettagliati di ogni iterazione di regolazione. Ogni riga è un oggetto JSON con la fitness aggregata, gli iperparametri regolati e le metriche per dataset. La regolazione su un singolo dataset e quella su più dataset utilizzano lo stesso formato di file.

  • Formato: NDJSON
  • Utilizzo: monitoraggio dei risultati per iterazione.
  • Esempio:

Segue 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/coco8",
        "coco8-grayscale": "runs/detect/coco8-grayscale"
    }
}

L'elemento di primo livello fitness è la media aritmetica dei valori fitness per dataset. Nella regolazione su un singolo dataset, il dizionario datasets contiene una voce il cui fitness è uguale a fitness di primo livello. Viene registrato un oggetto JSON per ogni iterazione completata. I percorsi effettivi save_dirs sono assoluti; qui sono abbreviati per facilitare 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 delle prestazioni. La mutazione utilizza l'intervallo configurato di ciascun iperparametro, quindi i valori possono evolvere da valori predefiniti pari a zero come degrees e shear.

  • 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 fitness migliore dell'esecuzione di regolazione. Entrambi i file provengono dalla stessa iterazione:

  • last.pt: last.pt contiene i pesi dell'ultima epoca di training.
  • best.pt: i pesi best.pt appartengono all'iterazione che ha raggiunto il punteggio di fitness migliore.

Utilizzando questi risultati, puoi prendere decisioni più consapevoli per i futuri training e le future analisi dei modelli.

Conclusioni#

La regolazione degli iperparametri in Ultralytics YOLO è semplice da avviare e potente a livello interno, grazie alla selezione ponderata per fitness e alla mutazione normalizzata rispetto agli intervalli in un algoritmo genetico. Seguendo il ciclo descritto in questa guida puoi regolare sistematicamente il modello per ottenere prestazioni migliori, quindi riutilizzare il best_hyperparameters.yaml risultante per inizializzare futuri training. Per scalare la regolazione su trial paralleli e 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 il training sul cloud.

Per le impostazioni che nessun argomento espone, come learning rate per layer o una metrica di fitness personalizzata, crea una sottoclasse del trainer. Per approfondimenti, esplora il codice sorgente della classe Tuner. Se hai domande o richieste di funzionalità, contattaci su GitHub o Discord.

FAQ#

  • Imposta un valore iniziale con il parametro lr0 — i valori comuni vanno da 0.001 a 0.01 — e lascia che la regolazione lo modifichi per trovare il valore ottimale. Puoi automatizzare questa procedura 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 ulteriori 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, portando a prestazioni del modello altamente ottimizzate. I principali vantaggi includono:

    • Ricerca efficiente: la selezione ponderata in base alla fitness preserva le configurazioni più efficaci, mentre la mutazione normalizzata sull'intervallo esplora nuovi candidati.
    • Evitare i minimi locali: introducendo casualità, aiutano a evitare i minimi locali, garantendo una migliore ottimizzazione globale.
    • Metriche delle prestazioni: 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 l'ottimizzazione degli 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. Ad esempio, l'ottimizzazione di YOLO26n su un dataset come COCO8 per 30 epoche potrebbe richiedere da diverse ore a diversi giorni, a seconda dell'hardware.

    Per gestire efficacemente il tempo di ottimizzazione, definisci in anticipo un budget chiaro, come illustrato in Preparazione all'ottimizzazione degli iperparametri. Questo aiuta a bilanciare l'allocazione delle risorse e gli obiettivi di ottimizzazione.

  • Quando valuti le prestazioni del modello durante l'ottimizzazione degli iperparametri in YOLO, puoi utilizzare 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 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 delle prestazioni del modello. Consulta la guida alle metriche delle prestazioni 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, oltre a funzionalità di esecuzione parallela per accelerare il processo di ottimizzazione.

    Per utilizzare Ray Tune con YOLO26, imposta semplicemente il parametro use_ray=True nella chiamata al metodo model.tune(). Per ulteriori dettagli ed esempi, consulta la guida all'integrazione di Ray Tune.

Commenti