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 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: È il corpo principale della rete. Per YOLOv5, la spina dorsale è progettata utilizzando il modello New CSP-Darknet53 una modifica dell'architettura Darknet utilizzata nelle versioni precedenti.
  • Collo: Questa parte collega la spina dorsale e la testa. In YOLOv5, SPPF e New CSP-PAN vengono utilizzate le strutture.
  • Testa: Questa parte è responsabile della generazione dell'output finale. YOLOv5 utilizza l'opzione YOLOv3 Head a questo scopo.

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

yolov5

YOLOv5 introduce alcune modifiche minori rispetto ai suoi predecessori:

  1. Il Focus che si trovava nelle versioni precedenti, viene sostituita con 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):
        """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 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 allenamento.

    copia-incolla

  • Trasformazioni affini casuali: Include rotazione, scalatura, traslazione e taglio casuali delle immagini.

    casuale-affine

  • Aumento MixUp: Un metodo che crea immagini composite attraverso 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. Esse comprendono:

  • Formazione multiscala: Durante il processo di addestramento, le immagini di ingresso vengono ridimensionate in modo casuale in un intervallo compreso tra 0,5 e 1,5 volte la loro dimensione originale.
  • 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.
  • Formazionea precisione mista: Un metodo per eseguire operazioni in formato a mezza precisione, riducendo l'uso 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 combinazione di tre componenti di perdita individuali:

  • Perdita delle classi (perdita BCE): Binary Cross-Entropy loss, misura l'errore per l'attività di classificazione.
  • Perdita di oggettività (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 Saldo perdite

Le perdite di oggettività dei tre strati di predizione (P3, P4, P5) sono ponderati in modo diverso. I pesi di bilanciamento 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 e impedire al modello di prevedere dimensioni della scatola non limitate.

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

bx da bw bh

Confronta l'offset del punto centrale prima e dopo il ridimensionamento. 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 a 1.

YOLOv5 scalatura della griglia

Confrontare 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 prive di limiti, in quanto sono semplicemente out=exp(in), il che è pericoloso, in quanto può portare a gradienti in fuga, instabilità, perdite di NaN e, in ultima analisi, a una perdita completa dell'addestramento.

YOLOv5 scalatura non limitata

4.4 Obiettivi di costruzione

Il processo di costruzione del target in YOLOv5 è fondamentale per l'efficienza dell'addestramento e l'accuratezza del modello. Comporta l'assegnazione di caselle di verità al suolo alle celle della griglia appropriate nella mappa di output e la loro corrispondenza con le caselle di ancoraggio appropriate.

Il processo segue le seguenti fasi:

  • Calcolare il rapporto tra le dimensioni del box di verità a terra e le dimensioni di ciascun modello di ancoraggio.

rw

rh

rwmax

rhmax

rmax

partita

YOLOv5 Calcolo IoU

  • Se il rapporto calcolato è entro la soglia, si fa corrispondere il riquadro della verità a terra con l'ancora corrispondente.

YOLOv5 sovrapposizione della griglia

  • Assegnare l'ancora corrispondente alle celle appropriate, tenendo presente che, grazie alla revisione dell'offset del punto centrale, una casella di verità terrena può essere assegnata a più di un'ancora. Poiché l'intervallo di offset del punto centrale è stato regolato da (0, 1) a (-0,5, 1,5). La casella GT può essere assegnata a più ancore.

YOLOv5 selezione dell'ancora

In questo modo, il processo di costruzione degli obiettivi assicura 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 rilevamento degli 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 addestramento innovative, nonché importanti modifiche alle perdite di calcolo e al processo di costruzione dei target. Tutte queste innovazioni migliorano significativamente l'accuratezza e l'efficienza del rilevamento degli oggetti, pur mantenendo un elevato grado di velocità, che è il marchio di fabbrica dei modelli di YOLO .

📅C reato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti