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.
Guarda: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and [Mixed Precision](https://www.ultralytics.com/glossary/mixed-precision)
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.
How to Train a Machine Learning Model
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.
During training, the model iteratively makes predictions, calculates errors, and updates its parameters through a process called backpropagation. In this process, the model adjusts its internal parameters (weights and biases) to reduce the errors. By repeating this cycle many times, the model gradually improves its accuracy. Over time, it learns to recognize complex patterns such as shapes, colors, and textures.
This learning process makes it possible for the computer vision model to perform various tasks, including object detection, instance segmentation, and image classification. The ultimate goal is to create a model that can generalize its learning to new, unseen images so that it can accurately understand visual data in real-world applications.
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.
With respect to YOLO11, you can set the batch_size
nel parametro configurazione della formazione per adattarsi alla capacità di GPU . Inoltre, imposta batch=-1
in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.
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.
When it comes to YOLO11, you can easily implement subset training by using the 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.
For example, when you train YOLO11, you can enable multiscale training by setting the 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.
Caching can be controlled when training YOLO11 using the 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
Mixed precision training uses both 16-bit (FP16) and 32-bit (FP32) floating-point types. The strengths of both FP16 and FP32 are leveraged by using FP16 for faster computation and FP32 to maintain precision where needed. Most of the neural network's operations are done in FP16 to benefit from faster computation and lower memory usage. However, a master copy of the model's weights is kept in FP32 to ensure accuracy during the weight update steps. You can handle larger models or larger batch sizes within the same hardware constraints.
To implement mixed precision training, you'll need to modify your training scripts and ensure your hardware (like GPUs) supports it. Many modern deep learning frameworks, such as Tensorflow, offer built-in support for mixed precision.
Mixed precision training is straightforward when working with YOLO11. You can use the 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
Using pretrained weights is a smart way to speed up your model's training process. Pretrained weights come from models already trained on large datasets, giving your model a head start. Transfer learning adapts pretrained models to new, related tasks. Fine-tuning a pre-trained model involves starting with these weights and then continuing training on your specific dataset. This method of training results in faster training times and often better performance because the model starts with a solid understanding of basic features.
Il pretrained
parameter makes transfer learning easy with YOLO11. Setting 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:
- Learning Rate Schedulers: Implementing learning rate schedulers dynamically adjusts the learning rate during training. A well-tuned learning rate can prevent the model from overshooting minima and improve stability. When training YOLO11, the
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.
A common question that comes up is how to determine the number of epochs to train the model for. A good starting point is 300 epochs. If the model overfits early, you can reduce the number of epochs. If overfitting does not occur after 300 epochs, you can extend the training to 600, 1200, or more epochs.
However, the ideal number of epochs can vary based on your dataset's size and project goals. Larger datasets might require more epochs for the model to learn effectively, while smaller datasets might need fewer epochs to avoid overfitting. With respect to YOLO11, you can set the 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.
The process involves setting a patience parameter that determines how many epochs to wait for an improvement in validation metrics before stopping training. If the model's performance does not improve within these epochs, training is stopped to avoid wasting time and resources.
For YOLO11, you can enable early stopping by setting the patience parameter in your training configuration. For example, 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
An optimizer is an algorithm that adjusts the weights of your neural network to minimize the loss function, which measures how well the model is performing. In simpler terms, the optimizer helps the model learn by tweaking its parameters to reduce errors. Choosing the right optimizer directly affects how quickly and accurately the model learns.
È 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.
- Efficient and generally requires less tuning, making it a recommended optimizer for YOLO11.
-
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.
- Helps in handling the vanishing gradient problem and is effective for recurrent neural networks.
For YOLO11, the 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
- GitHub Issues: Visit the YOLO11 GitHub repository and use the Issues tab to ask questions, report bugs, and suggest new features. The community and maintainers are very active and ready to help.
- Ultralytics Server Discord: Unisciti al server Discord diUltralytics per chattare con altri utenti e sviluppatori, ricevere supporto e condividere le tue esperienze.
Documentazione ufficiale
- Ultralytics YOLO11 Documentation: Check out the official YOLO11 documentation for detailed guides and helpful tips on various computer vision projects.
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
Training computer vision models involves following good practices, optimizing your strategies, and solving problems as they arise. Techniques like adjusting batch sizes, mixed precision training, and starting with pre-trained weights can make your models work better and train faster. Methods like subset training and early stopping help you save time and resources. Staying connected with the community and keeping up with new trends will help you keep improving your model training skills.
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
parameter in your training configuration to the maximum size supported by your GPU. This ensures that you make full use of the GPU's capabilities, reducing training time. If you encounter memory errors, incrementally reduce the batch size until training runs smoothly. For YOLO11, setting 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.
What is mixed precision training, and how do I enable it in YOLO11?
Mixed precision training utilizes both 16-bit (FP16) and 32-bit (FP32) floating-point types to balance computational speed and precision. This approach speeds up training and reduces memory usage without sacrificing model accuracy. To enable mixed precision training in YOLO11, set the 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.
How does multiscale training enhance YOLO11 model performance?
Multiscale training enhances model performance by training on images of varying sizes, allowing the model to better generalize across different scales and distances. In YOLO11, you can enable multiscale training by setting the 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.
How can I use pre-trained weights to speed up training in YOLO11?
Using pre-trained weights can significantly reduce training times and improve model performance by starting from a model that already understands basic features. In YOLO11, you can set the 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.
What is the recommended number of epochs for training a model, and how do I set this in YOLO11?
The number of epochs refers to the complete passes through the training dataset during model training. A typical starting point is 300 epochs. If your model overfits early, you can reduce the number. Alternatively, if overfitting isn't observed, you might extend training to 600, 1200, or more epochs. To set this in YOLO11, use the epochs
nello script di addestramento. Per ulteriori consigli su come determinare il numero ideale di epoche, consulta questa sezione su numero di epoche.