Impiego di classificatori nell`analisi di immagini

Transcript

Impiego di classificatori nell`analisi di immagini
Impiego di classificatori nell’analisi di immagini
Davide Devescovi
1
La classificazione
Con il termine classificazione si intende una procedura statistica che permette di associare
ciascun oggetto (che sia un’immagine, un pattern, un dato numerico. . . ), appartenente a
un generico spazio multidimensionale, a una o più etichette, corrispondenti alle possibili
classi di cui può far parte un oggetto; si parla di classificazione esclusiva quando ciascun
oggetto può appartenere a una sola classe, o di classificazione continua o fuzzy se un
oggetto può appartenere, con un certo grado di probabilità, a più classi.
Per ottenere una classificazione si usano le informazioni riguardanti alcuni tratti salienti
(feature, caratteristiche) degli oggetti in esame, e li si confronta, in un apposito spazio
multidimensionale, con quelli di un training set: se questo training set è etichettato, e
quindi le possibili classi sono note e ogni campione nel set è già associato alla classe di
appartenenza, si parla di apprendimento supervisionato; in caso contrario, cioè quando
le possibili classi vanno direttamente ricavate dai dati stessi, abbiamo a che fare con
apprendimento non supervisionato.
Una formalizzazione del problema di classificazione può essere la seguente: partendo da
una serie di dati di addestramento {(x1 ,y), (x2 ,y), . . . , (xn ,y) } si deve produrre un
classificatore h: X → Y che realizzi il mappaggio di nuovi elementi x ∈ X sulle etichette
y ∈ Y.
2
Tipologie di classificatori
I metodi di classificazione sono decisamente numerosi, anche a causa del fatto che più
classificatori possono essere combinati tra loro (vedi paragrafo 2.6), ma in generale possiamo identificare due tipi principali di approcci: quello statistico e quello sintattico.
Il primo approccio cerca in genere di massimizzare la probabilità a posteriori (cioè la
probabilità che un campione appartenga a una data classe, che sarà quindi quella scelta),
ad esempio a partire dalle stime (ottenute dal trainig set) delle probabilità a priori delle
classi e delle probabilità condizionali (qual è la probabilità che il prossimo pattern osservato sia x se la sua classe di appartenenza è W), come nel caso dei classificatori Bayesiani,
(paragrafo 2.1); oppure minimizzando iterativamente l’errore di predizione, come fanno le
reti neurali (paragrafo 2.2).
Il secondo approccio, invece, è molto più pragmatico, dato che si concentra sull’analisi di
caratteristiche distintive degli oggetti o pattern da classificare: trattando queste feature
in uno spazio multidimensionale appositamente costruito, la classificazione comporta il
confronto tra le caratteristiche strutturali delle feature del campione da testare e di quelle
del training set, sia con apprendimento supervisionato (ad esempio l’algoritmo Nearest
Neighbor, paragrafo 2.3) che non supervisionato (come nel caso del Clustering, paragrafo
2.4).
1
Segue quindi una lista (tutt’altro che esaustiva) dei più comuni tipi di classificatori
utilizzati.
2.1
Classificatori Bayesiani
Come si intuisce dal nome, i classificatori Bayesiani fanno uso del teorema di Bayes
per calcolare le probabilità a posteriori, stimando i dati statistici necessari a partire dal
training set (addestramento supervisionato).
Supponiamo di avere un insieme di possibili classi C e una serie di attributi (o feature)
A1 , A2 , . . . , Ak usati per discriminare tra le classi, e indichiamo con lettere minuscole
(c, a 1 . . . ) particolari valori assunti dalle variabili. La classificazione ottimale sarà allora
quella per cui la probabilità di una certa classe, data una serie di valori assunti dagli
attributi, è massima:
max P r(C = c | A1 = a1 ∧ A2 = a2 ∧ . . . ∧ Ak = ak )
Per il teorema di Bayes si ha che questa probabilità è uguale a:
max
P r(A1 = a1 ∧ A2 = a2 ∧ . . . ∧ Ak = ak | C = c)
P r(C = c)
P r(A1 = a1 ∧ A2 = a2 ∧ . . . ∧ Ak = ak )
La probabilità a priori di avere una data classe c si può stimare facilmente dal training set
(a patto che sia composto in maniera da essere rappresentativo), mentre il denominatore
dell’equazione è irrilevante, dato che è lo stesso per tutte le classi dell’insieme C in quanto
da esse indipendente.
Si tratta quindi di riuscire a stimare la probabilità condizionale a numeratore per ciascuno
degli attributi; fatto questo, si otterrebbe un classificatore Bayesiano ottimo, in grado
di fornire la classificazione migliore in assoluto. Il problema è che tale stima è molto
complicata a causa delle dipendenze tra attributi, e anche con poche feature rischia di
diventare computazionalmente irrealizzabile.
Per ovviare al problema si può usare un Naive Bayes Classifier che, come dice il nome,
fa un’ipotesi piuttosto naive sulle feature, ovvero che siano completamente indipendenti.
Se questo è il caso, si ha che
P r(A1 = a1 | A2 = a2 ∧ . . . ∧ Ak = ak ∧ C = c) = P r(A1 = a1 | C = c)
e quindi che P r(A1 = a1 ∧ A2 = a2 ∧ . . . ∧ Ak = ak | C = c) equivale a
P r(A1 = a1 | C = c)P r(A2 = a2 | C = c) . . . P r(Ak = ak | C = c)
A questo punto si può ricavare tutto il necessario dal training set, ad esempio cosı̀:
P r(Aj = aj | C = c) =
count(Aj = aj ∧ C = c)
count(C = c)
grazie a cui si hanno a disposizione tutti i dati per calcolare le probabilità a posteriori
P r(C = c | A1 = a1 . . .) e scegliere quindi la classe che ha probabilità maggiore.
I classificatori naive sono piuttosto semplici da realizzare e non richiedono un grande
carico computazionale; le assunzioni sull’indipendenza delle feature sono il più delle volte
irrealistiche, ma ciononostante le prestazioni di questi classificatori sono piuttosto buone
se ben addestrati.
2
Per trovare una via di mezzo tra questi due estremi (dipendenza totale tra tutte le feature
/ indipendenza totale) si può usare l’approccio delle Reti Bayesiane, un particolare tipo
di grafi diretti aciclici che consentono di rappresentare relazioni di causalità tra feature,
riuscendo a tenere in considerazione solo le dipendenze effettive tra attributi alleggerendo
notevolmente il calcolo rispetto al caso di classificatore ottimale.
Per approfondimenti sulle reti bayesiane e sulle ipotesi di indipendenza e causalità si può
leggere questo articolo[1] dal taglio divulgativo.
Qualche dettaglio in più sul Naive Bayesian Learning si trova invece in questo paper[2].
2.2
Neural Networks
Una rete neurale è un insieme di elementi (neuroni) interconnessi tra di loro in modo da ottenere
un comportamento globale complesso, che è determinato appunto dalle connessioni (e dai loro
pesi) e dai parametri dei neuroni.
Il caso più semplice di rete neurale è il percettrone (figura 1), di fatto un singolo neurone che
riceve una serie di valori in input e, in base a una
funzione di attivazione, produce un determinato
Figura 1: Un percettrone
output; un percettrone viene addestrato modificando iterativamente i pesi degli archi di input, fino ad ottenere l’output desiderato. Come
è facile intuire, però, il percettrone ha potenzialità piuttosto limitate, tant’è che non riesce
neppure a rappresentare l’operazione di XOR in quanto non linearmente separabile.
Si passa quindi all’utilizzo di topologie di rete più complesse, che prevedono uno strato
di neuroni di input, uno strato di output e uno o più strati nascosti (figura 2); sono poi
presenti varianti ricorsive, in cui cioè gli output vengono reindirizzati verso lo strato di
input o gli strati nascosti.
Ciascun neurone è caratterizzato
da una funzione di attivazione, che
può essere scelta in base alle esigenze (step, tangente iperbolica, sigmoide. . . ); inoltre ciascun collegamento
ha un peso che moltiplica il valore di
input di quel collegamento, e proprio
sui pesi si concentra la fase di addestramento della rete. Prendiamo
il caso più semplice, l’addestramento
supervisionato: in questa situazione
possiamo stabilire tutti i valori di input della rete e i rispettivi valori di
Figura 2: Un esempio di rete neurale
output desiderati: ciò che resta da
determinare sono i vari pesi, in modo da minimizzare l’errore tra l’output ottenuto e quello desiderato. L’algoritmo più noto per l’addestramento è quello della backpropagation:
si parte dall’errore all’uscita della rete, e si calcola di quanto vanno corretti i pesi in
uscita dall’ultimo strato di neuroni per avvicinarsi al risultato ideale, usando una stima
di massima verosimiglianza (minimizzare l’errore equivale a massimizzare la “probabilità
dei dati”). Questa correzione può essere vista come l’errore dallo strato precedente, che
3
quindi ripete la procedura e cerca di aggiustare a sua volta i propri pesi per avvicinarsi
all’output richiesto: in sostanza l’errore si “propaga” per tutta la rete. Il procedimento
viene ripetuto iterativamente, finché non viene raggiunto un errore finale ritenuto tollerabile. A questo proposito è importante notare che ottenere un errore eccessivamente
piccolo non è un risultato positivo, perché in questo caso significa che la rete ha “imparato
a memoria” i valori del training set, e se le verranno presentati nuovi dati difficilmente
riuscirà a lavorare con successo perché ha perso in generalità nel corso dell’addestramento. Questo problema è noto con il termine di overfitting, ed esistono alcuni metodi per
ridurne l’impatto, tra cui i più comuni sono l’early stopping e il weight decay.
L’early stopping prevede che una parte del training set non venga passata alla rete per
l’addestramento, ma venga mantenuta “nascosta” per essere usata come set di validazione; dopo ogni passo di backpropagation si misura l’errore sia sui dati usati nel training che
sui dati “nascosti”: quando l’overfitting entrerà in gioco si noterà che l’errore sui dati di
training tenderà a 0, mentre (dopo essere sceso nelle prime fasi di addestramento) quello
sui dati di confronto tenderà ad aumentare nuovamente. Appena si nota un aumento
dell’errore sul set di validazione si deve interrompere l’apprendimento, perché da quel
punto in avanti la rete perderebbe in generalità e non apprenderebbe, ma si limiterebbe
ad “imparare a memoria”.
Il weight decay invece prevede un termine di penalizzazione, durante la backpropagation,
per i pesi che assumono valori assoluti grandi; senza entrare nel dettaglio, basti sapere
che pesi molto grandi tendono a ridurre la generalità della rete (in sostanza causano una
varianza eccessiva, per cui al minimo discostarsi dai valori che la rete ha imparato l’output
tende a diventare imprevedibile e poco attendibile), per cui penalizzando i grandi valori
assoluti si riescono a ridurre gli effetti dell’overfitting.
È evidente che le reti neurali possono avere una grande varietà di applicazioni: dall’analisi
di trend, approssimazione di funzioni, filtraggio e compressione di dati. . . Naturalmente
uno dei loro possibili usi è la classificazione: in particolare dato un training set etichettato
si può realizzare apprendimento supervisionato come spiegato in precedenza, impostando
gli input (valori delle feature) e gli output desiderati (le etichette). È però anche possibile
addestrare le reti in maniera non supervisionata, senza cioè fornire output desiderati: in
questi casi la rete si dovrà adattare in base ai risultati ottenuti nei vari passi di addestramento; in questo modo si possono realizzare operazioni di clustering (di cui parleremo
nella sezione 2.4).
2.3
Nearest Neighbor
L’algoritmo Nearest Neighbor è un metodo di classificazione supervisionato basato su
feature riconoscibili: a ciascuna feature viene assegnata una dimensione, in modo che
si formi uno spazio multidimensionale di feature. All’interno di questo spazio vengono
disegnate le feature estratte da un training set etichettato, in cui le classi sono note a
priori.
Completata questa fase di apprendimento, si analizzano i campioni da classificare: anche
da questi si estraggono le feature scelte, che vengono quindi confrontate con quelle del
training set nello spazio multidimensionale; un campione sarà assegnata alla classe del
“vicino più vicino”, appunto il nearest neighbor, solitamente usando la metrica di distanza
euclidea (ma altre scelte sono possibili).
È chiaro che l’algoritmo sarà tanto più oneroso quanto più grande è il training set e
quanto maggiore è il numero di feature considerate: si ha a che fare evidentemente con un
4
trade-off, perché un training set più ampio è tendenzialmente più rappresentativo, e un
alto numero di feature permette di discriminare meglio tra le possibili classi, ma a fronte
di questi vantaggi la complessità dei calcoli aumenta. Sono state quindi elaborate alcune
varianti dell’algoritmo, principalmente per ridurre il numero di distanze da calcolare: ad
esempio è possibile partizionare lo spazio di feature e misurare la distanza solo rispetto
ad alcuni dei volumi cosı̀ ottenuti.
K-nearest neighbor è una variante che determina i k elementi più vicini: ognuno di questi
“vota” per la classe cui appartiene, e il campione in esame verrà assegnato alla classe più
votata.
2.4
Clustering
Con il termine clustering si denota un famiglia di metodi non supervisionati in grado di
individuare raggruppamenti intrinseci (cluster ) tra i dati nello spazio multidimensonale, e
di creare in corrispondenza di tali raggruppamenti le classi. Queste classi sono inizialmente
incognite, e non è noto nemmeno il loro numero, cosa che rende il problema decisamente
complesso.
I metodi di clustering possono essere ricondotti a due famiglie:
• Clustering gerarchico: attraverso operazioni di tipo bottom-up o top-down organizza i dati in una sequenza innestata di gruppi che possono essere visualizzati come
un albero.
• Clustering partizionale: individua (solitamente attraverso algoritmi euristici iterativi) delle partizioni che minimizzano un dato criterio di clustering, ad esempio la
somma dei quadrati degli errori.
Comuni a entrambe le famiglie sono i criteri di clustering che si possono scegliere per
specificare il grado di ottimalità di ogni soluzione ammissibile; a seconda del criterio scelto
esistono poi vari algoritmi di clustering che forniscono una procedura per determinare le
soluzioni che lo ottimizzano. La maggior parte dei criteri di clustering sono definiti sulla
base delle due osservazioni seguenti: i pattern all’interno dello stesso cluster devono essere
tra loro più simili rispetto a pattern appartenenti a cluster diversi; i cluster sono costituiti
da nuvole di punti a densità relativamente elevata, separate da zone dove la densità è più
bassa. Tra i diversi criteri possibili:
• somma dei quadrati degli errori: minimizza i quadrati delle distanze dai centri
delle classi (detto anche criterio di minima varianza).
• altri criteri basati su varianza intraclasse: si tratta di una famiglia di metodi
tutti tesi a minimizzare la varianza all’interno delle classi.
• criteri basati su scattering: tendono a minimizzare la varianza intraclasse e allo
stesso tempo a massimizzare quella inter-classe.
2.4.1
Clustering gerarchico
Il clustering gerarchico opera in maniera simile al modo di eseguire classificazione in
tassonomia biologica, dove ad esempio gli insetti vengono gerarchicamente classificati
specializzandone le specie a partire da famiglie molto ampie fino a famiglie molto più
ridotte.
5
Gli algoritmi possono essere bottom-up (agglomerativi) o top-down (divisivi ). Nel primo
caso si parte cercando di aggregare singoli elementi e ad ogni passo (livello) si fondono in un
cluster gli elementi o i sotto-cluster che sono
tra loro più simili rispetto a un determinato
criterio. Nel secondo (più complesso e quindi
meno utilizzato) si parte con un singolo cluster
e ad ogni livello si suddividono in sotto-cluster
Figura 3: Clustering gerarchico
gli elementi più diversi. In entrambi i casi il
risultato può essere rappresentato attraverso un albero.
I metodi gerarchici (tra i più noti possiamo citare Single-Link e Complete-Link) sono nella pratica utilizzati soprattutto quando i pattern sono discretizzati e non appartengono
a uno spazio metrico. In tal caso infatti criteri di somiglianza “ad-hoc” possono essere
implementati per controllare l’aggregazione e la divisione.
2.4.2
Clustering partizionale
Gli algoritmi più comunemente utilizzati sono K-means (o la sua variante Fuzzy C-means)
e Expectation-Maximization (EM).
K-means Si tratta di un metodo molto semplice computazionalmente e altrettanto
semplice da implementare, che ottimizza il criterio “somma dei quadrati degli errori”.
Nella sua versione base, l’algoritmo può essere cosı̀ descritto:
- genera K cluster e determinane il centro; oppure genera direttamente K punti da
usare come centri dei cluster;
- assegna ciascun punto al cluster il cui centro è più vicino, in base al criterio di
distanza scelto (euclidea, Mahalonobis. . . );
- ricalcola i centri dei cluster come media delle coordinate di tutti i punti che vi
appartengono;
- ripeti finché il criterio di terminazione non è soddisfatto (in genere il criterio di
terminazione prevede che i centri rimangano costanti, e che quindi le partizioni non
cambino tra due passi successivi).
Questo algoritmo tende a convergere piuttosto rapidamente (è raro che occorrano più di
10 passi) e a fornire risultati piuttosto buoni, a patto di partire da una soluzione iniziale
ragionevole. K-means ha alcuni svantaggi: innanzitutto il numero di classi K deve essere
noto a priori; inoltre l’ottimizzazione è iterativa e locale, quindi si può avere convergenza
su un massimo locale della soluzione.
La variante fuzzy del K-means consente a un pattern di appartenere con un certo grado di
probabilità a diverse classi; questa variante fornisce a volte una convergenza più robusta
verso la soluzione finale, ma soffre in sostanza degli stessi problemi della versione standard
di K-means.
Diverse varianti sono state proposte per risolvere questi problemi: ad esempio per minimizzare il rischio di convergenza verso minimi locali l’algoritmo può essere eseguito tante
6
volte a partire da soluzioni iniziali diverse, casuali o magari prodotte da un metodo evoluzionistico (algoritmo genetico). Le tecniche di clustering validation (la determinazione
del numero di classi senza che questa informazione sia nota), invece, tendono a valutare a
posteriori la bontà delle soluzioni prodotte per diversi valori di K, e a sceglierne una sulla
base di un criterio di validazione che tenga conto sia della bontà della soluzione sia della
sua complessità.
Expectation-Maximization Il metodo di Expectation-Maximization si basa sull’ipotesi che i dati nello spazio siano stati generati da un mix di distribuzioni, cioè che ogni
classe abbia generato dati in accordo con una specifica distribuzione, ma al termine della
generazione i pattern appaiono come prodotti da un’unica distribuzione multi-modale.
Obiettivo del clustering attraverso EM è quello di risalire (a partire dai pattern del training set) ai parametri delle singole distribuzioni che li hanno generati. A tal fine si ipotizza
nota la forma delle distribuzioni e si assume, per semplicità, che esse siano tutte dello stesso tipo: il caso più frequente è quello di mix di s distribuzioni multinormali (gaussiane)
di cui si vogliono stimare dai dati i parametri di definizione.
EM è nato per il calcolo della massima verosomiglianza (maximum likelihood) nel caso in
cui i dati a disposizione X={x1 ,x2 ,...xn } siano incompleti a causa della mancanza di alcuni
valori Y={y1 ,y2 ,...yn }. Pertanto ogni pattern completo zi =[xi , yi ], i=1..n è costituito da
due parti di cui solo la prima è nota. In realtà in alcuni casi, ad esempio quando si devono
derivare i parametri delle distribuzioni gaussiane, i dati sono completi, ma le potenzialità
di EM vengono sfruttate per rendere trattabile la complessità della massimizzazione.
L’algoritmo consiste di due passi, che vengono ripetuti iterativamente fino a convergenza:
nel passo di Expectation viene calcolato il valore atteso del log likelihood completo:
log L(θ|Z) = log L(θ|X, Y ) = log P r(X, Y |θ)
a partire dal training set e da una stima iniziale dei parametri θ; nel passo di Maximization
viene calcolato il set di valori di parametri che massimizza il valore atteso ottenuto nel
passo di Expectation. Questo set di valori viene usato come stima di parametri nel
successivo passo di Expectation.
L’algoritmo converge sempre, ma corre il rischio di cadere in un ottimo locale; inoltre,
come per k-means, con alcune soluzioni iniziali si possono ottenere cattivi risultati, e non
è semplice determinare il numero ottimale di cluster se non sono noti a priori.
7
2.5
Altri tipi di classificatori
Esistono molte altre tipologie di classificatori; fra queste vale la pena di citare
Support Vector Machines e Discriminant
Analysis (DA).
SVM è un algoritmo per la classificazione
supervisionata che cerca di risolvere il problema di individuare l’iperpiano di separazione ottimo tra due classi, ovvero quell’iperpiano che separa, con il massimo margine, gli elementi di una classe da quelli
dell’altra, in modo da poter poi applicare
questo stesso iperpiano a nuovi campioni
che gli vengano sottoposti. Quando si ha Figura 4:
SVM ricerca l’iperpiano di
a che fare con classi linearmente separabili separazione ottimo
non sorgono particolari problemi; se invece
si tratta con classi non lineramente separabili bisogna usare una sorta di trucco, modificando l’algoritmo di SVM in modo che cerchi l’iperpiano in spazi di dimensionalità superiore:
se due classi non sono linearmente separabili nel nostro spazio multidimensionale, è però
probabile che lo siano se aumentiamo la dimensionalità. Inoltre è da notare il fatto che
SVM operi solo nel caso di due classi; esistono però alcuni sistemi che consentono di ottenere buoni risultati anche nel caso generico di n classi.
DA è un metodo per trovare la combinazione lineare di feature che meglio divide due o
più classi; può essere usata come un classificatore lineare, ma più spesso per la riduzione
di dimensionalità per una successiva classificazione: in questo caso il suo scopo è cercare di ottenere un set di feature più piccolo rispetto all’originale, ma che sia comunque
altrettanto rappresentativo, in modo da ridurre la complessità computazionale.
2.6
Multiclassificatori
Un multiclassificatore è un sistema in cui diversi classificatori sono utilizzati (normalmente
in parallelo, ma talvolta anche in cascata o in modo gerarchico) per eseguire la classificazione dei pattern; le decisioni dei singoli classificatori sono quindi fuse ad un qualche
livello della catena di classificazione.
Recentemente è stato dimostrato (teoricamente ma soprattutto nella pratica) che l’utilizzo di combinazioni di classificatori (in inglese multiclassifier, combination of classifiers,
classifier fusion) può migliorare, talvolta anche molto marcatamente, le prestazioni di un
singolo classificatore. Pertanto può essere opportuno, anziché spendere mesi per migliorare di un epsilon l’accuratezza del proprio classificatore, affiancare ad esso altri classificatori
basati su feature/algoritmi diversi. La combinazione è comunque efficace solo nel caso in
cui i singoli classificatori siano in qualche modo indipendenti tra loro, ovvero non commettano tutti lo stesso tipo di errori. L’indipendenza (o diversità) è normalmente ottenuta
cercando di:
• Utilizzare feature diverse per identificare i pattern
• Utilizzare algoritmi diversi per l’estrazione delle feature
• Utilizzare diversi algoritmi di classificazione
8
• Addestrare lo stesso algoritmo di classificazione su training set diversi (bagging)
• Insistere nell’addestramento di alcuni classificatori con i pattern più frequentemente
erroneamente classificati (boosting)
La combinazione dei classificatori può essere eseguita a livello di decisione o a livello di
confidenza.
2.6.1
Fusione a livello di decisione
Ogni singolo classificatore fornisce in output la propria decisione, che consiste della classe
cui ha assegnato il pattern e opzionalmente del livello di affidabilità della classificazione
eseguita (ovvero di quanto il classificatore si sente sicuro della decisione presa). Le decisioni possono essere tra loro combinate in diversi modi (schemi di voto, schemi basati su
ranking, . . . ).
Uno dei più noti e semplici metodi di fusione è la cosiddetta majority vote rule: ogni
classificatore vota per una classe, e il pattern viene assegnato alla classe maggiormente
votata; l’affidabilità del multi-classificatore può essere calcolata mediando le singole confidenze.
Nel borda count, invece, ogni classificatore produce una classifica o ranking delle classi
(dalla prima all’ultima) a seconda della probabilità che a ciascuna di esse appartenga il
pattern da classificare. I ranking vengono convertiti in punteggi che vengono tra loro sommati, e la classe con il più elevato punteggio finale è quella scelta dal multi-classificatore.
–prestazioni–
2.6.2
Fusione a livello di confidenza
Ogni singolo classificatore fornisce in output la confidenza di classificazione del pattern
rispetto a ciascuna delle classi, ovvero un vettore di dimensionalità s in cui l’i -esimo
elemento indica la probabilità di appartenenza del pattern alla classe i -esima. Diversi
metodi di fusione sono possibili, tra cui somma, media, prodotto, max, min.
Il metodo della somma è uno dei più noti e utilizzati per la sua robustezza: prevede di
eseguire la somma vettoriale dei diversi vettori confidenza, e di classificare il pattern sulla
base dell’elemento maggiore. Una variante molto efficace è quella della somma pesata,
dove la somma dei vettori confidenza è eseguita pesando i diversi classificatori in base
al loro grado di abilità: i gradi di abilità possono essere definiti in base alle singole
prestazioni dei classificatori, ad esempio in maniera inversamente proporzionale all’errore
di classificazione.
3
Applicazioni dei classificatori nel campo dell’analisi
di immagini
I classificatori possono essere utilizzati in diversi campi dell’analisi di immagini, a partire
dal semplice clustering di pixel fino a operazioni avanzate quali il riconoscimento di volti.
Tuttavia l’argomento è ancora campo di ricerca, e non esistono approcci standard o teorie
ben consolidate: ad esempio la scelta sul tipo di classificatore da utilizzare è più che altro
lasciata all’intuito o all’esperienza. Allo stesso modo scegliere un approccio statistico
piuttosto che uno sintattico ha in ogni caso pro e contro: l’approccio statistico può essere
più preciso e consente di avere un’indicazione probabilistica riguardo all’appartenenza a
9
una piuttosto che a un altra classe, ma è raro che la mole di dati coinvolta nell’analisi
di immagini possa essere trattata in tempi ragionevoli da un approccio di questo tipo;
viceversa, un approccio sintattico è più rapido, ma meno preciso e senza indicazione di
probabilità per l’appartenenza a una classe.
In generale è quindi possibile risolvere uno stesso problema con diversi tipi di classificatori,
e un certo classificatore può essere applicato a più operazioni; nei seguenti paragrafi
vedremo quindi alcune delle applicazioni più comuni per i classificatori, tenendo conto
che non sono necessariamente né le uniche né le migliori.
3.1
Classificazione a livello di pixel
Può essere utile applicare algoritmi di classificazione a basso livello, lavorando direttamente sulle caratteristiche (di colore e intensità) dei pixel che compongono un’immagine:
in questa situazione le dimensionalità in gioco non sono elevate, e si può quindi pensare
di utilizzare un classificatore Bayesiano.
Una possibile applicazione è il riconoscimento dei pixel che rappresentano la pelle. Utilizzando istogrammi e un training set sufficientemente ampio, è infatti possibile ricavare le
probabilità condizionali: la probabilità che, se abbiamo osservato un pixel di pelle, questo
sia un generico pixel x si può calcolare come la percentuale di pixel di pelle presenti nel
box1 del pixel x. Le probabilità a priori delle due classi (pelle/non pelle) sono facilmente
calcolabili come percentuale sul totale del training set, quindi come visto in precedenza
si riesce a ottenere la probabilità a posteriori per ciacsun pixel.
Un’applicazione simile può essere quella necessaria nell’analisi di un’immagine satellitare, per cercare di associare un pixel a un tipo di terreno (boscoso, coltivato, urbano. . . ).
Come detto in precedenza, non c’è un unico sistema per un’unico problema: in questo
caso infatti possiamo usare gli istogrammi e un classificatore bayesiano, ma potremmo
anche preferire apprendimento non supervisionato addestrando una rete neurale (in grado di rilevare relazioni non lineari), oppure usare direttamente l’algoritmo K-means per
clustering partizionale.
3.2
Segmentazione
Il più delle volte prendere in considerazione i singoli pixel non è sufficiente, dato che molti
tra i pixel presenti nell’immagine saranno potenzialmente inutili (ad esempio i pixel di
sfondo), e un’analisi completa porta a un forte degrado delle prestazioni. È desiderabile
riuscire a raggruppare i pixel correlati in una rappresentazione compatta, in modo da poter lavorare su un’immagine ad alto livello, prendendo in considerazione solo determinati
componenti.
Le caratteristiche desiderate per queste rappresentazioni tendono a essere sempre le stesse, indipendentemente dal campo specifico di applicazione: il numero di componenti in
un’immagine non dovrebbe essere elevato e i componenti dovrebbero essere rappresentativi degli oggetti presenti nella scena. Il processo di ottenere questi componenti è detto
segmentazione.
Il problema della segmentazione si presenta in contesti diversi, e si può quindi affrontare
in modi altrettando diversi. Ad esempio si parla di segmentazione quando si vuole “rias1
Ricordiamo che un istogramma divide uno spazio di colori (RGB, grayscale, . . . ) in una serie di
box. Ad esempio, per l’intensità in scala di grigio una possibile divisione in box può essere 0-64, 65-128,
129-192, 193-256.
10
sumere” il contenuto di un video, dividendolo in sequenze di frame simili e scegliendo un
frame rappresentativo per ogni sequenza: il video è cosı̀ riassunto da questi frame. In
questo caso si fa uso di algoritmi di Shot Boundary Detection per rilevare il cambiamento
di scena; algoritmi di questo tipo sono ad esempio implementati da codec di tipo MPEG-4
(quali DivX, XviD. . . ) per rilevare le posizioni migliori in cui inserire un key frame2 .
Un’ulteriore possibile applicazione della segmentazione è
il cosiddetto Background Subtraction (figura 5): si vuole identificare solo la parte di immagine rilevante, “sottraendo” i pixel che rappresentano lo sfondo, che non contiene informazioni utili, confrontando una serie di fotogrammi successivi della stessa scena, in cui lo sfondo può venire parzialmente coperto da oggetti in movimento.
Sempre grazie alla segmentazione si può cercare di rilevare la
Figura 5: Background Subtraction
presenza di una persona (problema tutt’ora aperto) considerandola come unione di più segmenti (braccia, gambe,
torso): nell’immagine questi segmenti corrisponderanno a regioni uniformi (se i vestiti
non hanno texture particolari), quindi sarà opportuno segmentare l’immagine cercando
zone dello stesso colore. Per identificare edifici in immagini satellitari si può segmentare l’immagine in regioni poligonali, cosı̀ come per il tracking di automobili in video di
sorveglianza stradale e di controllo del traffico; e per cercare di rilevare una determinata parte meccanica si può cominciare a cercarne le componenti, che il più delle volte
corrisponderanno a linee o cerchi.
L’approccio più naturale al problema della segmentazione è quello del clustering, dato che
il nostro scopo è rappresentare un’immagine in termini di cluster di pixel che hanno una
relazione tra loro, non solo a livello di caratteristiche intrinseche (colore, intensità. . . ) ma
anche spaziali (distanze, disposizioni nello spazio. . . ); possiamo quindi usare algoritmi di
clustering (gerarchici o partizonali). In particolare vengono spesso utilizzati sia K-means
che EM, visto che i metodi gerarchici faticano a gestire il grande numero di pixel presente
senza fare uso di qualche tecnica per “riassumere” i dati più significativi.
K-means può essere applicato scegliendo una determinata misura di distanza, ad esempio una che consideri sia il colore che la posizione di un pixel, in modo da suddividere
l’immagine nei suoi componenti principali; anche EM si può applicare in questo caso,
per ottenere segmentazione di colori o texture, ponendo il problema in termini di dati
mancanti. Si può ipotizzare che ogni pixel sia generato da una particolare distribuzione
di probabilità scelta fra N possibili (dove N è il numero di segmenti che compone l’immagine); ognuna di queste distribuzioni è una gaussiana con determinati parametri incogniti
2
Un key frame è un fotogramma che viene memorizzato nella sua interezza; i fotogrammi seguenti,
per risparmiare spazio, vengono definiti in funzione del keyframe, specificando quali pixel differiscono e
di quanto.
11
che vogliamo ricavare, in modo da poter risalire a quale segmento ha generato quale pixel,
ovvero ottenere una segmentazione dell’immagine.
Un altro modo per realizzare una segmentazione è tramite il model fitting, ovvero sostenere che un gruppo di pixel deve essere considerato un segmento in quanto appartiene
a un determinato modello, ad esempio una linea o una circonferenza. In questo caso il
modello è esplicito, e il livello di astrazione si alza: per esempio non è possibile cercare
gruppi di punti che formano una linea guardando solo alle relazioni tra coppie di punti, come avviene invece nel clustering puro. Tuttavia è possibile applicare una versione
modificata di K-means per il fitting di linee: anziché partire da K centri, si ipotizzano K
rette nell’immagine, e a ogni passo si associa un punto alla retta più vicina, ricalcolando
poi la retta come interpolazione dei punti. In maniera simile a quanto visto per la segmentazione, anche EM si può adattare al fitting di linee.
EM può però essere applicato anche nel caso di Motion Segmentation, cioè quando si vuole
determinare il movimento compiuto dai pixel confrontando due immagini successive: ci
saranno regioni dell’immagine che avranno compiuto lo stesso spostamento (in genere,
punti alla stessa distanza dalla telecamera si sposteranno allo stesso modo nell’immagine;
i punti dello sfondo si sposteranno di poco, quelli di oggetti in primo piano subiranno
spostamenti più significativi), e quindi si potranno identificare diversi Motion Fields, segmentando di fatto l’immagine.
Infine EM può essere anche usato nel Background Subtraction cui abbiamo accennato
in precedenza, ponendo il problema come un problema di dati mancanti; facciamo finta
che le immagini successive della nostra scena siano sempre lo stesso frame a cui è stato
aggiunto di volta in volta del rumore: in questo modo tutto ciò che è “rumore” non fa
parte dello sfondo, e usando i valori attesi dei dati mancanti possiamo ricostruire (e quindi
sottrarre) il background.
3.3
Object Recognition
L’altro campo che analizzeremo è quello dell’Object Recognition. Si tratta di un settore molto complicato, che include in realtà un gran numero di sottoproblemi e di diversi
approcci, in cui ancora non esistono standard o soluzioni generali veramente efficaci. I classificatori entrano spesso in gioco in questo contesto, alcune volte in maniera determinante,
altre volte facendo da supporto per ottimizzare altre tecniche.
3.3.1
Pose Consistency
Questo approccio cerca di riconoscere un oggetto nell’immagine ipotizzando un mappaggio tra le feature geometriche dell’oggetto e quelle visualizzate nell’immagine, stimando
quindi la posa dell’oggetto nell’ambiente. In particolare si definiscono frame groups quei
gruppi di feature considerati sufficientemente caratteristici, ad esempio tre punti, o tre
direzioni e un punto.
Un semplice algoritmo è il seguente: per ciascun frame group nell’oggetto e per ciascun frame group nell’immagine si usano le possibili corrispondenze per stimare una posa
dell’oggetto e ricostruirlo, riproiettandolo sull’immagine; se questa retroproiezione è consistente, abbiamo trovato l’oggetto nella posa ipotizzata. Chiaramente verrà scelta la posa
per cui l’aderenza della retroproiezione all’immagine è massima.
È chiaro che il numero di possibili corrispondenze da calcolare potrà essere piuttosto elevato: un sistema che si può usare per ridurlo è il Pose Clustering. In genere un oggetto
avrà molti frame group, e quindi ci saranno molte corrispondenze tra oggetto e immagine
12
che indicheranno la stessa posa. Viceversa, le corrispondenze errate, dovute a rumore,
indicheranno pose completamente diverse e isolate. Anziché verificare tutte le possibili
pose, si può quindi effettuare una sorta di clustering delle pose, andando ad analizzare
solo quelle più “votate”, cioè più frequenti nel corso dell’analisi.
In realtà questo sistema non si tratta di un vero e proprio classificatore, in quanto è un
semplice sistema di voto per ridurre l’albero di ricerca.
3.3.2
Template Matching
Nei problemi di Object Recognition capita di frequente di cercare oggetti dalla forma
semplice e contenuti stilizzati, quali ad esempio un volto umano (tendenzialmente un ovale al cui interno troviamo caratteristiche più o meno comuni: occhi, bocca, sopracciglia,
fronte. . . ): l’idea del template matching è verificare se l’oggetto è presente in tutte le finestre di una determinata dimensione (ad esempio rettangolare) all’interno di un’immagine.
Se non si conoscono grandezza e orientamento dell’oggetto, si può ruotare o scalare la
finestra di ricerca per tenerne conto (aumentando però i tempi di computazione).
I metodi più semplici di template matching prevedono una semplice correlazione a livello
di pixel tra un’immagine campione e la finestra di ricerca; in genere i risultati possono
essere buoni in casi molto specifici (condizioni di illuminazione costanti, stessa prospettiva sotto cui l’oggetto è inquadrato. . . ), ma in casi più generali è opportuno usare dei
classificatori addestrati con un buon numero di esempi.
La scelta del classificatore da usare è piuttosto ampia, ad esempio sono stati realizzati
rilevatori di volti usando reti neurali. In particolare, una prima rete neurale è usata per
stimare l’orientamento del volto, quindi una
seconda rete si occupa di trovare il volto vero
e proprio. Questo metodo funziona però solo con volti inquadrati frontalmente e in condizioni di illuminazione uniformi, che vanno
assicurate o al momento della ripresa o tramite postprocessing sull’immagine acquisita.
Figura 6: Riconoscimento di volti
Per poter individuare un generico oggetto, in
condizioni di illuminazione generica e da un
punto di vista qualunque è necessario un enorme numero di esempi, e il tempo di computazione non può che risentirne.
Una strada forse più promettente è quella di lavorare nello spazio delle feature. Usando
SVM, ad esempio, è stato ideato un algoritmo in grado di rilevare dei pedoni in immagini
urbane o comunque con sfondo generico.
Sempre nel campo del rilevamento di volti si è pensato all’utilizzo di multiclassificatori:
una cascata di classificatori che sfruttano la tecnica di boosting (vedi paragrafo 2.6) e
lavorano sulle cosiddette Haar-like features riescono a riconoscere con discreta rapidità la
presenza di un volto. La stessa tecnica si può estendere a un generico oggetto (ad esempio
un automobile).
Un’applicazione molto interessante è quella del riconoscimento real-time di una classe di
oggetti grazie a un “vocabolario visuale” appreso; l’apprendimento si basa su un set di
13
immagini segmentate ed etichettate3 , mentre il riconoscimento effettua clustering nello
spazio delle feature. Il rilevamento dell’oggetto è molto rapido e indipendente da illuminazione, punto di vista o colore. Altre informazioni e alcuni video dimostrativi sul sito di
Microsoft Research[3].
Un altro metodo di cui vale la pena parlare è il Principal Component Analysis: si tratta
di un “parente” del Discriminant Analysis, dato che è utilizzato per la riduzione dimensionale dello spazio delle feature. Usando PCA si ricavano nuove feature come funzioni
lineari delle originali; queste nuove feature occuperanno uno spazio dimensionale più ridotto, in cui è ad esempio possibile applicare un classificatore tipo Nearest Neighbor per
identificare un oggetto. L’idea di PCA è basata sul fatto che l’uomo è in grado di riconoscere un numero enorme di volti, evidentemente riuscendo a farlo solo sulla base di pochi
parametri; allo stesso modo PCA consente di ricavare da un’immagine delle Eigenpictures
(da Eigenvector, autovettore) che riassumono le informazioni più importanti dell’immagine. Questo sistema è stato applicato per l’identificazione di volti (non solo il rilevamento
di un volto, ma anche l’associazione del volto a una determinata persona) con risultati
piuttosto buoni, anche se a fronte di un training set di oltre 2500 immagini (con diverse
espressioni facciali, inquadrature, illuminazioni. . . ) per 16 individui.
3.3.3
Relational Matching
I Relational Matchers tentano di descrivere un oggetto in base alle relazioni tra template
caratteristici che lo compongono: anziché considerare un template unico, che risulterebbe
il più delle volte troppo complesso per essere riconosciuto direttamente, si considerano
template più ridotti che sono in qualche modo collegati tra loro: ad esempio anziché
cercare di riconoscere direttamente una faccia intera si possono localizzare speratamente
occhi, naso e bocca.
I possibili template rilevati vengono messi in relazioni con metodi probabilistici, incrementando di volta in volta l’“assemblato” complessivo: ad esempio si parte da quello che
si ritiene essere un occhio, dopodiché si aggiunge la bocca (se questa rispetta i vincoli
imposti dal modello), e cosı̀ via, fino a ottenere l’oggetto completo. In questa situazione
un classificatore addestrato su un gran numero di esempi può venire utilizzato per ridurre
il numero di ricerche da effettuare, eliminando a priori le ipotesi che non porteranno mai
a una ricostruzione sensata.
Il problema dell’approccio di Relational Matching è che difficilmente è in grado di gestire
oggetti complessi, dato che per ora questi sistemi funzionano abbastanza bene con oggetti semplici (quali appunto un volto), e sembra difficile riuscire a costruire matcher per
modelli più complicati.
3
Esiste anche un algoritmo, LOCUS, che pare possa funzionare con apprendimento non supervisionato,
cioè con immagini non etichettate.
14
4
Conclusioni
I classificatori trovano ampio uso in vari campi della computer vision, e molte volte vengono usati in congiunzione con altre tecniche (geometriche, probabilistiche) di analisi di
immagini, ad esempio per focalizzare l’analisi (riducendo il peso computazionale).
Finora non esistono standard o linee guida per quel che riguarda la scelta del tipo di
classificatore, né per la configurazione di uno specifico classificatore: in genere l’approccio
migliore è valutare la tipologia di problema e provare a utilizzare il tipo di classificatore
più adatto, eventualmente anche aggiustandolo e ottimizzandolo con un po’ di trial and
error.
Per quel che riguarda il processing real-time, molti dei classificatori e delle applicazioni visti richiedono una buona dose di computazioni, quindi non è semplice raggiungere
il tempo reale; d’altro canto buoni risultati sembrano ottenibili con multiclassificatori e
classificatori a cascata (si veda ad esempio questo paper su real-time object detection[4]).
Riferimenti bibliografici
[1] Eugene Charniak, Bayesian Networks without Tears
http://www.cs.ubc.ca/~murphyk/Bayes/Charniak_91.pdf
[2] Charles Elkan, Naive Bayesian Learning
reperibile su http://citeseer.ist.psu.edu/
[3] Microsoft Research Cambridge,
http://research.microsoft.com/vision/cambridge/recognition/default.htm
[4] Paul Viola, Michael Jones, Robust Real Time Object Detection
reperibile su http://citeseer.ist.psu.edu/
[5] Davide Forsyth, Jean Ponce, Computer Vision: a Modern Approach.
Prentice-Hall, 2003.
[6] Various Wikipedia entries
http://www.wikipedia.org
15