Vai al contenuto

Guida all'ottimizzazione degli iperparametri di Ultralytics YOLO

Introduzione

La regolazione degli iperparametri non è una configurazione una tantum, ma un processo iterativo volto a ottimizzare le metriche di prestazione del modello di machine learning, quali accuratezza, precisione e richiamo. Nel contesto di Ultralytics YOLO, questi iperparametri possono variare dal tasso di apprendimento ai dettagli architetturali, come il numero di livelli o i tipi di funzioni di attivazione utilizzati. Ultralytics supporta inoltre l'addestramento su cloud con iperparametri configurabili e il monitoraggio delle metriche in tempo reale.



Guarda: Come ottimizzare gli iperparametri per migliorare le prestazioni del modello 🚀

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 ad ogni iterazione mentre ci si sposta verso un minimo nella funzione di perdita.
  • Dimensione Batch batch: Numero di immagini elaborate simultaneamente in un passaggio in avanti.
  • Numero di Epoche epochs: Un'epoca è un passaggio completo in avanti e indietro di tutti gli esempi di training.
  • Specifiche dell'Architettura: Come il numero di canali, il numero di livelli, i tipi di funzioni di attivazione, ecc.

Visualizzazione dello spazio di ricerca dell'ottimizzazione degli iperparametri

Per un elenco completo degli iperparametri di aumento utilizzati in YOLO26 si prega di fare riferimento alla 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.

  • Crossover: ogni iterazione combina i geni provenienti da un massimo di nove delle configurazioni con la fitness più elevata osservate fino a quel momento, utilizzando il crossover BLX-α con selezione dei genitori ponderata in base alla fitness.
  • Mutazione: il candidato ricombinato viene quindi modificato mediante un fattore moltiplicativo log-normale applicato a ciascun iperparametro (con una probabilità dello 0,5 per parametro). L'intensità della mutazione, sigma, diminuisce linearmente da 0,2 a 0,1 nel corso delle prime 300 iterazioni, in modo che l'algoritmo esplori ampiamente all'inizio e affini il risultato man mano che converge. L'iterazione 1 non ha genitori da cui effettuare il crossover e utilizza gli iperparametri di addestramento predefiniti come base di riferimento.

Prepararsi per la messa a punto degli iperparametri

Prima di iniziare il processo di ottimizzazione, è importante:

  1. Identifica le metriche: Determina le metriche che utilizzerai per valutare le prestazioni del modello. Potrebbe essere AP50, F1-score o altro.
  2. Impostare il Budget di Ottimizzazione: Definire quante risorse computazionali si è disposti ad allocare. L'ottimizzazione degli iperparametri può essere computazionalmente intensiva.

Passaggi coinvolti

Inizializza gli iperparametri

Inizia con un set ragionevole di iperparametri iniziali. Potrebbe trattarsi degli iperparametri predefiniti impostati da Ultralytics YOLO o di qualcosa basato sulla tua conoscenza del dominio o su esperimenti precedenti.

Modifica degli iperparametri

Utilizzare il _mutate metodo per produrre un nuovo set di iperparametri basato sul set esistente. Il Classe Tuner gestisce automaticamente questo processo.

Addestramento del modello

L'addestramento viene eseguito utilizzando l'insieme mutato di iperparametri. Le prestazioni dell'addestramento vengono quindi valutate utilizzando le metriche scelte.

Valutazione del modello

Utilizza metriche come AP50, F1-score o metriche personalizzate per valutare le prestazioni del modello. Il processo di valutazione aiuta a determinare se gli iperparametri correnti sono migliori di quelli precedenti.

Registrazione dei risultati

È fondamentale registrare sia le metriche di prestazione che i relativi iperparametri per poterli consultare in futuro. Ultralytics YOLO salvaYOLO questi risultati in formato NDJSON.

Ripeti

Il processo viene ripetuto fino a quando non viene raggiunto il numero di iterazioni impostato o la metrica di performance è soddisfacente. Ogni iterazione si basa sulle conoscenze acquisite dalle esecuzioni precedenti.

Descrizione dello spazio di ricerca predefinito

