vault backup: 2024-11-06 22:01:51

This commit is contained in:
Marco Realacci 2024-11-06 22:01:51 +01:00
parent 11262c71ec
commit cdc10ed7be
21 changed files with 207 additions and 24 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View file

@ -157,3 +157,76 @@ Questo metodo fa uso di grafi, nello specifico abbiamo per ogni soggetto una col
![[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.
È tipo una convoluzione ma molto più semplice.
![[Pasted image 20241106133301.png]]
Possiamo ottenere l'istogramma di questi valori e considerarlo come una feature.
Inoltre possiamo ottenere una misura di contrasto: (media valori dei pixel con valore maggiore del centrale) - (media valori dei pixel con valore minore del centrale)
![[Pasted image 20241106133935.png]]
Ottengo un'immagine LBP (grayscale) e un istogramma LBP.
L'immagine può banalmente poi essere usata come input di una deep network.
Si può estendere per RGB? Beh sì basta che ripeto il processo per ogni immagine e faccio la media dei 3 risultati, ma ci sono strategie migliori.
###### Versione migliorata
In questa versione scelgo io il numero di pixel vicini (P) e il loro raggio di distanza (R), il valore di un pixel $p_{c}$ si calcolerà quindi come:
$$LBP_{R,P}=\sum_{i=0}^{P-1}sign(p_{i}-p_{c})2^P$$
sign torna 1 se >= 0, altrimenti 0.
![[Pasted image 20241106134544.png]]
p.s. la rappresentazione come immagine LBP è possibile solo se P=8.
Un pattern viene detto **uniforme** se nella stringa binaria contiene al massimo due transizioni $0 \to 1$, $1 \to 0$. Questi rappresentano le informazioni essenziali e ci consentono di ridurre notevolmente il numero di punti da considerare riducendo la dimensionalità, dato che sono solo $P(P-1)+2$ su un totale di $P^2$ possibili pattern.
![[Pasted image 20241106135449.png]]
Da questo esempio si dovrebbe capire come le informazioni importanti alla fine siano tutte comprese nei pattern uniformi: ![[Pasted image 20241106135815.png]]
La seconda immagine contiene i pixel associati a pattern **uniformi**, la terza pixel associati a pattern **non uniformi**.
Come possiamo ottenere un vettore di features?
- l'immagine viene suddivisa in sotto-finestre, ottenendo una griglia $k \times k$
- per ogni sotto-finestra calcoliamo un istogramma (ad ogni bin corrisponde un pattern)
- il vettore finale viene costruito concatenando i $k^2$ istogrammi.
![[Pasted image 20241106140102.png]]
![[Pasted image 20241106140241.png]]
Le rotazioni modificano l'LBP.
### Classificazioni di sistemi di riconoscimento facciale
- **Metodi basati sull'apparenza della faccia (global/holistic appearance methods):** PCA, LDA, alcune reti neurali. Utilizzano l'immagine per intero invece di concentrarsi solo su alcune regioni, non perdendo informazioni da subito. Svantaggi: danno la stessa importanza ad ogni pixel, necessitano di alta correlazione tra training e test set, non performano bene su grandi variazioni PIE.
- **Metodi basati su feature locali:** EBGM, LBP. Sono robusti a varianze di posizione in quanto vengono prima individuati i punti da cui estrarre le feature, e inoltre sono computazionalmente veloci. Come principale svantaggio hanno la scelta a priori dei punti da cui estrarre le feature, se non sono molto discriminativi le performance saranno pessime.
- **Sistemi basati su grafi:** a ogni faccia è associato un grafo, dove ogni nodo corrisponde a punti discriminativi della faccia. Ottimi dal punto di vista di variazioni di posizione e illuminazione. Train e test molto lunghi.
- **Sistemi basati su immagini termografiche o a infrarossi:** ottimi per quanto riguarda variazioni di illuminazione, però richiedono attrezzatura adeguata e la temperatura misurata varia in base allo stato del soggetto. Molto sensibili ai movimenti.
- **Reti neurali:** mirano a simulare il modo in cui funzionano i neuroni del cervello. Ogni neurone è rappresentato da una funzione matematica, approccio ideale: usare un neurone per pixel ma richiede tantissimi neuroni. Quindi spesso si usa una rete per estrarre feature dall'immagine / comprimere l'immagine e poi una rete per la recognition effettiva. Sono molto robuste ma richiedono un training set molto grande. Altri possibili problemi: overfitting, overtraining (non generalizza), diventano inefficienti all'aumentare del numero di soggetti nel database.
###### Overfitting
Quando la rete ha troppi parametri rispetto alla dimensione dell'input.
###### Overtraining
Il sistema perde la capacità di generalizzare.
### Approcci Deep Learning: DeepFace di Facebook
Include una fase di allineamento.
- l'obiettivo della fase di allineamento è generale una faccia frontale a partire dall'immagine che può contenere facce con posizioni o angoli differenti. Il metodo proposto si basa dei "fiducial point" (punti estratti dalla faccia) per estrarre la fraccia frontale
- generazione della faccia 2D, che non è altro che la faccia croppata dall'immagine di partenza
- applicazione dei 67 fiducial point sull'immagine. Generazione di un modello 3D
- frontalizzazione della faccia
![[Pasted image 20241106142503.png]]![[Pasted image 20241106142523.png]]![[Pasted image 20241106142539.png]]
Le facce "frontalizzate" saranno l'input della rete neurale:
![[Pasted image 20241106142610.png]]
### Approcci Deep Learning: FaceNet di Google
Raggiunse il miglior risultato sul dataset Labeled Faces in the Wild e Youtube Face Database.
Fa uso di deep architectures come **ZF-Net** e **Inception Network**. Usa poi un metodo chiamato **triplet loss** come funzione loss per il training.
![[Pasted image 20241106143837.png]]
- normalizzazione least squares: riscala i vettori in modo che la loro norma L2 sia 1 (ogni vettore è diviso per la norma L2)
- la norma L2 calcola la distanza delle coordinate del vettore dall'origine dello spazio vettoriale, anche detta norma euclidea.
##### Triplet loss
ha l'obiettivo di rendere piccola la distanza al quadrato (squared distance) tra gli embedding di due immagini corrispondenti alla stessa identità, indipendentemente dalla posa o altre condizioni, e di rendere grande la distanza tra immagini corrispondenti a identità diverse.
![[Pasted image 20241106144314.png]]