YOLO Vision 2026:

Suggerimenti per ottenere i migliori risultati nell'addestramento di YOLOv5#

📚 Questa guida spiega come ottenere i migliori risultati in termini di mAP e addestramento con YOLOv5 🚀.

Nella maggior parte dei casi è possibile ottenere buoni risultati senza modificare i modelli o le impostazioni di addestramento, a condizione che il tuo dataset sia sufficientemente grande e ben annotato. Se inizialmente non ottieni buoni risultati, puoi adottare alcuni accorgimenti per migliorarli, ma consigliamo sempre di addestrare prima con tutte le impostazioni predefinite prima di considerare qualsiasi modifica. Questo aiuta a stabilire una baseline delle prestazioni e a individuare le aree da migliorare.

Se hai domande sui risultati del tuo addestramento, ti consigliamo di fornire quante più informazioni possibile se ti aspetti una risposta utile, inclusi i grafici dei risultati (perdite di train, perdite di val, P, R, mAP), la curva PR, la matrice di confusione, i mosaici di addestramento, i risultati dei test e le immagini delle statistiche del dataset, come labels.png. Tutti questi elementi si trovano nella directory project/name, in genere yolov5/runs/train/exp.

Di seguito abbiamo raccolto una guida completa per chi vuole ottenere i migliori risultati dai propri addestramenti di YOLOv5.