La seguente tabella elenca i parametri predefiniti dello spazio di ricerca 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 finale del learning rate come frazione di lr0. Controlla di quanto diminuisce il learning rate 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à iniziale dell'addestramento
warmup_momentumfloat(0.0, 0.95)Momentum iniziale durante la fase di warmup. Aumenta gradualmente fino al valore di momentum finale
boxfloat(1.0, 20.0)Peso della loss del riquadro di delimitazione nella funzione di loss totale. Bilancia la regressione del riquadro rispetto alla classificazione
clsfloat(0.1, 4.0)Peso della loss di classificazione nella funzione di loss totale. Valori più alti enfatizzano la predizione corretta della classe
cls_pwfloat(0.0, 1.0)Potenziamento della ponderazione delle classi per gestire lo squilibrio tra le classi. Valori più alti aumentano la ponderazione delle classi rare
dflfloat(0.4, 12.0)Peso DFL (Distribution Focal Loss) nella funzione di perdita totale. Valori più alti enfatizzano una localizzazione precisa dei bounding box.
hsv_hfloat(0.0, 0.1)Intervallo casuale di aumento della tonalità nello spazio colore HSV. Aiuta il modello a generalizzare tra le variazioni di colore
hsv_sfloat(0.0, 0.9)Intervallo casuale di aumento della saturazione nello spazio HSV. Simula diverse condizioni di illuminazione
hsv_vfloat(0.0, 0.9)Intervallo casuale di aumento del valore (luminosità). Aiuta il modello a gestire diversi livelli di esposizione
degreesfloat(0.0, 45.0)Massima aumentazione della rotazione in gradi. Aiuta il modello a diventare invariante all'orientamento dell'oggetto
translatefloat(0.0, 0.9)Massima aumentazione della traslazione come frazione della dimensione dell'immagine. Migliora la robustezza alla posizione dell'oggetto
scalefloat(0.0, 0.95)Intervallo di aumento della scala casuale. Aiuta il modello a detect gli oggetti a diverse dimensioni
shearfloat(0.0, 10.0)Massima aumentazione del taglio in gradi. Aggiunge distorsioni simili alla prospettiva alle immagini di allenamento
perspectivefloat(0.0, 0.001)Intervallo casuale di aumento della prospettiva. Simula diverse angolazioni di visualizzazione
flipudfloat(0.0, 1.0)Probabilità di inversione verticale dell'immagine durante l'addestramento. Utile per immagini aeree/dall'alto
fliplrfloat(0.0, 1.0)Probabilità di inversione 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 a 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 fonde due immagini. Può migliorare la robustezza del modello
cutmixfloat(0.0, 1.0)Probabilità di utilizzo dell'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)Disattiva il mosaico nelle ultime N epoche per stabilizzare l'addestramento prima del completamento

Esempio di spazio di ricerca personalizzato

Ecco come definire uno spazio di ricerca e utilizzare il model.tune() metodo per utilizzare la Tuner classe per l'ottimizzazione degli iperparametri di YOLO26n su COCO8 per 30 epoche con un ottimizzatore AdamW e saltando la creazione di grafici, il checkpointing e la validazione, ad eccezione dell'epoca finale, per un'ottimizzazione più rapida.

Attenzione

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 in impostazioni simili all'addestramento completo, inclusi dataset, epoche e aumentazioni comparabili, per garantire risultati affidabili e trasferibili. L'ottimizzazione rapida può distorcere i parametri verso una convergenza più rapida o guadagni di convalida 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 ottimizzazione degli iperparametri interrotta passando resume=True. Puoi facoltativamente passare la directory name utilizzato in runs/{task} per riprendere. Altrimenti, riprenderebbe l'ultima sessione interrotta. Devi anche fornire tutti gli argomenti di addestramento precedenti, inclusi data, epochs, iterations e space.

L'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, si otterranno diversi file e directory che incapsulano i risultati dell'ottimizzazione. Di seguito viene descritto ciascuno di essi:

Struttura dei file

Ecco come apparirà la struttura delle directory dei risultati. Le directory di training come train1/ contengono singole iterazioni di tuning, ovvero un modello addestrato con un set di iperparametri. Il tune/ contiene i risultati dell'ottimizzazione di tutti i singoli training 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

Descrizioni dei file

best_hyperparameters.yaml

Questo file YAML contiene gli iperparametri con le migliori prestazioni riscontrate durante il processo di ottimizzazione. Puoi utilizzare questo file per inizializzare i 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/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
    

tune_fitness.png

Questo grafico mostra l'indice di fitness in funzione del numero di iterazioni. Ti aiuta a visualizzare l'andamento dell'algoritmo genetico nel tempo.

  • Formato: PNG
  • Utilizzo: Visualizzazione delle prestazioni

Idoneità rispetto all'iterazione della messa a punto degli iperparametri

La trama comprende:

  • Un indicatore per ogni iterazione per ogni set di dati; pertanto, un'esecuzione su un singolo set di dati mostra un punto per ogni iterazione, mentre un'esecuzione su più set di dati mostra un punto per ogni set di dati per ogni iterazione.
  • Una linea tratteggiata che rappresenta la "media livellata" calcolato come livellamento gaussiano (sigma=3) rispetto ai valori di fitness di primo livello per ogni iterazione.

tune_results.ndjson

Un file NDJSON contenente i risultati dettagliati di ogni iterazione di ottimizzazione. Ogni riga corrisponde a un oggetto JSON che riporta l'idoneità aggregata, gli iperparametri ottimizzati e le metriche per ciascun set di dati. L'ottimizzazione su un singolo set di dati e quella su più set di dati utilizzano lo stesso formato di file.

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

Di seguito è riportato un esempio formattato per facilitarne la lettura. Nel codice effettivo .ndjson nel file, 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"
    }
}

