YOLO Vision 2026:

Architettura di Ultralytics YOLOv5#

YOLOv5 (v6.0/6.1) è un potente algoritmo di rilevamento degli oggetti sviluppato da Ultralytics. Questo articolo esamina in profondità l'architettura di YOLOv5, le strategie di aumento dei dati, le metodologie di addestramento e le tecniche di calcolo della funzione di perdita. Questa comprensione completa ti aiuterà a migliorare l'applicazione pratica del rilevamento degli oggetti in vari ambiti, tra cui la videosorveglianza, i veicoli autonomi e il riconoscimento delle immagini.

1. Struttura del modello#

L'architettura di YOLOv5 è composta da tre parti principali:

  • Backbone: è il corpo principale della rete. In YOLOv5, il backbone è progettato utilizzando la struttura CSPDarknet53, una modifica dell'architettura Darknet utilizzata nelle versioni precedenti.
  • Neck: questa parte collega il backbone e la head. In YOLOv5 vengono utilizzate le strutture SPPF (Spatial Pyramid Pooling - Fast) e PANet (Path Aggregation Network).
  • Head: questa parte è responsabile della generazione dell'output finale. YOLOv5 utilizza YOLOv3 Head a questo scopo.

La struttura del modello è illustrata nell'immagine seguente. I dettagli sulla struttura del modello sono disponibili in models/yolov5l.yaml.

Architettura di YOLOv5 con backbone, neck e head

YOLOv5 introduce alcuni miglioramenti significativi rispetto ai suoi predecessori:

  1. La struttura Focus, presente nelle versioni precedenti, viene sostituita dalla struttura 6x6 Conv2d. Questa modifica aumenta l'efficienza #4825.
  2. La struttura SPP viene sostituita da SPPF. Questa modifica più che raddoppia la velocità di elaborazione mantenendo invariato l'output.

Per testare la velocità di SPP e SPPF, puoi utilizzare il seguente codice:

SPP vs SPPF speed profiling example (click to open)
import time

import torch
from torch import nn

class SPP(nn.Module):
    def __init__(self):
        """Initializes an SPP module with three different sizes of max pooling layers."""
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        """Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)

class SPPF(nn.Module):
    def __init__(self):
        """Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        """Applies sequential max pooling and concatenates results with input tensor."""
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)

def main():
    """Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")

if __name__ == "__main__":
    main()

risultato:

True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. Tecniche di aumento dei dati#

YOLOv5 utilizza diverse tecniche di aumento dei dati per migliorare la capacità di generalizzazione del modello e ridurre l'overfitting. Queste tecniche includono:

  • Aumento Mosaic: una tecnica di elaborazione delle immagini che combina quattro immagini di addestramento in una sola, in modo da aiutare i modelli di rilevamento degli oggetti a gestire meglio diverse scale e traslazioni degli oggetti.

    Aumento dei dati Mosaic di YOLOv5 con combinazione di quattro immagini

  • Aumento Copy-Paste: un innovativo metodo di aumento dei dati che copia patch casuali da un'immagine e le incolla su un'altra immagine scelta casualmente, generando di fatto un nuovo campione di addestramento.

    Aumento Copy-Paste di YOLOv5 per la segmentazione delle istanze

  • Trasformazioni affini casuali: includono rotazione, ridimensionamento, traslazione e deformazione casuali delle immagini.

    Trasformazioni affini casuali di YOLOv5 per l'addestramento

  • Aumento MixUp: un metodo che crea immagini composite combinando linearmente due immagini e le relative annotazioni.

    Aumento dei dati MixUp di YOLOv5 con fusione di due immagini

  • Albumentations: una potente libreria per l'aumento delle immagini che supporta un'ampia varietà di tecniche di aumento. Scopri di più sull'utilizzo degli aumenti di Albumentations.

  • Aumento HSV: modifiche casuali a tonalità, saturazione e valore delle immagini.

    Esempi di aumento dello spazio colore HSV in YOLOv5

  • Ribaltamento orizzontale casuale: un metodo di aumento che ribalta casualmente le immagini in orizzontale.

    Aumento con ribaltamento orizzontale casuale di YOLOv5

3. Strategie di addestramento#

YOLOv5 applica diverse strategie di addestramento sofisticate per migliorare le prestazioni del modello. Queste includono:

  • Addestramento multiscala: durante il processo di addestramento, le immagini di input vengono ridimensionate casualmente entro un intervallo compreso tra 0,5 e 1,5 volte la loro dimensione originale.
  • AutoAnchor: questa strategia ottimizza le anchor box iniziali affinché corrispondano alle caratteristiche statistiche delle box ground truth nei tuoi dati personalizzati.
  • Warmup e scheduler LR coseno: un metodo per regolare il learning rate e migliorare le prestazioni del modello.
  • Media mobile esponenziale (EMA): una strategia che utilizza la media dei parametri dei passaggi precedenti per stabilizzare il processo di addestramento e ridurre l'errore di generalizzazione.
  • Addestramento a precisione mista: un metodo per eseguire le operazioni in formato a precisione dimezzata, riducendo l'utilizzo della memoria e aumentando la velocità di calcolo.
  • Evoluzione degli iperparametri: una strategia per ottimizzare automaticamente gli iperparametri e ottenere prestazioni ottimali. Scopri di più sull'ottimizzazione degli iperparametri.

4. Funzionalità aggiuntive#

4.1 Calcolo delle perdite#

La perdita in YOLOv5 viene calcolata come combinazione di tre singoli componenti di perdita:

  • Perdita delle classi (perdita BCE): perdita di entropia incrociata binaria, misura l'errore del compito di classificazione.
  • Perdita di objectness (perdita BCE): un'altra perdita di entropia incrociata binaria, calcola l'errore nel rilevare se un oggetto è presente o meno in una determinata cella della griglia.
  • Perdita di localizzazione (perdita CIoU): perdita di IoU completo, misura l'errore nella localizzazione dell'oggetto all'interno della cella della griglia.

La funzione di perdita complessiva è rappresentata da:

Formula della funzione di perdita totale di YOLOv5

4.2 Bilanciamento delle perdite#

Le perdite di objectness dei tre livelli di predizione (P3, P4, P5) sono pesate in modo diverso. I pesi di bilanciamento sono rispettivamente [4.0, 1.0, 0.4]. Questo approccio garantisce che le predizioni a scale diverse contribuiscano in modo appropriato alla perdita totale.

Formula del bilanciamento della perdita di objectness di YOLOv5

4.3 Eliminazione della sensibilità alla griglia#

L'architettura di YOLOv5 apporta alcune modifiche importanti alla strategia di predizione delle box rispetto alle versioni precedenti di YOLO. In YOLOv2 e YOLOv3, le coordinate delle box venivano predette direttamente utilizzando l'attivazione dell'ultimo livello.

Formula della predizione della coordinata x della bounding box Formula della predizione della coordinata y della bounding box Formula della predizione della larghezza della bounding box Formula della predizione dell'altezza della bounding box

YOLOv5 grid computation

Tuttavia, in YOLOv5 la formula per predire le coordinate delle box è stata aggiornata per ridurre la sensibilità alla griglia e impedire al modello di predire dimensioni delle box non limitate.

Le formule aggiornate per calcolare la bounding box predetta sono le seguenti:

Formula aggiornata della coordinata x della bounding box di YOLOv5 Formula aggiornata della coordinata y della bounding box di YOLOv5 Formula aggiornata della larghezza della bounding box di YOLOv5 Formula aggiornata dell'altezza della bounding box di YOLOv5

Confronta l'offset del punto centrale prima e dopo il ridimensionamento. L'intervallo dell'offset del punto centrale viene modificato da (0, 1) a (-0.5, 1.5). Pertanto, l'offset può facilmente assumere il valore 0 o 1.

YOLOv5 grid scaling

Confronta il rapporto di ridimensionamento dell'altezza e della larghezza (rispetto all'anchor) prima e dopo la modifica. Le equazioni originali delle box di yolo/darknet presentano un difetto grave. La larghezza e l'altezza sono completamente non limitate, poiché sono semplicemente out=exp(in), il che è pericoloso perché può causare gradienti incontrollati, instabilità, perdite NaN e infine la perdita completa dell'addestramento. Consulta questo problema per maggiori dettagli.

YOLOv5 unbounded scaling

4.4 Creazione dei target#

Il processo di creazione dei target in YOLOv5 è fondamentale per l'efficienza dell'addestramento e l'accuratezza del modello. Consiste nell'assegnare le box ground truth alle celle della griglia appropriate nella mappa di output e nel farle corrispondere alle anchor box appropriate.

Questo processo segue questi passaggi:

  • Calcola il rapporto tra le dimensioni della box ground truth e le dimensioni di ciascun template di anchor.

Formula del rapporto tra la larghezza della ground truth e quella dell'anchor

Formula del rapporto tra l'altezza della ground truth e quella dell'anchor

Formula del rapporto massimo delle larghezze

Formula del rapporto massimo delle altezze

Formula del rapporto massimo complessivo

Formula della soglia di corrispondenza dell'anchor

YOLOv5 IoU computation
  • Se il rapporto calcolato rientra nella soglia, associa la box ground truth all'anchor corrispondente.
YOLOv5 grid overlap
  • Assegna l'anchor corrispondente alle celle appropriate, tenendo presente che, a causa del nuovo offset del punto centrale, una box ground truth può essere assegnata a più di un'anchor, poiché l'intervallo dell'offset del punto centrale viene modificato da (0, 1) a (-0.5, 1.5), rendendo possibili ulteriori corrispondenze.
YOLOv5 anchor selection

In questo modo, il processo di creazione dei target garantisce che ogni oggetto ground truth venga assegnato e associato correttamente durante l'addestramento, consentendo a YOLOv5 di apprendere il compito di rilevamento degli oggetti in modo più efficace.

Conclusioni#

YOLOv5 rappresenta un passo significativo nell'evoluzione del rilevamento degli oggetti in tempo reale. Le sue scelte architetturali, le strategie di addestramento e i perfezionamenti ingegneristici offrono prestazioni ed efficienza elevate rispetto alle versioni precedenti di YOLO.

I principali miglioramenti di YOLOv5 includono l'uso di un'architettura dinamica, un'ampia gamma di tecniche di aumento dei dati, strategie di addestramento innovative, nonché importanti modifiche al calcolo delle perdite e al processo di creazione dei target. Tutte queste innovazioni migliorano significativamente l'accuratezza e l'efficienza del rilevamento degli oggetti, mantenendo al contempo un'elevata velocità, il tratto distintivo dei modelli YOLO.

Commenti