Vai al contenuto

Best practice e suggerimenti per l'apprendimento automatico per il training dei modelli

Introduzione

Una delle fasi più importanti quando si lavora a un progetto di computer vision è la formazione del modello. Prima di arrivare a questa fase, devi definire i tuoi obiettivi e raccogliere e annotare i dati. Dopo aver preelaborato i dati per assicurarti che siano puliti e coerenti, puoi passare alla formazione del modello.

Quindi, cos'è l'addestramento del modello? L'addestramento del modello è il processo che insegna al tuo modello a riconoscere gli schemi visivi e a fare previsioni sulla base dei dati. Ha un impatto diretto sulle prestazioni e sull'accuratezza della tua applicazione. In questa guida ti illustreremo 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 eseguire il training di un modello di Machine Learning

Un modello di visione artificiale viene addestrato regolando i parametri interni per ridurre al minimo gli errori. Inizialmente, il modello viene alimentato con un ampio set di immagini etichettate. Fa previsioni su ciò che è in queste immagini e le previsioni vengono confrontate con le etichette o i contenuti effettivi per calcolare gli errori. Questi errori mostrano quanto le stime del modello siano lontane dai valori reali.

Durante il training, il modello esegue stime in modo iterativo, calcola gli errori e aggiorna i parametri tramite un processo denominato retropropagazione. In questo processo, il modello regola i suoi parametri interni (weights and biases) per ridurre gli errori. Ripetendo questo ciclo molte volte, il modello migliora gradualmente la sua precisione. Nel corso del tempo, impara a riconoscere modelli complessi come forme, colori e trame.

Che cos'è la retropropagazione?

Questo processo di apprendimento permette al modello di computer vision di eseguire diversi compiti, tra cui il rilevamento di oggetti, la segmentazione di istanze e la classificazione di immagini. L'obiettivo finale è quello di creare un modello in grado di generalizzare il suo apprendimento a nuove immagini non viste, in modo da poter comprendere con precisione i dati visivi nelle applicazioni del mondo reale.

Ora che sappiamo cosa succede dietro le quinte quando si esegue il training di un modello, è possibile esaminare i punti da considerare durante il training di un modello.

Addestramento su set di dati di grandi dimensioni

Ci sono diversi aspetti a cui pensare quando intendi utilizzare un set di dati di grandi dimensioni per addestrare un modello. Ad esempio, puoi regolare la dimensione del batch, controllare l'utilizzo di GPU , scegliere di utilizzare l'addestramento multiscala, ecc. Vediamo nel dettaglio ognuna di queste opzioni.

Dimensioni del lotto e utilizzo di GPU

Quando si addestrano modelli su dataset di grandi dimensioni, utilizzare in modo efficiente il sito GPU è fondamentale. La dimensione del batch è un fattore importante. Si tratta del numero di campioni di dati che un modello di apprendimento automatico elabora in una singola iterazione di formazione. Utilizzando la dimensione massima del batch supportata dal tuo GPU, puoi sfruttare appieno le sue capacità e ridurre i tempi di formazione del modello. Tuttavia, devi evitare di esaurire la memoria di GPU . Se dovessi riscontrare degli errori di memoria, riduci la dimensione del batch in modo incrementale finché il modello non si addestra senza problemi.

Per quanto riguarda YOLOv8, è possibile impostare l'opzione batch_size nel parametro configurazione della formazione per adattarsi alla capacità di GPU . Inoltre, imposta batch=-1 nello script di formazione determinerà automaticamente la dimensione del batch che può essere elaborato in modo efficiente in base alle capacità del tuo dispositivo. Regolando le dimensioni del batch, potrai sfruttare al meglio le risorse di GPU e migliorare il processo di formazione complessivo.

Formazione su sottoinsiemi

Il training dei subset è una strategia intelligente che prevede il training del modello su un set di dati più piccolo che rappresenta il set di dati più grande. Può far risparmiare tempo e risorse, soprattutto durante lo sviluppo e il test iniziale del modello. Se si ha poco tempo a disposizione o si sperimentano diverse configurazioni del modello, il training dei sottoinsiemi è una buona opzione.

