Yolo – un algoritmo di computer vision ultraveloce per una computer vision in tempo reale

Uno sguardo a YOLO: Coi decoder a passata singola la computer vision fa un salto generazionale.

La computer vision è uno dei campi in cui l’Intelligenza Artificiale è in maggiore espansione, basti pensare alle auto autonome e driverless, dove Tesla ha fatto da battistrada, e su cui si stanno ora buttando un po’ tutte le case automobilistiche.

Per anni il riconoscimento e la categorizzazione è stato un problema, specialmente considerando la difficoltà di un algoritmo tradizionale a riconoscere lo stesso oggetto in posizioni e angolazioni differenti.

Considerando quanto sia sembri a noi facile e automatico riconoscere e distinguere da scene visive, rendersi conto dei problemi che si incontrano nel riconoscimento automatico non è così scontato.

Problemi e difficoltà

Innanzitutto dobbiamo distinguere due classi di problemi: la categorizzazione e la localizzazione. La prima, relativamente meno complessa, presenta già difficoltà non banali.

Related image

Ci riesce facile per esempio riconoscere una sedia, ma sareste in grado di descriverne una in modo inequivocabile? Potremmo definirlo come un mobile per sedersi con quattro gambe, dei braccioli e uno schienale. Tuttavia, già guardando l’immagine qui sotto si notano dei problemi: alcune hanno solo 3 gambe, alcune addirittura ne hanno solo due, quella rossa di fatto solamente una, quella per ufficio è a rotelle, etc.

Eppure per noi identificarle tutte come sedie è immediato. Istruire una macchina a riconoscerle presentando tutte le possibili eccezioni è ovviamente impossibile, di conseguenza un riconoscimento basato su regole è destinato come minimo a produrre risultati insoddisfacenti, pieni di falsi positivi (riconoscimento di sedie dove non ce ne sono) e negativi (sedie non riconosciute per tali).

Il problema si complica ancora di più se gli oggetti vengono presentati con differenti orientamenti, o con delle parti mancanti (vedi sotto).

Approcci classici

Senza addentrarci troppo nella storia del riconoscimento oggetti automatico, possiamo dire che, prima dell’avvento del deep learning, uno dei tentativi di face recognition di maggiore successo fu quello di Viola-Jones1.  Questo algoritmo funzionava in modo molto semplice: si generava una sorta di mappa che rappresentava le feature di un viso, tramite migliaia di semplici classificatori binari usando Haar features. Questa mappa veniva poi “cablata” nell’algoritmo usandola per addestrare una SVM come classificatore per individuare . Questo algoritmo era semplice e veloce, tanto che ancora oggi viene utilizzato in alcune fotocamere compatte di fascia economica. Questo presentavano però esattamente i problemi sopra descritti, ovvero erano poco flessibili nel riconoscere oggetti presentati con variazioni anche lievi a quelli utilizzati per l’apprendimento.

Algoritmo Viola-Jones

Più precisi erano algoritmi come quello di Dalal e Triggs2, che utilizzava HOG (istogrammi a gradienti orientati) che oltre ai bordi, tiene in conto gli orientamenti dei gradienti in ogni porzione dell’immagine, e SVM per la classificazione.

Estrazione degli istogrammi dai gradienti e riconoscimento

Tuttavia, pur ottenendo risultati decisamente più precisi del precedente, era decisamente più lento. Inoltre il problema rimaneva nella scarsa robustezza e nella conseguente difficoltà nel riconoscere immagini con una certa quantità di “rumore” o distrazioni in background.

Identificare e scomporre immagini come queste erano un problema serio per i primi algoritmi

Un altro problema di questi algoritmi era la capacità di riconoscere solo una singola immagine, e non erano in grado di generalizzare. In altre parole potevano essere “configurati” solo su un genere di immagini (facce, cani, etc), avevano forti difficoltà nei problemi elencati sopra, ed avevano limitazioni molto stringenti sul formato delle immagini su cui potevano lavorare.

Arriva il Deep Learning

In effetti per diventare veramente utile il riconoscimento oggetti dovrebbe essere in grado di effettuare riconoscimenti su scene complesse, che sono poi le scene in cui ci imbattiamo nella vita di tutti i giorni (sotto).

Scena con diversi oggetti, presenti in diverse proporzioni, colori e angolature

