
Cercare di comprendere come un computer sia in grado di vedere un’immagine, o una sequenza di immagini, è uno dei processi più complessi nella scienza computazionale che si sta cercando di risolvere già da qualche decennio.
Aumento esponenziale dei dati analizzati, miglioramento continuo della tecnologia, sviluppo di nuovi algoritmi più sofisticati… sono tutte procedure che hanno permesso di raggiungere risultati importanti nel campo del computer vision, o visione artificiale se preferisci.
Queste tecnologie avranno un impatto considerevole nel prossimo futuro.
Pensa alla fotocamera del tuo smartphone. Oppure alle webcam dei computer; a nuovi autovelox; o alle telecamere di sorveglianza, dei satelliti o addirittura a quelle che riprendono immagini mediche come ultrasuoni e raggi X. E potrei continuare.
Al momento la maggior parte di queste immagini è solo visionata da persone (ad esempio la maggior parte delle webcam sono utilizzate solo per teleconferenze).
Tuttavia, l’elaborazione di immagini da tutte queste telecamere può essere automatizzata e ci permetterà di fare cose mai viste prima:
- la webcam come dispositivo di localizzazione al posto del mouse;
- le telecamere di sorveglianza utilizzate per identificare i ladri di biciclette e la sicurezza degli allarmi;
- la fotocamera del telefono utilizzata per acquisire immagini di segni e tradurli automaticamente;
- le telecamere medicali utilizzate per diagnosticare le condizioni in modo più affidabile rispetto al miglior esperto;
- le telecamere su robot che in futuro (forse) permetteranno loro di interagire con il mondo proprio come noi ci relazioniamo con gli altri.
Che cosa si intende per Computer Vision
Sebbene in letteratura esistano più definizioni, si può considerare il Computer Vision
“il fenomeno che rende le macchine come computer o telefoni cellulari in grado di vedere l’ambiente come l’uomo“
Il Computer Vision è ritenuto un sottocampo dell’Intelligenza Artificiale in cui l’obiettivo è costruire un computer che replichi l’intelligenza visiva del cervello umano.
Inventare una macchina che vede come noi è un compito estremamente difficile, che sta occupando il tempo dei ricercatori da oltre 60 anni.
Allo stesso modo, fare vedere le cose alle macchine e renderle abbastanza capaci da capire quello che stanno vedendo e ulteriormente categorizzarle, è ancora un lavoro piuttosto duro.
Per rendere più chiare le idee, guarda il seguente video (si, ci sono i sottotitoli in italiano!!).
Siccome il computer vision tenta di imitare il funzionamento del processo visivo dell’uomo, vediamo brevemente come esso funziona.
Come funziona il processo visivo umano
Un tuo amico dall’altra parte della stanza ti lancia una pallina e tu la prendi senza difficoltà. Semplice, vero?
Fin da piccoli impariamo a farlo, senza particolare difficoltà.
L’immagine della pallina che ci viene lanciata passa attraverso l’occhio e colpisce la tua retina, che fa un’analisi elementare e la invia al cervello, dove la corteccia visiva analizza più a fondo l’immagine.
Poi la invia al resto della corteccia, che la confronta con tutto ciò che già conosce, classifica gli oggetti e le dimensioni e infine decide su qualcosa da fare: alza la mano e prendi la pallina (dopo aver predetto il suo percorso).
Questo avviene in una piccola frazione di secondo, senza quasi nessuno sforzo cosciente, e difficilmente fallisce.
Come una macchina vede oggi?
A differenza di noi, i computer sono stati progettati per vedere un’immagine come un insieme di numeri.
Qualsiasi immagine è composta da un insieme di pixel, ognuno dei quali rappresenta la componente elementare di un’immagine che può essere visualizzata mediante le coordinate fissate da un programma di elaborazione grafica.
Il numero di pixel in un’immagine dipende dalla sua risoluzione, che più alta è, più nitida e di qualità risulterà l’immagine, e viceversa.
Avrai sicuramente sentito persone dire che un’immagine è di dimensioni 1300 x 700 o 700 x 500. Questa rappresentazione mostra larghezza e altezza di un’immagine.
Affermare che la dimensione dell’immagine è di 1300 x 700 significa avere 1300 pixel in orizzontale e 700 in verticale, che equivale ad avere 910.000 (1300 x 700) pixel totali.
L’insieme dei pixel rappresentano l’insieme di numeri necessari a un computer per vedere l’immagine e vengono organizzati secondo una matrice 2D o 3D di numeri compresi tra 0 e 255, a seconda che essa sia in scala di grigi o a colori.
Un computer capisce che l’immagine ha dimensione 1300 x 700 tramite la matrice composta da 1300 righe e 700 colonne.
I numeri all’interno di essa individuano la scala di un determinato colore, quindi la sua intensità, e se un pixel è più opaco, più nitido o chiaro del vicino avrà un numero differente.
Ad esempio, nell’immagine in bianco e nero si ha solamente una matrice 2D come quella dell’immagine sopra: il numero 0 rappresenta il nero e il numero 255 rappresenta il colore bianco per un determinato pixel della matrice.
Nelle immagini in scala di grigi, ciascun pixel rappresenta l’intensità di un solo colore. In altre parole, si dice che la matrice ha un canale.
La matrice 3D dell’immagine a colori, invece, include 3 canali: quello rosso, verde e blu (dall’inglese RGB, ovvero Red, Green e Blue).
Ogni canale è composto da una matrice 2D, simile a quella della scala di grigi, e perciò avremo una matrice per il canale rosso, una per il canale verde e una per quello blu, che poi sono impilate una sopra l’altra per ottenere la matrice 3D che mostra l’immagine a colori.
La prima matrice rappresenta il canale rosso, quindi ogni elemento di quella matrice rappresenta un’intensità di colore rosso in quel pixel allo stesso modo per il canale verde e blu.
In generale, ogni pixel nell’immagine a colori ha tre numeri (da 0 a 255) ad esso associati. Questi numeri rappresentano l’intensità del colore rosso, verde e blu rispettivamente in quel particolare pixel.
Ad esempio, (255,0,0) rappresenta il colore rosso, (0,255,0) rappresenta il verde e (0,0,255) rappresenta il blu. Usando valori diversi per questi numeri, puoi creare qualsiasi colore tu voglia.
Vedere non basta…
Oltre a vedere, un computer deve essere in grado di identificare e riconoscere cosa vede.
Per identificare i contenuti di un’immagine il computer utilizza metodologie quali il riconoscimento delle caratteristiche (feature detection) e riconoscimento degli angoli (corner detection).
In parole semplici, queste metodologie vengono utilizzate dagli algoritmi di computer vision in fase iniziale di studio dell’immagine al fine di cercare le linee che si incontrano ad angolo e comprendendone una parte specifica dell’immagine con una sfumatura di colore.
Questi angoli e caratteristiche sono gli elementi costitutivi che aiutano a trovare informazioni più dettagliate contenute nell’immagine.
Inoltre, per facilitare il riconoscimento, l’algoritmo utilizzato effettua un’analisi strutturale e la segmentazione dell’immagine per capire dove sono dislocate le regioni di interesse fornendo informazioni sulla disposizione spaziale dei colori o delle intensità in un’immagine.
Altro aspetto cruciale è la riorganizzazione.
Per confrontare due oggetti simili, o capire cosa essi rappresentino, è importante che l’algoritmo di computer vision effettui esperimenti e venga addestrato allo scopo per cui dovrà operare.
Ti sei mai chiesto come fanno i bambini piccoli a scoprire il mondo senza che gli venga spiegato?
Semplicemente provano e imparano giocando.
È per questo motivo che il computer vision è strettamente correlato al machine learning: tramite apprendimento non supervisionato gli algoritmi di computer vision sono addestrati con un’enorme set di dati etichettati al fine di riorganizzare i dati in modo tale che ottengano un senso.
Questo è importante e necessario per fare confronti con foto o video simili e stabilire cosa raffiguri l’immagine studiata, e che cosa si può imparare da essa.
Nel caso in cui poi il computer non sia sicuro di ciò che vede, te lo dirà: facendogli vedere nostri esempi, impareranno a pensare e ragionare come noi.
5 tecniche di computer vision
Dopo aver compreso maggiormente come fa un computer a vedere e ad identificare gli oggetti voglio mostrare alcune tecniche utilizzate in computer vision.
1) Classificazioni di immagini (Image Classification):
Dato un insieme di immagini che sono tutte etichettate con una singola categoria, si cerca di prevedere se questa categoria appare in un nuovo set di immagini di prova misurandone l’accuratezza delle previsioni.
Ad esempio, se sto studiando la categoria “gatto”, cercherò di identificare in immagini differenti se esse rappresentano un “gatto” oppure no.
Solitamente vengono studiate più di una categoria alla volta.
Per risolvere questo problema, i ricercatori di visione artificiale “insegnano” all’algoritmo a riconoscere un dataset di immagini di prova, in modo che diventino abbastanza abili da prevedere con elevata probabilità di cosa si tratti, e solo dopo fanno elaborare le immagini nuove al pc.
L’architettura più utilizzata per risolvere questi problemi sono le Convolutional neural network (o reti neurali convoluzionali), ossia un tipo di rete neurale artificiale che verrà approfondita in separata sede.
2) Rilevazione degli oggetti (Object Detection): rappresenta la definizione degli oggetti all’interno delle immagini di solito tramite l’emissione di box ed etichette per singoli oggetti.
Esistono problemi che classificano e localizzano molti oggetti e quelli che si focalizzano solamente su un oggetto dominante.
Nel primo caso si cercano di identificare tutti gli oggetti rilevanti allo studio, mentre nel secondo, ad esempio se il problema tratta il rilevamento auto, l’algoritmo si concentrerà sul rilevare tutte le auto in una determinata immagine con i loro riquadri di delimitazione.
Per risolvere questi tipi di problemi uno degli algoritmi utilizzati è quello definito Faster R- CNN, un tipo di rete neurali convoluzionale che permette di ottenere maggiore accuratezza e velocità delle semplici, per modo di dire, R-CNN, che si concentrano nel classificare e valutare regione per regione per identificare gli oggetti.
3) Tracciamento di oggetti (Object Tracking): si riferisce al processo di seguire uno specifico oggetto di interesse, o più oggetti, in una determinata scena.
Tradizionalmente ha applicazioni nelle interazioni video e nel mondo reale dove le osservazioni sono fatte dopo un rilevamento iniziale dell’oggetto.
Ora, è fondamentale per sistemi di guida autonomi come i veicoli delle aziende Uber e Tesla.
Un’architettura molto usata anche in questo campo è la Convolutional neural network, sebbene non risulti l’unica.
4) Segmentazione semantica (Semantic Segmentation): Processo fondamentale della Computer Vision è il processo di segmentazione, che divide intere immagini in gruppi di pixel che possono quindi essere etichettati e classificati.
In particolare, la segmentazione semantica cerca di capire il ruolo di ciascun pixel nell’immagine.
Ad esempio, nella figura sopra, oltre a riconoscere la persona, la strada, le auto, gli alberi, ecc., si deve anche delineare i confini di ciascun oggetto.
Pertanto, a differenza della classificazione, abbiamo bisogno di previsioni basate su pixel densi dai nostri modelli.
Anche per questo tipo di problemi l’architettura più utilizzata è formata dalle reti neurali convoluzionali.
5) Segmentazione dell’istanza (Instance Segmentation): La segmentazione dell’istanza segmenta diverse istanze di classi, come l’etichettatura di 10 persone con 10 colori diversi.
Nella classificazione, generalmente è presente un’immagine con un singolo oggetto come focus e il compito è dire cosa rappresenta l’immagine.
Per segmentare le istanze, solitamente occorre svolgere compiti molto più complessi. Si vedono viste complicate con più oggetti sovrapposti e sfondi diversi, e non solo vengono classificati questi diversi oggetti, ma si identificano anche i loro confini, differenze e relazioni tra loro!
I ricercatori Facebook di intelligenza artificiale per risolvere questo problema si sono avvalsi di una Mask – R- CNN, un altro tipo di rete neurale convoluzionale.
Il campo della computer vision è talmente vasto che include numerose altre tecniche che non sono citate in questo articolo e nel futuro tali tecniche miglioreranno e permetteranno di ottenere risultati ancora più sorprendenti di quelli attuali.
Per concludere, voglio mostrare il discorso della professoressa di scienze computazionali Fei-Fei Li, a Ted: davvero interessante (anche qua sono presenti i sottotitoli in italiano. Buona visione ).