Dataset#

  • Immagini per classe. Si consigliano ≥ 1500 immagini per classe
  • Istanza per classe. Si consigliano ≥ 10000 istanze (oggetti annotati) per classe
  • Varietà delle immagini. Deve essere rappresentativa dell'ambiente di distribuzione. Per i casi d'uso reali consigliamo immagini acquisite in diversi momenti della giornata, stagioni diverse, condizioni meteorologiche diverse, illuminazione diversa, angolazioni diverse e fonti diverse (raccolte online, acquisite localmente, con fotocamere diverse), ecc.
  • Coerenza delle annotazioni. Tutte le istanze di tutte le classi in tutte le immagini devono essere annotate. L'annotazione parziale non funziona.
  • Accuratezza delle annotazioni. Le annotazioni devono racchiudere strettamente ogni oggetto. Non deve esserci spazio tra un oggetto e il suo riquadro di delimitazione. Nessun oggetto deve essere privo di annotazione.
  • Disciplina nella suddivisione train/val. Assicurati che le immagini di validazione e test non compaiano mai nel set di addestramento, per evitare metriche eccessivamente ottimistiche. Mantieni distribuzioni delle classi simili tra le suddivisioni.
  • Verifica delle annotazioni. Visualizza train_batch*.jpg all'avvio dell'addestramento per verificare che le tue annotazioni siano corrette, ad esempio osservando il mosaico di esempio.
  • Immagini di sfondo. Le immagini di sfondo sono immagini senza oggetti aggiunte a un dataset per ridurre i falsi positivi (FP). Consigliamo circa il 0-10% di immagini di sfondo per contribuire a ridurre gli FP (COCO contiene 1000 immagini di sfondo come riferimento, l'1% del totale). Per le immagini di sfondo non sono necessarie annotazioni.

COCO dataset class distribution analysis

Selezione del modello#

I modelli più grandi, come YOLOv5x e YOLOv5x6, producono risultati migliori nella quasi totalità dei casi, ma hanno più parametri, richiedono più memoria CUDA per l'addestramento e sono più lenti da eseguire. Per le distribuzioni su dispositivi mobili consigliamo YOLOv5s/m, mentre per le distribuzioni su cloud consigliamo YOLOv5l/x. Consulta la tabella nel nostro README per un confronto completo di tutti i modelli.

YOLOv5 Models

  • Inizia dai pesi preaddestrati. Consigliato per dataset di dimensioni piccole o medie (ad es. VOC, VisDrone, GlobalWheat). Passa il nome del modello all'argomento --weights. I modelli vengono scaricati 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
  • Inizia da zero. Consigliato per dataset di grandi dimensioni (ad es. COCO, Objects365, OIv6). Passa l'architettura del modello YAML che ti interessa, 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, esegui innanzitutto l'addestramento con le impostazioni predefinite per stabilire una baseline delle prestazioni. L'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 dopo 300 epoche non si verifica overfitting, continua ad addestrare più a lungo, ad esempio per 600, 1200 ecc. epoche.
  • Dimensioni dell'immagine. COCO viene addestrato alla risoluzione nativa --img 640, ma poiché il dataset contiene molti oggetti piccoli, può trarre vantaggio dall'addestramento a risoluzioni più elevate, come --img 1280. Se sono presenti molti oggetti piccoli, i dataset personalizzati trarranno vantaggio dall'addestramento alla risoluzione nativa o a una risoluzione superiore. I migliori risultati di inferenza si ottengono usando lo stesso --img impiegato per l'addestramento, ovvero, se esegui l'addestramento a --img 1280, dovresti eseguire test e rilevamento anche a --img 1280.
  • Dimensione del batch. Usa il valore massimo di --batch-size consentito dal tuo hardware. Le dimensioni ridotte del batch producono statistiche di normalizzazione del batch scadenti e dovrebbero essere evitate. Puoi usare --batch-size -1 per selezionare automaticamente la dimensione ottimale del batch per la tua GPU.
  • Learning rate. La pianificazione predefinita del learning rate funziona bene nella maggior parte dei casi. Per una convergenza più rapida, puoi provare a usare il flag --cos-lr per abilitare la pianificazione coseno del learning rate, che lo riduce gradualmente seguendo una curva coseno durante le epoche.
  • Aumento dei dati. YOLOv5 include diverse tecniche di aumento dei dati, come il mosaico, che combina più immagini di addestramento. Regola l'intensità dell'aumento dei dati tramite l'iperparametro mosaic nel file --hyp per contribuire 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 a modificarne qualcuno. In generale, aumentare gli iperparametri dell'aumento dei dati riduce e ritarda l'overfitting, consentendo addestramenti più lunghi e un mAP finale più elevato. Ridurre gli iperparametri del guadagno dei componenti della loss, come hyp['obj'], aiuta a ridurre l'overfitting in quei componenti specifici della loss. Per un metodo automatico di ottimizzazione di questi iperparametri, consulta il nostro tutorial sull'evoluzione degli iperparametri.
  • Addestramento a precisione mista. YOLOv5 abilita automaticamente la precisione mista automatica (AMP) quando rileva una GPU supportata, accelerando l'addestramento e riducendo l'utilizzo della memoria senza sacrificare l'accuratezza del modello.
  • Addestramento con più GPU. Se disponi di più GPU, usa --device 0,1,2,3 per distribuire l'addestramento tra esse, riducendo significativamente i tempi di addestramento.
  • Arresto anticipato. Usa --patience 50 per interrompere l'addestramento se le metriche di validazione non migliorano per 50 epoche, risparmiando tempo e prevenendo l'overfitting.

Tecniche di ottimizzazione avanzate#

  • Transfer learning. Per i dataset specializzati, inizia con pesi preaddestrati e sblocca gradualmente i layer durante l'addestramento per adattare il modello al tuo compito specifico.
  • Potatura del modello. Dopo l'addestramento, valuta la possibilità di potare il modello per rimuovere i pesi ridondanti e ridurne le dimensioni senza una significativa perdita di prestazioni.
  • Ensemble di modelli. Per le applicazioni critiche, addestra più modelli con configurazioni diverse e combina le loro predizioni per migliorare l'accuratezza.
  • Aumento dei dati al momento del test. Abilita la TTA durante l'inferenza con --augment per migliorare l'accuratezza delle predizioni calcolando la media dei risultati ottenuti da versioni aumentate dell'immagine di input.

Ulteriori letture#

Se vuoi 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 applicabili in generale a tutti i domini ML: https://karpathy.github.io/2019/04/25/recipe/

Per informazioni più dettagliate sulle impostazioni e configurazioni di addestramento, consulta la documentazione sulle impostazioni di train di Ultralytics, che fornisce spiegazioni complete di tutti i parametri disponibili.

Buona fortuna 🍀 e facci sapere se hai altre domande!

FAQ#

  • Il tuo modello potrebbe essere soggetto a overfitting se la loss di addestramento continua a diminuire mentre la loss di validazione inizia ad aumentare. Monitora il mAP di validazione: se si stabilizza o diminuisce mentre la loss di addestramento continua a migliorare, è un segnale 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.

  • La dimensione ottimale del batch dipende dalla memoria della tua GPU. Dimensioni maggiori del batch forniscono generalmente statistiche di normalizzazione del batch e stabilità dell'addestramento migliori. Usa la dimensione massima del batch che il tuo hardware può gestire senza esaurire la memoria. Puoi usare --batch-size -1 per determinare automaticamente la dimensione ottimale del batch per la tua configurazione.

  • Per velocizzare l'addestramento, prova a usare più GPU con --device 0,1,2,3, a memorizzare nella cache il dataset con --cache e a ottimizzare la dimensione del batch (la precisione mista è abilitata automaticamente sulle GPU supportate). Valuta anche l'utilizzo di una variante del modello più piccola, come YOLOv5s, se l'accuratezza assoluta non è fondamentale.

Commenti