Figura #2: non questo spazio ma anche questo spazio (fonte: https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn) Il nostro argomento principale è la PCA. È un algoritmo ampiamente utilizzato in una varietà di soggetti. Usarlo sui volti lo rende più interpretabile dall’uomo, quindi è una delle applicazioni più popolari. Eigenfaces è un metodo che è utile per il riconoscimento e la rilevazione dei volti determinando la varianza dei volti in una collezione di immagini di volti e utilizzare tali varianze per codificare e decodificare un volto in un modo di apprendimento automatico senza l’intera informazione riducendo la complessità di calcolo e di spazio. Anche se è stato usato per la prima volta nel 1991 da Turk e Pentland e ha dei limiti rispetto alla tecnologia di oggi, le sue basi sono ancora molto utili per le nuove pratiche.
Figura #3: LFW (fonte: http://vis-www.cs.umass.edu/lfw/Six_Face_Panels_sm.jpg)
Prima di passare all’implementazione, vorrei darvi una piccola introduzione sui concetti base menzionati. Inoltre, potete trovare lo script completo e il dataset (una piccola frazione di LFW_cropped) che ho usato qui.
Eigenvettori e autovalori
Tutti sappiamo come funzionano esattamente gli autovettori e gli autovalori. Forse non esattamente, ma ne abbiamo sentito parlare molte volte. Ecco una spiegazione per la minoranza come me che continua a dimenticare.
Abbiamo una matrice A quadrata. Quasi tutti i vettori cambiano direzione quando sono moltiplicati per A, come ci aspettiamo. Tuttavia, ci sono alcuni vettori x che hanno esattamente la stessa direzione di Ax. Quindi… indovinate un po’? Sono i nostri autovettori. Quelli speciali… Anche se sono nella stessa direzione, Ax e x potrebbero ancora essere due vettori diversi per le loro grandezze. Ecco un’uguaglianza familiare. Ax=λx. Ciò che rende questi due uguali è λ, il nostro scalare equalizzatore di grandezza, l’autovalore. Questo ci dirà come il nostro autovettore è cambiato dopo la moltiplicazione
Da quanto sopra, si può capire perché sono utili nella pratica. Per una comprensione più profonda e probabilmente apprezzamento, vai al capitolo autovalori ed autovettori del MIT.
Analisi delle componenti principali (PCA)
L’obiettivo principale della PCA è la riduzione della dimensionalità. Ha molte applicazioni nella visualizzazione, estrazione di caratteristiche, compressione di dati, ecc. L’idea alla base è quella di proiettare linearmente i dati originali su un sottospazio di dimensione inferiore che offre ai componenti principali (autovettori) la massima varianza dei dati proiettati e/o il minimo errore di distorsione dalla proiezione. Alla fine, entrambi portano allo stesso risultato che è la migliore formula di ricostruzione. Come nota a margine, questo sottospazio è chiamato sottospazio principale.
Per i calcoli sulla massimizzazione della varianza e la minimizzazione dell’errore di distorsione, potete andare alle note della lezione ANU sulla PCA. Inoltre, un altro video su youtube chiamato Principal Components Analysis -Georgia Tech-Machine Learning mi ha aiutato a capire molto meglio i concetti.
Implementazione
Ok! Tutti pronti per l’implementazione. Per prima cosa, importeremo le librerie necessarie. Presumo che tutti sappiate a cosa servono. Mi concentrerò sulla parte di spiegazione degli algoritmi. Se avete altre domande sul codice, lasciate una risposta qui sotto.
Allora, abbiamo bisogno di una funzione per visualizzare le immagini dal nostro set di dati in un bel modo. Eccola qui.
Mettiamola sul nostro dataset lfwcrop_grey.zip. Qui, prendo solo le prime 1000 facce a causa della complessità computazionale, ma non ha davvero importanza. Se volete fare il tutto esaurito, allora fate pure. Ho anche trasformato le immagini in array numpy (a forma di 1000, 64, 64) per l’elaborazione.
Leave a Reply