Suggerimenti per i migliori risultati di addestramento di YOLOv5
📚 Questa guida spiega come ottenere i migliori risultati di mAP e di addestramento con YOLOv5 🚀.
Il più delle volte si possono ottenere buoni risultati senza modifiche ai modelli o alle impostazioni di addestramento, a condizione che il tuo dataset sia sufficientemente ampio e ben etichettato. Se inizialmente non ottieni buoni risultati, ci sono passaggi che potresti intraprendere per migliorare, ma consigliamo sempre agli utenti di addestrare prima con tutte le impostazioni predefinite prima di prendere in considerazione qualsiasi modifica. Questo aiuta a stabilire una base di prestazioni e a individuare aree di miglioramento.
Se hai domande sui risultati del tuo addestramento ti consigliamo di fornire la massima quantità di informazioni possibile se ti aspetti una risposta utile, inclusi grafici dei risultati (perdite di addestramento, perdite di convalida, P, R, mAP), curva PR, matrice di confusione, mosaici di addestramento, risultati dei test e immagini delle statistiche del dataset come labels.png. Tutto questo si trova nella tua directory project/name, solitamente yolov5/runs/train/exp.
Abbiamo preparato una guida completa per gli utenti che desiderano ottenere i migliori risultati dai loro addestramenti YOLOv5 qui sotto.
Dataset
- Immagini per classe. ≥ 1500 immagini per classe raccomandate
- Istanze per classe. ≥ 10000 istanze (oggetti etichettati) per classe raccomandate
- Varietà di immagini. Deve essere rappresentativa dell'ambiente di distribuzione. Per casi d'uso nel mondo reale consigliamo immagini di diversi momenti della giornata, diverse stagioni, diverse condizioni meteorologiche, diversa illuminazione, diverse angolazioni, diverse fonti (raccolte online, raccolte localmente, diverse fotocamere) ecc.
- Coerenza delle etichette. Tutte le istanze di tutte le classi in tutte le immagini devono essere etichettate. L'etichettatura parziale non funzionerà.
- Accuratezza delle etichette. Le etichette devono racchiudere fedelmente ogni oggetto. Non dovrebbe esserci alcuno spazio tra un oggetto e il suo bounding box. Nessun oggetto dovrebbe essere privo di etichetta.
- Disciplina di suddivisione train/val. Assicurati che le immagini di convalida e di test non appaiano mai nel set di addestramento per evitare metriche eccessivamente ottimistiche. Mantieni le distribuzioni delle classi simili tra le suddivisioni.
- Verifica delle etichette. Visualizza
train_batch*.jpgall'avvio dell'addestramento per verificare che le tue etichette appaiano corrette, ad esempio vedi il mosaico esempio. - Immagini di sfondo. Le immagini di sfondo sono immagini senza oggetti che vengono aggiunte a un dataset per ridurre i falsi positivi (FP). Consigliamo circa lo 0-10% di immagini di sfondo per aiutare a ridurre gli FP (COCO ha 1000 immagini di sfondo come riferimento, l'1% del totale). Non sono richieste etichette per le immagini di sfondo.
Selezione del modello
Modelli più grandi come YOLOv5x e YOLOv5x6 produrranno risultati migliori in quasi tutti i casi, ma hanno più parametri, richiedono più memoria CUDA per l'addestramento e sono più lenti da eseguire. Per implementazioni mobile consigliamo YOLOv5s/m, per implementazioni cloud consigliamo YOLOv5l/x. Vedi la nostra tabella nel README per un confronto completo di tutti i modelli.

-
Partire da pesi preaddestrati. Raccomandato per dataset di dimensioni da piccole a medie (es. VOC, VisDrone, GlobalWheat). Passa il nome del modello all'argomento
--weights. I modelli si scaricano automaticamente dall'ultima release di YOLOv5.python train.py --data custom.yaml --weights yolov5s.pt python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt -
Partire da zero. Raccomandato per dataset di grandi dimensioni (es. COCO, Objects365, OIv6). Passa l'architettura del modello YAML a cui sei interessato, insieme a un argomento vuoto
--weights '':python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
Impostazioni di addestramento
Prima di modificare qualsiasi cosa, addestra prima con le impostazioni predefinite per stabilire una base di prestazioni. Un elenco completo delle impostazioni di train.py può essere trovato nell'argparser di train.py.
- Epoche. Inizia con 300 epoche. Se questo causa overfitting prematuro, puoi ridurre le epoche. Se non si verifica overfitting dopo 300 epoche, addestra più a lungo, es. 600, 1200 epoche ecc.
- Dimensione immagine. COCO si addestra alla risoluzione nativa di
--img 640, tuttavia, a causa dell'elevata quantità di piccoli oggetti nel dataset, può beneficiare di un addestramento a risoluzioni più elevate come--img 1280. Se ci sono molti piccoli oggetti, i dataset personalizzati beneficeranno dell'addestramento alla risoluzione nativa o superiore. I migliori risultati di inferenza si ottengono con lo stesso--imgutilizzato per l'addestramento, ad esempio se addestri a--img 1280dovresti anche testare e rilevare a--img 1280. - Batch size. Usa la
--batch-sizepiù grande consentita dal tuo hardware. Batch size piccole producono statistiche di batch normalization scadenti e dovrebbero essere evitate. Puoi usare--batch-size -1per selezionare automaticamente la batch size ottimale per la tua GPU. - Learning rate. Il programma di learning rate predefinito funziona bene nella maggior parte dei casi. Per una convergenza più rapida, puoi provare a usare il flag
--cos-lrper abilitare la pianificazione del learning rate a coseno, che riduce gradualmente il learning rate seguendo una curva coseno nel corso delle epoche. - Data augmentation. YOLOv5 include varie tecniche di aumento come il mosaico, che combina più immagini di addestramento. Per le ultime epoche, considera l'utilizzo di
--close-mosaic 10per disabilitare l'aumento a mosaico, il che può aiutare a stabilizzare l'addestramento. - Iperparametri. Gli iperparametri predefiniti si trovano in hyp.scratch-low.yaml. Ti consigliamo di addestrare prima con gli iperparametri predefiniti prima di pensare di modificarne qualcuno. In generale, aumentare gli iperparametri di aumento ridurrà e ritarderà l'overfitting, consentendo addestramenti più lunghi e un mAP finale più alto. La riduzione degli iperparametri di guadagno dei componenti di perdita come
hyp['obj']aiuterà a ridurre l'overfitting in quei componenti di perdita specifici. Per un metodo automatizzato di ottimizzazione di questi iperparametri, vedi il nostro Tutorial sull'Evoluzione degli Iperparametri. - Addestramento a precisione mista. Abilita l'addestramento a precisione mista con
--ampper velocizzare l'addestramento e ridurre l'utilizzo della memoria senza sacrificare l'accuratezza del modello. - Addestramento Multi-GPU. Se hai più GPU, usa
--device 0,1,2,3per distribuire l'addestramento tra di esse, il che può ridurre significativamente il tempo di addestramento. - Interruzione precoce (Early stopping). Usa
--patience 50per interrompere l'addestramento se le metriche di convalida non migliorano per 50 epoche, risparmiando tempo e prevenendo l'overfitting.
Tecniche di Ottimizzazione Avanzate
- Transfer learning. Per dataset specializzati, inizia con pesi preaddestrati e sblocca gradualmente i livelli durante l'addestramento per adattare il modello al tuo compito specifico.
- Potatura del modello. Dopo l'addestramento, considera di potare il tuo modello per rimuovere pesi ridondanti e ridurre le dimensioni del modello senza una significativa perdita di prestazioni.
- Ensemble di modelli. Per applicazioni critiche, addestra più modelli con configurazioni diverse e combina le loro previsioni per una maggiore accuratezza.
- Test-time augmentation. Abilita TTA durante l'inferenza con
--augmentper migliorare l'accuratezza della previsione mediando i risultati dalle versioni aumentate dell'immagine di input.
Ulteriori letture
Se desideri saperne di più, un buon punto di partenza è la 'Ricetta per Addestrare Reti Neurali' di Karpathy, che ha ottime idee per l'addestramento che si applicano ampiamente in tutti i domini ML: https://karpathy.github.io/2019/04/25/recipe/
Per informazioni più dettagliate sulle impostazioni e le configurazioni di addestramento, fai riferimento alla documentazione sulle impostazioni di addestramento Ultralytics, che fornisce spiegazioni complete di tutti i parametri disponibili.
Buona fortuna 🍀 e facci sapere se hai altre domande!
FAQ
Come faccio a sapere se il mio modello va in overfitting?
Il tuo modello potrebbe andare in overfitting se la perdita di addestramento continua a diminuire mentre la perdita di convalida inizia ad aumentare. Monitora il mAP di convalida: se si stabilizza o diminuisce mentre la perdita di addestramento continua a migliorare, è un segno di overfitting. Le soluzioni includono l'aggiunta di più dati di addestramento, l'aumento dell'aumento dei dati o l'implementazione di tecniche di regolarizzazione.
Qual è la batch size ottimale per addestrare YOLOv5?
La batch size ottimale dipende dalla memoria della tua GPU. Batch size più grandi generalmente forniscono statistiche di batch normalization migliori e una maggiore stabilità dell'addestramento. Usa la batch size più grande che il tuo hardware può gestire senza esaurire la memoria. Puoi usare --batch-size -1 per determinare automaticamente la batch size ottimale per la tua configurazione.
Come posso velocizzare l'addestramento di YOLOv5?
Per velocizzare l'addestramento, prova: abilitare l'addestramento a precisione mista con --amp, utilizzare più GPU con --device 0,1,2,3, mettere in cache il tuo dataset con --cache e ottimizzare la tua batch size. Considera anche l'utilizzo di una variante di modello più piccola come YOLOv5s se l'accuratezza assoluta non è critica.
