Suggerimenti per ottenere i migliori risultati di allenamento
📚 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
yolov5m.pt
yolov5l.pt
yolov5x.pt
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
yolov5m.yaml
yolov5l.yaml
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 batch di piccole dimensioni producono statistiche batchnorm scadenti e dovrebbero essere evitati. - 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.
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/
Buona fortuna 🍀 e fateci sapere se avete altre domande!