YOLO Vision 2026:

Best practice e consigli di Machine Learning per l'addestramento dei modelli#

Introduzione#

Una delle fasi più importanti quando si lavora a un computer vision project è l'addestramento del modello. Prima di raggiungere questa fase, devi define your goals e collect and annotate your data. Dopo aver preprocessing the data per assicurarti che sia pulito e coerente, puoi passare all'addestramento del tuo modello.

Model training è il processo con cui insegni al tuo modello a riconoscere pattern visivi e a fare previsioni dai tuoi dati, e definisce direttamente la precisione della tua applicazione. Questa guida esamina best practice, tecniche di ottimizzazione e consigli per la risoluzione dei problemi per aiutarti ad addestrare efficacemente i tuoi modelli di computer vision.



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

Come addestrare un modello di Machine Learning#

Un modello di computer vision viene addestrato regolando i suoi parametri interni per minimizzare gli errori. Inizialmente, al modello viene fornito un ampio set di immagini etichettate. Esso effettua previsioni su ciò che è contenuto in queste immagini e le previsioni vengono confrontate con le etichette o i contenuti reali per calcolare gli errori. Questi errori mostrano quanto le previsioni del modello si discostano dai valori reali.

Durante l'addestramento, il modello effettua previsioni in modo iterativo, calcola gli errori e aggiorna i suoi parametri attraverso un processo chiamato backpropagation. In questo processo, il modello regola i suoi parametri interni (pesi e bias) per ridurre gli errori. Ripetendo questo ciclo molte volte, il modello migliora gradualmente la sua precisione. 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 varie tasks, tra cui object detection, instance segmentation, semantic segmentation e image classification. L'obiettivo finale è creare un modello in grado di generalizzare il proprio apprendimento a nuove immagini mai viste prima, così da comprendere accuratamente i dati visivi nelle applicazioni del mondo reale.

Ora che sappiamo cosa succede dietro le quinte quando addestriamo un modello, diamo un'occhiata ai punti da considerare durante l'addestramento di un modello.

Addestramento su grandi dataset#

Ci sono alcuni aspetti diversi a cui pensare quando pianifichi di utilizzare un dataset di grandi dimensioni per addestrare un modello. Ad esempio, puoi regolare la dimensione del batch, controllare l'utilizzo della GPU, scegliere di utilizzare l'addestramento multiscala, ecc. Esaminiamo ciascuna di queste opzioni nel dettaglio.

Dimensione del batch e utilizzo della GPU#

Quando addestri modelli su grandi dataset, utilizzare in modo efficiente la tua GPU è fondamentale. La dimensione del batch è un fattore importante. È il numero di campioni di dati che un modello di machine learning elabora in una singola iterazione di addestramento. Utilizzando la dimensione massima del batch supportata dalla tua GPU, puoi sfruttare appieno le sue capacità e ridurre il tempo richiesto dall'addestramento del modello. Tuttavia, vuoi evitare di esaurire la memoria della GPU. Se riscontri errori di memoria, riduci gradualmente la dimensione del batch finché il modello non viene addestrato senza intoppi.



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

Per quanto riguarda YOLO26, puoi impostare il parametro batch negli Argomenti della modalità di training per adeguarlo alla capacità della tua GPU. Su un singolo acceleratore, batch=-1 analizza il modello e seleziona una dimensione del batch mirando a circa il 60% dell'utilizzo della memoria; una frazione come batch=0.70 punta a una quota diversa. Le esecuzioni multi-GPU richiedono una dimensione del batch globale esplicita che sia un multiplo del conteggio dei dispositivi. Su CPU e Apple silicon, AutoBatch emette un avviso e torna a batch=16.

Addestramento su sottoinsiemi (Subset Training)#

