vault backup: 2024-12-26 04:24:44

This commit is contained in:
Marco Realacci 2024-12-26 04:24:44 +01:00
parent 7192d14da1
commit 34d8577615
15 changed files with 697 additions and 146 deletions

View file

@ -40,7 +40,7 @@ riguarda la voice recognition
- Pecora: produce tratti biometrici che matchano bene con altri template di se stesso e male con quelli di altri soggetti (classe media)
- Capra: produce tratti biometrici che matchano poco con altri template di se stesso, aumentando cosı̀ i casi di FR
- Agnello: produce tratti biometrici che sono facilmente riproducibili da altri, aumentando cosı̀ i casi di FA nei suoi confronti
- Lupo: produce un matching score più alto rispetto alla media quando viene confrontato con template diversi dal suo, aumentando cosı̀ i FA.
- Lupo: produce un matching score più alto rispetto alla media quando viene confrontato con template diversi dal suo, aumentando così i FA.
La differenza è che gli agnelli sono facili da impersonare, i lupi sono forti a impersonare gli altri. Gli agnelli sono dal lato del gallery, i lupi dal lato del probe.

View file

@ -29,48 +29,56 @@ Approcci di diversa natura:
>
> white compensation using Luma
RGB is not a preceptually uniform space
- colors close to each other in RGB space may not be perceived as similar
RGB to YCrCb
![[Pasted image 20241023133231.png]]
Darker region may have dominant blue component, light region red.
Algoritmo A:
- variance-based segmentation
- the simplest method is thresholding
- we have an image I with L gray levels
- $n_i$ is the number of pixels with gray level $i$
- $p_i = \frac{n_i}{MxN}$ is the probability of gray level i
- we divide pixel in two classes C0 and C1 by a gray level t
- for each class we can compute mean and variance of gray level![[Pasted image 20241023135127.png]]
- connected components
- skin tone pixels are segmented using local color variance![[Pasted image 20241023135925.png]]
#### 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
The algorithm builds two different eye maps (chroma and luma)
- **Chrominance map:** its creation relies on the observation that the region around eyes is characterized by high values of Cb and low values of Cr: $EyeMapC = \frac{1}{3}[(C_B^2)+(C_R^2)+(\frac{C_b}{C_r})]$
- **Luminance map:** eyes usually contain both light and dark zones that can be highlighted by morphological operators (dilation and erosion with hemispheric structuring elements)![[Pasted image 20241023140250.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
The two maps are combined through AND operator
The resulting map undergoes dilation, masking and normalization to discard the other face regions and brighten eyes
Further operations allow to refine this map.
- chroma map is enhanced by histogram equalization
- le due mappe sono combinate insieme con un operatore AND, risultato:![[Pasted image 20241217025904.png]]
**Dilation**
The dilation operator takes two pieces of data as inputs. The first is the image which is to be dilated. The second is a (usually small) set of coordinate points known as a structuring element (also known as a kernel). It is this structuring element that determines the precise effect of the dilation on the input image.
**Erosion**
The erosion operator takes two pieces of data as inputs. The first is the image which is to be eroded. The second is a (usually small) set of coordinate points known as a structuring element (also known as a kernel). It is this structuring element that determines the precise effect of the erosion on the input image.
- 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]]
![[Pasted image 20241023141948.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
The algorithm analyzes all the triangles composed by two candidate eyes and a candidate mouth. Each triangle is verified by checking:
- Luma variations and average of the orientation gradient of the blobs containing eyes and mouth
- Geometry and orientation of the triangle
- Presence of a face contour around the triangle
#### Algoritmo B
#### Algoritmo B (Viola - Jones)
Viola Jones rappresenta una vera e propria innovazione per quanta riguarda la localizzazione di una faccia all'interno di unimmagine. Essendo lalgoritmo 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).
@ -81,7 +89,7 @@ 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} è letichetta della classe associata al pattern. Inoltre durante lapprendimento è calcolata e aggiornata una distribuzione di pesi [w1,w2,...,wN] associati ai pattern di training, wi è associato al pattern (xi ,yi).
Richiede un insieme di pattern di training {(x1,y1),(x2,y2),...,(xN,yN)}, dove yi ∈{-1,+1} è letichetta della classe associata al pattern. Inoltre durante lapprendimento è calcolata e aggiornata una distribuzione di pesi [w1,w2,...,wN] associati ai pattern di training, wi è associato al pattern (xi, yi).
Dopo literazione m, è assegnato ai pattern più difficili da classificare un peso w1(m) superiore, cosicché alla successiva iterazione m+1 tali pattern riceveranno unattenzione maggiore.
un weak classifier è spesso un classifier lineare. Può essere comparato a una linea dritta.

View file

@ -2,12 +2,13 @@
Nel riconoscimento facciale 2D abbiamo principalmente due problematiche da
risolvere:
- Costruzione di feature discriminative e rappresentative
- **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
- **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.
**Le facce possono essere rappresentate nell'image space:**
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). 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.pdf#page=7&selection=6,0,6,17&color=yellow|LEZIONE6_Face recognition2D, p.7]]
@ -15,7 +16,7 @@ come ad esempio i modelli di machine learning, diminuisce drasticamente la capac
>
> leggi le conseguenze
Un'alternativa è rappresentare un'immagine nel feature space:
**Un'alternativa è rappresentare un'immagine nel feature space:**
- Gabor filters
- discrete cosine transform (DCT)
- local binary pattern (LBP) operator
@ -23,6 +24,8 @@ Un'alternativa è rappresentare un'immagine nel feature space:
#### PCA
possibile soluzione al curse of dimensionality: PCA.
p.s. per una descrizione molto migliore di PCA guardate gli appunti di FDS. Poi tornate qui per Eigenfaces ;>
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*.
@ -67,7 +70,7 @@ Possibile soluzione: Fisherfaces, un'applicazione di FLD (Fisher's linear discri
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
Nell'immagine sotto 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.
@ -107,6 +110,8 @@ Dobbiamo massimizzare il rapporto tra la varianza tra classi e la varianza della
- 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]]
e poi si calcolano autovettori e autovalori sulla matrice $(S_{W})^{-1}S_{B}$, e si prosegue come PCA.
### 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
@ -133,33 +138,41 @@ provides a time-frequency representation of the signal. Fornisce tempo e frequen
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
- f: frequenza della sinusoide, controlla lo spessore delle strisce
- θ: 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.
- $\sigma_{x}$ e $\sigma_{y}$: Varianza della gaussiana.
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
Questa procedura, su immagini molto grandi, porta ad unalta dimensionalità ed è computazionalmente complessa; possibili soluzioni sono:
- Applicare il filtro su un subset di pixel, come ad esempio una griglia =⇒ dimensionalità ridotta, ma possibile perdita di informazioni salienti (dovuta a possibili rotazioni ad esempio)
Spiegato più semplicemente: faccio la convoluzione ma saltando un po' di pixel ogni volta (lo stride per chi conosce le CNN)
- Griglia fissa
- possiamo perdere punti importanti
- Griglia definita a mano in modo che i vertici sono vicini alle feature importanti, come gli occhi
- Applico il filtro su tutti i pixel, ma poi seleziono solo i punti con picchi di valori (con maggiore informazione) $\to$ problemi di allineamento.
#### 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
- gli archi (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
In questo modo considerando la posizione dei nodi e le label degli archi, il grafo modella la geometria del volto.
Face Bunch Graph: può rappresentare volti
label dei nodi: insiemi di jet (detti bunches) dei volti campione usati per costruire il FBG
label degli archi: distanze come detto prima
un volto è rappresentato come una combinazione di jet. Per ogni bunch si sceglie il jet più appropriato, una faccia nuova viene quindi rappresentata con i jet delle facce nel campione che più gli assomigliano, prendendo ad es. bocca da faccia 1, naso da faccia 2...
(un FBG fatto con 6 volti campione e 9 punti cardine può rappresentare fino a 6⁹ volti diversi :o)
![[Pasted image 20241031104206.png]]
![[Pasted image 20241031104526.png]]
oggi non lo usa nessuno.
#### LBP Local Binary Pattern
Lavora sempre su un kernel, ma il kernel è "trasparente". Lavora pixel epr pixel e ci aiuta ad estrarre informazioni riguardo le texture all'interno di un'immagine (utile anche per antispoofing). Nella sua prima versione va a considerare una griglia 3x3 dove a ognuno dei quali viene assegnato un valore binario: se il suo valore era maggiore del pixel centrale viene assegnato 1, altrimenti 0. Effettuando questa operazione con un ordine di processo dei vicini (parto dal vicino in alto a sinistra ad es.) si ottiene una stringa binaria, il cui valore convertito in decimale viene assegnato al pixel centrale. Sarà il valore del pixel nella nuova immagine.
Lavora sempre su un kernel, ma il kernel è "trasparente". Lavora pixel per pixel e ci aiuta ad estrarre informazioni riguardo le texture all'interno di un'immagine (utile anche per antispoofing). Nella sua prima versione va a considerare una griglia 3x3 dove a ognuno dei quali viene assegnato un valore binario: se il suo valore era maggiore del pixel centrale viene assegnato 1, altrimenti 0. Effettuando questa operazione con un ordine di processo dei vicini (parto dal vicino in alto a sinistra ad es.) si ottiene una stringa binaria, il cui valore convertito in decimale viene assegnato al pixel centrale. Sarà il valore del pixel nella nuova immagine.
È tipo una convoluzione ma molto più semplice.
![[Pasted image 20241106133301.png]]

View file

@ -125,14 +125,16 @@ Un tool per generare il modello 3D di una faccia usando il morphing è
#### iso-Geodesic Stripes
i modelli facciali 3D non sono sensibili all'illuminazione e alla posa, ma sono molto sensibili alle espressioni facciali (più delle immagini 2D). Per cui espressioni diverse possono causare grosse variazioni.
La distanza geodetica è il percorso più breve tra due punti.
La distanza geodetica è il path più breve che congiunge due punti in uno spazio curvo, quindi il path non è una linea dritta ma segue l'andamento curvilineo dello spazio.
- le distanze geodetiche non sono molto affette dalle variazioni dell'espressione
- la geometria delle regioni convesse della faccia sono poco affette dalle variazioni dell'espressione, rispetto alle regioni concave.
- Degli studi hanno dimostrato che le distanze euclidee e geodetiche e l'angolo tra 47 fiducial points sono sufficienti per catturare tutte le informazioni rilevanti. Il problema è riconoscere e estrarre questi punti.
In questo approccio tutti i punti della faccia sono presi in considerazione, le informazioni rilevanti sono codificate in un grafo, riducendo così il problema del face recognition al matching di grafi. Ogni nodo nel grafo rappresenta iso-geodesic facial stripes di uguale o crescente distanza dalla punta del naso.
Gli archi tra le coppie di nodi sono annotati con descrittori noti come 3D Weighted Walkthroughs (3DWWs) che catturano the mutual spatial displacement between all the pairs of points of the corresponding stripes and show smooth changes of their values as the positions of face points change. his representation has the great advantage of a very efficient computation of face descriptors and a very efficient matching operation for face recognition.
In questo approccio tutti i punti della faccia sono presi in considerazione, le informazioni rilevanti sono codificate in un grafo, riducendo così il problema del face recognition al matching di grafi. Ogni nodo nel grafo rappresenta iso-geodesic facial stripes (strisce composte dai punti che hanno la stessa distanza geodetica dalla punta del naso, vedi figura) di uguale o crescente distanza dalla punta del naso.
Gli archi sono arricchiti con **3D Weighted Walkthroughs (3DWWs)**, descrittori che catturano spostamenti (displacement) spaziali tra punti corrispondenti delle strisce. I 3DWWs sono robusti rispetto alle deformazioni delle espressioni.
È molto efficiente.
![[Pasted image 20241107104144.png]]
strisce iso-geodetiche

View file

@ -9,7 +9,7 @@ L'attacco di spoofing può essere:
### Face spoofing
si classificano in attacchi di spoofing 2D e 3D
- **Print/photo attack:** viene presentata un'immagine del soggetto da identificare. Questo attacco può essere facilmente iderntificato (cambia il modo in cui riflette la luce ecc., LBP viene d'aiuto), oppure possiamo rilevare cose tipo il battito delle ciglia...
- **Print/photo attack:** viene presentata un'immagine del soggetto da identificare. Questo attacco può essere facilmente identificato (cambia il modo in cui riflette la luce ecc., LBP viene d'aiuto), oppure possiamo rilevare cose tipo il battito delle ciglia...
- **Video attack:** (o replay attack) viene presentato un video. Anche qui viene usato LBP nel tentativo di prevenire l'attacco
- **Maschera facciale:** viene prodotta una maschera 3D. Un modo per prevenirlo è vedere come la luce riflette sulla pelle (la plastica della maschera rifletterà in modo un po' diverso)

View file

@ -1,4 +1,10 @@
- numero di dataset usati
- dimensione immagini
- dimensione probe/gallery
- numero e livello di variazioni tollerate
- numero e livello di variazioni tollerate
#### argomenti da rivedere
- iso geodesic stripes
- recognition reliability
- crf