Vai al contenuto

Ultralytics YOLOv5 Architettura

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

1. Struttura del modello

YOLOv5L'architettura di questo sistema è composta da tre parti principali:

  • Backbone: Si tratta del corpo principale della rete. Per YOLOv5, la spina dorsale è progettata utilizzando il metodo New CSP-Darknet53 una modifica dell'architettura Darknet utilizzata nelle versioni precedenti.
  • Collo: Questa parte collega la spina dorsale alla testa. In YOLOv5, SPPF e New CSP-PAN vengono utilizzate le strutture.
  • Testa: Questa parte è responsabile della generazione dell'output finale. YOLOv5 utilizza il metodo YOLOv3 Head per questo scopo.

La struttura del modello è rappresentata nell'immagine seguente. I dettagli della struttura del modello sono disponibili in yolov5l.yaml.

yolov5

YOLOv5 introduce alcuni cambiamenti minori rispetto ai suoi predecessori:

  1. Il Focus che si trovava nelle versioni precedenti, viene sostituita da una struttura 6x6 Conv2d struttura. Questo cambiamento aumenta l'efficienza #4825.
  2. Il SPP viene sostituita con SPPF. Questa modifica raddoppia la velocità di elaborazione.

Per verificare la velocità di SPP e SPPFè possibile utilizzare il seguente codice:

Esempio di profilazione della velocità SPP vs SPPF (clicca per aprire)
import time
import torch
import torch.nn as nn


class SPP(nn.Module):
    def __init__(self):
        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):
        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):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


def main():
    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 incremento dei dati

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

  • Aumento del mosaico: Una tecnica di elaborazione delle immagini che combina quattro immagini di addestramento in una sola in modo da incoraggiare i modelli di rilevamento degli oggetti a gestire meglio le varie scale e traslazioni degli oggetti.

mosaico

  • Aumento Copia-Incolla: Un metodo innovativo di incremento dei dati che copia patch casuali da un'immagine e le incolla su un'altra immagine scelta a caso, generando di fatto un nuovo campione di formazione.

copia-incolla

  • Trasformazioni affini casuali: Include rotazioni, scalature, traslazioni e tagli casuali delle immagini.

random-affine

  • Aumento MixUp: Un metodo che crea immagini composite prendendo una combinazione lineare di due immagini e delle loro etichette associate.

confusione

  • Albumentations: Una potente libreria per l'aumento delle immagini che supporta un'ampia varietà di tecniche di aumento.

  • Aumento HSV: Modifiche casuali alla tonalità, alla saturazione e al valore delle immagini.

hsv

  • Capovolgimento orizzontale casuale: Un metodo di incremento che capovolge casualmente le immagini in orizzontale.

capovolgimento orizzontale

3. Strategie di formazione

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

  • Formazione multiscala: Le immagini di ingresso vengono ridimensionate in modo casuale in un intervallo compreso tra 0,5 e 1,5 volte la loro dimensione originale durante il processo di addestramento.
  • AutoAnchor: Questa strategia ottimizza le caselle di ancoraggio precedenti in modo che corrispondano alle caratteristiche statistiche delle caselle di verità a terra nei dati personalizzati.
  • Scheduler di Warmup e Cosine LR: Un metodo per regolare il tasso di apprendimento per migliorare le prestazioni del modello.
  • Media mobile esponenziale (EMA): Una strategia che utilizza la media dei parametri nei passaggi passati per stabilizzare il processo di formazione e ridurre l'errore di generalizzazione.
  • Formazione a precisione mista: Un metodo per eseguire operazioni in formato di mezza precisione, riducendo l'utilizzo della memoria e migliorando la velocità di calcolo.
  • Evoluzione degli iperparametri: Una strategia per regolare automaticamente gli iperparametri per ottenere prestazioni ottimali.

4. Caratteristiche aggiuntive

4.1 Calcolo delle perdite

La perdita in YOLOv5 è calcolata come una combinazione di tre componenti di perdita individuali:

  • Perdita delle classi (perdita BCE): La perdita BCE (Binary Cross-Entropy Loss) misura l'errore per il compito di classificazione.
  • Objectness Loss (perdita BCE): Un'altra perdita Binary Cross-Entropy, calcola l'errore nel rilevare se un oggetto è presente o meno in una particolare cella della griglia.
  • Perdita di localizzazione (perdita CIoU): La perdita completa di IoU misura l'errore di localizzazione dell'oggetto all'interno della cella della griglia.

