Ultralytics YOLO27:

Best practice e consigli per il training dei modelli di machine learning#

Introduzione#

Uno dei passaggi più importanti quando lavori a un progetto di computer vision è il training del modello. Prima di arrivare a questo punto, devi definire i tuoi obiettivi e raccogliere e annotare i tuoi dati. Dopo aver preelaborato i dati per assicurarti che siano puliti e coerenti, puoi passare al training del modello.

Il training del modello è il processo con cui insegni al modello a riconoscere pattern visivi e a fare previsioni a partire dai tuoi dati, e influenza direttamente l'accuratezza della tua applicazione. Questa guida illustra best practice, tecniche di ottimizzazione e suggerimenti per la risoluzione dei problemi, aiutandoti a eseguire il training dei tuoi modelli di computer vision in modo efficace.



Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision

Come eseguire il training di un modello di machine learning#

Un modello di computer vision viene addestrato regolando i suoi parametri interni per ridurre al minimo gli errori. Inizialmente, al modello viene fornito un ampio insieme di immagini annotate. Il modello fa previsioni sul contenuto di queste immagini e le previsioni vengono confrontate con le annotazioni o i contenuti effettivi per calcolare gli errori. Questi errori mostrano quanto le previsioni del modello si discostino dai valori reali.

Durante il training, il modello esegue iterativamente previsioni, calcola gli errori e aggiorna i propri parametri attraverso un processo chiamato backpropagation. In questo processo, il modello regola i parametri interni (pesi e bias) per ridurre gli errori. Ripetendo questo ciclo molte volte, il modello migliora gradualmente la propria accuratezza. Nel tempo, impara a riconoscere pattern complessi come forme, colori e texture.

What is Backpropagation?

Questo processo di apprendimento consente al modello di computer vision di eseguire diversi task, tra cui rilevamento degli oggetti, segmentazione delle istanze, segmentazione semantica e classificazione delle immagini. L'obiettivo finale è creare un modello in grado di generalizzare ciò che ha appreso a immagini nuove e mai viste, così da comprendere con precisione i dati visivi nelle applicazioni del mondo reale.

Ora che sappiamo cosa succede dietro le quinte quando eseguiamo il training di un modello, vediamo quali aspetti considerare durante il training.

Training su dataset di grandi dimensioni#

Quando pianifichi di utilizzare un dataset di grandi dimensioni per addestrare un modello, devi considerare diversi aspetti. Ad esempio, puoi regolare la dimensione del batch, controllare l'utilizzo della GPU, scegliere il training multiscala e altro ancora. Vediamo nel dettaglio ciascuna di queste opzioni.

Dimensione del batch e utilizzo della GPU#

Quando esegui il training dei modelli su dataset di grandi dimensioni, utilizzare la GPU in modo efficiente è fondamentale. La dimensione del batch è un fattore importante. Indica il numero di campioni di dati che un modello di machine learning elabora in una singola iterazione di training. Utilizzando la dimensione massima del batch supportata dalla GPU, puoi sfruttarne appieno le capacità e ridurre il tempo necessario per il training del modello. Tuttavia, devi evitare di esaurire la memoria della GPU. Se riscontri errori di memoria, riduci gradualmente la dimensione del batch finché il modello non esegue il training senza problemi.



Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉

Per YOLO26, puoi impostare il parametro batch negli argomenti della modalità Train in base alla capacità della GPU. Su un singolo acceleratore, batch=-1 analizza il profilo del modello e sceglie una dimensione del batch mirando a un utilizzo della memoria di circa il 60%; una frazione come batch=0.70 punta a una percentuale diversa. Le esecuzioni su più GPU richiedono una dimensione globale del batch esplicita, multipla del numero di dispositivi. Su CPU e Apple silicon, AutoBatch mostra un avviso e passa a batch=16.

Training su un sottoinsieme#

Il training su un sottoinsieme è una strategia efficace che consiste nell'addestrare il modello su un insieme di dati più piccolo, rappresentativo del dataset più grande. Può farti risparmiare tempo e risorse, soprattutto durante lo sviluppo iniziale e i test del modello. Se hai poco tempo o stai sperimentando diverse configurazioni del modello, il training su un sottoinsieme è una buona opzione.

