Suggerimenti per ottenere i migliori risultati di training con YOLOv5
📚 Questa guida spiega come produrre i migliori risultati di mAP e training con YOLOv5 🚀.
Nella maggior parte dei casi si possono ottenere buoni risultati senza apportare modifiche ai modelli o alle impostazioni di addestramento, a condizione che il dataset sia sufficientemente ampio e ben etichettato. Se inizialmente non si ottengono buoni risultati, ci sono dei passaggi che si possono intraprendere per migliorare, ma consigliamo sempre agli utenti di addestrare prima con tutte le impostazioni predefinite prima di considerare qualsiasi modifica. Questo aiuta a stabilire una baseline di performance e a individuare le aree di miglioramento.
Se hai domande sui risultati del tuo addestramento raccomandiamo di fornire la massima quantità di informazioni possibile se ti aspetti una risposta utile, inclusi i grafici dei risultati (perdite di addestramento, perdite di convalida, P, R, mAP), curva PR, matrice di confusione, mosaici di training, risultati dei test e immagini delle statistiche del dataset come labels.png. Tutti questi si trovano nella tua project/name
directory, tipicamente yolov5/runs/train/exp
.
Abbiamo preparato una guida completa per gli utenti che desiderano ottenere i migliori risultati dai loro addestramenti YOLOv5 qui sotto.
Set di dati
- Immagini per classe. Si consiglia ≥ 1500 immagini per classe
- Istanze per classe. Si raccomandano ≥ 10000 istanze (oggetti etichettati) per classe
- Varietà di immagini. Deve essere rappresentativa dell'ambiente implementato. Per i casi d'uso reali, consigliamo immagini provenienti da diversi momenti della giornata, stagioni diverse, condizioni meteorologiche diverse, illuminazione diversa, angolazioni diverse, fonti diverse (raccolte online, raccolte localmente, fotocamere diverse), ecc.
- Coerenza delle etichette. Tutte le istanze di tutte le classi in tutte le immagini devono essere etichettate. L'etichettatura parziale non funzionerà.
- Precisione delle etichette. Le etichette devono racchiudere strettamente ogni oggetto. Non ci devono essere spazi tra un oggetto e il suo bounding box. Nessun oggetto deve essere privo di etichetta.
- Verifica delle etichette. Visualizza
train_batch*.jpg
all'avvio dell'addestramento per verificare che le tue etichette appaiano corrette, ad esempio, guarda esempio mosaic. - Immagini di sfondo. Le immagini di sfondo sono immagini senza oggetti che vengono aggiunte a un set di dati per ridurre i falsi positivi (FP). Si consiglia di utilizzare 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 necessarie 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. Consulta la nostra tabella nel file README per un confronto completo di tutti i modelli.
-
Inizia dai pesi pre-addestrati. Consigliato per dataset di dimensioni medio-piccole (es. VOC, VisDrone, GlobalWheat). Passa il nome del modello al
--weights
argomento. I modelli vengono scaricati automaticamente dal release più recente 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
-
Inizia da zero. Consigliato per dataset di grandi dimensioni (es. COCO, Objects365, OIv6). Passa il file YAML dell'architettura del modello a cui sei interessato, insieme a un
--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 addestramento
Prima di modificare qualsiasi cosa, esegui prima l'addestramento con le impostazioni predefinite per stabilire una baseline delle prestazioni. Un elenco completo delle impostazioni di train.py è disponibile nell'argparser di train.py.
- Epoche. Inizia con 300 epoche. Se si verifica un overfitting precoce, puoi ridurre il numero di epoche. Se l'overfitting non si verifica dopo 300 epoche, addestra più a lungo, ad esempio 600, 1200, ecc. epoche.
- Dimensione dell'immagine. COCO si addestra alla risoluzione nativa di
--img 640
, anche se, a causa dell'elevata quantità di piccoli oggetti nel set di dati, può trarre vantaggio dall'addestramento a risoluzioni più elevate come--img 1280
. Se ci sono molti piccoli oggetti, i set di dati personalizzati trarranno vantaggio dall'addestramento a risoluzione nativa o superiore. I migliori risultati di inferenza si ottengono con la stessa--img
come l'addestramento è stato eseguito, ad esempio se ti alleni a--img 1280
è inoltre necessario testare e rilevare in--img 1280
. - Dimensione del batch. Utilizza la più grande
--batch-size
che il tuo hardware consente. Dimensioni di batch ridotte producono risultati scadenti normalizzazione batch statistiche e dovrebbe essere evitato. Puoi usare--batch-size -1
per selezionare automaticamente la dimensione ottimale del batch per la tua GPU. - Tasso di apprendimento. La pianificazione predefinita del learning rate funziona bene nella maggior parte dei casi. Per una convergenza più rapida, puoi provare a utilizzare
--cos-lr
flag per abilitare la pianificazione del learning rate coseno, che riduce gradualmente il learning rate seguendo una curva coseno nel corso delle epoche. - Aumento dei dati. YOLOv5 include varie tecniche di aumento come il mosaic, che combina più immagini di addestramento. Per le ultime epoche, considera l'utilizzo di
--close-mosaic 10
per disabilitare l'aumento del mosaico, che può aiutare a stabilizzare l'addestramento. - Iperparametri. Gli iperparametri predefiniti sono in hyp.scratch-low.yaml. Ti consigliamo di eseguire prima l'addestramento con gli iperparametri predefiniti prima di pensare di modificarli. In generale, l'aumento degli iperparametri di aumento ridurrà e ritarderà l'overfitting, consentendo allenamenti più lunghi e un mAP finale più elevato. Riduzione degli iperparametri di guadagno della componente di perdita come
hyp['obj']
aiuterà a ridurre l'overfitting in quelle specifiche componenti di perdita. Per un metodo automatizzato di ottimizzazione di questi iperparametri, consulta la nostra sezione Tutorial sull'evoluzione degli iperparametri. - Addestramento a precisione mista. Abilita l'addestramento a precisione mista con
--amp
per accelerare 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,3
per distribuire l'addestramento tra di essi, il che può ridurre significativamente i tempi di addestramento. - Arresto anticipato. Usa
--patience 50
per 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, iniziare con pesi pre-addestrati e sbloccare gradualmente i livelli durante l'addestramento per adattare il modello al tuo compito specifico.
- Model pruning. Dopo l'addestramento, considera la potatura del tuo modello per rimuovere i pesi ridondanti e ridurre le dimensioni del modello senza una significativa perdita di prestazioni.
- Model ensemble. Per applicazioni critiche, addestra più modelli con configurazioni diverse e combina le loro previsioni per una maggiore accuratezza.
- Aumento dei dati in fase di test. Abilita TTA durante l'inferenza con
--augment
per migliorare l'accuratezza della previsione facendo la media dei risultati da versioni aumentate dell'immagine di input.
Letture aggiuntive
Se desideri saperne di più, un buon punto di partenza è 'Recipe for Training Neural Networks' di Karpathy, che ha 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 configurazioni di addestramento, fare riferimento alla documentazione delle impostazioni di addestramento di Ultralytics, che fornisce spiegazioni complete di 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 tuo modello potrebbe essere in overfitting se la perdita di addestramento continua a diminuire mentre la perdita di validazione inizia ad aumentare. Monitora la mAP di validazione: se si stabilizza o diminuisce mentre la perdita di addestramento continua a migliorare, questo è 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 dimensione ottimale del batch per l'addestramento di YOLOv5?
La dimensione ottimale del batch dipende dalla memoria della tua GPU. Dimensioni di batch più grandi generalmente forniscono statistiche di normalizzazione del batch e stabilità di addestramento migliori. Utilizzare la dimensione del batch più grande che l'hardware può gestire senza esaurire la memoria. Puoi usare --batch-size -1
per determinare automaticamente la dimensione ottimale del batch per la tua configurazione.
Come posso velocizzare il training di YOLOv5?
Per accelerare l'addestramento, prova ad abilitare l'addestramento a precisione mista con --amp
, utilizzando più GPU con --device 0,1,2,3
, memorizzando nella cache il tuo dataset con --cache
, e ottimizzare la dimensione del batch. Considera anche l'utilizzo di una variante del modello più piccola come YOLOv5s se l'accuratezza assoluta non è fondamentale.