L’esplosione dell’uso delle reti neurali nell’era dei Big Data, e della conseguente popolarità del Deep Learning cambiarono le carte in tavola. in particolare lo sviluppo delle reti convolute diede una forte spinta

Un approccio comune a quasi tutti gli algoritmi (compresi i precedenti) è stato quello della “sliding window”, ovvero scansionare zona per zona tutta l’immagine, analizzandola una porzione (la finestra appunto) alla volta.

Nel caso delle reti convolute (CNN), l’idea è di ripetere il processo con diverse dimensioni della finestra, ottenendo per ciascuna una predizione del contenuto, con grado di confidenza. Alla fine vengono scartate le predizioni con grado di confidenza più basso.

Classificazione con CNN

Questo approccio produce ottimi risultati anche con scene complesse, ma ha il problema di essere molto lento, dovendo eseguire la classificazione per migliaia di volte. Inoltre le sliding window sono tutte quadrate, il che porta a generare bounding box (box che racchiudono interamente l’immagine) che spesso non corrispondono a quello atteso (vedi i rettangoli giallo e verde nella GIF animata).

Decoder a passata singola

Le necessità di oggi vanno molto oltre la semplice classificazione o localizzazione in immagini statiche, oggi la necessità è di avere analisi in tempo reale: nessuno vorrebbe trovarsi a bordo di un’automobile autonoma che impiega diversi minuti (o anche solo secondi) per riconoscere immagini!

La soluzione al problema è quella di utilizzare reti convolute a passata singola, ovvero che analizzano tutte le parti dell’immagine in parallelo, simultaneamente, consentendo di evitare l’uso della sliding window.

YOLO

Yolo è stato sviluppato da Redmon e Farhadi nel 2015, durante il loro dottorato. Il concetto è di ridimensionare l’immagine in modo da ricavarne una griglia di quadrati. Nella v3 (l’ultima), YOLO fa predizioni su 3 diverse scale, riducendo l’immagine rispettivamente di 32, 16 e 8, allo scopo di rimanere accurata anche su scale più piccole (le versioni precedenti avevano dei problemi con le immagini piccole). Per ciascuna delle 3 scale, ogni cella è responsabile della predizione di 3 bounding box, utilizzando 3 anchor box3.

Yolo v3 è in grado di lavorare con 80 classi differenti. Al termine dell’elaborazione vengono mantenute solo le bounding box con la confidenza più elevata, scartando le altre.

Architettura di Yolo v3 (Fonte: Ayoosh Kathuria)

YOLO v3 risulta molto più preciso delle versioni precedenti, e pur essendo un po’ più lento, rimane comunque uno degli algoritmi più veloci in circolazione. La v3 usa come architettura una variante di Darknet, con 106 layer convoluti. Interessante è anche Tiny YOLO, funzionante su Tiny Darknet, e in grado di girare su dispositivi limitati come gli smartphone.

Qui sotto si può vedere YOLO v3 all’opera su filmati in tempo reale.

Note

1. P. Viola and M. Jones: Rapid object detection using a boosted cascade of simple features, CVPR 2001.

2. N. Dalal, B. Triggs: Histograms of Oriented Gradients for Human Detection, CVPR 2005.

3. Un anchor box non è altro che un rettangolo di proporzioni pre-definite. Si usano per avere maggior corrispondenza tra bounding box predetta e attesa (qui si può seguire l’ottima spiegazione di Andrew Ng).

LINKS

Object detection: an overview in the age of Deep Learning

Evolution of Object Detection and Localization Algorithms

YOLO website

Redmon J, Farhadi A. – You Only Look Once: Unified, Real-Time Object Detection (arXiv:1506.02640v5)

Redmon J, Farhadi A. – YOLOv3: An Incremental Improvement (arXiv:1804.02767v1)

Wei Liu et al. – SSD: Single Shot MultiBox Detector (arXiv:1512.02325v5)

What’s new in YOLO v3?

Speed/accuracy trade-offs for modern convolutional object detectors

Single Shot Detectors

Andrew NG’s YOLO lecture on Coursera

YOLO: Real Time Object Detection

Histogram of Oriented Gradients

RNNs in Darknet

Tutorial: Implement Object Recognition on Live Stream

YOLO — You only look once, real time object detection explained

INVESTIGATING HUMAN PRIORS FOR PLAYING VIDEO
GAMES

COCO – Common Objects in COntext

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.