Vai al contenuto

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

Introduzione

Uno dei passaggi più importanti quando si lavora a un progetto di computer vision è il training del modello. Prima di raggiungere questo passaggio, è necessario definire i propri obiettivi e raccogliere e annotare i propri dati. Dopo aver preelaborato i dati per assicurarsi che siano puliti e coerenti, puoi passare all'addestramento del tuo modello.



Guarda: Suggerimenti per il training del modello | Come gestire grandi dataset | Dimensione del batch, utilizzo della GPU e Precisione Mista

Quindi, cos'è il training del modello? Il training del modello è il processo di insegnamento al modello a riconoscere schemi visivi ed effettuare previsioni basate sui tuoi dati. Influisce direttamente sulle prestazioni e sull'accuratezza della tua applicazione. In questa guida, tratteremo le migliori pratiche, le tecniche di ottimizzazione e i 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. Esegue previsioni su cosa c'è 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 il training, il modello effettua iterativamente previsioni, calcola gli errori e aggiorna i suoi parametri attraverso un processo chiamato backpropagation. In questo processo, il modello adatta 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 schemi complessi come forme, colori e texture.

Cos'è la retropropagazione?

Questo processo di apprendimento consente al modello di computer vision di eseguire varie attività, tra cui object detection, instance segmentation e image classification. L'obiettivo finale è creare un modello in grado di generalizzare il suo apprendimento a immagini nuove e mai viste prima, in modo che possa comprendere accuratamente i dati visivi nelle applicazioni del mondo reale.

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

Addestramento su dataset di grandi dimensioni

Ci sono diversi aspetti da considerare quando si prevede di utilizzare un dataset di grandi dimensioni per addestrare un modello. Ad esempio, è possibile regolare la dimensione del batch, controllare l'utilizzo della GPU, scegliere di utilizzare l'addestramento multiscala, ecc. Analizziamo nel dettaglio ciascuna di queste opzioni.

Dimensione del batch e utilizzo della GPU

Quando si addestrano modelli su set di dati di grandi dimensioni, l'utilizzo efficiente della 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 GPU, puoi sfruttare appieno le sue capacità e ridurre il tempo necessario per l'addestramento del modello. Tuttavia, è necessario evitare di esaurire la memoria della GPU. Se si verificano errori di memoria, ridurre gradualmente la dimensione del batch fino a quando il modello non si addestra senza problemi.



Guarda: Come utilizzare l'inferenza batch con Ultralytics YOLO11 | Velocizza il rilevamento di oggetti in python 🎉

Per quanto riguarda YOLO11, puoi impostare il batch_size parametro in the configurazione dell'addestramento per adattarsi alla capacità della GPU. Inoltre, impostando batch=-1 nel tuo script di training determinerà automaticamente il dimensione del batch che può essere elaborato in modo efficiente in base alle capacità del tuo dispositivo. Ottimizzando la dimensione del batch, puoi sfruttare al massimo le risorse della tua GPU e migliorare il processo di training complessivo.

Training su sottoinsieme di dati

Il training su sottoinsieme di dati è una strategia intelligente che prevede l'addestramento del modello su un set di dati più piccolo che rappresenta il dataset più grande. Può far risparmiare tempo e risorse, soprattutto durante lo sviluppo e il test iniziale del modello. Se hai poco tempo o stai sperimentando diverse configurazioni del modello, il training su sottoinsieme di dati è una buona opzione.

Quando si tratta di YOLO11, è possibile implementare facilmente il training del sottoinsieme utilizzando il fraction parametro. Questo parametro ti consente di specificare quale frazione del tuo dataset utilizzare per il training. Ad esempio, impostando fraction=0.1 addestrerà il tuo modello sul 10% dei dati. Puoi utilizzare questa tecnica per iterazioni rapide e per mettere a punto il tuo modello prima di impegnarti ad addestrare un modello utilizzando un set di dati completo. L'addestramento su sottoinsiemi ti aiuta a fare progressi rapidamente e a identificare potenziali problemi in anticipo.

Addestramento Multi-scala

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

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 che i dati vengano caricati dal disco. Il modello può ricevere continuamente dati senza ritardi causati dalle operazioni di I/O del disco.

Il caching può essere controllato durante l'addestramento di YOLO11 utilizzando il cache parametro:

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

Addestramento a Precisione Mista

L'addestramento a precisione mista utilizza sia tipi di dati in virgola mobile a 16 bit (FP16) che a 32 bit (FP32). I vantaggi di entrambi, FP16 e FP32, vengono sfruttati usando FP16 per un calcolo più veloce e FP32 per mantenere la precisione dove necessario. La maggior parte delle operazioni della rete neurale vengono eseguite in FP16 per beneficiare di un calcolo più veloce e di un minore utilizzo di memoria. Tuttavia, una copia master dei pesi del modello viene conservata in FP32 per garantire l'accuratezza durante le fasi di aggiornamento dei pesi. È possibile gestire modelli più grandi o batch più grandi entro gli stessi vincoli hardware.

