Eigenfaces : Récupérer les humains à partir des fantômes
Avoir plus en ayant moins… Facile ! Cette méthode d’apprentissage automatique vous aidera à stocker plus d’informations dans des tailles plus petites avec seulement quelques bases d’algèbre linéaire. Par cela, nous récupérerons des visages humains à partir de certains désordres en forme de fantômes.
On a dû vous dire, les vecteurs indépendants créent des espaces de manière abstraite. Maintenant, imaginez pour de vrai. Tous les espaces sont formés par les vecteurs et les choses à l’intérieur de ces espaces le sont aussi. Certains de ces vecteurs contribuent à certaines des choses plus que les autres. Les autres peuvent être négligeables à côté d’eux et peut-être n’avons-nous pas besoin de les connaître parce que nous ne nous en soucions pas et ne voulons pas porter leurs problèmes avec nous. C’est exactement ce que je vous montrerai à faire à propos des faces propres dans ce post.
Notre sujet principal est l’ACP. C’est un algorithme largement utilisé dans une variété de sujets. L’utiliser sur des visages les rend plus interprétables par l’homme, c’est donc l’une des applications les plus populaires. Eigenfaces est une méthode qui est utile pour la reconnaissance et la détection des visages en déterminant la variance des visages dans une collection d’images de visages et en utilisant ces variances pour coder et décoder un visage dans une méthode d’apprentissage automatique sans l’information complète réduisant la complexité du calcul et de l’espace. Même si elle a été utilisée pour la première fois en 1991 par Turk et Pentland et qu’elle présente des limites par rapport aux technologies actuelles, ses bases sont toujours très bénéfiques pour les nouvelles pratiques.
Avant de passer à la mise en œuvre, j’aimerais vous donner une petite introduction sur les concepts de base mentionnés. Aussi, vous pouvez trouver le script complet et le jeu de données (une petite fraction de LFW_cropped) que j’ai utilisé ici.
Eigenvectors and Eigenvalues
Nous savons tous comment les vecteurs propres et les valeurs propres fonctionnent exactement. Peut-être pas exactement mais nous en avons entendu parler, genre, plusieurs fois. Voici une explication pour la minorité comme moi qui continue à oublier.
Avons une matrice A carrée. Presque tous les vecteurs changent de direction lorsqu’ils sont multipliés par A, comme nous nous y attendons. Cependant, il y a certains vecteurs x qui ont exactement la même direction que Ax. Alors… Devinez quoi ? Ce sont nos vecteurs propres. Des vecteurs spéciaux… Même s’ils ont la même direction, Ax et x peuvent encore être deux vecteurs différents par leurs magnitudes. Voici une égalité familière. Ax=λx. Ce qui rend ces deux-là égaux est λ, notre scalaire égalisateur de magnitude, valeur propre. Cela nous dira comment notre vecteur propre a changé après la multiplication
De ce qui précède, vous pouvez dire pourquoi ils sont utiles dans la pratique. Pour une compréhension plus profonde et probablement une appréciation, allez au chapitre sur les valeurs propres et les vecteurs propres du MIT.
Analyse en composantes principales (ACP)
Le but principal de l’ACP est la réduction de la dimensionnalité. Elle a de nombreuses applications en visualisation, extraction de caractéristiques, compression de données, etc. L’idée sous-jacente est de projeter linéairement les données originales sur un sous-espace de dimension inférieure offrant aux composantes principales (vecteurs propres) une variance maximale des données projetées et/ou une erreur de distorsion minimale de la projection. Au final, les deux conduisent au même résultat qui est la meilleure formule de reconstruction. En passant, ce sous-espace est appelé sous-espace principal.
Pour les calculs de maximisation de la variance et de minimisation de l’erreur de distorsion, vous pouvez aller sur les notes de cours de l’ANU sur l’ACP. En outre, une autre vidéo sur youtube intitulée Principal Components Analysis -Georgia Tech-Machine Learning m’a aidé à comprendre les concepts beaucoup mieux.
Implémentation
Ok ! Tout le monde est prêt pour la mise en œuvre. Tout d’abord, nous allons importer les bibliothèques nécessaires. Je suppose que vous savez tous à quoi elles servent. Je vais me concentrer sur la partie explication des algorithmes. Si vous avez d’autres questions sur le code, laissez une réponse ci-dessous.
Puis, nous avons besoin d’une fonction pour visualiser les images de notre ensemble de données d’une manière agréable à regarder. La voici.
Mettons-la sur notre jeu de données lfwcrop_grey.zip. Ici, je ne prends que les 1000 premiers visages à cause de la complexité de calcul mais cela n’a pas vraiment d’importance. Si vous voulez faire le tour de la question, allez-y. J’ai également transformé les images en tableau numpy (shaped 1000, 64, 64) pour le traitement.
Leave a Reply