Per YOLO26, puoi implementare facilmente il training su un sottoinsieme con il parametro fraction. Usa un rapporto come fraction=0.1 per il 10% dei dati di training, un intero come fraction=300 per esattamente 300 immagini di training oppure una lista [train, val, test] come fraction=[300, 100, 0] per limitare ogni suddivisione e ignorare le immagini di test. Le liste con due elementi, come [300, 100], lasciano completo il set di test. I dataset NDJSON selezionano record equidistanti prima di scaricarli, quindi le esecuzioni ripetute riutilizzano esattamente lo stesso sottoinsieme. Questa tecnica supporta iterazioni e ottimizzazioni rapide prima di impegnarsi sull'intero dataset.

Training multiscala#

Il training multiscala è una tecnica che migliora la capacità del modello di generalizzare, addestrandolo su immagini di dimensioni diverse. Il modello può imparare a rilevare oggetti a scale e distanze differenti e diventare più robusto.

Ad esempio, quando esegui il training di YOLO26, puoi abilitare l'aumento della scala impostando il parametro scale. Questo parametro modifica le dimensioni delle immagini di training di un fattore specificato, simulando oggetti a distanze diverse. Ad esempio, impostando scale=0.5, le immagini di training vengono ingrandite casualmente di un fattore compreso tra 0.5 e 1.5 durante il training. Configurando questo parametro, permetti al modello di sperimentare diverse scale delle immagini e di migliorare le capacità di rilevamento su oggetti e scenari di dimensioni differenti.

Ultralytics supporta anche il training multiscala basato sulle dimensioni delle immagini tramite il parametro multi_scale. A differenza di scale, che esegue lo zoom delle immagini e poi aggiunge padding o ritaglia nuovamente a imgsz, multi_scale modifica imgsz stesso a ogni batch (arrotondato allo stride del modello). Ad esempio, con imgsz=640 e multi_scale=0.25, la dimensione di training viene campionata da 480 a 800 con incrementi pari allo stride (ad esempio 480, 512, 544, ..., 800), mentre multi_scale=0.0 mantiene una dimensione fissa.

Caching#

Il caching è una tecnica importante per migliorare l'efficienza del training dei modelli di machine learning. Memorizzando in memoria le immagini preelaborate, il caching riduce il tempo che la GPU trascorre in attesa del caricamento dei dati dal disco. Il modello può ricevere continuamente i dati senza ritardi causati dalle operazioni di I/O del disco.

Il caching può essere controllato durante il training di YOLO26 usando il parametro cache:

  • cache=True: memorizza le immagini del dataset nella RAM, offrendo la velocità di accesso più elevata, ma aumentando l'utilizzo della memoria.
  • cache='disk': memorizza le immagini sul disco; è più lento della RAM, ma più veloce del caricamento di dati nuovi a ogni utilizzo.
  • cache=False: disabilita il caching e si affida interamente all'I/O del disco, risultando nell'opzione più lenta.

Training a precisione mista#

Il training a precisione mista utilizza sia tipi in virgola mobile a 16 bit (FP16) sia a 32 bit (FP32). Sfrutta i vantaggi di entrambi usando FP16 per calcoli più rapidi e FP32 per mantenere la precisione dove necessario. La maggior parte delle operazioni della rete neurale viene eseguita in FP16, così da beneficiare di calcoli più rapidi e di un minore utilizzo della memoria. Tuttavia, una copia principale dei pesi del modello viene mantenuta in FP32 per garantire l'accuratezza durante gli aggiornamenti dei pesi. Puoi gestire modelli o dimensioni del batch più grandi con gli stessi vincoli hardware.

Mixed precision FP16 training benefits

Per implementare il training a precisione mista, devi modificare gli script di training e assicurarti che l'hardware, come le GPU, lo supporti. Molti framework moderni di deep learning, come PyTorch e TensorFlow, offrono il supporto integrato per la precisione mista.

Il training a precisione mista è semplice con YOLO26: AMP è già attivo per impostazione predefinita (amp=True). Su una GPU CUDA, YOLO esegue un controllo delle capacità una tantum all'inizio del training e passa a FP32 completo se il controllo fallisce; su CPU e Apple silicon, AMP viene ignorato completamente. Imposta amp=False per forzare FP32.

