Consigli per ottenere i migliori risultati nell'allenamento YOLOv5
📚 Questa guida spiega come produrre i migliori risultati di mAP e allenamento con YOLOv5 🚀.
Nella maggior parte dei casi è possibile ottenere buoni risultati senza modificare i modelli o le impostazioni di addestramento, a condizione che il dataset sia sufficientemente grande e ben etichettato. Se all'inizio non si ottengono buoni risultati, si possono adottare misure per migliorare, ma consigliamo sempre agli utenti di allenarsi con tutte le impostazioni predefinite prima di prendere in considerazione qualsiasi modifica. Questo aiuta a stabilire una linea di base delle prestazioni e a individuare le aree di miglioramento.
Se avete domande sui risultati del vostro allenamento si consiglia di fornire il maggior numero di informazioni possibili se vi aspettate una risposta utile, compresi i grafici dei risultati (perdite del treno, perdite val, P, R, mAP), la curva PR, matrice di confusione, mosaici di addestramento, risultati dei test e immagini statistiche del set di dati, come labels.png. Tutte queste immagini si trovano nella cartella project/name
directory, in genere yolov5/runs/train/exp
.
Di seguito abbiamo raccolto una guida completa per gli utenti che desiderano ottenere i migliori risultati nei loro allenamenti su YOLOv5 .
Set di dati
- Immagini per classe. ≥ 1500 immagini per classe consigliate
- Istanze per classe. ≥ 10000 istanze (oggetti etichettati) per classe consigliate
- Varietà di immagini. Devono essere rappresentative dell'ambiente in cui vengono utilizzate. Per i casi d'uso reali si consigliano immagini provenienti da diverse ore del giorno, diverse stagioni, diverse condizioni atmosferiche, diverse illuminazioni, diverse angolazioni, diverse fonti (scraped online, raccolte localmente, diverse telecamere) ecc.
- Coerenza delle etichette. Tutte le istanze di tutte le classi in tutte le immagini devono essere etichettate. L'etichettatura parziale non funziona.
- Precisione delle etichette. Le etichette devono racchiudere strettamente ogni oggetto. Non deve esistere spazio tra un oggetto e il suo rettangolo di selezione. Nessun oggetto deve mancare di un'etichetta.
- Verifica dell'etichetta. Vista
train_batch*.jpg
all'avvio del treno per verificare che le etichette siano corrette, ad es. esempio mosaico. - Immagini di sfondo. Le immagini di sfondo sono immagini prive di oggetti che vengono aggiunte a un set di dati per ridurre i falsi positivi (FP). Si consiglia di aggiungere circa lo 0-10% di immagini di sfondo per ridurre i PQ (COCO ha 1000 immagini di sfondo come riferimento, l'1% del totale). Le immagini di sfondo non richiedono etichette.
Selezione del modello
I modelli più grandi, come YOLOv5x e YOLOv5x6, producono 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 le implementazioni mobili si consiglia YOLOv5s/m, mentre per le implementazioni in cloud si consiglia YOLOv5l/x. Per un confronto completo di tutti i modelli, consultare la tabella README.
- Iniziare dai pesi preimpostati. Consigliato per insiemi di dati di piccole e medie dimensioni (es. VOC, VisDrone, Grano globale). Passare il nome del modello al metodo
--weights
argomento. I modelli vengono scaricati automaticamente dal sito Ultima versione 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
- Iniziare da zero. Consigliato per grandi insiemi di dati (ad es. COCO, Oggetti365, OIv6). Passare l'architettura del modello YAML a cui si è interessati, insieme a un file vuoto
--weights ''
argomento:
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 formazione
Prima di modificare qualsiasi cosa, è bene allenarsi con le impostazioni predefinite per stabilire una linea di base delle prestazioni. Un elenco completo delle impostazioni di train.py si trova nell'argparser di train.py.
- Epoche. Iniziare con 300 epoche. Se si verifica un overfitting precoce, è possibile ridurre le epoche. Se l 'overfitting non si verifica dopo 300 epoch, si può iniziare con un addestramento più lungo, vale a dire 600, 1200 epoch e così via.
- Dimensioni dell'immagine. COCO si allena alla risoluzione nativa di
--img 640
anche se, a causa dell'elevata quantità di oggetti di piccole dimensioni presenti nel set di dati, può trarre vantaggio dall'addestramento a risoluzioni più elevate, come ad esempio--img 1280
. Se ci sono molti oggetti piccoli, i set di dati personalizzati trarranno vantaggio dall'addestramento a risoluzione nativa o superiore. I migliori risultati di inferenza si ottengono alla stessa risoluzione--img
come l'allenamento è stato eseguito, cioè se ci si allena a--img 1280
è necessario testare e rilevare anche a--img 1280
. - Dimensione del lotto. Utilizzare il più grande
--batch-size
che il vostro hardware consente. I piccoli lotti producono scarse normalizzazione dei lotti statistiche e dovrebbe essere evitato. È possibile utilizzare--batch-size -1
per selezionare automaticamente la dimensione ottimale del batch per la vostra GPU. - Tasso di apprendimento. Il programma del tasso di apprendimento predefinito funziona bene nella maggior parte dei casi. Per una convergenza più rapida, si può provare a utilizzare l'opzione
--cos-lr
per abilitare la programmazione del tasso di apprendimento coseno, che riduce gradualmente il tasso di apprendimento seguendo una curva coseno nel corso delle epoche. - Aumento dei dati. YOLOv5 include varie tecniche di incremento come il mosaico, che combina più immagini di addestramento. Per le ultime epoche, si consideri l'uso di
--close-mosaic 10
per disabilitare l'aumento del mosaico, che può aiutare a stabilizzare l'allenamento. - Iperparametri. Gli iperparametri predefiniti sono in hyp.scratch-low.yaml. Si consiglia di allenarsi con gli iperparametri predefiniti prima di pensare di modificarli. In generale, l'aumento degli iperparametri di incremento riduce e ritarda l'overfitting, consentendo allenamenti più lunghi e una mAP finale più elevata. Riduzione degli iperparametri di guadagno della componente di perdita come
hyp['obj']
contribuirà a ridurre l'overfitting in quelle specifiche componenti di perdita. Per un metodo automatizzato di ottimizzazione di questi iperparametri, si veda il nostro Esercitazione sull'evoluzione degli iperparametri. - Allenamento misto di precisione. Consente l'addestramento misto di precisione con
--amp
per accelerare l'addestramento e ridurre l'uso della memoria senza sacrificare l'accuratezza del modello. - Formazione GPU . Se si dispone di più GPU, utilizzare
--device 0,1,2,3
per distribuire la formazione tra di loro, riducendo così in modo significativo i tempi di formazione. - Arresto anticipato. Utilizzo
--patience 50
per interrompere l'addestramento se le metriche di validazione non migliorano per 50 epoch, risparmiando tempo ed evitando l'overfitting.
Tecniche di ottimizzazione avanzate
- Apprendimento per trasferimento. Per i set di dati specializzati, si può iniziare con pesi pre-addestrati e sbloccare gradualmente gli strati durante l'addestramento per adattare il modello al compito specifico.
- Potenziamento del modello. Dopo l'addestramento, si può prendere in considerazione l'idea di potenziare il modello per rimuovere i pesi ridondanti e ridurre le dimensioni del modello senza una significativa perdita di prestazioni.
- Ensemble di modelli. Per le applicazioni critiche, addestrare più modelli con configurazioni diverse e combinare le loro previsioni per migliorare l'accuratezza.
- Aumento del tempo di prova. Abilitare il TTA durante l'inferenza con
--augment
per migliorare l'accuratezza della previsione facendo la media dei risultati delle versioni aumentate dell'immagine di ingresso.
Ulteriori letture
Se volete saperne di più, un buon punto di partenza è la "Ricetta per l'addestramento delle reti neurali" di Karpathy, che contiene ottime idee per l'addestramento che si applicano ampiamente a tutti i domini di ML: https://karpathy.github.io/2019/04/25/recipe/
Per informazioni più dettagliate sulle impostazioni e le configurazioni di addestramento, consultare la documentazione sulle impostazioni di addestramentoUltralytics , che fornisce spiegazioni esaurienti su tutti i parametri disponibili.
Buona fortuna 🍀 e fateci sapere se avete altre domande!
FAQ
Come faccio a sapere se il mio modello è in overfitting?
Il modello potrebbe essere in overfitting se la perdita di addestramento continua a diminuire mentre la perdita di validazione inizia ad aumentare. Monitorare la mAP di convalida: se si stabilizza o diminuisce mentre la perdita di addestramento continua a migliorare, è un segno di overfitting. Le soluzioni possono essere l'aggiunta di altri dati di training, l'incremento dei dati o l'implementazione di tecniche di regolarizzazione.
Qual è la dimensione ottimale del lotto per l'allenamento di YOLOv5?
La dimensione ottimale dei batch dipende dalla memoria della GPU . I batch di dimensioni maggiori offrono in genere statistiche di normalizzazione dei batch e stabilità di formazione migliori. Utilizzare la dimensione di batch più grande che l'hardware può gestire senza esaurire la memoria. È possibile utilizzare --batch-size -1
per determinare automaticamente la dimensione ottimale del batch per la vostra configurazione.
Come posso accelerare l'allenamento di YOLOv5 ?
Per accelerare l'allenamento, provare a: abilitare l'allenamento di precisione misto con --amp
utilizzando più GPU con --device 0,1,2,3
, memorizzando nella cache il set di dati con --cache
e di ottimizzare le dimensioni del lotto. Considerate anche l'utilizzo di una variante di modello più piccola, come YOLOv5s, se la precisione assoluta non è fondamentale.