Panoramica sull'Addestramento a Precisione Mista

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 framework moderni di deep learning, come PyTorch e TensorFlow, offrono supporto integrato per la precisione mista.

L'addestramento a precisione mista è semplice quando si lavora con YOLO11. Puoi usare il amp flag nella configurazione di addestramento. Impostando 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 modello.

Pesi pre-addestrati

L'utilizzo di 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 set di dati, dando al tuo modello un vantaggio iniziale. Il Transfer learning adatta i modelli pre-addestrati a nuovi compiti correlati. La messa a punto di un modello pre-addestrato comporta l'inizio con questi pesi e quindi la continuazione dell'addestramento sul tuo set di dati specifico. Questo metodo di addestramento si traduce in tempi di addestramento più rapidi e spesso in prestazioni migliori perché il modello inizia con una solida comprensione delle caratteristiche di base.

Il pretrained parametro semplifica il transfer learning con YOLO11. Impostando pretrained=True utilizzerà i pesi pre-addestrati predefiniti, oppure puoi specificare un percorso a un modello pre-addestrato personalizzato. L'utilizzo di pesi pre-addestrati e il transfer learning aumentano efficacemente le capacità del tuo modello e riducono i costi di addestramento.

Altre tecniche da considerare quando si gestisce un set di dati di grandi dimensioni

Ci sono altre tecniche da considerare quando si gestisce un dataset di grandi dimensioni:

  • Scheduler di Learning Rate: L'implementazione di scheduler del tasso di apprendimento regola dinamicamente il tasso di apprendimento durante l'addestramento. Un tasso di apprendimento ben sintonizzato può impedire al modello di superare i minimi e migliorare la stabilità. Durante l'addestramento di YOLO11, il lrf parameter aiuta a gestire la pianificazione del tasso di apprendimento impostando il tasso di apprendimento finale come una frazione del tasso iniziale.
  • Training Distribuito: Per la gestione di set di dati di grandi dimensioni, il training distribuito può fare la differenza. È possibile ridurre i tempi di training distribuendo il carico di lavoro su più GPU o macchine. Questo approccio è particolarmente utile per progetti su scala aziendale con notevoli risorse computazionali.

Il numero di epoche per cui eseguire l'addestramento

Durante l'addestramento di un modello, un' epoca si riferisce a un passaggio completo attraverso l'intero set di dati di addestramento. Durante un'epoca, il modello elabora ogni esempio nel set di addestramento una volta e aggiorna i suoi parametri in base all'algoritmo di apprendimento. Solitamente sono necessarie più epoche per consentire al modello di apprendere e perfezionare i suoi parametri nel tempo.

Una domanda comune che si pone è come determinare il numero di epoche per cui addestrare il modello. Un buon punto di partenza sono 300 epoche. Se il modello si adatta eccessivamente (overfit) precocemente, è possibile ridurre il numero di epoche. Se l'overfitting non si verifica dopo 300 epoche, è possibile 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 apprenda in modo efficace, mentre dataset più piccoli potrebbero richiedere meno epoche per evitare l'overfitting. Per quanto riguarda YOLO11, puoi impostare il epochs parametro nel tuo script di training.

Arresto anticipato

L'arresto anticipato è una tecnica preziosa per ottimizzare l'addestramento del modello. Monitorando le prestazioni di convalida, è possibile interrompere l'addestramento una volta che il modello smette di migliorare. Ciò consente di risparmiare risorse computazionali e prevenire l'overfitting.

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

Panoramica sull'arresto anticipato

Per YOLO11, è possibile abilitare l'arresto anticipato impostando il parametro di tolleranza nella configurazione di addestramento. Ad esempio, patience=5 significa che l'addestramento si interromperà se non ci sono miglioramenti nelle metriche di convalida per 5 epoche consecutive. L'utilizzo di questo metodo garantisce che il processo di addestramento rimanga efficiente e raggiunga prestazioni ottimali senza un eccessivo calcolo.

Scegliere tra addestramento in cloud e locale

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

Il training su cloud offre scalabilità e hardware potente ed è ideale per la gestione di 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 esperimenti con modelli più grandi. Tuttavia, il training su cloud può essere costoso, soprattutto per lunghi periodi, e il trasferimento dei dati può aumentare i costi e la latenza.

