YOLO: un’analisi approfondita

Funzione di Loss in YOLO

YOLO (You Only Look Once) è uno dei modelli di deep learning più popolari per il rilevamento degli oggetti, grazie alla sua velocità e accuratezza, per avere un infarinatura generale è consigliato di leggere l’articolo precedente. Alla base del suo funzionamento c’è una funzione di loss ben strutturata, che guida il modello nell’apprendimento della posizione, dimensione e classificazione degli oggetti nelle immagini.

In questo articolo, esploreremo in dettaglio la funzione di loss di YOLO,  un concetto fondamentale nel machine learning e nelle reti neurali. In parole semplici, è una misura di quanto il modello sta sbagliando nelle sue previsioni.

Quando un modello come YOLO analizza un’immagine e cerca di rilevare oggetti, genera delle previsioni su:

  • Dove si trovano gli oggetti (coordinate del bounding box).

  • Se un oggetto è presente in una determinata area (confidenza).

  • A quale categoria appartiene l’oggetto rilevato (classificazione).

La funzione di loss confronta queste previsioni con le risposte corrette (dati di training) e calcola un errore. L’obiettivo del modello durante l’addestramento è ridurre al minimo questo errore, migliorando così la qualità delle sue previsioni.

Più la loss è bassa, più il modello sta imparando correttamente a riconoscere e classificare gli oggetti. Se la loss è alta, significa che il modello sta facendo molti errori e deve continuare ad allenarsi.

Nel caso di YOLO, la funzione di loss è composta da diverse parti, ognuna delle quali serve a migliorare un aspetto specifico del rilevamento. Nei prossimi paragrafi analizzeremo queste componenti nel dettaglio.

  • Loss di Coordinate, responsabile dell’accuratezza nella previsione della posizione degli oggetti.

  • Loss di Confidenza, che determina quanto il modello è sicuro della presenza di un oggetto in una determinata area.

  • Loss di Classe, che aiuta a classificare correttamente gli oggetti individuati.

  • Funzione di Loss Totale, che combina tutte queste componenti per addestrare il modello in modo efficace.

Se vuoi approfondire il funzionamento di YOLO e capire come la sua funzione di loss incide sulla qualità del rilevamento, sei nel posto giusto!

1. Loss di Coordinate Lcoord (x, y, w, h) :

Penalizza la differenza tra le coordinate predette per il centro del box e quelle effettive. Viene applicato un errore quadratico medio (MSE) solo per le celle che contengono un oggetto.