Il livello superiore fitness è la media aritmetica per ogni set di dati fitness valori. Per l'ottimizzazione su un singolo set di dati, il datasets Il dizionario contiene una voce il cui fitness corrisponde al livello superiore fitness. Per ogni iterazione completata viene registrato un oggetto JSON. Il valore effettivo save_dirs I percorsi sono assoluti; qui sopra sono stati abbreviati per facilitare la lettura.

tune_scatter_plots.png

Questo file contiene grafici a dispersione generati da tune_results.ndjson, aiutandoti a visualizzare le relazioni tra i diversi iperparametri e gli indicatori di prestazione. Gli iperparametri il cui valore predefinito è 0 (ad esempio, degrees e shear (vedi sotto) potrebbero evolversi solo lentamente a partire dal loro stato iniziale, poiché il fattore di mutazione moltiplicativo ha ben poco margine di espansione partendo da un valore quasi nullo.

  • Formato: PNG
  • Utilizzo: Analisi esplorativa dei dati

Analisi del grafico a dispersione dei risultati della regolazione degli iperparametri

weights/

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

  • last.pt: last.pt sono i pesi dell'ultima epoca di training.
  • best.pt: best.pt sono i pesi per l'iterazione che ha ottenuto il miglior punteggio di fitness.

Utilizzando questi risultati, puoi prendere decisioni più informate per i tuoi futuri training e analisi del modello. Sentiti libero di consultare questi artefatti per capire quanto bene ha funzionato il tuo modello e come potresti migliorarlo ulteriormente.

Conclusione

Il processo di ottimizzazione degli iperparametri in Ultralytics YOLO semplice ma efficace, grazie al suo approccio basato su algoritmi genetici che combina il crossover BLX-α con la mutazione log-normale. Seguire i passaggi descritti in questa guida ti aiuterà a ottimizzare sistematicamente il tuo modello per ottenere prestazioni migliori.

Letture aggiuntive

  1. Ottimizzazione degli iperparametri su Wikipedia
  2. Guida all'evoluzione degli iperparametri di YOLOv5
  3. Ottimizzazione Efficiente degli Iperparametri con Ray Tune e YOLO26

Per approfondimenti, puoi esplorare il Tuner classe codice sorgente e documentazione di accompagnamento. In caso di domande, richieste di funzionalità o necessità di ulteriore assistenza, non esitate a contattarci su GitHub oppure Discord.

FAQ

Come posso ottimizzare il tasso di apprendimento per Ultralytics YOLO durante l'ottimizzazione degli iperparametri?

Per ottimizzare il tasso di apprendimento per Ultralytics YOLO, inizia impostando un tasso di apprendimento iniziale usando il lr0 parametro. I valori comuni variano da 0.001 a 0.01. Durante il processo di ottimizzazione degli iperparametri, questo valore verrà modificato per trovare l'impostazione ottimale. Puoi utilizzare il model.tune() metodo per automatizzare questo processo. 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, consulta la pagina di configurazione di Ultralytics YOLO.

Quali sono i vantaggi dell'utilizzo di 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 principali vantaggi includono:

  • Ricerca efficiente: il crossover BLX-α combina i geni dei genitori con la maggiore fitness, mentre la mutazione log-normale altera il risultato per individuare nuovi candidati.
  • Evitare i minimi locali: introducendo la casualità, aiutano a evitare i minimi locali, garantendo una migliore ottimizzazione globale.
  • Metriche di prestazione: si adattano in base a un punteggio di idoneità specifico per l'attività (mAP50 per il rilevamento).

Per vedere come gli algoritmi genetici possono ottimizzare gli iperparametri, consulta la guida all'evoluzione degli iperparametri.

Quanto tempo richiede il processo di ottimizzazione degli iperparametri per Ultralytics YOLO?

Il tempo richiesto 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, l'ottimizzazione di 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 ottimizzazione, definisci in anticipo un budget di ottimizzazione chiaro (collegamento alla sezione interna). Questo aiuta a bilanciare l'allocazione delle risorse e gli obiettivi di ottimizzazione.

Quali metriche dovrei usare per valutare le prestazioni del modello durante l'ottimizzazione degli iperparametri in YOLO?

Quando si valuta la performance del modello durante l'ottimizzazione degli iperparametri in YOLO, è possibile 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 della performance del tuo modello. Consulta la guida alle metriche di performance di Ultralytics YOLO per una panoramica completa.

Posso utilizzare Ray Tune per l'ottimizzazione avanzata degli iperparametri con YOLO26?

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

Per utilizzare Ray Tune con YOLO26, imposta semplicemente il use_ray=True parametro nel tuo model.tune() chiamata al metodo. Per maggiori dettagli ed esempi, consultare la Guida all'integrazione di Ray Tune.



📅 Creato 2 anni fa ✏️ Aggiornato 0 giorni fa
glenn-jocherraimbekovmY-T-GRizwanMunawarUltralyticsAssistantLaughing-qfaruk.gmstss@gmail.compderrenger1490435889@qq.comMatthewNoyce

Commenti