Pesi preaddestrati#

Utilizzare pesi preaddestrati è un modo efficace per accelerare il processo di training del modello. I pesi preaddestrati provengono da modelli già addestrati su dataset di grandi dimensioni e offrono al tuo modello un vantaggio iniziale. Il transfer learning adatta i modelli preaddestrati a task nuovi ma correlati. Il fine-tuning di un modello preaddestrato consiste nel partire da questi pesi e continuare il training sul tuo dataset specifico. Questo metodo consente di ridurre i tempi di training e spesso di ottenere prestazioni migliori, perché il modello parte da una solida comprensione delle caratteristiche di base.

I pesi preaddestrati provengono dall'argomento model, quindi model=yolo26n.pt parte già dai pesi COCO. Il parametro pretrained controlla se questi pesi vengono mantenuti (True, il valore predefinito), scartati (False) o sostituiti da un altro checkpoint (pretrained=path/to/best.pt). Impostare pretrained=True su un modello *.yaml non scarica autonomamente i pesi. Consulta Come eseguire il fine-tuning di YOLO su un dataset personalizzato per il flusso di lavoro completo del transfer learning.

Altre tecniche da considerare quando gestisci un dataset di grandi dimensioni#

Quando gestisci un dataset di grandi dimensioni, puoi considerare anche un paio di altre tecniche:

  • Scheduler del learning rate: l'implementazione degli scheduler del learning rate regola dinamicamente il learning rate durante il training. Un learning rate ben calibrato può impedire al modello di oltrepassare i minimi e migliorare la stabilità. Durante il training di YOLO26, il parametro lrf aiuta a gestire lo scheduling del learning rate impostando il learning rate finale come frazione di quello iniziale. Per comportamenti non esposti da alcun argomento, come learning rate per livello o gradient clipping, crea una sottoclasse del trainer.
  • Training distribuito: per gestire dataset di grandi dimensioni, il training distribuito può cambiare radicalmente le prestazioni. Puoi ridurre il tempo di training distribuendo il carico su più GPU o macchine. Questo approccio è particolarmente utile per progetti su scala enterprise con notevoli risorse computazionali.
  • Formato di memoria channels-last: l'addestramento CUDA utilizza automaticamente il layout di memoria NHWC più veloce su PyTorch 1.11 e versioni successive, ad eccezione di Windows, dove è risultato più lento. Imposta channels_last=True per forzarlo o channels_last=False per mantenere NCHW; PyTorch 1.10 e versioni precedenti, CPU e MPS rimangono NCHW per impostazione predefinita.

Numero di epoch per il training#

Durante il training di un modello, un epoch corrisponde a un passaggio completo attraverso l'intero dataset di training. Durante un epoch, il modello elabora ogni esempio del set di training una volta e aggiorna i propri parametri in base all'algoritmo di apprendimento. Di solito sono necessari più epoch per consentire al modello di apprendere e perfezionare i propri parametri nel tempo.

Una domanda comune è come determinare il numero di epoch per il training del modello. Un buon punto di partenza è 300 epoch. Se il modello va in overfitting precocemente, puoi ridurre il numero di epoch. Se dopo 300 epoch non si verifica overfitting, puoi prolungare il training a 600, 1200 o più epoch.

Tuttavia, il numero ideale di epoch può variare in base alle dimensioni del dataset e agli obiettivi del progetto. I dataset più grandi potrebbero richiedere più epoch affinché il modello impari in modo efficace, mentre quelli più piccoli potrebbero richiederne meno per evitare l'overfitting. Per YOLO26, puoi impostare il parametro epochs nello script di training.

Early stopping#

L'early stopping è una tecnica utile per ottimizzare il training del modello. Monitorando le prestazioni di validazione, puoi interrompere il training quando il modello smette di migliorare. In questo modo puoi risparmiare risorse computazionali e prevenire l'overfitting.

Il processo consiste nell'impostare un parametro di pazienza che determina quanti epoch attendere un miglioramento nelle metriche di validazione prima di interrompere il training. Se le prestazioni del modello non migliorano entro questi epoch, il training viene interrotto per evitare sprechi di tempo e risorse.