L'addestramento su sottoinsiemi è una strategia intelligente che prevede l'addestramento del tuo modello su un set di dati più piccolo che rappresenta il dataset più ampio. Può far risparmiare tempo e risorse, specialmente durante lo sviluppo iniziale e i test del modello. Se sei a corto di tempo o stai sperimentando diverse configurazioni del modello, l'addestramento su sottoinsiemi è una buona opzione.

Quando si tratta di YOLO26, puoi implementare facilmente l'addestramento su sottoinsiemi con il parametro fraction. Usa un rapporto come fraction=0.1 per il 10% dei dati di addestramento, un numero intero come fraction=300 per esattamente 300 immagini di addestramento, oppure una lista [train, val, test] come fraction=[300, 100, 0] per limitare ogni divisione e saltare le immagini di test. Le liste di due elementi come [300, 100] lasciano intatta la divisione di test. I dataset NDJSON selezionano record distribuiti uniformemente prima di scaricarli, quindi le esecuzioni ripetute riutilizzano esattamente lo stesso sottoinsieme. Questa tecnica supporta iterazioni rapide e ottimizzazioni prima di passare all'intero dataset.

Addestramento multi-scala#

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

Ad esempio, quando addestri YOLO26, puoi abilitare l'aumento della scala impostando il parametro scale. Questo parametro regola la dimensione delle immagini di training di un fattore specificato, simulando oggetti a diverse distanze. Ad esempio, impostare scale=0.5 ingrandisce casualmente le immagini di training di un fattore compreso tra 0,5 e 1,5 durante il training. La configurazione di questo parametro consente al tuo modello di sperimentare una varietà di scale di immagini e di migliorare le sue capacità di rilevamento su diverse dimensioni di oggetti e scenari.

Ultralytics supporta anche l'addestramento multiscala basato sulle dimensioni delle immagini tramite il parametro multi_scale. A differenza di scale, che esegue lo zoom delle immagini e quindi applica padding/ritaglio a imgsz, multi_scale cambia direttamente imgsz a ogni batch (arrotondato allo stride del modello). Ad esempio, con imgsz=640 e multi_scale=0.25, la dimensione di addestramento viene campionata da 480 fino a 800 a passi di stride (ad es. 480, 512, 544, ..., 800), mentre multi_scale=0.0 mantiene una dimensione fissa.

Caching#

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

La memorizzazione nella cache può essere gestita durante l'addestramento di YOLO26 utilizzando il parametro cache:

  • cache=True: Memorizza le immagini del dataset nella RAM, offrendo la massima velocità di accesso ma a costo di un maggiore utilizzo di memoria.
  • cache='disk': Memorizza le immagini su disco, più lento della RAM ma più veloce rispetto al caricamento di nuovi dati ogni volta.
  • cache=False: Disabilita la cache affidandosi interamente all'I/O del disco, che rappresenta l'opzione più lenta.

Addestramento a precisione mista (Mixed Precision)#

L'addestramento in precisione mista utilizza sia tipi a virgola mobile a 16 bit (FP16) che a 32 bit (FP32). I punti di forza di FP16 e FP32 vengono sfruttati usando FP16 per calcoli più rapidi e FP32 per mantenere la precisione dove necessario. La maggior parte delle operazioni della neural network viene eseguita in FP16 per beneficiare di una maggiore velocità di calcolo e di un minor utilizzo di memoria. Tuttavia, una copia master dei pesi del modello viene mantenuta in FP32 per garantire l'accuratezza durante le fasi di aggiornamento dei pesi. Puoi gestire modelli o batch size più grandi mantenendo gli stessi vincoli hardware.

Mixed precision FP16 training benefits

Per implementare l'addestramento in precisione mista, dovrai modificare i tuoi script di addestramento e assicurarti che il tuo hardware (come le GPU) lo supporti. Molti moderni framework di deep learning, come PyTorch e TensorFlow, offrono supporto integrato per la precisione mista.

Il training a precisione mista è semplice quando si lavora con YOLO26: AMP è già attivo per impostazione predefinita (amp=True). Su una GPU CUDA, YOLO esegue un controllo di capacità una tantum all'inizio del training e torna a FP32 completo in caso di errore; su CPU e Apple silicon AMP viene saltato del tutto. Imposta amp=False per forzare FP32.

Pesi pre-addestrati#

L'utilizzo di pesi preaddestrati è un modo intelligente per velocizzare il processo di addestramento del tuo modello. I pesi preaddestrati provengono da modelli già addestrati su grandi dataset, dando al tuo modello un vantaggio iniziale. Il transfer learning adatta i modelli preaddestrati a compiti nuovi e correlati. La messa a punto (fine-tuning) di un modello preaddestrato consiste nell'iniziare con questi pesi e continuare l'addestramento sul tuo dataset specifico. Questo metodo di addestramento garantisce tempi più brevi e spesso prestazioni migliori, poiché il modello parte con 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 tali pesi vengono mantenuti (True, il valore predefinito), scartati (False) o sostituiti da un altro checkpoint (pretrained=path/to/best.pt). L'impostazione di pretrained=True su un modello *.yaml non recupera i pesi da sola. Consulta Come effettuare il fine-tuning di YOLO su un dataset personalizzato per il flusso di lavoro di transfer learning completo.

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

Ci sono un paio di altre tecniche da considerare quando gestisci un dataset di grandi dimensioni:

  • Schedulatori del tasso di apprendimento: L'implementazione di schedulatori del tasso di apprendimento regola dinamicamente il tasso di apprendimento durante il training. Un tasso di apprendimento ben calibrato può impedire al modello di superare i minimi e migliorare la stabilità. Quando si addestra YOLO26, il parametro lrf aiuta a gestire la schedulazione del tasso di apprendimento impostando il tasso di apprendimento finale come frazione del tasso iniziale. Per comportamenti che nessun argomento espone, come i tassi di apprendimento per livello o il gradient clipping, crea una sottoclasse del trainer.
  • Addestramento distribuito: Per gestire grandi dataset, l'addestramento distribuito può cambiare le regole del gioco. Puoi ridurre il tempo di addestramento distribuendo il carico di lavoro su più GPU o macchine. Questo approccio è particolarmente prezioso per progetti su scala aziendale con risorse computazionali sostanziali.
  • Formato di memoria channels-last: channels_last=True utilizza il layout di memoria NHWC su CUDA, il che può migliorare le prestazioni di convoluzione su hardware compatibile. Altri dispositivi emettono un avviso e mantengono il layout predefinito.

Il numero di epoche per cui addestrare#

Durante l'addestramento di un modello, un epoch indica un passaggio completo attraverso l'intero dataset di addestramento. Nel corso di un'epoca, il modello elabora ciascun esempio nel set di addestramento una volta e aggiorna i suoi parametri in base all'algoritmo di apprendimento. Di solito sono necessarie più epoche per consentire al modello di apprendere e perfezionare i propri parametri nel tempo.

Una domanda comune che sorge spontanea è come determinare il numero di epoche per cui addestrare il modello. Un buon punto di partenza sono 300 epoche. Se il modello va in overfitting precocemente, puoi ridurre il numero di epoche. Se l'overfitting non si verifica dopo 300 epoche, puoi estendere l'addestramento a 600, 1200 o più epoche.

Tuttavia, il numero ideale di epoche può variare in base alle dimensioni del tuo dataset e agli obiettivi del progetto. Dataset più grandi potrebbero richiedere più epoche affinché il modello impari efficacemente, mentre dataset più piccoli potrebbero averne bisogno di meno per evitare l'overfitting. Per quanto riguarda YOLO26, puoi impostare il parametro epochs nel tuo script di addestramento.

Early Stopping#

L'early stopping è una tecnica preziosa per ottimizzare l'addestramento del modello. Monitorando le prestazioni di validazione, puoi interrompere l'addestramento una volta che il modello smette di migliorare. Puoi risparmiare risorse computazionali e prevenire l'overfitting.