L'addestramento locale offre maggiore controllo e personalizzazione, consentendo di adattare l'ambiente a esigenze specifiche ed evitare i costi continui del cloud. Può essere più economico per 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, 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 rete neurale per minimizzare la funzione di perdita, che 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 l'accuratezza con cui il modello apprende.

Puoi anche ottimizzare i parametri dell'ottimizzatore per migliorare le prestazioni del modello. La regolazione del learning rate imposta la dimensione dei passaggi durante l'aggiornamento dei parametri. Per 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 quanta influenza hanno gli aggiornamenti passati sugli aggiornamenti correnti. Un valore comune per il momentum è intorno a 0.9 e generalmente fornisce un buon equilibrio.

Ottimizzatori comuni

Diversi ottimizzatori hanno vari punti di forza e debolezze. Diamo un'occhiata ad alcuni ottimizzatori comuni.

  • SGD (Stochastic Gradient Descent) (Discesa del gradiente stocastico):

    • 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 vantaggi sia di SGD con momentum che di RMSProp.
    • Regola il tasso di apprendimento per ciascun parametro in base alle stime dei primi due momenti dei gradienti.
    • Adatto per dati rumorosi e gradienti sparsi.
    • Efficiente e generalmente richiede meno ottimizzazione, rendendolo un ottimizzatore raccomandato per YOLO11.
  • RMSProp (Root Mean Square Propagation):

    • Regola il tasso di apprendimento per ciascun parametro dividendo il gradiente per una media mobile delle magnitudini dei gradienti recenti.
    • Aiuta a gestire il problema del gradiente che svanisce ed è efficace per le reti neurali ricorrenti.

Per YOLO11, il optimizer parametro ti consente di scegliere tra vari ottimizzatori, tra cui SGD, Adam, AdamW, NAdam, RAdam e RMSProp, oppure puoi impostarlo su auto per la selezione automatica in base alla configurazione del modello.

Connettiti con la community

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

Risorse della community

  • Problemi su GitHub: Visita il repository YOLO11 su GitHub e utilizza 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

L'utilizzo di queste risorse ti aiuterà a risolvere le sfide e a rimanere aggiornato con le ultime tendenze e pratiche nella comunità della computer vision.

Punti chiave

L'addestramento di modelli di computer vision implica seguire buone pratiche, ottimizzare le tue strategie e risolvere i problemi man mano che si presentano. Tecniche come la regolazione delle dimensioni dei batch, l'addestramento a precisione mista e l'avvio con pesi pre-addestrati possono migliorare le prestazioni dei tuoi modelli e accelerare l'addestramento. Metodi come l'addestramento di sottoinsiemi e l'arresto anticipato ti aiutano a risparmiare tempo e risorse. Rimanere in contatto con la community e tenersi aggiornati sulle nuove tendenze ti aiuterà a migliorare continuamente le tue capacità di addestramento dei modelli.

FAQ

Come posso migliorare l'utilizzo della GPU quando addestro un dataset di grandi dimensioni con Ultralytics YOLO?

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

Cos'è il training a precisione mista e come posso abilitarlo in YOLO11?

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

In che modo il training multiscala migliora le prestazioni del modello YOLO11?

L'addestramento multiscala migliora le prestazioni del modello addestrandolo su immagini di dimensioni variabili, consentendo al modello di generalizzare meglio su diverse scale e distanze. In YOLO11, puoi abilitare l'addestramento multiscala impostando il scale parametro nella configurazione di training. Ad esempio, scale=0.5 riduce le dimensioni dell'immagine della metà, mentre scale=2.0 lo raddoppia. Questa tecnica simula oggetti a distanze diverse, rendendo il modello più robusto in vari scenari. Per le impostazioni e maggiori dettagli, consulta la sezione configurazione dell'addestramento.

Come posso usare pesi pre-addestrati per velocizzare l'addestramento in YOLO11?

L'utilizzo di 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 YOLO11, è sufficiente impostare il pretrained parametro a True oppure 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 specifica applicazione. Scopri di più su come utilizzare i pesi pre-addestrati e i loro vantaggi nella guida alla configurazione dell'addestramento.

Il numero di epoche si riferisce ai passaggi completi attraverso il set di dati di addestramento durante l'addestramento del modello. Un punto di partenza tipico è di 300 epoche. Se il tuo modello si adatta eccessivamente troppo presto, puoi ridurre il numero. In alternativa, se non si osserva un adattamento eccessivo, potresti estendere l'addestramento a 600, 1200 o più epoche. Per impostarlo in YOLO11, usa il epochs parametro nel tuo script di training. Per ulteriori suggerimenti su come determinare il numero ideale di epoche, fare riferimento a questa sezione su numero di epoche.



📅 Creato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti