156 lines
No EOL
11 KiB
Markdown
156 lines
No EOL
11 KiB
Markdown
I fattori più importanti di un sistema biometrico sono l’accettabilità, l’affidabilità e l’accuratezza. l DNA, ad esempio, fornisce un’alta accuratezza e affidabilità ma una bassa accettabilità, in quanto il metodo di prelievo è sicuramente intrusivo. Le impronte digitali, invece, forniscono anch'esse buone prestazioni, ma possono spesso presentarsi in modo “parziale” e inoltre sono spesso associate ai ”criminali”. Il riconoscimento facciale invece è altamente accettato, in quanto siamo abituati a farci foto e a pubblicarle, ma l’accuratezza può diminuire drasticamente in casi non controllati.
|
||
Possibili problemi relativi a essa sono:
|
||
- Variazioni intrapersonali
|
||
- Similarità interpersonali
|
||
- PIE e A-PIE: posa, illuminazione ed espressione + invecchiamento
|
||
- Facilmente camuffabile: makeup, chirurgia plastica, occhiali, etc..
|
||
|
||
Steps:
|
||
- capture
|
||
- localizzazione
|
||
- cropping dei ROIs (regioni di interesse)
|
||
- normalizzazione
|
||
- feature extraction
|
||
- costruzione del template
|
||
|
||
#### Localizzazione della faccia
|
||
- Problema: data un'immagine o un video, rilevare la presenza di una o più facce e localizzarle nell'immagine
|
||
- Requisiti: deve funzionare indipendentemente da posizione, orientamento, dimensione, espressione, soggetti nell'immagine, illuminazione e sfondo.
|
||
|
||
##### Ci si può nascondere?
|
||
Secondo Adam Harvey, il punto chiave che i computer rilevano è il "nose bridge", o l'area tra gli occhi. Se si nascondono si può far credere al computer che non ci sia una faccia.
|
||
|
||
Approcci di diversa natura:
|
||
- **Basati su feature:** si individuano le feature principali di una faccia (ad esempio posizione occhi, posizione naso, etc..) e poi si possono verificare diverse proprietà di queste (es.: colore della pelle corretto o distanza tra naso e occhi entro una certa soglia)
|
||
- **Basati su immagine:** solitamente vengono utilizzati dei modelli di machine learning che imparano da immagini esemplificative.
|
||
|
||
> [!PDF|yellow] [[LEZIONE5_NEW_More about face localization.pdf#page=4&selection=56,0,61,0&color=yellow|LEZIONE5_NEW_More about face localization, p.4]]
|
||
> > pixels with the top 5 percent
|
||
>
|
||
> white compensation using Luma
|
||
|
||
|
||
|
||
#### Algoritmo A (Hsu):
|
||
- per prima cosa viene eseguita una "illumination compensation" per compensare il bilanciamento del bianco. Si prendono il 5% dei pixel più luminosi, e li si considera come bianco (255, 255, 255) trasformando gli altri pixel a sua volta. Questo è cruciale perché la tonalità della pelle dipende dall'illuminazione della scena!
|
||
|
||
- poi viene convertito lo spazio da RGB a YCbCr
|
||
- RGB non è percettivamente uniforme: colori RGB vicini tra loro potrebbero non essere percepiti come simili
|
||
![[Pasted image 20241023133231.png]]
|
||
(darker region may have dominant blue component, light region red).
|
||
|
||
|
||
- localizzazione della faccia basata sullo skin model (modello della pelle)
|
||
- due alternative:
|
||
- variance based segmentation
|
||
- il metodo più semplice è il thresholding method
|
||
- si considera il livello di grigio di ogni pixel, e sulla base della threshold si classificano con in due classi i pixel superiori e inferiori alla th
|
||
|
||
- La chiave è selezionare la threshold migliore
|
||
- può essere fatto con il maximum entropy method, il metodo di Otsu (massima varianza) o il clustering k-means
|
||
- Trovare la miglior Otsu method:
|
||
- si considera la th che minimizza la within class variance
|
||
|
||
- connected components
|
||
- con un modello di colore della pelle si identificano i pixel che corrispondono appunto a una gamma di colori della pelle. Questo modello quindi banalmente definisce un intervallo di colori tipicamente appartenenti alla pelle
|
||
- questi pixel vengono segmentati usando la varianza del colore locale
|
||
- si trovano le componenti connesse e si uniscono
|
||
- l'area risultante è dove si trova probabilmente la faccia (face candidate)
|
||
|
||
![[Pasted image 20241023135925.png]]
|
||
|
||
- Eye localization
|
||
- l'algoritmo cerca di localizzare gli occhi definendo due mappe:
|
||
- **Chrominance map:** si basa sull'idea che l'area attorno agli occhi ha dei valori alti della componente Cb e bassi della componente Cr: $EyeMapC = \frac{1}{3}[(C_B^2)+(C_R^2)+(\frac{C_b}{C_r})]$
|
||
- **Luminance map:** gli occhi contengono sia zone chiare che zone scure. Usando operatori morfologici come dilation e erosion si possono evidenziare.![[Pasted image 20241023140250.png]](nella formula il + indica dilation e il - erosion)
|
||
|
||
- chroma map is enhanced by histogram equalization
|
||
- le due mappe sono combinate insieme con un operatore AND, risultato:![[Pasted image 20241217025904.png]]
|
||
|
||
|
||
- Mouth localization
|
||
- Le componenti Cr sono più presenti delle Cb. La risposta a $\frac{Cr}{Cb}$ è bassa, mentre la risposta a $Cr^2$ è alta, come in immagine:![[Pasted image 20241217030157.png]]
|
||
|
||
- Face contour:
|
||
- ora che abbiamo identificato occhi e bocca, l'algoritmo considera tutti i triangoli candidati che si formano tra i due occhi e la bocca. Ogni triangolo viene verificato controllando:
|
||
- variazioni della luminanza e media del gradiente dell'orientamento delle aree di occhi e bocca
|
||
- geometria e orientamento del triangolo
|
||
- presenza di un contorno del viso attorno al triangolo
|
||
- viene assegnato uno score ad ogni triangolo e scelto quello con lo score maggiore
|
||
|
||
#### Algoritmo B (Viola - Jones)
|
||
Viola Jones rappresenta una vera e propria innovazione per quanta riguarda la localizzazione di una faccia all'interno di un’immagine. Essendo l’algoritmo basato su machine learning, il training di questo è avvenuto utilizzando un dataset personalizzato nel quale vengono etichettate immagini come positive nel caso in cui ci sia una faccia e come negative nel caso in cui non ve ne sia alcuna.
|
||
|
||
L'agoritmo image based usa un classifier inizialmente trainato con varie istanze delle classi da identificare (esempi positivi) e classi di immagini che non contengono nessun oggetto della classe (esempi negativi).
|
||
|
||
L'obiettivo del training è estrarre features dagli esempi e selezionare quelle più discriminative. Il modello costruito in modo incrementale e contiene le features.
|
||
|
||
L'algoritmo fa uso di:
|
||
- **Ada-Boosting** per la selezione di feature: vengono creati diversi weak classifier, uno per feature, e tramite adaptive boosting riusciamo a creare uno strong classifier composto da un subset di weak-classifier.![[Pasted image 20241023144725.png]]
|
||
|
||
AdaBoost è una tecnica di addestramento che ha lo scopo di apprendere la sequenza ottimale di classificatori deboli e i corrispondenti pesi.
|
||
Richiede un insieme di pattern di training {(x1,y1),(x2,y2),...,(xN,yN)}, dove yi ∈{-1,+1} è l’etichetta della classe associata al pattern. Inoltre durante l’apprendimento è calcolata e aggiornata una distribuzione di pesi [w1,w2,...,wN] associati ai pattern di training, wi è associato al pattern (xi, yi).
|
||
Dopo l’iterazione m, è assegnato ai pattern più difficili da classificare un peso w1(m) superiore, cosicché alla successiva iterazione m+1 tali pattern riceveranno un’attenzione maggiore.
|
||
|
||
un weak classifier è spesso un classifier lineare. Può essere comparato a una linea dritta.
|
||
![[Pasted image 20241024090856.png]]
|
||
in questo caso non va bene perché non tutti i rossi stanno dallo stesso lato. Nell'esempio è impossibile separare le due classi usando linee dritte.
|
||
p.s. non è un classifier a caso, è quello che in questo round ha il numero di errori minore.
|
||
|
||
![[Pasted image 20241024091151.png]]
|
||
Per trovare una classificazione che separa i sample problematici, incrementiamo i pesi.
|
||
![[Pasted image 20241024091235.png]]
|
||
questo classificatore separa correttamente i sample problematici
|
||
![[Pasted image 20241024091433.png]]![[Pasted image 20241024091446.png]]
|
||
![[Pasted image 20241024091511.png]]
|
||
|
||
##### Classifying faces with AdaBoost
|
||
Estraiamo feature rettangolari dalle immagini: le Haar features.
|
||
![[Pasted image 20241024092146.png]]
|
||
|
||
Quello che fa è calcolare: somma dell'intensità dei pixel che si trovano nell'area bianca) - somma dell'intensità dei pixel nell'area nera. Se il risultato dell’operazione è un numero grande allora vuol dire che con alta probabilità in quella porzione di immagine è presente la features identificata dal filtro (il filtro è uno dei quadrati sopra), dove ad esempio nel caso del B (nell'immagine sopra) sono angoli.
|
||
|
||
Per un immagine 24x24px, il numero di possibili rettangoli di features è 160'000!
|
||
Come si calcolano le Haar features? Possiamo usare AdaBoost per scegliere quali usare.
|
||
|
||
![[Pasted image 20241024092903.png]]
|
||
esempio molto stupido
|
||
|
||
![[Pasted image 20241024093000.png]]
|
||
esempio un po' meno stupido
|
||
|
||
Per ogni round di adaboost:
|
||
- proviamo ogni filtro rettangolare su ogni esempio
|
||
- scegliamo la threshold migliore per ogni filtro
|
||
- scegliamo la miglior combo filtro/threshold
|
||
- ricalcoliamo i pesi
|
||
Complessità computazionale: O(MNT)
|
||
- M filters
|
||
- N examples
|
||
- T thresholds
|
||
|
||
Le rectangular features possono essere valutate attraverso immagini integral il quale nome viene dato, in ambito computer vision, ad un algoritmo con annessa struttura dati chiamata Summed-Area table, la quale ci consente di calcolare l’area di una sottomatrice in tempo costante.
|
||
L'immagine integrale in posizione (x,y) è la somma del valore dei pixel sopra e a sinistra di (x,y):
|
||
$$II(x,y)=\sum_{x'<=x,y'<=y}I(x',y')$$
|
||
Usando integral image è possibile calcolare la somma dei valori dei pixel in ogni rettangolo:
|
||
![[Pasted image 20241024094223.png]]
|
||
|
||
Il singolo weak classifier dipende dai parametri $z_k$ (feature) e $t_k$ (threshold):
|
||
- per ogni feature scegliamo un valore di threshold che minimizza l'errore di classificazione
|
||
- si sceglie poi la feature con meno errore
|
||
|
||
Un solo classificatore robusto, per quanto elimini una grande porzione di sottofinestre che non contengono facce, non soddisfa i requisiti di applicazioni. Una possibile soluzione consiste nell'impiego di classificatori in cascata (cascade classifier), via via più complessi:
|
||
![[Pasted image 20241024095704.png]]
|
||
|
||
un classificatore per 1 sola feature riesce a passare al secondo stadio la quasi totalità dei volti esistenti (circa 100%) mentre scarta al contempo il 50% dei falsi volti.
|
||
Un classificatore per 5 feature raggiunge quasi il 100% di detection rate e il 40% di false positive rate (20% cumulativo) usando i dati dello stadio precedente.
|
||
Un classificatore per 20 feature raggiunge quasi il 100% di detection rate con 10% di false positive rate (2% cumulativo).
|
||
|
||
La localizzazione dei volti avviene analizzando sottofinestre consecutive (sovrapposte)
|
||
dell’immagine in input e valutando per ciascuna se appartiene alla classe dei volti:
|
||
![[Pasted image 20241024100002.png]]
|
||
|
||
#### Valutazione della localizzazione
|
||
- **Falsi positivi:** percentuale di finestre classificate come volto che in realtà non lo contengono
|
||
- **Facce non localizzate:** percentuale di volti che non sono stati individuati
|
||
- **C-ERROR** o Errore di localizzazione: distanza euclidea tra il reale centro della faccia e quello ipotizzato dal sistema, normalizzato rispetto alla somma degli assi dell’ellisse contenente il volto. |