Il processo prevede l'impostazione di un parametro di pazienza (patience) che determina quante epoche attendere per un miglioramento nelle metriche di validazione prima di interrompere l'addestramento. Se le prestazioni del modello non migliorano entro queste epoche, l'addestramento viene interrotto per evitare di sprecare tempo e risorse.

Early stopping to prevent model overfitting

Per YOLO26, puoi abilitare l'arresto anticipato (early stopping) impostando il parametro patience nella configurazione di addestramento. Ad esempio, patience=5 significa che l'addestramento si fermerà se non ci sono miglioramenti nelle metriche di validazione per 5 epoche consecutive. L'utilizzo di questo metodo garantisce che il processo di addestramento rimanga efficiente e raggiunga prestazioni ottimali senza calcoli eccessivi.

Scegliere tra addestramento in cloud e locale#

Ci sono due opzioni per addestrare il tuo modello: addestramento in cloud e addestramento locale.

L'addestramento sul cloud offre scalabilità e hardware potente ed è ideale per gestire dataset di grandi dimensioni e modelli complessi. Piattaforme come Google Cloud, AWS e Azure offrono accesso su richiesta a GPU e TPU ad alte prestazioni, accelerando i tempi di addestramento e consentendo esperimenti con modelli più grandi. Tuttavia, l'addestramento sul cloud può essere costoso, soprattutto per lunghi periodi, e il trasferimento dei dati può aumentare costi e latenza.

L'addestramento locale fornisce maggiore controllo e personalizzazione, permettendoti di adattare il tuo ambiente alle esigenze specifiche ed evitare costi cloud continui. Può essere più economico per progetti a lungo termine e, poiché i tuoi dati rimangono on-premise, è più sicuro. Tuttavia, l'hardware locale può avere limitazioni di risorse e richiedere manutenzione, il che può portare a tempi di addestramento più lunghi per modelli grandi.

Selezione di un ottimizzatore#

Un ottimizzatore è un algoritmo che regola i pesi della tua rete neurale per ridurre al minimo la loss function, la quale misura le prestazioni del modello. In termini più semplici, l'ottimizzatore aiuta il modello ad apprendere modificando i suoi parametri per ridurre gli errori. La scelta dell'ottimizzatore giusto influisce direttamente sulla velocità e sulla precisione con cui il modello impara.

Puoi anche ottimizzare i parametri dell'ottimizzatore per migliorare le prestazioni del modello. Regolare il learning rate imposta la dimensione dei passi durante l'aggiornamento dei parametri. Per stabilità, potresti iniziare con un learning rate moderato e diminuirlo gradualmente nel tempo per migliorare l'apprendimento a lungo termine. Inoltre, impostare il momentum determina quanta influenza hanno gli aggiornamenti passati su quelli attuali. Un valore comune per il momentum è circa 0.9. Generalmente fornisce un buon equilibrio.

Ottimizzatori comuni#

Diversi ottimizzatori hanno vari punti di forza e debolezza. Diamo un'occhiata a pochi ottimizzatori comuni.

  • SGD (Stochastic Gradient Descent):

    • Aggiorna i parametri del modello utilizzando il gradiente della funzione di perdita rispetto ai parametri.
    • Semplice ed efficiente ma può essere lento a convergere e potrebbe rimanere bloccato in minimi locali.
  • Adam (Adaptive Moment Estimation):

    • Combina i vantaggi sia di SGD con momentum che di RMSProp.
    • Regola il learning rate per ogni parametro basandosi su stime dei primi e secondi momenti dei gradienti.
    • Ben adatto a dati rumorosi e gradienti sparsi.
    • Efficiente e generalmente richiede meno ottimizzazioni. Per sessioni di addestramento più brevi, optimizer=auto di YOLO26 seleziona il correlato AdamW anziché Adam stesso.
  • RMSProp (Root Mean Square Propagation):

    • Regola il learning rate per ogni parametro dividendo il gradiente per una media mobile delle magnitudini dei gradienti recenti.
    • Aiuta ad affrontare il problema del gradiente che svanisce ed è efficace per le recurrent neural networks.
  • MuSGD (Muon + SGD hybrid):

    • Combina aggiornamenti in stile SGD con un comportamento ispirato a Muon per una maggiore stabilità nell'addestramento su larga scala.
    • Una buona scelta quando desideri una generalizzazione simile a SGD ma hai bisogno di una convergenza più fluida rispetto a SGD standard.
    • Particolarmente rilevante per le YOLO26 training recipes; in caso di dubbio, inizia con optimizer=auto e confrontalo con MuSGD sul tuo dataset.

