master-degree-notes/Biometric Systems/notes/6. Face recognition 2D.md

12 KiB
Raw Blame History

!Pasted image 20241030133828.png

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 allinterno di immagini digitali, che vengono rappresentate da matrici a due dimensioni (w × h) oppure vettori unidimensionali (d = w × h). Lalta 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

!Pasted image 20241030142613.png da questo otteniamo l'elemento medio: !Pasted image 20241030142635.png

problema: bisogna avere tutte le facce ben centrate!!

!Pasted image 20241030142717.png 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. !Pasted image 20241030142934.png !Pasted image 20241030143149.png

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 !Pasted image 20241030144246.png 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}}\}, dove P_{i} è una classe di cardinalità m_{i}
  • cerchiamo di ottenere uno scalare y proiettando il sample x su una linea, in modo che y=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})| !Pasted image 20241031085606.png 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}}\}, dove P_{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}} con y=w^Tx e la dispersione (scatter) della classe proiettata P_{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 funzione J(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!Pasted image 20241031091853.png

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!Pasted image 20241031100207.png
  • 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. !Pasted image 20241031102321.png

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 unonda piana sinusoidale.

[!PDF|yellow] LEZIONE6_Face recognition2D, p.43

An example of filters: Gabor filters

guarda dalle slide

!Pasted image 20241031102640.png

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 laltezza della striscia; più è grande più laltezza 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 unalta 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 !Pasted image 20241031104206.png !Pasted image 20241031104526.png

oggi non lo usa nessuno.