Si vive una volta sola, ma YOLO ha già 8 vite

Si vive una volta sola, ma YOLO ha già 8 vite

Rapida panoramica sull'ecosistema delle reti neurali per il rilevamento degli oggetti

YOLO (You Only Look Once) è una popolare rete neurale per il rilevamento di oggetti, creata per la prima volta da Joseph Redmon, alias pjreddie (qui il suo particolarissimo CV) e Alexey Bochkovskiy, alias AlexeyAB; dietro le quinte utilizza Darknet per "dividere l'immagine in regioni e prevedere le bounding box e le probabilità per ogni regione. Queste caselle di delimitazione sono ponderate in base alle probabilità previste".

Dopo YOLOv4, diversi ricercatori e aziende hanno iniziato a lavorare alla loro versione dell'algoritmo YOLO. Alcune di queste sono YOLO-X, YOLO-R, YOLOv5, YOLOv6, YOLOv7 e l'ultima versione di UltralyticsYOLOv8.

Ogni iterazione ha il suo colpo di scena per spremere un po' di mAP in più o per renderla meno costosa dal punto di vista computazionale senza perdere in accuratezza.

Ma come si fa a decidere qual è la migliore per la propria applicazione?

Beh, c'è un grafico utile per questo!

Questo è tratto dal repo di YOLOv7 e ci mostra il confronto tra le diverse implementazioni; da qui possiamo vedere che YOLOv7 è più veloce (l'asse delle ascisse è il tempo di inferenza, più basso è, meglio è) e più preciso (l'asse delle ordinate è la precisione media, più alta è, meglio è).

Ma aspetta, manca l'ultima versione, controlliamo il repository di YOLOv8...

Wow, quindi YOLOv8 è leggermente più veloce e preciso di YOLOv7, ma aspettate, c'è di più!

YOLOv6 sta tornando in auge con l'ultima versione v6.3, con prestazioni leggermente migliori rispetto a YOLOv8!

Quindi, la v8 è migliore della v7 e la v6 è migliore della v8, ma solo la nuova versione v6.3, giusto? Ricordate che questo è il dataset COCO, i risultati possono variare sul vostro dataset, quindi provate voi stessi!

C'è un'altra cosa su cui vorrei attirare la vostra attenzione: questo repository è rilasciato con una licenza di software open source (OSS), il che significa che tutti possono usare questo software, a certe condizioni, una delle quali è che l'utente deve accreditare l'autore originale del codice se intende usare un pezzo specifico di codice. Piuttosto semplice, no? Ma cosa succede se non lo faccio? Beh, chiedetelo ai ragazzi di YOLOv7, che in questo commit hanno inserito un sacco di nuovo codice nel loro repo, ma alcuni di quei codici sembrano... "familiari". Hanno copiato direttamente il codice di YOLOv5 per la maggior parte delle funzionalità e non hanno mai accreditato l'autore originale e questo è un grande NO nella comunità OSS.

A questo proposito, possiamo dare una rapida occhiata alla sezione "Issues" del repository per capire quanto impegno è stato profuso nel perfezionamento e nell'usabilità del software: YOLOV5 ha un rapporto di 29 problemi chiusi rispetto a quelli aperti (246 aperti contro 7269 chiusi), quindi per ogni problema aperto ci sono 29 problemi chiusi, YOLOv6 ha un rapporto di 4 problemi chiusi rispetto a quelli aperti. 5 (91 aperte vs 408 chiuse) YOLOv7 ha un rapporto tra emissioni chiuse e aperte di 0,27 (1009 aperte vs 277 chiuse), quindi per ogni emissione aperta ci sono 0,27 emissioni chiuse. Anche se questo non è un indicatore preciso della qualità del codice, è un buon KPI che ci dà un'idea della facilità d'uso e della propensione ai bug di questo software.

Ora la domanda che tutti vorrebbero porre: cosa dovrei usare per il mio nuovo progetto che mira ad avere prestazioni di livello SOTA?

Beh, dipende! Provate voi stessi e fatemi sapere cosa decidete!