Meet YOLO26: next-gen vision AI.

Link to this sectionSuggerimenti 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 desideri una risposta utile, inclusi grafici dei risultati (perdite di addestramento, perdite di convalida, P, R, mAP), curva PR, matrice di confusione, mosaici di addestramento, risultati dei test e immagini delle statistiche del dataset come labels.png. Tutti questi file si trovano nella tua directory project/name, solitamente 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.

Link to this sectionDataset#

  • 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à.
  • Accuratezza delle etichette. Le etichette devono racchiudere strettamente ogni oggetto. Non dovrebbe esserci spazio tra un oggetto e il suo bounding box. Nessun oggetto dovrebbe mancare 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*.jpg all'avvio dell'addestramento per verificare che le tue etichette appaiano corrette, ad esempio guarda il mosaico esempio.
  • 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.

COCO dataset class distribution analysis

Link to this sectionSelezione 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 distribuzioni mobile consigliamo YOLOv5s/m, per distribuzioni cloud consigliamo YOLOv5l/x. Vedi la tabella nel nostro README per un confronto completo di tutti i modelli.

YOLOv5 Models

  • Inizia da pesi preaddestrati. Consigliato per dataset di dimensioni piccole o medie (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 (es. COCO, Objects365, OIv6). Passa l'architettura del modello YAML a cui sei interessato, insieme a un argomento vuoto --weights '':

    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

Link to this sectionImpostazioni di addestramento#

Prima di modificare qualsiasi cosa, addestra prima con le impostazioni predefinite per stabilire una base di prestazioni. Un elenco completo delle impostazioni di train.py si trova nell'argparser di train.py.

  • Epoche. Inizia con 300 epoche. Se si verifica overfitting precocemente, puoi ridurre le epoche. Se l'overfitting non si verifica dopo 300 epoche, addestra più a lungo, ad esempio 600, 1200 epoche, ecc.
  • Dimensione dell'immagine. COCO si addestra alla risoluzione nativa di --img 640, sebbene a causa dell'elevato numero di piccoli oggetti nel dataset possa beneficiare di un addestramento a risoluzioni più elevate come --img 1280. Se ci sono molti piccoli oggetti, i dataset personalizzati trarranno vantaggio dall'addestramento alla risoluzione nativa o superiore. I migliori risultati di inferenza si ottengono con lo stesso --img utilizzato durante l'addestramento, ad esempio se addestri a --img 1280 dovresti anche testare e rilevare a --img 1280.
  • Batch size. Usa la --batch-size più grande consentita dal tuo hardware. Batch size piccole producono statistiche di batch normalization scadenti e dovrebbero essere evitate. Puoi usare --batch-size -1 per selezionare automaticamente la batch size ottimale 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 utilizzare il flag --cos-lr per abilitare la pianificazione del learning rate a coseno, che riduce gradualmente il learning rate seguendo una curva a coseno nel corso delle epoche.
  • Data augmentation. YOLOv5 include varie tecniche di aumento come il mosaic, che combina più immagini di addestramento. Regola la forza dell'aumento tramite l'iperparametro mosaic nel tuo file --hyp per aiutare a stabilizzare l'addestramento.
  • Iperparametri. Gli iperparametri predefiniti si trovano in hyp.scratch-low.yaml. Ti consigliamo di addestrare con gli iperparametri predefiniti prima di pensare di modificarne qualcuno. 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 dei componenti di perdita come hyp['obj'] aiuterà a ridurre l'overfitting in quei componenti di perdita specifici. Per un metodo automatizzato di ottimizzazione di questi iperparametri, vedi il nostro Tutorial sull'evoluzione degli iperparametri.
  • Addestramento in precisione mista. YOLOv5 abilita automaticamente l'Automatic Mixed Precision (AMP) quando viene rilevata una GPU supportata, accelerando l'addestramento e riducendo 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 esse, il che può ridurre significativamente il tempo di addestramento.
  • Early stopping. Usa --patience 50 per interrompere l'addestramento se le metriche di convalida non migliorano per 50 epoche, risparmiando tempo e prevenendo l'overfitting.

Link to this sectionTecniche di ottimizzazione avanzate#

  • Transfer learning. Per dataset specializzati, inizia con pesi preaddestrati e sblocca gradualmente i livelli 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 --augment per migliorare l'accuratezza della previsione mediando i risultati dalle versioni aumentate dell'immagine di input.

Link to this sectionUlteriori letture#

Se vuoi saperne di più, un buon punto di partenza è la 'Ricetta per l'addestramento di reti neurali' di Karpathy, che contiene ottime idee per l'addestramento applicabili ampiamente in tutti i domini ML: https://karpathy.github.io/2019/04/25/recipe/

Per informazioni più dettagliate sulle impostazioni di addestramento e sulle configurazioni, fai riferimento alla documentazione sulle impostazioni di addestramento di Ultralytics, che fornisce spiegazioni complete su tutti i parametri disponibili.

Buona fortuna 🍀 e facci sapere se hai altre domande!

Link to this sectionFAQ#

Link to this sectionCome 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 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.

Link to this sectionQual è la batch size ottimale per addestrare YOLOv5?#

La batch size ottimale dipende dalla memoria della tua GPU. Batch size più grandi generalmente forniscono statistiche di batch normalization migliori e stabilità di addestramento. Usa la batch size più grande che il tuo hardware può gestire senza esaurire la memoria. Puoi usare --batch-size -1 per determinare automaticamente la batch size ottimale per la tua configurazione.

Link to this sectionCome posso velocizzare l'addestramento di YOLOv5?#

Per velocizzare l'addestramento, prova a: utilizzare più GPU con --device 0,1,2,3, mettere in cache il tuo dataset con --cache e ottimizzare la tua batch size (la precisione mista è abilitata automaticamente sulle GPU supportate). Considera anche l'utilizzo di una variante di modello più piccola come YOLOv5s se l'accuratezza assoluta non è critica.

Commenti