Suggerimenti per ottenere i migliori risultati di addestramento con YOLOv5#
📚 Questa guida spiega come ottenere i migliori risultati di mAP e di addestramento con YOLOv5 🚀.
Nella maggior parte dei casi, è possibile ottenere buoni risultati senza modificare i modelli o le impostazioni di addestramento, a patto che il tuo dataset sia sufficientemente grande 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 considerare qualsiasi modifica. Questo aiuta a stabilire una base di prestazioni e a individuare le aree di miglioramento.
Se hai domande sui tuoi risultati di 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, confusion matrix, mosaici di addestramento, risultati dei test e immagini delle statistiche del set di dati come labels.png. Tutti questi si trovano nella tua directory project/name, tipicamente yolov5/runs/train/exp.
Abbiamo preparato una guida completa per gli utenti che desiderano ottenere i migliori risultati con i propri addestramenti YOLOv5 qui sotto.
Dataset#
- Immagini per classe. ≥ 1500 immagini per classe consigliate
- Istanze per classe. ≥ 10000 istanze (oggetti etichettati) per classe consigliate
- Varietà delle immagini. Deve essere rappresentativa dell'ambiente di distribuzione. Per casi d'uso reali, consigliamo immagini provenienti da diverse ore del giorno, diverse stagioni, 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à.
- Accuracy delle etichette. Le etichette devono racchiudere strettamente ciascun oggetto. Non deve esserci alcuno spazio tra un oggetto e il suo bounding box. Nessun oggetto deve essere privo di etichetta.
- Disciplina della 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 di example. - 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 i 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 le distribuzioni mobile consigliamo YOLOv5s/m, per le distribuzioni cloud consigliamo YOLOv5l/x. Vedi la table nel nostro README per un confronto completo di tutti i modelli.

-
Inizia da pesi pre-addestrati. Consigliato per set di dati da piccoli a medi (ad es. VOC, VisDrone, GlobalWheat). Passa il nome del modello all'argomento
--weights. I modelli si scaricano automaticamente dall'latest YOLOv5 release.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 grandi set di dati (ad es. COCO, Objects365, OIv6). Passa lo YAML dell'architettura del modello a cui sei interessato, insieme a un argomento
--weights ''vuoto: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, prima addestra 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.
- Epochs. Inizia con 300 epoche. Se questo causa overfitting anticipato, puoi ridurre le epoche. Se l'overfitting non si verifica dopo 300 epoche, addestra più a lungo, ad es. 600, 1200 ecc. epoche.
- Dimensione dell'immagine. COCO si addestra alla risoluzione nativa di
--img 640, sebbene a causa dell'elevata quantità di piccoli oggetti nel set di dati possa 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 alla risoluzione nativa o superiore. I migliori risultati di inferenza si ottengono allo stesso--imga cui è stato eseguito l'addestramento, ad es. se ti addestri a--img 1280dovresti anche testare e rilevare a--img 1280. - Batch size. Usa il
--batch-sizepiù grande che il tuo hardware consente. Le dimensioni del batch ridotte producono scarse statistiche di batch normalization e dovrebbero essere evitate. Puoi usare--batch-size -1per selezionare automaticamente la dimensione del batch ottimale per la tua GPU. - Learning rate. La pianificazione del tasso di apprendimento predefinita funziona bene nella maggior parte dei casi. Per una convergenza più rapida, puoi provare a usare il flag
--cos-lrper abilitare la pianificazione del tasso di apprendimento a coseno, che riduce gradualmente il tasso di apprendimento seguendo una curva a coseno nel corso delle epoche. - Data augmentation. YOLOv5 include varie tecniche di aumento come il mosaico, che combina più immagini di addestramento. Regola la forza dell'aumento tramite l'iperparametro
mosaicnel tuo file--hypper aiutare a stabilizzare l'addestramento. - Iperparametri. Gli iperparametri predefiniti sono in hyp.scratch-low.yaml. Ti consigliamo di addestrare prima con gli iperparametri predefiniti prima di pensare a modificarne alcuno. In generale, aumentare gli iperparametri di aumento ridurrà e ritarderà l'overfitting, consentendo addestramenti più lunghi e un mAP finale più elevato. La riduzione degli iperparametri di guadagno delle componenti 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, vedi il nostro Hyperparameter Evolution Tutorial. - Addestramento con Mixed precision. YOLOv5 abilita automaticamente la precisione mista automatica (AMP) quando viene rilevata una GPU supportata, accelerando l'addestramento e riducendo l'utilizzo di 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. - Arresto anticipato (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 set di dati specializzati, inizia con pesi pre-addestrati e scongela gradualmente i layer durante l'addestramento per adattare il modello al tuo compito specifico.
- Model pruning. Dopo l'addestramento, considera il pruning del tuo modello per rimuovere 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.
- 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 'Recipe for Training Neural Networks' di Karpathy, che contiene ottime idee per l'addestramento applicabili in modo ampio a 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 Ultralytics train settings documentation, che fornisce spiegazioni complete di tutti i parametri disponibili.
Buona fortuna 🍀 e facci sapere se hai altre domande!
FAQ#
Il tuo modello potrebbe essere 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, è segno di overfitting. Le soluzioni includono l'aggiunta di più dati di addestramento, l'aumento della data augmentation o l'implementazione di tecniche di regolarizzazione.
La dimensione del batch ottimale dipende dalla memoria della tua GPU. Dimensioni del batch maggiori generalmente forniscono migliori statistiche di normalizzazione del batch e stabilità dell'addestramento. Usa la dimensione del batch più grande che il tuo hardware può gestire senza esaurire la memoria. Puoi usare
--batch-size -1per determinare automaticamente la dimensione del batch ottimale per la tua configurazione.Per accelerare l'addestramento, prova a: utilizzare più GPU con
--device 0,1,2,3, memorizzare nella cache il tuo set di dati con--cachee ottimizzare la dimensione del batch (la precisione mista è abilitata automaticamente sulle GPU supportate). Prendi in considerazione anche l'uso di una variante di modello più piccola come YOLOv5s se l'accuratezza assoluta non è critica.