Per YOLO26, il parametro optimizer ti permette di scegliere tra vari ottimizzatori, tra cui SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam e RMSProp, oppure puoi impostarlo su auto per la selezione automatica in base al numero di iterazioni di addestramento.

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

Connettersi con la community#

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

Risorse della community#

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

Documentazione ufficiale#

  • Ultralytics YOLO26 Documentation: Dai un'occhiata alla official YOLO26 documentation per guide dettagliate e utili consigli su vari progetti di computer vision.

Utilizzare queste risorse ti aiuterà a risolvere sfide e a rimanere aggiornato sulle ultime tendenze e pratiche nella community di computer vision.

Punti chiave#

L'addestramento di modelli di computer vision comporta il rispetto di buone pratiche, l'ottimizzazione delle strategie e la risoluzione dei problemi man mano che si presentano. Tecniche come la regolazione delle dimensioni dei batch, l'addestramento in precision mista e l'utilizzo di pesi preaddestrati possono far funzionare meglio i tuoi modelli e velocizzarne l'addestramento. Metodi come l'addestramento su sottoinsiemi e l'arresto anticipato ti aiutano a risparmiare tempo e risorse. Rimanere in contatto con la community e tenersi al passo con le nuove tendenze ti aiuterà a continuare a migliorare le tue competenze nell'addestramento dei modelli.

FAQ#

  • Per migliorare l'utilizzo della GPU, imposta il parametro batch alla dimensione massima supportata dalla tua GPU. Su un singolo acceleratore, batch=-1 analizza il modello e punta a circa il 60% dell'utilizzo della memoria. Torna a batch=16 su CPU e Apple silicon, mentre le esecuzioni multi-GPU richiedono una dimensione del batch globale esplicita che sia un multiplo del conteggio dei dispositivi. Per ulteriori informazioni, fai riferimento agli Argomenti della modalità di training.

  • Il training a precisione mista utilizza sia tipi in virgola mobile a 16 bit (FP16) che 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 saltato su CPU e Apple silicon. Per maggiori dettagli, consulta gli Argomenti della modalità di training.

  • Il training multi-scala migliora le prestazioni del modello eseguendo l'addestramento su immagini di dimensioni variabili, consentendo al modello di generalizzare meglio su diverse scale e distanze. YOLO26 offre due parametri separati per questo scopo. scale=0.5 campiona un fattore di zoom compreso tra 0,5 e 1,5 e quindi applica un padding o un ritaglio a un valore fisso imgsz, mentre multi_scale=0.25 varia lo stesso imgsz a ogni batch in passi di stride. Per le impostazioni e ulteriori dettagli, dai un'occhiata alla Documentazione della modalità di training.

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

  • Il numero di epoche si riferisce ai passaggi completi attraverso il dataset di addestramento durante l'addestramento del modello. Un tipico punto di partenza è 300 epoche. Se il tuo modello va in overfitting precocemente, puoi ridurre il numero. In alternativa, se non si osserva overfitting, potresti estendere l'addestramento a 600, 1200 o più epoche. Per impostare questo in YOLO26, usa il parametro epochs nel tuo script di addestramento. Per ulteriori consigli su come determinare il numero ideale di epoche, fai riferimento a questa sezione su number of epochs.

Commenti