12 KiB
Nel riconoscimento facciale 2D abbiamo principalmente due problematiche da risolvere:
- Costruzione di feature discriminative e rappresentative
- difficile avere una separazione lineare tra classi
- in certi casi dobbiamo combinare classificatori lineari (AdaBoost) o usare classificatori non lineari (molto più complesso)
- Costruzione di un classificatore che possa generalizzare anche su oggetti mai visti nel training
In questo caso quindi ci troviamo a rappresentare le facce all’interno di immagini digitali, che vengono rappresentate da matrici a due dimensioni (w × h) oppure vettori unidimensionali (d = w × h). L’alta dimensionalità dei dati (es.: immagine 100 × 100 ha dimensione 10000) ci porta subito a un primo problema, ovvero il “Curse of dimensionality”: quando la dimensionalità aumenta, il volume dello spazio aumenta cosı̀ velocemente che i dati diventano sparsi/radi, rendendo difficile la classificazione. La sparsità dei dati, nel momento in cui vengono utilizzati strumenti statistici come ad esempio i modelli di machine learning, diminuisce drasticamente la capacità predittiva di questi in quanto si hanno bisogno di tanti più esempi per generalizzarne le regole predittive.
[!PDF|yellow] LEZIONE6_Face recognition2D, p.7
Some consequences
leggi le conseguenze
Un'alternativa è rappresentare un'immagine nel feature space:
- Gabor filters
- discrete cosine transform (DCT)
- local binary pattern (LBP) operator
- fractal encoding
PCA
possibile soluzione al curse of dimensionality: PCA. Metodo statistico che consente di ridurre l'alta dimensionalità di uno spazio mappando i dati in un altro spazio con dimensionalità decisamente più piccola minimizzando la perdita di informazioni. Vengono individuati dei nuovi assi, ortogonali tra loro, su cui proiettare i dati che però ne massimizzano la varianza. L'ortogonalità di questi ci permette di escludere componenti correlate tra loro che risultano quindi ridondanti. Nello spazio delle immagini, i principali componenti sono ortogonali quando sono gli autovettori della matrice di covarianza.
L'obiettivo è di eliminare features con varianza molto bassa, che quindi sono comuni tra tutti i sample e poco utili a discriminare classi.
Calcoliamo l'optimal k Dato un training set TS di m sample di n dimensioni, calcoliamo
- il vettore medio
\hat{x}
del training set\hat{x}=\frac{1}{m}\sum_{i=1}^{m}x_{i}
- matrice di covarianza C
C=\frac{1}{m}\sum_{i=1}^m(x_{i}-\hat{x})(x_{i}-\hat{x})^T
- la dimensione di C è (n x n)
- il nuovo spazio k-dimensionale è dato dalla matrice di proiezione dove le colonne sono i k autovettori di C, corrispondenti ai k autovalori di C. Plottando gli autovalori possiamo ottenere la varianza lungo gli autovettori.
[!PDF|red] LEZIONE6_Face recognition2D, p.14
PCA and Eigenfaces
esempio
!
da questo otteniamo l'elemento medio:
!
problema: bisogna avere tutte le facce ben centrate!!
!
autovettori (completamente diverse da quelle di partenza se ci facciamo caso)
dobbiamo estrarre quelle
Proiezione: eseguita moltiplicando la matrice di proiezione trasposta 𝜑_{k}^T
per il vettore originale.
!
!
Problemi di PCA
- mancanza di potere discriminativo
- la separazione degli autovettori dipende anche dalle differenze intra-classe
- ma il sistema è unsupervised learning
- in in presenza di variazioni PIE, il modello potrebbe usare quelle come componenti facciali e non essere quindi in grado di separare correttamente le classi
Possibile soluzione: Fisherfaces, un'applicazione di FLD (Fisher's linear discriminant), spesso menzionato nel contesto del Linear Discriminant Analysis (LDA).
LDA
Alcuni dei problemi di PCA possono essere dati dal fatto che lavoriamo su dati in una maniera unsupervised (non supervisionata), ovvero senza tenere in considerazione le classi dei vari sample. Una soluzione supervised è proposta da LDA, ovvero un metodo simile a PCA ma che minimizza la distanza intra-classe e cerca di massimizzare invece la distanza tra classi.
Nell'immagine la riduzione è da 2 a 1 dimensioni. In alcuni casi tipo questo non basta ridurre da due a un asse, gli assi sono ruotati per massimizzare la separazione tra classi. L'importante è che le coordinate rimangano ortogonali tra loro
!
the best subspace is better cause we are able to separate class among the 1D axis. As we can see, in the worst one, we are definitely not able to.
Possibile approccio
- partiamo, come nel PCA, da un set di m sample di n dimensioni.
- a differenza del PCA, splittiamo il set in base ai label che rappresentano le classi
PTS=\{P_{1},P_{2},{_{3},\dots,P_{s}}\}
, doveP_{i}
è una classe di cardinalitàm_{i}
- cerchiamo di ottenere uno scalare
y
proiettando il samplex
su una linea, in modo chey=w^Tx
- chiaramente x è un punto nell'immagine 2D
- y è il punto proiettato invece nel nuovo spazio 1D
Consideriamo due classi P_1
e P_{2}
, rispettivamente con m_{1}
e m_{2}
vettori ciascuna
- consideriamo i vettori medi di ogni classe nei due spazi:
\mu_{i}=\frac{1}{m_{i}}\sum_{j=1}^{m_{i}}x_{j}
- nel nuovo spazio si avrà (la tilde indica che è nel nuovo spazio)
\tilde{}\mu_{i}=\frac{1}{m_{i}}\sum_{j=1}^{m_{i}}y_{j}=\frac{1}{m_{i}}\sum_{j=1}^{m_{i}}w^Tx_{j}=w^T\mu_{i}
- possiamo scegliere la distanza dai vettori medi proiettati (quindi nel nuovo spazio) come una funzione che chiaramente vogliamo cercare di massimizzare
J(w)=|\tilde{\mu_{1}}-\tilde{\mu_{2}}|=|w^T(\mu_{1}-\mu_{2})|
!in questo caso però notiamo come in un asse abbiamo un'ottima separabilità tra classi, nell'altro abbiamo una distanza maggiore tra i due vettori medi. E mo come cazzo famo? Proviamo a cercare un metodo migliore
Scattering matrices
Dobbiamo prendere in considerazione lo spread tra le classi. Dobbiamo massimizzare il rapporto tra la varianza tra classi e la varianza della singola classe
- varianza della singola classe
- indica come i vettori sono distribuiti/dispersi rispetto al centro della stessa classe
- varianza tra classi
- indica come i centri sono distribuiti rispetto al centro di tutto (ok si potrebbe spiegare meglio ma so le 9:00
Approccio
-
partiamo, come nel PCA, da un set di m sample di n dimensioni.
-
a differenza del PCA, splittiamo il set in base ai label che rappresentano le classi
PTS=\{P_{1},P_{2},{_{3},\dots,P_{s}}\}
, doveP_{i}
è una classe di cardinalitàm_{i}
-
per ogni classe
P_{i}
calcoliamo il vettore medio e la "media dei medi"$$\mu_{i}=\frac{1}{m_{i}}\sum_{j=1}^{m_{i}}x_{j}$$\mu_{TS}=\frac{1}{m}\sum_{i=1}^{S}m_{i}\mu_{i}
-
calcoliamo la matrice di covarianza per la classe
{P_{i}}
C_{i}=\frac{1}{m_{i}}\sum_{j=1}^{m_{i}}(x_{j}-\mu_{i})(x_{j}-\mu_{i})^T
-
ora possiamo calcolare scatter matrix whithin-class (della stessa classe)
S_{W}=\sum_{i=1}^Sm_{i}C_{i}
-
scatter matrix tra classi $$S_{B}=\sum_{i=1}^Sm_{i}(\mu_{i}-\mu_{TS})(\mu_{i}-\mu_{TS})^T$$per due classi è anche definita come
(\mu_{1}-\mu_{2})(\mu_{1}-\mu_{2})^T
-
le stesse definizioni sono valide anche nel nuovo spazio con
\tilde{S_{W}}
e\tilde{S_{B}}
cony=w^Tx
e la dispersione (scatter) della classe proiettataP_{i}
è definito come\tilde{s_{i}}^2=\sum_{y \in P_{i}}(y-\tilde{\mu_{i}})^2
la somma di tutti gli\tilde{s_{i}}^2
(di tutte le classi) è la within-class scatter (dispersione tra classi) -
adesso vogliamo massimizzare la differenza tra i vettori medi, normalizzati secondo una misura della dispersione della singola classe (within-class scatter)
-
con due classi, è definita come la funzione lineare
w^Tx
che massimizza la funzioneJ(w)=\frac{{|\tilde{\mu_{1}}-\tilde{\mu_{2}}|^2}}{\tilde{s_{1}}²+\tilde{s_{2}}^2}
-
cerchiamo una proiezione dove sample della stessa classe sono proiettati molto vicini tra loro, ma con i valori medi delle classi il più possibile lontani tra loro!
Feature spaces
- possiamo estrarre feature applicando filtri o trasformazioni alle immagini
- possiamo usare uno dei metodi appena descritti se le feature estratte hanno una dimensionalità alta Quali sono le migliori feature da estrarre? Vediamo alcuni operatori
Bubbles
- un osservatore umano può subito ipotizzare il genere, l'identità, l'età e l'espressione guardando una faccia
- l'esperimento consiste nel mostrare l'immagine con sopra un pattern a bolle e vedere se l'osservatore umano e un sistema biometrico riescono a classificarlo bene!
- alla fine dell'esperimento riusciamo a capire quali sono gli elementi (le features quindi) della faccia che vengono prese in considerazione da un essere umano o che un sistema biometrico utilizza per classificare
Wavelet
provides a time-frequency representation of the signal. Fornisce tempo e frequenza contemporaneamente.
!
Gabor filters
È un filtro lineare utilizzato in applicazioni di edge detection, analisi di texture e estrazione di feature, e si pensa che sia simile al sistema percettivo visivo di noi umani. Un Gabor filter 2D non è altro che un kernel Gaussiano modulato da un’onda piana sinusoidale.
[!PDF|yellow] LEZIONE6_Face recognition2D, p.43
An example of filters: Gabor filters
guarda dalle slide
Un feature vector viene ricavato eseguendo varie convoluzioni con un insieme Gabor filter (Gabor filter bank) con diversi orientamenti e scale (nell'immagine sull'asse x troviamo gli orientamenti e su y le scale)
Otteniamo quindi diversi filtri andando a cambiare i parametri:
- λ: frequenza, controlla lo spessore della striscia; più è grande più sarà spessa
- θ: orientamento, controlla la rotazione della striscia ed è espresso come un angolo
- γ: aspect ratio, controlla l’altezza della striscia; più è grande più l’altezza diminuirà
- σ: larghezza di banda, controlla la scala generale determinando anche il numero di strisce; aumentando questo valore avremo più strisce con meno distanza tra loro.
Questa procedura, su immagini molto grandi, porta ad un’alta dimension- alità; possibili soluzioni sono:
- Applicare il filtro su un subset di pixel, come ad esempio una griglia =⇒ dimensionalità ridotta, ma possibile perdità di informazioni salienti (dovuta a possibili rotazioni ad esempio)
- Applico il filtro su tutti i pixel, ma poi seleziono solo i punti con picchi di valori =⇒ problemi di allineamento
Ma come facciamo la convoluzione?
- Griglia fissa
- possiamo perdere punti importanti
- Griglia definita a mano in modo che i vertici sono vicini alle feature importanti, come gli occhi
EBGM Elastic Bunch Graph Matching
Questo metodo fa uso di grafi, nello specifico abbiamo per ogni soggetto una collezione di grafi (per questo il nome “bunch”), uno per ogni posa, dove:
- i vertici (edges) sono labellati (pesati) con la distanza tra i nodi
- i nodi contengono un insieme di risultati di diversi gabor filter (in genere 5 differenti frequenze e 8 diversi orientamenti), conservati in questa struttura chiamata “Jet”, e sono posizionati in punti importanti come ad esempio naso, occhi e bocca
!
!
oggi non lo usa nessuno.