La formula per la loss di coordinate è:

    \[L_{coord} = \sum_{i=0}^{B} \lambda_{coord} \cdot \left( (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 + (w_i - \hat{w}_i)^2 + (h_i - \hat{h}_i)^2 \right)\]

Dove:

( x_i, y_i, w_i, h_i ) sono le coordinate reali e le dimensioni del box.

( \hat{x}_i, \hat{y}_i, \hat{w}_i, \hat{h}_i ) sono le coordinate e le dimensioni predette dal modello.

( \lambda_{coord}) è un fattore di scala per pesare l’importanza del termine.

2. Loss di Confidenza Lconf:

Penalizza la previsione di confidenza per ogni box. Se un box è vuoto (cioè non contiene un oggetto), il modello dovrebbe predire una confidenza bassa. Se invece contiene un oggetto, la confidenza dovrebbe essere alta.

La formula per la loss di confidenza è:

    \[L_{conf} = \sum_{i=0}^{B} \lambda_{conf} \cdot (C_i - \hat{C}_i)^2\]

Dove:
( C_i ) è la confidenza reale (1 se l’oggetto è presente, 0 se non lo è).
( \hat{C}_i ) è la confidenza predetta.

3. Loss di Classe Lclass:

Penalizza la previsione errata della classe di un oggetto. Se l’oggetto è presente, la rete deve essere in grado di prevedere la classe corretta.

La formula per la loss di classe è:

    \[L_{class} = \sum_{i=0}^{B} \lambda_{class} \cdot (p_i - \hat{p}_i)^2\]

Dove:
( p_i ) è la probabilità della classe corretta.
( \hat{p}_i ) è la probabilità predetta per quella classe.

Dopo aver esaminato le singole componenti della funzione di loss di YOLO—Loss di Coordinate, Loss di Confidenza e Loss di Classe—è importante capire il significato del valore finale della Funzione di Loss Totale e come interpretarlo.

4. Funzione di Loss Totale di YOLO

La funzione di loss totale è la somma dei tre componenti, ognuno pesato da un fattore di scala. In generale, la funzione di loss finale è:

    \[L_{total} = L_{coord} + L_{conf} + L_{class}\]

La funzione di loss totale è la somma ponderata di tutte queste componenti e rappresenta quanto il modello sta sbagliando complessivamente. Vediamo cosa significano i possibili valori che può assumere:

  1. Loss Totale Alta

    • Se il valore della loss è molto alto, significa che il modello sta facendo errori significativi.

    • Potrebbe indicare che le coordinate dei bounding box sono imprecise, che il modello non è sicuro della presenza degli oggetti o che sta confondendo le classi.

    • In questo caso, potrebbe essere necessario migliorare il dataset di training (ad esempio, con più immagini o annotazioni più precise) o modificare l’architettura e i parametri del modello.

  2. Loss Totale Media

    • Un valore intermedio della loss indica che il modello sta imparando, ma ha ancora margini di miglioramento.

    • Se la loss diminuisce gradualmente durante l’addestramento, è un buon segno: significa che il modello sta migliorando le sue previsioni.

    • Tuttavia, se rimane bloccata su un valore medio per troppo tempo, potrebbe essere necessario aggiustare l’ottimizzatore o i tassi di apprendimento.

  3. Loss Totale Bassa

    • Se il valore della loss è basso, significa che il modello sta facendo previsioni molto accurate.

    • Le coordinate dei bounding box sono precise, la confidenza è ben calibrata e la classificazione è corretta nella maggior parte dei casi.

    • Questo è l’obiettivo ideale, ma attenzione: una loss troppo vicina a zero potrebbe significare overfitting, ovvero che il modello ha memorizzato i dati di training senza generalizzare bene su nuove immagini.

Dare un Senso ai Calcoli della Loss Totale

  • Durante l’addestramento, bisogna monitorare l’andamento della loss nel tempo: una perdita che diminuisce progressivamente è un buon segnale.

  • È utile confrontare le singole componenti della loss: ad esempio, se la Loss di Coordinate è alta, significa che il modello fatica a prevedere la posizione degli oggetti. Se la Loss di Confidenza è alta, potrebbe esserci un problema con i falsi positivi o negativi…

  • Il valore finale della loss non ha un’unità di misura assoluta, ma va interpretato relativamente al dataset e al modello: ciò che conta è come cambia e come influenza le prestazioni reali del modello.

Vantaggi di YOLO

  • Velocità: YOLO è estremamente veloce e può essere eseguito in tempo reale su hardware moderno.
  • Accuratezza: Nonostante la velocità, YOLO è in grado di rilevare oggetti con un buon livello di accuratezza.
  • Unico passaggio di rilevamento: La combinazione della classificazione e della localizzazione in un solo passaggio rende il processo molto più efficiente rispetto ad altri metodi che richiedono più passaggi.

Versioni di YOLO

YOLO è stato continuamente migliorato con l’introduzione di nuove versioni. Le principali versioni includono:

  • YOLOv1: La versione originale, introdotta da Joseph Redmon nel 2015.
  • YOLOv2: (Darknet-19): Una versione migliorata con migliori capacità di rilevamento.
  • YOLOv3: Introduce ulteriori miglioramenti in termini di accuratezza e supporta il rilevamento di oggetti di dimensioni diverse.
  • YOLOv4: Un’ulteriore evoluzione che migliora la velocità e l’accuratezza su diverse piattaforme.
  • YOLOv5: Una versione non ufficiale che continua ad essere molto popolare nella comunità.
  • YOLOv6
    •  Sviluppato da Meituan nel 2022 per applicazioni industriali.
    •  Ottimizzato per essere efficiente su dispositivi edge e robot autonomi.
  • YOLOv7
    •  Pubblicato nel 2022 dagli autori di YOLOv4.
    •  Introduce il “trainable bag of freebies”, un insieme di miglioramenti architetturali per aumentare la precisione senza sacrificare la velocità.
  • YOLOv8
    •  Ultima versione ufficiale sviluppata da Ultralytics.
    •  Aggiunge nuove funzionalità come:
    • Segmentazione di istanze.
    • Stima delle pose e punti chiave.
    • Classificazione degli oggetti.
  • YOLOv9, YOLOv10 e YOLOv11
    •  Versioni sperimentali con ulteriori ottimizzazioni in velocità e accuratezza.
    •  YOLOv9 implementa il Programmable Gradient Information (PGI) per migliorare l’apprendimento.

Applicazioni di YOLO

YOLO viene utilizzato in molteplici campi, tra cui:

  • Videosorveglianza: Rilevamento in tempo reale per la sicurezza.
  • Veicoli autonomi: Riconoscimento di pedoni, veicoli e segnali stradali.
  • Robotica: Navigazione e interazione con gli oggetti.
  • Agricoltura di precisione: Monitoraggio delle colture tramite droni.
  • Medicina: Identificazione di anomalie nelle immagini diagnostiche.

YOLO inoltre si integra bene con strumenti di annotazione come Label Studio, facilitando la creazione di dataset annotati per l’addestramento di modelli di rilevamento e classificazione.

Licenze e Open-Source

  • Alcune versioni di YOLO sono open-source, mentre altre potrebbero avere restrizioni per l’uso commerciale.
  • YOLOv8 e versioni successive potrebbero richiedere una licenza per l’uso in progetti commerciali.

Risorse Utili