Ultralytics YOLO27:
Get Started

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

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

Nella maggior parte dei casi si ottengono buoni risultati senza modificare i modelli o le impostazioni di addestramento, a patto che il dataset sia sufficientemente ampio e ben etichettato. Se inizialmente non ottieni buoni risultati, puoi provare alcuni accorgimenti per migliorarli, ma consigliamo sempre di addestrare prima con tutte le impostazioni predefinite e valutare eventuali modifiche solo in seguito. In questo modo stabilisci un riferimento delle prestazioni e individui gli aspetti da migliorare.

Se hai domande sui risultati dell'addestramento, ti consigliamo di fornire il maggior numero possibile di informazioni per ricevere una risposta utile, inclusi i grafici dei risultati (loss di train e val, P, R, mAP), la curva PR, la matrice di confusione, i mosaici di addestramento, i risultati dei test e le immagini con le statistiche del dataset, come labels.png. Tutti questi elementi si trovano nella directory project/name, in genere yolov5/runs/train/exp.

Di seguito abbiamo preparato una guida completa per aiutare gli utenti a ottenere i migliori risultati durante l'addestramento di YOLOv5.

Dataset#

  • Immagini per classe. Si consigliano ≥ 1500 immagini per classe
  • Istanze per classe. Si consigliano ≥ 10000 istanze (oggetti etichettati) per classe
  • Varietà delle immagini. Le immagini devono essere rappresentative dell'ambiente di distribuzione. Per i casi d'uso reali consigliamo immagini scattate in diversi momenti della giornata, stagioni, condizioni meteorologiche e di illuminazione, da angolazioni e fonti diverse (raccolte online, acquisite localmente, con fotocamere diverse) e così via.
  • Coerenza delle etichette. Tutte le istanze di tutte le classi in tutte le immagini devono essere etichettate. Un'etichettatura parziale non è sufficiente.
  • Accuratezza delle etichette. Le etichette devono racchiudere da vicino ogni oggetto. Non deve esserci spazio tra un oggetto e il relativo riquadro delimitatore. Nessun oggetto deve essere privo di etichetta.
  • Gestione della suddivisione train/val. Per evitare metriche eccessivamente ottimistiche, assicurati che le immagini di validazione e test non compaiano mai nel set di addestramento. Mantieni distribuzioni delle classi simili tra le suddivisioni.
  • Verifica delle etichette. Visualizza train_batch*.jpg all'avvio dell'addestramento per verificare che le etichette siano corrette, ad esempio controllando il mosaico di esempio.
  • Immagini di sfondo. Le immagini di sfondo non contengono oggetti e vengono aggiunte a un dataset per ridurre i falsi positivi (FP). Consigliamo che circa lo 0-10% del dataset sia composto da immagini di sfondo, così da contribuire a ridurre gli FP (COCO ne include 1000 come riferimento, pari all'1% del totale). Le immagini di sfondo non richiedono etichette.

COCO dataset class distribution analysis

Scelta del modello#

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

YOLOv5 Models

  • Inizia dai pesi pretrained. È l'approccio 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 dalla versione 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. È l'approccio 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, addestra prima con le impostazioni predefinite per stabilire un riferimento delle prestazioni. L'elenco completo delle impostazioni di train.py è disponibile nell'argparser di train.py.

  • Epoche. Inizia con 300 epoche. Se si verifica overfitting precocemente, puoi ridurne il numero. Se l'overfitting non si verifica dopo 300 epoche, prolunga l'addestramento, ad esempio a 600, 1200 epoche e così via.
  • Dimensione dell'immagine. COCO viene addestrato alla risoluzione nativa di --img 640, ma, dato l'elevato numero di oggetti piccoli nel dataset, può essere utile addestrare a risoluzioni più alte, come --img 1280. Se contengono molti oggetti piccoli, i dataset personalizzati traggono vantaggio dall'addestramento alla risoluzione nativa o a una risoluzione superiore. I migliori risultati in inferenza si ottengono usando la stessa --img dell'addestramento; ad esempio, se addestri a --img 1280, dovresti eseguire test e rilevamento anche a --img 1280.
  • Dimensione del batch. Usa la dimensione --batch-size più grande supportata dal tuo hardware. Batch di piccole dimensioni producono statistiche di batch normalization scadenti e sono da evitare. Puoi usare --batch-size -1 per selezionare automaticamente la dimensione ottimale del batch per la tua GPU.
  • Tasso di apprendimento. La pianificazione predefinita del tasso di apprendimento funziona bene nella maggior parte dei casi. Per una convergenza più rapida, puoi provare il flag --cos-lr per attivare una pianificazione coseno del tasso di apprendimento, 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 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 valutare eventuali modifiche. In generale, aumentare gli iperparametri di data augmentation riduce e ritarda l'overfitting, consentendo addestramenti più lunghi e un mAP finale più alto. Ridurre gli iperparametri di guadagno delle componenti della loss, come hyp['obj'], aiuta a ridurre l'overfitting in quelle specifiche componenti della loss. Per un metodo automatizzato di ottimizzazione di questi iperparametri, consulta il nostro tutorial sull'evoluzione degli iperparametri.
  • Addestramento a precisione mista. YOLOv5 attiva automaticamente la precisione mista automatica (AMP) quando rileva una GPU supportata, velocizzando l'addestramento e riducendo l'uso di memoria senza sacrificare l'accuratezza del modello.
  • Addestramento multi-GPU. Se disponi di più GPU, usa --device 0,1,2,3 per distribuire l'addestramento tra di esse e ridurne sensibilmente la durata.
  • 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 dataset specializzati, inizia dai pesi pretrained e, facoltativamente, congela alcuni layer con --freeze per adattare il modello al tuo compito specifico.
  • Potatura del modello. Dopo l'addestramento, valuta di potare il modello per rimuovere i pesi ridondanti e ridurne le dimensioni senza perdite significative 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 in fase di test. Attiva 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.

Approfondimenti#

Se vuoi approfondire, un buon punto di partenza è la «ricetta per l'addestramento delle reti neurali» di Karpathy, ricca di spunti applicabili in generale a tutti i domini ML: https://karpathy.github.io/2019/04/25/recipe/

Buona fortuna 🍀 e facci sapere se hai altre domande!

Domande frequenti#

  • Il tuo modello potrebbe essere in 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. Tra le soluzioni ci sono aggiungere altri dati di addestramento, aumentare la data augmentation o applicare tecniche di regolarizzazione.

  • La dimensione ottimale del batch dipende dalla memoria della tua GPU. In generale, batch più grandi forniscono statistiche di batch normalization migliori e maggiore stabilità durante l'addestramento. Usa la dimensione del batch più grande 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 viene attivata automaticamente sulle GPU supportate). Valuta anche l'uso di una variante più piccola, come YOLOv5s, se l'accuratezza assoluta non è fondamentale.

Commenti