Eigenfaces: Recovering Humans from Ghosts

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

Mieć więcej, mając mniej… Łatwizna! Ta metoda uczenia maszynowego pomoże Ci przechowywać więcej informacji w mniejszych rozmiarach, wykorzystując jedynie podstawy algebry liniowej. Dzięki temu odzyskamy ludzkie twarze z niektórych bałaganów w kształcie duchów.

Musisz mieć powiedziane, że niezależne wektory tworzą przestrzenie w abstrakcyjny sposób. Teraz wyobraź sobie, że to się dzieje naprawdę. Wszystkie przestrzenie są tworzone przez wektory i tak samo rzeczy wewnątrz tych przestrzeni. Niektóre z tych wektorów przyczyniają się do niektórych rzeczy bardziej niż inne. Inne mogą być poza nimi nieistotne i być może nie musimy o nich wiedzieć, ponieważ w zasadzie nas nie obchodzą i nie chcemy nosić ich problemów ze sobą. To jest właśnie to, co pokażę Ci zrobić z powierzchniami własnymi w tym poście.

Rysunek #2: nie ta przestrzeń, ale i ta przestrzeń (źródło: https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn)

Naszym głównym tematem jest PCA. Jest to algorytm szeroko stosowany w różnych dziedzinach. Użycie go na twarzach sprawia, że są one bardziej interpretowalne przez człowieka, więc jest to jedna z najpopularniejszych aplikacji. Eigenfaces jest metodą, która jest przydatna do rozpoznawania i wykrywania twarzy poprzez określenie wariancji twarzy w kolekcji obrazów twarzy i wykorzystanie tych wariancji do kodowania i dekodowania twarzy w sposób uczenia maszynowego bez pełnej informacji, zmniejszając złożoność obliczeniową i przestrzenną. Chociaż metoda ta została po raz pierwszy użyta w 1991 roku przez Turka i Pentlanda i ma ograniczenia w porównaniu z dzisiejszą technologią, jej podstawy są nadal bardzo korzystne dla nowych praktyk.

Figura #3: LFW (źródło: http://vis-www.cs.umass.edu/lfw/Six_Face_Panels_sm.jpg)

Przed przejściem do implementacji, chciałbym dać ci małe wprowadzenie na temat podstawowych pojęć, o których wspomniałem. Ponadto, możesz znaleźć pełny skrypt i zbiór danych (mały ułamek LFW_cropped), którego użyłem tutaj.

Wektory własne i wartości własne

Wszyscy wiemy jak dokładnie działają wektory własne i wartości własne. Może nie dokładnie, ale słyszeliśmy o nich, jak, wiele razy. Oto wyjaśnienie dla mniejszości takich jak ja, którzy ciągle zapominają.

Mamy kwadratową macierz A. Prawie wszystkie wektory zmieniają kierunek, gdy są mnożone przez A, tak jak się spodziewamy. Istnieją jednak pewne wektory x, które mają dokładnie taki sam kierunek jak Ax. Więc… Zgadnij co? To są nasze wektory własne. Specjalne… Nawet jeśli są w tym samym kierunku, Ax i x wciąż mogą być dwoma różnymi wektorami przez ich wielkości. Oto znana równość. Ax=λx. To co sprawia, że te dwa są równe to λ, nasz skalar wyrównujący wielkości, wartość własna. To powie nam, jak nasz wektor własny zmienił się po mnożeniu

Z powyższego, można powiedzieć, dlaczego są one przydatne w praktyce. Dla głębszego zrozumienia i prawdopodobnie docenienia przejdź do MIT’s Eigenvalues and Eigenvectors Chapter.

Principal Component Analysis (PCA)

Głównym celem PCA jest redukcja wymiarowości. Ma ona wiele zastosowań w wizualizacji, ekstrakcji cech, kompresji danych itp. Idea PCA polega na liniowym rzutowaniu oryginalnych danych na podprzestrzeń o niższym wymiarze, oferując głównym składowym (wektorom własnym) maksymalną wariancję rzutowanych danych i/lub minimalny błąd zniekształcenia projekcji. Ostatecznie, oba prowadzą do tego samego wyniku, który jest najlepszym wzorem rekonstrukcji. Jako notatka boczna, ta podprzestrzeń jest nazywana główną podprzestrzenią.

Do obliczeń maksymalizacji wariancji i minimalizacji błędu zniekształcenia, możesz przejść do notatek wykładowych ANU na temat PCA. Również inny film na youtube o nazwie Principal Components Analysis -Georgia Tech-Machine Learning pomógł mi zrozumieć koncepcje znacznie lepiej.

Implementation

Ok! Wszyscy gotowi do implementacji. Po pierwsze, zaimportujemy wymagane biblioteki. Zakładam, że wszyscy wiecie do czego one służą. Ja skupię się na części wyjaśniającej algorytmy. Jeśli masz jakieś inne pytania dotyczące kodu, zostaw odpowiedź poniżej.

Potem potrzebujemy funkcji do wizualizacji obrazów z naszego zbioru danych w dobrze wyglądający sposób. Oto ona.

Ułóżmy ją na naszym zbiorze danych lfwcrop_grey.zip. Tutaj, biorę tylko pierwsze 1000 twarzy z powodu złożoności obliczeniowej, ale to naprawdę nie ma znaczenia. Jeśli chcesz iść do pełnego domu, to idź na to. Przekształciłem również obrazy w tablicę numpy (kształt 1000, 64, 64) do przetwarzania.

Leave a Reply