Quando si tratta di YOLOv8, è possibile implementare facilmente il training dei sottoinsiemi utilizzando il metodo fraction parametro. Questo parametro consente di specificare la frazione del set di dati da usare per il training. Ad esempio, l'impostazione fraction=0.1 addestrerà il modello sul 10% dei dati. È possibile usare questa tecnica per iterazioni rapide e ottimizzazione del modello prima di eseguire il commit del training di un modello usando un set di dati completo. La formazione sui sottoinsiemi ti aiuta a fare rapidi progressi e a identificare tempestivamente potenziali problemi.

Formazione multiscala

L'addestramento multiscala è una tecnica che migliora la capacità di generalizzazione del modello addestrandolo su immagini di dimensioni diverse. Il tuo modello può imparare a rilevare oggetti a diverse scale e distanze e diventare più robusto.

Ad esempio, quando addestri YOLOv8, puoi abilitare l'addestramento multiscala impostando il parametro scale parametro. Questo parametro regola le dimensioni delle immagini di addestramento in base a un fattore specificato, simulando oggetti a distanze diverse. Ad esempio, l'impostazione scale=0.5 ridurrà la dimensione dell'immagine della metà, mentre scale=2.0 lo raddoppierà. La configurazione di questo parametro consente al modello di sperimentare una varietà di scale di immagini e di migliorare le capacità di rilevamento in oggetti di diverse dimensioni e scenari.

Memorizzazione nella cache

La cache è una tecnica importante per migliorare l'efficienza dell'addestramento dei modelli di apprendimento automatico. Memorizzando le immagini pre-elaborate in memoria, il caching riduce il tempo che GPU impiega in attesa del caricamento dei dati dal disco. Il modello può ricevere continuamente i dati senza i ritardi causati dalle operazioni di I/O del disco.

La memorizzazione nella cache può essere controllata durante l'addestramento YOLOv8 utilizzando il comando cache parametro:

  • cache=True: memorizza le immagini del set di dati nella RAM, fornendo la massima velocità di accesso ma al costo di un maggiore utilizzo della 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 la memorizzazione nella cache, basandosi interamente sull'I/O del disco, che è l'opzione più lenta.

Allenamento di precisione misto

Il training di precisione misto utilizza tipi a virgola mobile a 16 bit (FP16) e a 32 bit (FP32). I punti di forza di FP16 e FP32 vengono sfruttati utilizzando FP16 per un calcolo più rapido e FP32 per mantenere la precisione dove necessario. La maggior parte delle operazioni della rete neurale viene eseguita in FP16 per beneficiare di un calcolo più rapido e di un minore utilizzo della memoria. Tuttavia, una copia master dei pesi del modello viene mantenuta in FP32 per garantire la precisione durante le fasi di aggiornamento del peso. È possibile gestire modelli più grandi o batch di dimensioni maggiori all'interno degli stessi vincoli hardware.

Panoramica dell'allenamento di precisione misto

Per implementare il training di precisione mista, è necessario modificare gli script di training e assicurarsi che l'hardware (come le GPU) lo supporti. Molti framework di deep learning moderni, come ad esempio Tensorflow, offrono il supporto integrato per la precisione mista.

L'allenamento di precisione misto è semplice quando si lavora con YOLOv8. È possibile utilizzare il comando amp nella configurazione di training. Impostazione amp=True abilita l'addestramento automatico AMP (Mixed Precision). L'addestramento di precisione misto è 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. L'apprendimento per trasferimento adatta i modelli pre-addestrati a nuovi compiti correlati. La messa a punto di un modello pre-addestrato prevede che si parta da questi pesi per poi continuare l'addestramento sul tuo set di dati specifico. Questo metodo di addestramento consente tempi di addestramento più rapidi e spesso prestazioni migliori perché il modello parte da una solida conoscenza delle caratteristiche di base.

Il pretrained facilita l'apprendimento del trasferimento con YOLOv8. Impostazione pretrained=True utilizzerà pesi pre-addestrati predefiniti oppure è possibile specificare un percorso per un modello pre-addestrato personalizzato. L'utilizzo di pesi pre-addestrati e l'apprendimento di trasferimento aumentano efficacemente le capacità del modello e riducono i costi di addestramento.

Altre tecniche da prendere in considerazione quando si gestisce un set di dati di grandi dimensioni