Early stopping to prevent model overfitting

Per YOLO26, puoi abilitare l'early stopping impostando il parametro di pazienza nella configurazione di training. Ad esempio, patience=5 significa che il training si interromperà se non si verifica alcun miglioramento nelle metriche di validazione per 5 epoch consecutivi. Questo metodo garantisce che il processo di training rimanga efficiente e raggiunga prestazioni ottimali senza calcoli eccessivi.

Scelta tra training nel cloud e training locale#

Esistono due opzioni per eseguire il training del modello: nel cloud o in locale.

Il training nel cloud offre scalabilità e hardware potente ed è ideale per gestire dataset di grandi dimensioni e modelli complessi. Piattaforme come Google Cloud, AWS e Azure forniscono accesso on demand a GPU e TPU ad alte prestazioni, accelerando i tempi di training e consentendo di sperimentare con modelli più grandi. Tuttavia, il training nel cloud può essere costoso, soprattutto per periodi prolungati, e il trasferimento dei dati può aumentare costi e latenza.

Il training locale offre maggiore controllo e personalizzazione, permettendoti di adattare l'ambiente a esigenze specifiche ed evitare i costi ricorrenti del cloud. Può essere più economico per i progetti a lungo termine e, poiché i dati rimangono in sede, è più sicuro. Tuttavia, l'hardware locale può avere limitazioni di risorse e richiedere manutenzione, con conseguenti tempi di training più lunghi per i modelli di grandi dimensioni.

Selezione di un ottimizzatore#

Un ottimizzatore è un algoritmo che regola i pesi della rete neurale per ridurre al minimo la funzione di perdita, che misura le prestazioni del modello. In termini più semplici, l'ottimizzatore aiuta il modello ad apprendere modificandone i parametri per ridurre gli errori. La scelta dell'ottimizzatore giusto influisce direttamente sulla velocità e sull'accuratezza dell'apprendimento del modello.

Puoi anche ottimizzare i parametri dell'ottimizzatore per migliorare le prestazioni del modello. Regolare il learning rate determina l'ampiezza dei passi durante l'aggiornamento dei parametri. Per garantire la stabilità, potresti iniziare con un learning rate moderato e diminuirlo gradualmente nel tempo per migliorare l'apprendimento a lungo termine. Inoltre, l'impostazione del momentum determina quanto gli aggiornamenti passati influenzino quelli correnti. Un valore comune per il momentum è circa 0.9. In genere offre un buon equilibrio.

Ottimizzatori comuni#

I diversi ottimizzatori presentano vantaggi e svantaggi differenti. Vediamo rapidamente alcuni ottimizzatori comuni.

  • SGD (discesa del gradiente stocastico):

    • Aggiorna i parametri del modello utilizzando il gradiente della funzione di perdita rispetto ai parametri.
    • È semplice ed efficiente, ma può convergere lentamente e rimanere bloccato nei minimi locali.
  • Adam (stima del momento adattiva):

    • Combina i vantaggi di SGD con momentum e RMSProp.
    • Regola il learning rate per ogni parametro sulla base delle stime del primo e del secondo momento dei gradienti.
    • È adatto ai dati rumorosi e ai gradienti sparsi.
    • È efficiente e generalmente richiede meno regolazioni. Per le esecuzioni di training più brevi, optimizer=auto di YOLO26 seleziona il AdamW strettamente correlato invece di Adam.
  • RMSProp (propagazione della media quadratica):

    • Regola il learning rate per ogni parametro dividendo il gradiente per una media mobile delle magnitudini dei gradienti recenti.
    • Aiuta a gestire il problema del gradiente evanescente ed è efficace per le reti neurali ricorrenti.
  • MuSGD (ibrido Muon + SGD):

    • Combina aggiornamenti nello stile di SGD con un comportamento ispirato a Muon per migliorare la stabilità nel training su larga scala.
    • È una buona scelta quando vuoi la generalizzazione tipica di SGD, ma hai bisogno di una convergenza più fluida rispetto a SGD standard.
    • È particolarmente rilevante per le ricette di training di YOLO26; se non sei sicuro, inizia con optimizer=auto e confrontalo con MuSGD sul tuo dataset.

