Ultralytics YOLO27:
Get Started

Best practice e consigli per l'addestramento dei modelli di machine learning#

Introduzione#

Una delle fasi più importanti di un progetto di computer vision è l'addestramento del modello. Prima di arrivare a questa fase, 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 all'addestramento del modello.

L'addestramento del modello è il processo che insegna al tuo modello a riconoscere schemi visivi e a fare previsioni a partire dai tuoi dati, influenzando direttamente la precisione della tua applicazione. Questa guida illustra le best practice, le tecniche di ottimizzazione e i suggerimenti per la risoluzione dei problemi, per aiutarti ad addestrare efficacemente i tuoi modelli di computer vision.



Guarda: Suggerimenti per l'addestramento dei modelli | Come gestire dataset di grandi dimensioni | Dimensione del batch, utilizzo della GPU e precisione mista

Come addestrare 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 etichettate. Il modello fa previsioni sul contenuto di queste immagini e le previsioni vengono confrontate con le etichette o i contenuti effettivi per calcolare gli errori. Gli errori indicano quanto le previsioni del modello si discostano dai valori reali.

Durante l'addestramento, il modello fa previsioni in modo iterativo, calcola gli errori e aggiorna i propri parametri attraverso un processo chiamato backpropagation. In questo processo, il modello regola i propri parametri interni (pesi e bias) per ridurre gli errori. Ripetendo questo ciclo molte volte, il modello migliora gradualmente la propria precisione. Col tempo, impara a riconoscere schemi complessi come forme, colori e trame.

What is Backpropagation?

Questo processo di apprendimento consente al modello di computer vision di svolgere diverse attività, tra cui il rilevamento degli oggetti, la segmentazione delle istanze, la segmentazione semantica e la classificazione delle immagini. L'obiettivo finale è creare un modello in grado di generalizzare ciò che ha appreso a nuove immagini mai viste, così da interpretare accuratamente i dati visivi nelle applicazioni del mondo reale.

Ora che sappiamo cosa succede dietro le quinte quando addestriamo un modello, vediamo quali aspetti considerare durante l'addestramento.

Addestramento su grandi dataset#

Quando prevedi di usare un dataset di grandi dimensioni per addestrare un modello, ci sono diversi aspetti da considerare. Per esempio, puoi regolare la dimensione del batch, controllare l'utilizzo della GPU, scegliere l'addestramento multiscala e così via. Vediamo nel dettaglio ciascuna di queste opzioni.

Dimensione del batch e utilizzo della GPU#

Quando addestri modelli su grandi dataset, è fondamentale sfruttare la GPU in modo efficiente. 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 addestramento. Usando la dimensione massima del batch supportata dalla GPU, puoi sfruttarne appieno le capacità e ridurre la durata dell'addestramento del modello. Tuttavia, devi evitare di esaurire la memoria della GPU. Se si verificano errori di memoria, riduci gradualmente la dimensione del batch finché il modello non si addestra senza problemi.



Guarda: Come usare l'inferenza batch con Ultralytics YOLO26 | Velocizza il rilevamento degli oggetti in Python 🎉

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

Addestramento su un sottoinsieme#

L'addestramento su un sottoinsieme è una strategia efficace che consiste nell'addestrare il modello su un insieme di dati più piccolo, rappresentativo del dataset più ampio. Può far risparmiare tempo e risorse, soprattutto nelle fasi iniziali di sviluppo e test del modello. Se hai poco tempo o stai sperimentando diverse configurazioni del modello, l'addestramento su un sottoinsieme è una buona opzione.

Con YOLO26 puoi implementare facilmente l'addestramento su un sottoinsieme con il parametro fraction. Usa un rapporto come fraction=0.1 per il 10% dei dati di addestramento, un intero come fraction=300 per selezionare esattamente 300 immagini di addestramento oppure un elenco [train, val, test] come fraction=[300, 100, 0] per limitare ogni suddivisione e saltare le immagini di test. Gli elenchi di due elementi come [300, 100] mantengono completa la suddivisione di test. I dataset NDJSON selezionano record equidistanti prima di scaricarli, quindi le esecuzioni ripetute riutilizzano esattamente lo stesso sottoinsieme. Questa tecnica permette iterazioni e regolazioni rapide prima di passare all'intero dataset.