Ci sono un paio di altre tecniche da considerare quando si gestisce un set di dati di grandi dimensioni:

  • Programmatori del tasso di apprendimento: L'implementazione di schedulatori del tasso di apprendimento regola dinamicamente il tasso di apprendimento durante l'addestramento. Un tasso di apprendimento ben regolato può evitare che il modello superi i minimi e migliorare la stabilità. Durante l'addestramento YOLOv8, il lrf consente di gestire la pianificazione della frequenza di apprendimento impostando la velocità di apprendimento finale come frazione della frequenza iniziale.
  • Formazione distribuita: Per gestire insiemi di dati di grandi dimensioni, l'addestramento distribuito può rappresentare una svolta. Puoi ridurre i tempi di formazione distribuendo il carico di lavoro su più GPU o macchine.

Il numero di epoche per cui allenarsi

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

Una domanda comune che si pone è come determinare il numero di epoche per cui eseguire il training del modello. Un buon punto di partenza sono 300 epoche. Se il modello esegue l'overfit anticipato, è 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 set di dati e agli obiettivi del progetto. I set di dati più grandi potrebbero richiedere più epoche per consentire al modello di apprendere in modo efficace, mentre i set di dati più piccoli potrebbero richiedere meno epoche per evitare l'overfitting. Per quanto riguarda YOLOv8, è possibile impostare l'opzione epochs nello script di training.

Arresto anticipato

L'arresto anticipato è una tecnica preziosa per ottimizzare il training del modello. Monitorando le prestazioni di convalida, è possibile interrompere il training una volta che il modello smette di migliorare. È possibile risparmiare risorse computazionali ed evitare l'overfitting.

Il processo prevede l'impostazione di un parametro di pazienza che determina il numero di epoche in cui attendere un miglioramento delle metriche di convalida 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.

Panoramica sull'interruzione anticipata

Per YOLOv8, è possibile abilitare l'arresto anticipato impostando il parametro Pazienza nella configurazione dell'allenamento. Per esempio patience=5 significa che l'addestramento si interromperà se non si verifica alcun miglioramento nelle metriche di convalida per 5 epoche consecutive. L'utilizzo di questo metodo garantisce che il processo di formazione rimanga efficiente e raggiunga prestazioni ottimali senza calcoli eccessivi.

Scegliere tra formazione cloud e locale

Sono disponibili due opzioni per il training del modello: training cloud e training locale.

La formazione in cloud offre scalabilità e hardware potente ed è ideale per gestire grandi insiemi di dati e modelli complessi. Piattaforme come Google Cloud, AWS e Azure offrono accesso on-demand a GPU e TPU ad alte prestazioni, accelerando i tempi di formazione e consentendo di effettuare esperimenti con modelli di grandi dimensioni. Tuttavia, la formazione nel cloud può essere costosa, soprattutto per lunghi periodi, e il trasferimento dei dati può aumentare i costi e la latenza.

La formazione locale offre maggiore controllo e personalizzazione, consentendoti di personalizzare il tuo ambiente in base a esigenze specifiche ed evitare i costi continui del cloud. Può essere più economico per i progetti a lungo termine e, poiché i dati rimangono on-premise, è più sicuro. Tuttavia, l'hardware locale può avere limitazioni di risorse e richiedere manutenzione, il che può comportare tempi di addestramento 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 modificando i suoi parametri per ridurre gli errori. La scelta dell'ottimizzatore giusto influisce direttamente sulla velocità e sulla precisione di apprendimento del modello.

È inoltre possibile ottimizzare i parametri dell'ottimizzatore per migliorare le prestazioni del modello. La regolazione della velocità di apprendimento imposta la dimensione dei passaggi durante l'aggiornamento dei parametri. Per la stabilità, potresti iniziare con un tasso di apprendimento moderato e diminuirlo gradualmente nel tempo per migliorare l'apprendimento a lungo termine. Inoltre, l'impostazione dello slancio determina l'influenza che gli aggiornamenti passati hanno sugli aggiornamenti attuali. Un valore comune per il momentum è di circa 0,9. Generalmente fornisce un buon equilibrio.

Ottimizzatori comuni

