Fațe proprii: Recuperarea oamenilor de la fantome

Figura #1: Casper the Friendly Ghost (sursa: https://vignette.wikia.nocookie.net/christmasspecials/images/e/e8/Casper.jpg/revision/latest?cb=20121014033319)

Având mai mult prin a avea mai puțin… Ușor! Această metodă de învățare automată vă va ajuta să stocați mai multe informații în dimensiuni mai mici, cu doar câteva noțiuni de bază de algebră liniară. Prin aceasta, vom recupera fețele umane din niște mizerii în formă de fantomă.

Ce probabil vi s-a spus, vectorii independenți creează spații în mod abstract. Acum, imaginați-vă pe bune. Toate spațiile sunt formate de vectori și la fel și lucrurile din interiorul acestor spații. Unii dintre acești vectori contribuie la unele lucruri mai mult decât la altele. Ceilalți pot fi neglijabili pe lângă ei și poate că nu trebuie să știm despre aceștia pentru că, practic, nu ne pasă și nu vrem să purtăm problemele lor cu noi. Este exact ceea ce vă voi arăta să faceți cu privire la suprafețele proprii în această postare.

Figura 2: nu acest spațiu, ci și acest spațiu (sursa: https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn)

Subiectul nostru principal este PCA. Este un algoritm utilizat pe scară largă în varietate de subiecte. Folosirea lui pe fețe le face mai ușor de interpretat de către oameni, astfel încât este una dintre cele mai populare aplicații. Eigenfaces este o metodă care este utilă pentru recunoașterea și detectarea fețelor prin determinarea varianței fețelor într-o colecție de imagini de fețe și utilizarea acestor varianțe pentru a codifica și decodifica o față într-un mod de învățare automată fără informații complete, reducând complexitatea calculului și a spațiului. Chiar dacă a fost utilizat pentru prima dată în 1991 de Turk și Pentland și are limitări în comparație cu tehnologia actuală, elementele sale de bază sunt încă foarte benefice pentru noile practici.

Figura #3: LFW (sursa: http://vis-www.cs.umass.edu/lfw/Six_Face_Panels_sm.jpg)

Înainte de a trece la implementare, aș dori să vă fac o mică introducere despre conceptele de bază menționate. De asemenea, puteți găsi scriptul complet și setul de date (o mică parte din LFW_cropped) pe care l-am folosit aici.

Eigenvectors and Eigenvalues

Cunoaștem cu toții cum funcționează exact vectorii proprii și valorile proprii. Poate nu exact, dar am auzit de ele de foarte multe ori. Iată o explicație pentru minoritatea care, ca mine, tot uită.

Să avem o matrice pătrată A. Aproape toți vectorii își schimbă direcția atunci când sunt înmulțiți cu A, așa cum ne așteptăm. Cu toate acestea, există anumiți vectori x care au exact aceeași direcție cu Ax. Așadar… Ghiciți ce? Aceștia sunt vectorii noștri proprii. Cei speciali… Chiar dacă au aceeași direcție, Ax și x pot fi totuși doi vectori diferiți prin mărimile lor. Iată o egalitate cunoscută. Ax=λx. Ceea ce îi face pe cei doi egali este λ, scalarul nostru egalizator de magnitudine, valoarea proprie. Aceasta ne va spune cum s-a schimbat vectorul nostru propriu după înmulțire

Din cele de mai sus, vă puteți da seama de ce sunt utile în practică. Pentru o înțelegere mai profundă și, probabil, o apreciere mai profundă, mergeți la capitolul Eigenvalues and Eigenvectors de la MIT.

Analiza componentelor principale (PCA)

Principalul obiectiv al PCA este reducerea dimensionalității. Ea are multe aplicații în vizualizare, extragerea caracteristicilor, comprimarea datelor etc. Ideea din spatele acesteia este de a proiecta liniar datele originale pe un subspațiu dimensional mai mic care oferă componentelor principale (vectori proprii) varianța maximă a datelor proiectate și/sau eroarea minimă de distorsiune a proiecției. În cele din urmă, ambele conduc la același rezultat, care este cea mai bună formulă de reconstrucție. Ca o notă secundară, acest subspațiu se numește subspațiu principal.

Pentru calculele de maximizare a varianței și de minimizare a erorii de distorsiune, puteți accesa notele de curs ale ANU despre PCA. De asemenea, un alt videoclip de pe youtube numit Principal Components Analysis -Georgia Tech-Machine Learning m-a ajutat să înțeleg mult mai bine conceptele.

Implementare

Ok! Toată lumea este pregătită pentru implementare. În primul rând, vom importa bibliotecile necesare. Presupun că știți cu toții pentru ce sunt ele. Eu mă voi concentra pe partea de explicare a algoritmilor. Dacă aveți alte întrebări despre cod, lăsați un răspuns mai jos.

Apoi, avem nevoie de o funcție care să vizualizeze imaginile din setul nostru de date într-un mod arătos. Iat-o.

Să o punem pe setul nostru de date lfwcrop_grey.zip. Aici, am luat doar primele 1000 de fețe din cauza complexității de calcul, dar chiar nu contează. Dacă doriți să faceți totul, atunci dați-i drumul. De asemenea, am transformat imaginile în matrice numpy (în formă 1000, 64, 64) pentru procesare.

.

Leave a Reply