Eigenfaces: Humans from Ghosts

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

Having more by having less… Easy! Met deze methode voor machinaal leren kunt u meer informatie opslaan in kleinere formaten, met slechts enkele basisbeginselen van lineaire algebra. Op die manier kunnen we menselijke gezichten herstellen uit wat spookachtige rommel.

U is vast wel eens verteld dat onafhankelijke vectoren op abstracte wijze ruimtes creëren. Stel je nu eens voor. Alle ruimten worden gevormd door de vectoren en zo ook de dingen binnen die ruimten. Sommige van die vectoren dragen meer bij aan sommige dingen dan de andere. De andere zijn misschien verwaarloosbaar naast hen en misschien hoeven we daar niets van te weten omdat het ons in feite niet kan schelen en we hun problemen niet met ons mee willen dragen. Dit is precies wat ik u in deze post zal laten zien over eigenfaces.

Figuur #2: niet deze ruimte maar ook deze ruimte (bron: https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn)

Onze hoofdonderwerp is PCA. Het is een veelgebruikt algoritme in verschillende onderwerpen. Het gebruik ervan op gezichten maakt het meer interpreteerbaar voor mensen, zodat het een van de meest populaire toepassingen is. Eigenfaces is een methode die nuttig is voor gezichtsherkenning en -detectie door de variantie van gezichten in een verzameling gezichtsbeelden te bepalen en die varianties te gebruiken om een gezicht te coderen en te decoderen op een machine-learning manier zonder de volledige informatie, waardoor de complexiteit van berekening en ruimte wordt verminderd. Hoewel deze methode voor het eerst werd gebruikt in 1991 door Turk en Pentland en beperkingen heeft in vergelijking met de technologie van vandaag, zijn de grondbeginselen ervan nog steeds zeer nuttig voor nieuwe praktijken.

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

Voordat we overgaan tot de implementatie, wil ik u eerst een kleine inleiding geven over de genoemde basisconcepten. Ook kunt u het volledige script en de dataset (een klein deel van LFW_cropped) die ik heb gebruikt hier vinden.

Eigenvectoren en Eigenwaarden

We weten allemaal hoe eigenvectoren en eigenwaarden precies werken. Misschien niet precies, maar we hebben er wel vaak van gehoord. Hier is een uitleg voor de minderheid, zoals ik, die het steeds vergeet.

Laten we een vierkante matrix A nemen. Bijna alle vectoren veranderen van richting als ze met A worden vermenigvuldigd, zoals we verwachten. Er zijn echter bepaalde vectoren x die precies dezelfde richting hebben als Ax. Dus… raad eens? Dat zijn onze eigenvectoren. Speciale vectoren… Zelfs als ze in dezelfde richting staan, kunnen Ax en x nog steeds twee verschillende vectoren zijn door hun magnitudes. Hier is een bekende gelijkheid. Ax=λx. Wat die twee gelijk maakt is λ, onze magnitudesalaris, eigenwaarde. Deze vertelt ons hoe onze eigenvector is veranderd na de vermenigvuldiging

U kunt uit het bovenstaande opmaken waarom ze in de praktijk nuttig zijn. Ga voor een dieper begrip en waarschijnlijk een hogere waardering naar het hoofdstuk Eigenwaarden en Eigenvectoren van MIT.

Principal Component Analysis (PCA)

Het belangrijkste doel van PCA is vermindering van de dimensionaliteit. Het heeft vele toepassingen in visualisatie, feature-extractie, gegevenscompressie, enz. Het idee erachter is de oorspronkelijke gegevens lineair te projecteren op een lagere dimensionale deelruimte die de hoofdcomponenten (eigenvectoren) de maximale variantie van de geprojecteerde gegevens en/of de kleinste vervormingsfout van de projectie biedt. Uiteindelijk leiden beide tot hetzelfde resultaat, namelijk de beste reconstructieformule. Terzijde: deze subruimte wordt principal subspace genoemd.

Voor berekeningen van het maximaliseren van de variantie en het minimaliseren van de vervormingsfout, kunt u terecht in ANU’s lecture notes over PCA. Ook een andere video op youtube genaamd Principal Components Analysis -Georgia Tech-Machine Learning hielp me de concepten veel beter te begrijpen.

Implementatie

Ok! Iedereen klaar voor de implementatie. Eerst importeren we de benodigde bibliotheken. Ik neem aan dat jullie allemaal weten waar die voor zijn. Ik zal me concentreren op het uitleg gedeelte van de algoritmen. Als je andere vragen hebt over de code, laat dan hieronder een reactie achter.

Dan hebben we een functie nodig om de afbeeldingen uit onze dataset op een goed uitziende manier te visualiseren. Hier is het.

Laten we het op onze dataset lfwcrop_grey.zip zetten. Hier neem ik alleen de eerste 1000 gezichten vanwege de computationele complexiteit, maar het maakt echt niet uit. Als je er vol voor wilt gaan, ga er dan voor. Ik heb de afbeeldingen ook getransformeerd in numpy array (vorm 1000, 64, 64) voor verwerking.

Leave a Reply