Addestramento multiscala#

L'addestramento 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.

Per esempio, quando addestri YOLO26, puoi attivare l'augmentation della scala impostando il parametro scale. Questo parametro modifica le dimensioni delle immagini di addestramento di un fattore specificato, simulando oggetti a distanze diverse. Per esempio, impostando scale=0.5, durante l'addestramento le immagini vengono ingrandite casualmente di un fattore compreso tra 0,5 e 1,5. Configurare questo parametro consente al modello di acquisire esperienza con diverse scale delle immagini e migliora la sua capacità di rilevamento con oggetti di dimensioni e in scenari differenti.

Ultralytics supporta anche l'addestramento multiscala con dimensioni delle immagini variabili tramite il parametro multi_scale. A differenza di scale, che ingrandisce le immagini e poi le riporta a imgsz tramite padding o ritaglio, multi_scale modifica imgsz a ogni batch (arrotondandola allo stride del modello). Per esempio, con imgsz=640 e multi_scale=0.25, la dimensione di addestramento viene campionata da 480 a 800 a intervalli 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, il caching riduce il tempo in cui la GPU resta in attesa del caricamento dei dati dal disco. Il modello può ricevere dati in modo continuo, senza ritardi dovuti alle operazioni di I/O del disco.

Puoi controllare il caching durante l'addestramento di YOLO26 usando il parametro cache:

  • cache=True: archivia le immagini del dataset nella RAM, offrendo l'accesso più rapido ma aumentando l'utilizzo della memoria.
  • cache='disk': archivia le immagini su disco; è più lento della RAM, ma più veloce del caricamento di nuovi dati a ogni utilizzo.
  • cache=False: disattiva il caching e si affida interamente all'I/O del disco, l'opzione più lenta.

Addestramento a precisione mista#

L'addestramento a precisione mista usa sia i tipi in virgola mobile a 16 bit (FP16) sia quelli a 32 bit (FP32). Sfrutta i vantaggi di entrambi: FP16 per calcoli più rapidi e FP32 per mantenere la precisione quando serve. La maggior parte delle operazioni della rete neurale viene eseguita in FP16, così da ottenere calcoli più rapidi e un minore utilizzo della memoria. Tuttavia, una copia principale dei pesi del modello viene mantenuta in FP32 per garantire la precisione durante gli aggiornamenti dei pesi. Puoi gestire modelli o dimensioni dei batch maggiori entro gli stessi limiti hardware.

Mixed precision FP16 training benefits

Per implementare l'addestramento a precisione mista, devi modificare gli script di addestramento e verificare che l'hardware (come le GPU) la supporti. Molti framework moderni di deep learning, come PyTorch e TensorFlow, offrono il supporto integrato alla precisione mista.

Con YOLO26, l'addestramento a precisione mista è semplice: AMP è già attivo per impostazione predefinita (amp=True). Su una GPU CUDA, YOLO esegue un controllo una tantum delle capacità all'inizio dell'addestramento e passa a FP32 completa se il controllo non riesce; su CPU e Apple silicon, AMP viene completamente ignorato. Imposta amp=False per forzare FP32.

Pesi preaddestrati#

Usare pesi preaddestrati è un modo efficace per accelerare l'addestramento del modello. I pesi preaddestrati provengono da modelli già addestrati su grandi dataset e offrono al tuo modello un vantaggio iniziale. Il transfer learning adatta i modelli preaddestrati a nuove attività correlate. Il fine-tuning di un modello preaddestrato consiste nel partire da questi pesi e continuare poi l'addestramento sul tuo dataset specifico. Questo metodo riduce i tempi di addestramento e spesso offre prestazioni migliori, perché il modello parte con una solida comprensione delle caratteristiche di base.

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

Altre tecniche da considerare quando lavori con un grande dataset#

Quando lavori con un grande dataset, puoi prendere in considerazione anche altre tecniche:

  • Scheduler del learning rate: gli scheduler del learning rate modificano dinamicamente il learning rate durante l'addestramento. Un learning rate ben regolato può impedire al modello di oltrepassare i minimi e migliorare la stabilità. Durante l'addestramento di YOLO26, il parametro lrf permette di gestire la pianificazione del learning rate impostando il learning rate finale come frazione di quello iniziale. Per comportamenti non gestiti da alcun argomento, come learning rate per livello o gradient clipping, crea una sottoclasse del trainer.
  • Addestramento distribuito: per gestire grandi dataset, l'addestramento distribuito può fare davvero la differenza. Puoi ridurre i tempi di addestramento distribuendo il carico di lavoro su più GPU o macchine. Questo approccio è particolarmente utile per i progetti aziendali su larga scala, che dispongono di notevoli risorse di calcolo.
  • Formato di memoria channels-last: l'addestramento CUDA usa automaticamente il layout di memoria NHWC più veloce su PyTorch 1.11 e versioni successive, tranne che su Windows, dove è risultato più lento. Imposta channels_last=True per forzarlo oppure channels_last=False per mantenere NCHW; PyTorch 1.10 e versioni precedenti, CPU e MPS mantengono NCHW per impostazione predefinita.

Numero di epoche di addestramento#

Durante l'addestramento di un modello, un'epoca corrisponde a un passaggio completo sull'intero dataset di addestramento. Durante un'epoca, il modello elabora ogni esempio del set di addestramento una volta e aggiorna i propri parametri in base all'algoritmo di apprendimento. In genere servono più epoche affinché il modello possa imparare e perfezionare gradualmente i propri parametri.

Una domanda frequente è come determinare il numero di epoche per cui addestrare il modello. Un buon punto di partenza è 300 epoche. Se il modello va in overfitting troppo presto, puoi ridurre il numero di epoche. Se dopo 300 epoche non si verifica overfitting, puoi prolungare l'addestramento a 600, 1200 o più epoche.

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

Arresto anticipato#

L'arresto anticipato è una tecnica utile per ottimizzare l'addestramento del modello. Monitorando le prestazioni di convalida, puoi interrompere l'addestramento quando il modello smette di migliorare. In questo modo puoi risparmiare risorse di calcolo e prevenire l'overfitting.

Il processo prevede l'impostazione di un parametro di pazienza, che determina quante epoche attendere un miglioramento delle metriche di convalida prima di interrompere l'addestramento. Se le prestazioni del modello non migliorano entro questo numero di epoche, l'addestramento viene interrotto per evitare sprechi di tempo e risorse.

Early stopping to prevent model overfitting

Con YOLO26, puoi attivare l'arresto anticipato impostando il parametro di pazienza nella configurazione di addestramento. Per esempio, patience=5 significa che l'addestramento si interrompe se le metriche di convalida non migliorano per 5 epoche consecutive. Questo metodo mantiene efficiente il processo di addestramento e consente di ottenere prestazioni ottimali senza calcoli eccessivi.

Scelta tra addestramento sul cloud e in locale#

Hai due opzioni per addestrare il modello: l'addestramento sul cloud e quello in locale.

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

L'addestramento locale offre maggiore controllo e possibilità di personalizzazione, consentendoti di adattare l'ambiente a esigenze specifiche ed evitare costi ricorrenti del cloud. Può essere più economico per i progetti a lungo termine e, poiché i dati restano on-premise, è più sicuro. Tuttavia, l'hardware locale può avere risorse limitate e richiedere manutenzione, con il rischio di tempi di addestramento più lunghi per i modelli di grandi dimensioni.

Scegliere un ottimizzatore#

Un ottimizzatore è un algoritmo che modifica i pesi della rete neurale per minimizzare la funzione di perdita, che misura le prestazioni del modello. In parole 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 sulla precisione dell'apprendimento del modello.

Puoi anche ottimizzare i parametri dell'ottimizzatore per migliorare le prestazioni del modello. Regolando il tasso di apprendimento determini l'ampiezza dei passi durante l'aggiornamento dei parametri. Per garantire stabilità, puoi iniziare con un tasso di apprendimento moderato e ridurlo gradualmente nel tempo, così da migliorare l'apprendimento a lungo termine. Inoltre, impostando il momentum determini quanto influiscono gli aggiornamenti precedenti su quelli correnti. Un valore comune per il momentum è circa 0.9. In genere offre un buon equilibrio.

Ottimizzatori comuni#

I diversi ottimizzatori presentano vari punti di forza e debolezze. Diamo un'occhiata ad alcuni ottimizzatori comuni.

  • SGD (discesa stocastica del gradiente):

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

    • Combina i vantaggi di SGD con momentum e RMSProp.
    • Regola il tasso di apprendimento di ogni parametro in base alle stime del primo e del secondo momento dei gradienti.
    • È adatto ai dati rumorosi e ai gradienti sparsi.
    • È efficiente e in genere richiede meno regolazioni. Per le sessioni di addestramento più brevi, optimizer=auto di YOLO26 seleziona il correlato AdamW invece di Adam.
  • RMSProp (propagazione della media quadratica):

    • Regola il tasso di apprendimento di ogni parametro dividendo il gradiente per una media mobile delle grandezze dei gradienti recenti.
    • Aiuta a gestire il problema della scomparsa del gradiente ed è efficace per le reti neurali ricorrenti.
  • MuSGD (ibrido Muon + SGD):

    • Combina aggiornamenti in stile SGD con il comportamento ispirato a Muon per migliorare la stabilità nell'addestramento su larga scala.
    • È una buona scelta se vuoi una capacità di generalizzazione simile a SGD, ma hai bisogno di una convergenza più fluida rispetto a SGD standard.
    • È particolarmente rilevante per le ricette di addestramento di YOLO26; se hai dubbi, inizia con optimizer=auto e confronta MuSGD sul tuo dataset.

Per YOLO26, il parametro optimizer ti consente di scegliere tra vari ottimizzatori, tra cui SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam e RMSProp; in alternativa, puoi impostarlo su auto per selezionare automaticamente l'ottimizzatore in base al numero di iterazioni di addestramento.

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

Entra in contatto 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#

  • Segnalazioni su GitHub: visita il repository GitHub di YOLO26 e usa la scheda Issues per fare domande, segnalare bug e proporre nuove funzionalità. La community e i manutentori 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 assistenza e condividere le tue esperienze.

Documentazione ufficiale#

L'uso di queste risorse ti aiuterà a superare le difficoltà e a restare aggiornato sulle ultime tendenze e pratiche della community di computer vision.

Punti chiave#

L'addestramento di modelli di computer vision richiede buone pratiche, strategie ottimizzate e la capacità di risolvere i problemi man mano che si presentano. Tecniche come la regolazione delle dimensioni dei batch, l'addestramento a precisione mista e l'uso iniziale di pesi pretrained possono migliorare i modelli e accelerarne l'addestramento. Metodi come l'addestramento su sottoinsiemi e l'arresto anticipato consentono di risparmiare tempo e risorse. Restare in contatto con la community e seguire le nuove tendenze ti aiuterà a migliorare le tue competenze nell'addestramento dei modelli.

Domande frequenti#

  • Per migliorare l'utilizzo della GPU, imposta il parametro batch sul valore massimo supportato dalla tua GPU. Con un singolo acceleratore, batch=-1 profila il modello e punta a un utilizzo della memoria di circa il 60%. Se non è disponibile, passa a batch=16 su CPU e Apple silicon, mentre le esecuzioni su più GPU richiedono una dimensione globale esplicita del batch che sia un multiplo del numero di dispositivi. Per ulteriori informazioni, consulta gli argomenti della modalità Train.

  • L'addestramento a precisione mista utilizza tipi in virgola mobile a 16 bit (FP16) e 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.

  • L'addestramento multiscala migliora le prestazioni del modello addestrandolo su immagini di dimensioni diverse, così che possa generalizzare meglio a scale e distanze differenti. YOLO26 offre due parametri distinti a questo scopo. scale=0.5 campiona un fattore di zoom tra 0.5 e 1.5, quindi applica padding o ritaglia l'immagine per riportarla a un imgsz fisso, mentre multi_scale=0.25 varia imgsz a ogni batch, con incrementi pari allo stride. Per le impostazioni e ulteriori dettagli, consulta la documentazione della modalità Train.

  • L'uso di pesi pretrained può accelerare notevolmente l'addestramento e migliorare la precisione del modello, sfruttando un modello che ha già appreso caratteristiche visive fondamentali. Caricali tramite l'argomento model, come in model=yolo26n.pt; pretrained stabilisce quindi se mantenere quei pesi (True, l'impostazione predefinita), scartarli (False) o sostituirli con un altro checkpoint (pretrained=path/to/best.pt, il metodo per trasferire i pesi a una build model=*.yaml). Scopri di più nella documentazione della modalità Train.

Commenti