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

Introduzione

Uno dei passaggi più importanti quando lavori a 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 pre-elaborato i dati per assicurarti che siano puliti e coerenti, puoi passare all'addestramento del tuo modello.



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

Quindi, cos'è l'addestramento del modello? L'addestramento del modello è il processo di insegnamento al tuo modello a riconoscere pattern visivi e a fare previsioni basate sui tuoi dati. Influisce direttamente sulle prestazioni e sull'accuratezza della tua applicazione. In questa guida, tratteremo best practice, tecniche di ottimizzazione e suggerimenti per la risoluzione dei problemi per aiutarti ad addestrare efficacemente i tuoi modelli di computer vision.

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 set di immagini etichettate. Esso fa previsioni su ciò che è presente in queste immagini, e le previsioni vengono confrontate con le etichette o i contenuti effettivi per calcolare gli errori. Questi errori mostrano quanto le previsioni del modello si discostano dai valori reali.

Durante l'addestramento, il modello effettua iterativamente previsioni, calcola 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 accuratezza. Nel tempo, impara a riconoscere pattern complessi come forme, colori e texture.

What is Backpropagation?

Questo processo di apprendimento rende possibile per il modello di computer vision eseguire varie attività, 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 immagini nuove e mai viste prima, in modo da poter 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.

Addestramento su grandi dataset

Ci sono alcuni aspetti diversi a cui pensare quando pianifichi di utilizzare un grande dataset 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 in 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. Usando la dimensione massima del batch supportata dalla tua GPU, puoi sfruttare appieno le sue capacità e ridurre il tempo necessario per l'addestramento del modello. Tuttavia, vuoi evitare di esaurire la memoria della GPU. Se riscontri errori di memoria, riduci la dimensione del batch gradualmente finché il modello non viene addestrato senza problemi.



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

Per quanto riguarda YOLO26, puoi impostare il parametro batch_size nella configurazione di addestramento per adattarlo alla capacità della tua GPU. Inoltre, impostare batch=-1 nel tuo script di addestramento determinerà automaticamente la dimensione del batch che può essere elaborata in modo efficiente in base alle capacità del tuo dispositivo. Ottimizzando la dimensione del batch, puoi sfruttare al meglio le risorse della tua GPU e migliorare il processo di addestramento complessivo.

Addestramento su subset

L'addestramento su subset è 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 il test del modello. Se sei a corto di tempo o stai sperimentando diverse configurazioni del modello, l'addestramento su subset è una buona opzione.

Quando si parla di YOLO26, puoi implementare facilmente l'addestramento su subset utilizzando il parametro fraction. Questo parametro ti consente di specificare quale frazione del tuo dataset utilizzare per l'addestramento. Ad esempio, impostare fraction=0.1 addestrerà il tuo modello sul 10% dei dati. Puoi utilizzare questa tecnica per iterazioni rapide e per regolare il tuo modello prima di impegnarti ad addestrarlo utilizzando un intero dataset. L'addestramento su subset ti aiuta a progredire rapidamente e a identificare precocemente potenziali problemi.

Addestramento multi-scala

L'addestramento multiscala è una tecnica che migliora la capacità del tuo modello di generalizzare, addestrandolo su immagini di dimensioni variabili. 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'addestramento multiscala impostando il parametro scale. Questo parametro regola la dimensione delle immagini di addestramento di un fattore specificato, simulando oggetti a diverse distanze. Ad esempio, impostare scale=0.5 ingrandisce casualmente le immagini di addestramento di un fattore compreso tra 0,5 e 1,5 durante l'addestramento. Configurare questo parametro consente al tuo modello di sperimentare una varietà di scale di immagine e di migliorare le sue capacità di rilevamento in diverse dimensioni di oggetti e scenari.

