Meet YOLO26: next-gen vision AI.

Link to this sectionGuida all'ottimizzazione degli iperparametri di Ultralytics YOLO#

La sintonizzazione degli iperparametri in Ultralytics YOLO è una ricerca automatizzata e iterativa che ottimizza le impostazioni, come il learning rate, i pesi di perdita e la forza dell'aumento, per massimizzare le metriche di prestazione di un 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 muta e valuta le configurazioni candidate attraverso numerosi cicli di addestramento brevi.



Watch: How to Tune Hyperparameters for Better Model Performance 🚀

Link to this sectionCosa 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 muove 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 conteggi dei canali, numero di livelli, tipi di funzioni di attivazione, ecc.

Hyperparameter optimization search space visualization

Per un elenco completo degli iperparametri di aumento dati utilizzati in YOLO26, fai riferimento alla pagina delle configurazioni.

Link to this sectionEvoluzione genetica e mutazione#

Ultralytics YOLO utilizza algoritmi genetici per ottimizzare gli iperparametri. Gli algoritmi genetici si ispirano al 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.

Link to this sectionPreparazione per l'ottimizzazione degli iperparametri#

Prima di iniziare il processo di ottimizzazione, è importante:

  1. Identificare le metriche: Determina le metriche che userai per valutare la performance del modello. Potrebbe trattarsi di AP50, punteggio F1 o altro.
  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.

Link to this sectionCome 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 — utilizza metriche come AP50, F1-score o metriche personalizzate attraverso il processo di valutazione per determinare se gli iperparametri attuali migliorano quelli precedenti.
  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. Ripetizione — continua fino al raggiungimento del numero stabilito di iterazioni o fino a quando la metrica di prestazione non è soddisfacente, con ogni iterazione che sfrutta le conoscenze acquisite dai cicli precedenti.

Link to this sectionIterazioni e dimensione della popolazione#

Con il tuner integrato (use_ray=False), iterations controlla il numero totale di prove sequenziali. 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, non un'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. 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. Vedi la guida all'integrazione di Ray Tune per i dettagli.

Link to this sectionSpazio di ricerca predefinito#

La seguente tabella elenca i parametri dello spazio di ricerca predefiniti per l'ottimizzazione 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)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 DFL (Distribution Focal Loss) nella funzione di perdita totale. Valori più alti enfatizzano la precisa localizzazione del riquadro di delimitazione
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)Probabilità di utilizzare l'aumento copy-paste. Aiuta a migliorare le prestazioni della segmentazione delle istanze
close_mosaicfloat(0.0, 10.0)Disabilita il mosaico nelle ultime N epoche per stabilizzare l'addestramento prima del completamento

Link to this sectionEsempio 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 la creazione di grafici, il checkpointing e la validazione tranne che nell'epoca finale per un'ottimizzazione 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,
)

Link to this sectionRiprendere 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 utilizzata sotto runs/{task} per riprendere. Altrimenti, riprenderà l'ultima sessione interrotta. Devi anche fornire tutti gli argomenti di addestramento 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)

Link to this sectionRisultati#

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:

Link to this sectionStruttura dei file#

Ecco come apparirà la struttura delle directory dei risultati. Le directory di addestramento come train1/ contengono singole iterazioni di ottimizzazione, ovvero un modello addestrato con un set di iperparametri. La directory tune/ contiene i risultati di ottimizzazione di tutti i singoli addestramenti del modello:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── tune_fitness.png
        ├── tune_results.ndjson
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Link to this sectionDescrizioni dei file#

Link to this sectionbest_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/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

Link to this sectiontune_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 tratteggiata di "media livellata" calcolata come una levigatura Gaussiana (sigma=3) sui valori di fitness di alto livello per iterazione.

Link to this sectiontune_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 in formato leggibile; 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/dfl_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/dfl_loss": 1.70226,
            "fitness": 0.33152
        }
    },
    "save_dirs": {
        "coco8": "runs/detect/coco8",
        "coco8-grayscale": "runs/detect/coco8-grayscale"
    }
}