La funzione di perdita complessiva è rappresentata da:

perdita

4.2 Perdite di bilancio

Le perdite di oggettività dei tre livelli di predizione (P3, P4, P5) sono ponderati in modo diverso. I pesi dell'equilibrio sono [4.0, 1.0, 0.4] rispettivamente. Questo approccio garantisce che le previsioni a diverse scale contribuiscano in modo appropriato alla perdita totale.

perdita_oggetto

4.3 Eliminare la sensibilità della griglia

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

b_x b_y b_w b_h

YOLOv5 calcolo della griglia

Tuttavia, in YOLOv5, la formula per la previsione delle coordinate della scatola è stata aggiornata per ridurre la sensibilità della griglia ed evitare che il modello preveda dimensioni della scatola non limitate.

Le formule riviste per il calcolo del rettangolo di gioco previsto sono le seguenti:

bx da bw bh

Confronta l'offset del punto centrale prima e dopo la scalatura. L'intervallo di offset del punto centrale è regolato da (0, 1) a (-0.5, 1.5). Pertanto, l'offset può essere facilmente pari a 0 o 1.

YOLOv5 scalatura della griglia

Confronta il rapporto di scala dell'altezza e della larghezza (rispetto all'ancora) prima e dopo la regolazione. Le equazioni originali di yolo/darknet box hanno un grave difetto. La larghezza e l'altezza sono completamente slegate, in quanto sono semplicemente out=exp(in), il che è pericoloso, in quanto può portare a pendenze improvvise, instabilità, perdite di NaN e, in ultima analisi, a una perdita completa dell'addestramento.

YOLOv5 scalabilità senza limiti

4.4 Obiettivi di costruzione

Il processo di costruzione del target in YOLOv5 è fondamentale per l'efficienza della formazione e l'accuratezza del modello. Si tratta di assegnare le caselle della verità a terra alle celle della griglia appropriate nella mappa di output e di farle coincidere con le caselle di ancoraggio appropriate.

Questo processo segue i seguenti passi:

  • Calcola il rapporto tra le dimensioni del riquadro di verità e le dimensioni di ogni modello di ancoraggio.

rw

rh

rwmax

rhmax

rmax

partita

YOLOv5 Calcolo IoU

  • Se il rapporto calcolato rientra nella soglia, abbina il riquadro di verità a terra con l'ancora corrispondente.

YOLOv5 sovrapposizione della griglia

  • Assegna l'ancora corrispondente alle celle appropriate, tenendo presente che, a causa della revisione dell'offset del punto centrale, una casella della verità terrena può essere assegnata a più di un'ancora. Poiché l'intervallo di offset del punto centrale è stato modificato da (0, 1) a (-0.5, 1.5). Il box GT può essere assegnato a più ancore.

YOLOv5 selezione dell'ancora

In questo modo, il processo di costruzione degli obiettivi garantisce che ogni oggetto della verità a terra sia assegnato e abbinato correttamente durante il processo di addestramento, consentendo a YOLOv5 di apprendere il compito di rilevare gli oggetti in modo più efficace.

Conclusione

In conclusione, YOLOv5 rappresenta un significativo passo avanti nello sviluppo di modelli di rilevamento di oggetti in tempo reale. Incorporando diverse nuove funzionalità, miglioramenti e strategie di addestramento, supera le versioni precedenti della famiglia YOLO in termini di prestazioni ed efficienza.

I principali miglioramenti di YOLOv5 includono l'uso di un'architettura dinamica, un'ampia gamma di tecniche di incremento dei dati, strategie di formazione innovative e importanti modifiche alle perdite di calcolo e al processo di costruzione degli obiettivi. Tutte queste innovazioni migliorano in modo significativo l'accuratezza e l'efficienza del rilevamento degli oggetti, pur mantenendo un alto grado di velocità, che è il marchio di fabbrica dei modelli di YOLO .



Creato 2023-11-12, Aggiornato 2024-01-14
Autori: glenn-jocher (5), sergiuwaxmann (1)

Commenti