Per YOLO26, il parametro optimizer ti consente di scegliere tra diversi ottimizzatori, tra cui SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam e RMSProp, oppure di impostarlo su auto per una selezione automatica basata sul numero di iterazioni di training.

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

Connessione con la community#

Far parte di una community di appassionati di computer vision può aiutarti a risolvere i problemi e imparare più velocemente. Ecco alcuni modi per entrare in contatto, ricevere aiuto e condividere idee.

Risorse della community#

  • Issue di GitHub: visita il repository GitHub di YOLO26 e usa la scheda Issues per fare domande, segnalare bug e suggerire nuove funzionalità. La community e i maintainer sono molto attivi e pronti ad aiutarti.
  • Server Discord di Ultralytics: unisciti al server Discord di Ultralytics per chattare con altri utenti e sviluppatori, ricevere supporto e condividere le tue esperienze.

Documentazione ufficiale#

Utilizzare queste risorse ti aiuterà a risolvere le difficoltà e a rimanere aggiornato sulle tendenze e sulle pratiche più recenti della community di computer vision.

Punti chiave#

Il training dei modelli di computer vision richiede l'applicazione di buone pratiche, l'ottimizzazione delle strategie e la risoluzione dei problemi man mano che si presentano. Tecniche come la regolazione delle dimensioni del batch, il training a precisione mista e l'utilizzo iniziale di pesi preaddestrati possono migliorare le prestazioni e la velocità di training dei modelli. Metodi come il training su un sottoinsieme e l'early stopping aiutano a risparmiare tempo e risorse. Restare in contatto con la community e aggiornarsi sulle nuove tendenze ti aiuterà a migliorare continuamente le tue competenze nel training dei modelli.

FAQ#

  • Per migliorare l'utilizzo della GPU, imposta il parametro batch sulla dimensione massima supportata dalla GPU. Su un singolo acceleratore, batch=-1 analizza il profilo del modello e punta a un utilizzo della memoria di circa il 60%. Passa a batch=16 su CPU e Apple silicon, mentre le esecuzioni su più GPU richiedono una dimensione globale del batch esplicita, multipla del numero di dispositivi. Per ulteriori informazioni, consulta gli argomenti della modalità Train.

  • Il training a precisione mista utilizza tipi in virgola mobile sia a 16 bit (FP16) sia a 32 bit (FP32) per bilanciare velocità di calcolo e precisione. In YOLO26 è abilitato per impostazione predefinita tramite amp=True; imposta amp=False per forzare FP32. AMP viene ignorato su CPU e Apple silicon. Per ulteriori dettagli, consulta gli argomenti della modalità Train.

  • Il training multiscala migliora le prestazioni del modello addestrandolo su immagini di dimensioni diverse, consentendogli di generalizzare meglio a scale e distanze differenti. YOLO26 offre due parametri separati per questo scopo. scale=0.5 campiona un fattore di zoom tra 0.5 e 1.5 e poi aggiunge padding o ritaglia nuovamente a una imgsz fissa, mentre multi_scale=0.25 varia direttamente imgsz a ogni batch con incrementi pari allo stride. Per le impostazioni e ulteriori dettagli, consulta la documentazione della modalità Train.

  • L'utilizzo di pesi preaddestrati può accelerare notevolmente il training e migliorare l'accuratezza del modello, sfruttando un modello che conosce già le caratteristiche visive fondamentali. Caricali tramite l'argomento model, come in model=yolo26n.pt; pretrained determina quindi se questi pesi vengono mantenuti (True, il valore predefinito), scartati (False) o sostituiti da un altro checkpoint (pretrained=path/to/best.pt, il metodo per trasferire i pesi in una build model=*.yaml). Scopri di più nella documentazione della modalità Train.

  • Il numero di epoch indica i passaggi completi attraverso il dataset di training durante il training del modello. Un punto di partenza tipico è 300 epoch. Se il modello va in overfitting precocemente, puoi ridurne il numero. In alternativa, se non osservi overfitting, puoi prolungare il training a 600, 1200 o più epoch. Per impostarlo in YOLO26, usa il parametro epochs nello script di training. Per ulteriori indicazioni su come determinare il numero ideale di epoch, consulta questa sezione sul numero di epoch.

Commenti