Diversi ottimizzatori hanno vari punti di forza e di debolezza. 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 rimanere bloccato nei minimi locali.
  • Adam (Adaptive Moment Estimation):

    • Combina i vantaggi di SGD con momentum e RMSProp.
    • Regola la velocità di apprendimento per ciascun parametro in base alle stime del primo e del secondo momento delle sfumature.
    • Adatto per dati rumorosi e gradienti sparsi.
    • Efficiente e generalmente richiede meno messa a punto, il che lo rende un ottimizzatore consigliato per YOLOv8.
  • RMSProp (Root Mean Square Propagation):

    • Regola la velocità di apprendimento per ogni parametro dividendo la sfumatura per una media corrente delle grandezze delle sfumature recenti.
    • Aiuta a gestire il problema del gradiente evanescente ed è efficace per le reti neurali ricorrenti.

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

Connettersi con la comunità

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

Risorse comunitarie

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 visione artificiale.

Punti chiave

L'addestramento dei modelli di visione artificiale comporta il rispetto delle buone pratiche, l'ottimizzazione delle strategie e la risoluzione dei problemi man mano che si presentano. Tecniche come la regolazione delle dimensioni dei lotti, l'allenamento di precisione misto e l'avvio con pesi pre-addestrati possono far funzionare meglio i tuoi modelli e allenarsi più velocemente. Metodi come l'addestramento dei sottoinsiemi e l'arresto anticipato ti aiutano a risparmiare tempo e risorse. Rimanere in contatto con la community e stare al passo con le nuove tendenze ti aiuterà a continuare a migliorare le tue capacità di formazione dei modelli.

DOMANDE FREQUENTI

Come posso migliorare l'utilizzo di GPU quando addestro un grande set di dati con Ultralytics YOLO ?

Per migliorare l'utilizzo di GPU , imposta l'opzione batch_size nella configurazione di formazione alla dimensione massima supportata dal tuo GPU. In questo modo potrai sfruttare appieno le capacità di GPU e ridurre i tempi di addestramento. Se dovessi riscontrare errori di memoria, riduci progressivamente le dimensioni del batch fino a quando l'addestramento non procede senza problemi. Per YOLOv8, l'impostazione batch=-1 nello script di formazione determinerà automaticamente la dimensione ottimale del batch per un'elaborazione efficiente. Per ulteriori informazioni, consulta la sezione configurazione della formazione.

Cos'è l'allenamento misto di precisione e come si attiva in YOLOv8?

La formazione a precisione mista utilizza tipi di virgola mobile a 16 bit (FP16) e a 32 bit (FP32) per bilanciare la velocità di calcolo e la precisione. Questo approccio velocizza l'addestramento e riduce l'utilizzo della memoria senza sacrificare l'accuratezza del modello. Per abilitare l'addestramento a precisione mista in YOLOv8, imposta il parametro amp a True nella configurazione dell'allenamento. In questo modo si attiva la formazione automatica di precisione mista (AMP). Per maggiori dettagli su questa tecnica di ottimizzazione, consulta la sezione configurazione della formazione.

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

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

Come posso utilizzare i pesi pre-addestrati per accelerare l'addestramento in YOLOv8?

L'utilizzo di pesi pre-addestrati può ridurre significativamente i tempi di addestramento e migliorare le prestazioni del modello partendo da un modello che già comprende le caratteristiche di base. In YOLOv8, puoi impostare i pesi pretrained a True o specificare un percorso per i pesi pre-addestrati personalizzati nella configurazione dell'addestramento. Questo approccio, noto come apprendimento per trasferimento, sfrutta la conoscenza di grandi insiemi di dati per adattarsi al tuo compito specifico. Scopri di più sui pesi pre-addestrati e i loro vantaggi qui.

Il numero di epoche si riferisce ai passaggi completi del dataset di allenamento durante la formazione del modello. Un punto di partenza tipico è 300 epochs. Se il modello si adatta troppo presto, puoi ridurre il numero. In alternativa, se non si osserva overfitting, puoi estendere l'addestramento a 600, 1200 o più epoch. Per impostare questo valore in YOLOv8, usa il comando epochs nello script di addestramento. Per ulteriori consigli su come determinare il numero ideale di epoche, consulta questa sezione su numero di epoche.



Creato 2024-06-26, Aggiornato 2024-07-05
Autori: glenn-jocher (3), Laughing-q (1), abirami-vina (1)

Commenti