Ultralytics supporta anche l'addestramento multiscala tramite dimensione dell'immagine tramite il parametro multi_scale. A differenza di scale, che ingrandisce le immagini e poi riempie/ritaglia per tornare a imgsz, multi_scale cambia imgsz stesso per 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 in passaggi di stride (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 pre-elaborate nella memoria, il caching riduce il tempo che la GPU trascorre in attesa del caricamento dei dati dal disco. Il modello può ricevere dati continuamente senza ritardi causati dalle operazioni di I/O del disco.

Il caching può essere controllato 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 del caricamento di nuovi dati ogni volta.
  • cache=False: Disabilita il caching, basandosi interamente sull'I/O del disco, che è l'opzione più lenta.

Addestramento a precisione mista

L'addestramento a precisione mista utilizza entrambi i tipi di virgola mobile a 16 bit (FP16) e 32 bit (FP32). I punti di forza sia di FP16 che di FP32 vengono sfruttati utilizzando 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 per beneficiare di calcoli più rapidi e di un minore utilizzo della memoria. Tuttavia, una copia master dei pesi del modello viene conservata in FP32 per garantire l'accuratezza durante i passaggi di aggiornamento dei pesi. Puoi gestire modelli più grandi o batch size maggiori entro gli stessi vincoli hardware.

Mixed precision FP16 training benefits

Per implementare l'addestramento a 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.

L'addestramento a precisione mista è semplice quando lavori con YOLO26. Puoi utilizzare il flag amp nella tua configurazione di addestramento. Impostare amp=True abilita l'addestramento Automatic Mixed Precision (AMP). L'addestramento a precisione mista è un modo semplice ma efficace per ottimizzare il processo di addestramento del tuo modello.

Pesi pre-addestrati

Utilizzare pesi pre-addestrati è un modo intelligente per accelerare il processo di addestramento del tuo modello. I pesi pre-addestrati provengono da modelli già addestrati su grandi dataset, dando al tuo modello un vantaggio. Il transfer learning adatta modelli pre-addestrati a compiti nuovi e correlati. Il fine-tuning di un modello pre-addestrato comporta l'iniziare con questi pesi e poi continuare l'addestramento sul tuo dataset specifico. Questo metodo di addestramento porta a tempi di addestramento più rapidi e spesso a prestazioni migliori perché il modello inizia con una solida comprensione delle funzionalità di base.

Il parametro pretrained rende facile il transfer learning con YOLO26. Impostare pretrained=True utilizzerà i pesi pre-addestrati predefiniti, oppure puoi specificare un percorso per un modello pre-addestrato personalizzato. Utilizzare pesi pre-addestrati e il transfer learning potenzia efficacemente le capacità del tuo modello e riduce i costi di addestramento.

Altre tecniche da considerare quando si gestisce un grande dataset

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

  • Learning Rate Schedulers: L'implementazione di scheduler del learning rate regola dinamicamente il tasso di apprendimento durante l'addestramento. Un learning rate ben sintonizzato può impedire al modello di superare i minimi e migliorare la stabilità. Quando addestri YOLO26, il parametro lrf aiuta a gestire la programmazione del learning rate impostando il learning rate finale come una frazione del tasso iniziale.
  • Addestramento distribuito: Per la gestione di grandi dataset, l'addestramento distribuito può cambiare le carte in tavola. 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.

Il numero di epoche per cui addestrare

Quando addestri un modello, un'epoca si riferisce a un passaggio completo attraverso l'intero dataset di addestramento. Durante un'epoca, il modello elabora ogni esempio nel set di addestramento una volta e aggiorna i suoi parametri basandosi sull'algoritmo di apprendimento. Sono solitamente necessarie più epoche per consentire al modello di imparare e perfezionare i suoi parametri nel tempo.

Una domanda comune che sorge è 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 prematuramente, 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 alla dimensione 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 aver bisogno di meno epoche 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 non appena il modello smette di migliorare. Puoi risparmiare risorse computazionali e prevenire l'overfitting.

Il processo prevede l'impostazione di un parametro di pazienza che determina per quante epoche attendere 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'early stopping impostando il parametro di pazienza nella tua configurazione di addestramento. Ad esempio, patience=5 significa che l'addestramento si fermerà se non c'è alcun miglioramento nelle metriche di validazione per 5 epoche consecutive. Utilizzare 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 in cloud offre scalabilità e hardware potente ed è ideale per gestire grandi dataset e modelli complessi. Piattaforme come Google Cloud, AWS e Azure forniscono accesso on-demand a GPU e TPU ad alte prestazioni, velocizzando i tempi di addestramento e consentendo esperimenti con modelli più grandi. Tuttavia, l'addestramento in cloud può essere costoso, specialmente per lunghi periodi, e il trasferimento dei dati può aumentare i costi e la latenza.

L'addestramento locale offre maggiore controllo e personalizzazione, consentendoti di adattare il tuo ambiente a esigenze specifiche ed evitare i costi continui del cloud. Può essere più economico per progetti a lungo termine e, poiché i tuoi dati rimangono in sede, è 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 di grandi dimensioni.

Selezione di un ottimizzatore

Un ottimizzatore è un algoritmo che regola i pesi della tua rete neurale per ridurre al minimo la funzione di perdita, che misura quanto bene sta funzionando il modello. In termini più semplici, l'ottimizzatore aiuta il modello a imparare regolando i suoi parametri per ridurre gli errori. Scegliere l'ottimizzatore giusto influisce direttamente sulla velocità e sull'accuratezza con cui il modello impara.

Puoi anche regolare i parametri dell'ottimizzatore per migliorare le prestazioni del modello. Regolare il learning rate imposta la dimensione dei passaggi 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

Ottimizzatori diversi hanno vari punti di forza e debolezze. Diamo un'occhiata ad alcuni 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 bloccarsi in minimi locali.
  • Adam (Adaptive Moment Estimation):

    • Combina i benefici sia di SGD con momentum che di RMSProp.
    • Regola il learning rate per ciascun parametro basandosi su stime dei primi e secondi momenti dei gradienti.
    • Ben adatto per dati rumorosi e gradienti sparsi.
    • Efficiente e generalmente richiede meno tuning, rendendolo un ottimizzatore consigliato per YOLO26.
  • RMSProp (Root Mean Square Propagation):

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

    • 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 un SGD standard.
    • Particolarmente rilevante per le ricette di addestramento di YOLO26; se non sei sicuro, inizia con optimizer=auto e confronta con MuSGD sul tuo dataset.

Per YOLO26, il parametro optimizer ti consente di scegliere tra vari ottimizzatori, inclusi SGD, MuSGD, Adam, AdamW, NAdam, RAdam e RMSProp, oppure puoi impostarlo su auto per la selezione automatica basata sulla configurazione del modello.

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 connetterti, ottenere aiuto e condividere idee.

Risorse della community

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

Documentazione ufficiale

  • Documentazione di Ultralytics YOLO26: Dai un'occhiata alla documentazione ufficiale di YOLO26 per guide dettagliate e suggerimenti utili 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 seguire buone pratiche, ottimizzare le tue strategie e risolvere i problemi man mano che si presentano. Tecniche come la regolazione della dimensione dei batch, l'addestramento a precisione mista e l'inizio con pesi pre-addestrati possono far funzionare meglio i tuoi modelli e farli addestrare più velocemente. Metodi come l'addestramento su subset e l'early stopping 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 abilità di addestramento dei modelli.

FAQ

Come posso migliorare l'utilizzo della GPU durante l'addestramento di un grande dataset con Ultralytics YOLO?

Per migliorare l'utilizzo della GPU, imposta il parametro batch_size nella tua configurazione di addestramento alla dimensione massima supportata dalla tua GPU. Ciò garantisce di sfruttare appieno le capacità della GPU, riducendo il tempo di addestramento. Se riscontri errori di memoria, riduci gradualmente la dimensione del batch finché l'addestramento non viene eseguito senza problemi. Per YOLO26, impostare batch=-1 nel tuo script di addestramento determinerà automaticamente la dimensione del batch ottimale per un'elaborazione efficiente. Per ulteriori informazioni, consulta la configurazione di addestramento.

Cos'è l'addestramento a precisione mista e come posso abilitarlo in YOLO26?

L'addestramento a precisione mista utilizza entrambi i tipi di virgola mobile a 16 bit (FP16) e 32 bit (FP32) per bilanciare velocità computazionale e precisione. Questo approccio accelera l'addestramento e riduce l'utilizzo della memoria senza sacrificare l'accuratezza del modello. Per abilitare l'addestramento a precisione mista in YOLO26, imposta il parametro amp su True nella tua configurazione di addestramento. Questo attiva l'addestramento Automatic Mixed Precision (AMP). Per maggiori dettagli su questa tecnica di ottimizzazione, vedi la configurazione di addestramento.

In che modo l'addestramento multiscala migliora le prestazioni del modello YOLO26?

L'addestramento multiscala migliora le prestazioni del modello addestrandolo su immagini di dimensioni variabili, consentendo al modello di generalizzare meglio tra diverse scale e distanze. In YOLO26, puoi abilitare l'addestramento multiscala impostando il parametro scale nella configurazione di addestramento. Ad esempio, scale=0.5 campiona un fattore di zoom compreso tra 0,5 e 1,5, quindi riempie/ritaglia per tornare a imgsz. Questa tecnica simula oggetti a diverse distanze, rendendo il modello più robusto in vari scenari. Per le impostazioni e maggiori dettagli, controlla la configurazione di addestramento.

Come posso utilizzare i pesi pre-addestrati per velocizzare l'addestramento in YOLO26?

Utilizzare pesi pre-addestrati può accelerare notevolmente l'addestramento e migliorare l'accuratezza del modello sfruttando un modello già familiare con le caratteristiche visive fondamentali. In YOLO26, imposta semplicemente il parametro pretrained su True o fornisci un percorso ai tuoi pesi pre-addestrati personalizzati nella configurazione di addestramento. Questo metodo, chiamato transfer learning, consente ai modelli addestrati su grandi dataset di essere adattati efficacemente alla tua applicazione specifica. Scopri di più su come utilizzare i pesi pre-addestrati e i loro benefici nella guida alla configurazione di addestramento.

Qual è il numero consigliato di epoche per l'addestramento di un modello e come lo imposto in YOLO26?

Il numero di epoche si riferisce ai passaggi completi attraverso il dataset di addestramento durante l'addestramento del modello. Un punto di partenza tipico sono 300 epoche. Se il tuo modello va in overfitting prematuramente, puoi ridurre il numero. In alternativa, se non si osserva overfitting, potresti estendere l'addestramento a 600, 1200 o più epoche. Per impostarlo in YOLO26, utilizza il parametro epochs nel tuo script di addestramento. Per ulteriori consigli sulla determinazione del numero ideale di epoche, consulta questa sezione sul numero di epoche.

Commenti