La fitness di alto livello è la media aritmetica dei valori di fitness per set di dati. Per l'ottimizzazione su set di dati singolo, il dizionario datasets ha una voce la cui fitness equivale alla fitness di alto livello. Viene registrato un oggetto JSON per ogni iterazione completata. I percorsi effettivi save_dirs sono assoluti; sono abbreviati sopra per leggibilità.

Link to this sectiontune_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 performance. Gli iperparametri il cui valore predefinito è 0 (ad esempio, degrees e shear qui sotto) potrebbero evolversi solo lentamente dal loro seed iniziale, poiché il fattore di mutazione moltiplicativo ha pochissimo margine per espandersi partendo da un valore vicino allo zero.

  • Formato: PNG
  • Utilizzo: Analisi esplorativa dei dati

Hyperparameter tuning results scatter plot analysis

Link to this sectionweights/#

Questa directory contiene i modelli PyTorch salvati per l'ultima e la migliore iterazione durante il processo di ottimizzazione degli iperparametri.

  • last.pt: Il file last.pt contiene i pesi dell'ultima epoca di addestramento.
  • best.pt: Il file best.pt contiene i pesi per l'iterazione che ha raggiunto il miglior punteggio di fitness.

Utilizzando questi risultati, puoi prendere decisioni più informate per futuri addestramenti e analisi dei modelli.

Link to this sectionConclusione#

La sintonizzazione degli iperparametri in Ultralytics YOLO è semplice da avviare e potente internamente, combinando il crossover BLX-α con la mutazione log-normale in un algoritmo genetico. Seguendo il ciclo descritto in questa guida, potrai sintonizzare sistematicamente il tuo modello per ottenere prestazioni migliori, quindi riutilizzare il file best_hyperparameters.yaml risultante per inizializzare futuri cicli di addestramento. Per scalare la sintonizzazione su prove parallele e algoritmi di ricerca più avanzati, continua con la guida all'integrazione di Ray Tune o esegui job gestiti con iperparametri configurabili e monitoraggio delle metriche in tempo reale sulla Ultralytics Platform tramite addestramento cloud.

Per approfondimenti, esplora il codice sorgente della Tuner class. Se hai domande o richieste di funzionalità, contatta su GitHub o Discord.

Link to this sectionFAQ#

Link to this sectionCome posso ottimizzare il learning rate per Ultralytics YOLO durante l'ottimizzazione degli iperparametri?#

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 per trovare l'ottimo. Puoi automatizzare questo processo con il metodo model.tune(). Per 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.

Link to this sectionQuali sono i vantaggi dell'utilizzo degli algoritmi genetici per l'ottimizzazione degli iperparametri in YOLO26?#

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.

Link to this sectionQuanto 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 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 in anticipo un budget chiaro, come trattato in Preparazione per la sintonizzazione degli iperparametri. Ciò aiuta a bilanciare l'allocazione delle risorse e gli obiettivi di ottimizzazione.

Link to this sectionQuali metriche dovrei usare per valutare le performance del modello durante l'ottimizzazione degli iperparametri in YOLO?#

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.
  • Precision e Recall: 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 performance del tuo modello. Fai riferimento alla guida sulle metriche di performance di Ultralytics YOLO per una panoramica completa.

Link to this sectionPosso usare Ray Tune per l'ottimizzazione avanzata degli iperparametri con YOLO26?#

Sì, Ultralytics YOLO26 si integra con Ray Tune per un'ottimizzazione avanzata degli iperparametri. Ray Tune offre sofisticati algoritmi di ricerca come l'Ottimizzazione Bayesiana e Hyperband, insieme a capacità 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 tuo metodo model.tune(). Per ulteriori dettagli ed esempi, consulta la guida all'integrazione di Ray Tune.

Commenti