Kraków, 2015-06-28 Bartłomiej Bajdo Wojciech Czajkowski Rozpoznawanie płci na podstawie zdjęć twarzy Projekt na przedmiot: Analiza i Przetwarzania Obrazów 1 Cel projektu Celem projektu było napisanie programu, który na podstawie podanych zdjęć potrafi rozpoznać płeć osób przedstawionych na tych zdjęciach. 2 Teoria 2.1 Opis problemu Analiza obrazów jest ostatnimi czasy bardzo szeroką i popularną dziedziną nauki. Nic dziwnego z obrazów można wyciągnąć bardzo dużą liczbę danych. Człowiek intuicyjnie jest w stanie określić co jest przedstawione na zdjęciu. Wie czy obraz przedstawia wydarzenie sportowe, portret człowieka czy groźną scenę zabójstwa. Przy rosnącej liczbie zdjęć, nagrań (szczególnie z kamer miejskich) nauczenie komputera tego samego aby umiał zinterpretować zdjęcia i wyciągnął z nich najważniejsze dane stanowi coraz bardziej popularną dziedzinę nauki. Liczba problemów i zadań jakie można powierzyć analizie obrazów jest w zasadzie nieskończona - można wyszukiwać pewne obiekty oraz znajdować pewne zależności między nimi. Popularną dziedziną jest również przetwarzanie obrazów np. próba ich wyostrzenia. W niniejszej pracy chcielibyśmy skupić się nad jednym z zagadnień rozpoznawaniem płci na podstawie zdjęć twarzy. Jest to jeden z problemów związanych z analizą ludzkiej twarzy, która to jest młodą dziedziną i w zasadzie codziennie przynosi nowe rozwiązania. Przykładem może być choćby aplikacja http://how-old.net/. Aplikacja ta na podstawie zdjęcia twarzy wylicza przybliżony wiek człowieka. Powstała ona w tym roku i szybko zdobyła dużą popularność. Nasz przypadek wykrywania płci, może poza zabawą przydać się również w innych celach. Obecnie zbieranie wszelkich informacji o potencjalnym kliencie jest bardzo powszechne. Aplikacje wykorzystujące algorytmy rozpoznawania płci znajdują szerokie zastosowanie przy pozyskiwaniu informacji demograficznych czy wspomaganiu marketingu. Szukając informacji o użytkownikach portalu, na którym chcemy umieścić spersonalizowane reklamy możemy również wykorzystać zdjęcia. Nie na każdym portalu wymagane jest umieszczenie takiej informacji, a nazwy użytkowników często nic nie mówią o płci. 2.2 Koncepcja rozwiązania Nasz problem ma bardzo ciekawą własność. Ludzie intuicyjnie potrafią rozpoznawać płcie na podstawie twarzy. W praktyce jednak poza takimi detalami jak np. broda ciężko stwierdzić dokładnie co tak naprawdę wyróżnia obie płcie i co wpływa na wynik klasyfikacji. Nie oznacza to jednak, że 1
ogolony mężczyzna stanowi duży problem klasyfikacji dla ludzkiego mózgu. Przyjrzyjmy się poniższemu obrazkowi: Rys 1. Porównanie twarzy żeńskiej i męskiej. Intuicyjnie widzimy, że prawdopodobnie z lewej strony znajduje się kobieta, a z prawej mężczyzna. Obrazki są jednak dość podobne i tylko małe detale potrafią wpłynąć na wynik klasyfikacji. Człowiek intuicyjnie przez lata życia nauczył się, jakie to są detale i jak rozróżniać płcie. Postaramy się wykorzystać tę informację i podobnie jak człowieka, nauczyć komputer kto jest kim. Pomysł opiera się na przekazaniu odpowiedniego zbioru danych zdjęć wraz z określeniem dla każdego z nich jaka jest to płeć. Taki zbiór nazywamy zbiorem uczącym. Następnie przekazane zostaną zdjęcia bez określenia płci komputer na podstawie zbioru uczącego sam powinien zaklasyfikować te zdjęcia czyli wykonać zasadniczą część naszego problemu. Ten zbiór nazywamy zbiorem testującym. Komputer będzie wyszukiwał podobieństw poszczególnych obrazów ze zbioru testującego do obrazów ze zbioru uczącego i na tej podstawie będzie określał płeć. Jeśli większość podobnych obrazów będzie określonej płci, to istnieje duża szansa że to zdjęcie będzie także tej płci. Należy przy tym jednak dodatkowo pamiętać, że aby algorytm był jak najbardziej skuteczny powinniśmy porównywać same twarze. Branie pod uwagę takich rzeczy jak tło może spowodować, że gdy kobiety ze zbioru uczącego będą miały prześwietlone zdjęcia, a mężczyźni zbyt ciemne to algorytm całkowicie polegnie. Dodatkowo ważne jest, że na podstawie zbioru uczącego można mniej więcej wyznaczyć, które cechy najbardziej wyróżniają obie płcie. Porównywanie podobieństw między obrazkami ze zbioru testującego i uczącego powinno następować wyłącznie w obrębie tych cech, a nie całej twarzy. Nasz problem można więc podzielić na następujące podproblemy: Wykrycie twarzy na zdjęciach (zignorowanie tła itp.) Nauczenie komputera, które cechy twarzy wpływają na płeć. Znajdowanie najbardziej podobnych obrazów do danego pod względem cech wyróżniających obie płcie. 2.3 Pojęcia podstawowe Do rozwiązania przedstawionych podproblemów powstały już pewne narzędzia matematyczne. Są one wykorzystywane w różnych dziedzinach, również w analizie obrazów. Principal Component Analysis (PCA) jest to jedna ze statystycznych metod analizy czynnikowej. Jest jedną z najczęściej wykorzystywanych technik rzutowania w problemie rozpoznawania twarzy. 2
Wykorzystuje się ją do zmniejszenia rozmiaru zbioru danych statystycznych poprzez odrzucenie najmniej istotnych czynników. PCA opiera się na zapisaniu zbioru danych wejściowych w postaci macierzy X, gdzie każda kolumna posiada informacje o danym obrazie. Na podstawie tej macierzy możemy stworzyć macierz kowariancji równą X*X T, a jej główne składowe możemy wyliczyć poprzez rozwiązanie równania: R T (XX T )R = A, gdzie A jest macierzą diagonalną wartości własnych, a R jest macierzą obrotu oryginalnych współrzędnych do wektorów własnych. W typowym podejściu wykorzystuję się tylko n pierwszych wektorów własnych, co powoduje przyspieszenie obliczeń. Co więcej, osie o małej wariancji często są po prostu tłem z szumem, który należy wyeliminować. Linear Discriminant Analysis (LDA) podobnie jak metoda PCA służy do rzutowania wielowymiarowych danych do podprzestrzeni z mniejszą liczbą wymiarów. Wykorzystywana jest do znalezienia liniowej kombinacji cech, które najlepiej rozróżniają dwie lub więcej klas obiektów (np. różnice między kobietą, a mężczyzną). Skupia się przede wszystkich na znalezieniu różnic pomiędzy klasami obiektów, co różni ją od PCA. Algorytm najbliższych sąsiadów (k-nn) wykorzystywany jest zarówno w statystyce do prognozowania wartości pewnej zmiennej losowej, jak i do klasyfikacji. Polega on na zaliczeniu badanego obiektu do tej klasy, do której należy większość jego k najbliższych sąsiadów. Miarą podobieństwa obiektów zazwyczaj jest odległość między nimi. 2.4 Pełny obraz rozwiązania oraz warunki początkowe Aplikacja opiera się na zasadzie, że najpierw trzeba nauczyć program jak wyglądają osoby danej płci, a następnie należy wprowadzić zdjęcia, które chcemy sklasyfikować. Do procesu nauki wykorzystano metodę analizy głównych składowych (PCA) oraz metodę liniowej analizy dyskryminacyjnej (LDA). Natomiast do procesu klasyfikacji wykorzystano znaną metodę najbliższych sąsiadów (k-nn). W celu otrzymania rozwiązań o wysokiej skuteczności klasyfikacji należy proces nauki oraz klasyfikacji przeprowadzić na zdjęciach samych twarzy, o podobnym oświetleniu i twarzy skierowanej w stronę obiektywu. Zdecydowaliśmy się wykorzystać zarówno metodę PCA jak i LDA ponieważ: obie techniki stawiają sobie inne cele PCA pozwala nam osiągnąć podprzestrzeń zoptymalizowaną pod kątem występowania wyłącznie cech twarzy (eliminujemy wymiary opisujące tło) LDA pozwala na wyznaczenie tych wymiarów, które najbardziej rozróżniają klasy obiektów (w naszym przypadku najbardziej rozróżniają płcie) dzięki zastosowaniu obu technik najpierw uzyskujemy podprzestrzeń zoptymalizowaną pod kątem występowania wyłącznie najważniejszych cech twarzy (PCA), a następnie wyznaczamy które cechy najbardziej rozróżniają obie płcie (LDA) Zastosowany przez nas algorytm jest szczególnym przypadkiem algorytmu powszechnie znanego jako FisherFaces. Algorytm ten służy do analizy twarzy pod kątem klasyfikacji ich do pewnych zbiorów oraz znajdywania różnic pomiędzy różnymi zbiorami danych. W naszym przypadku wyróżniamy dwa zbiory płcie (mężczyzna i kobieta). 3
3 Opis programu 3.1 Wykorzystane technologie Program napisany został z wykorzystaniem języka C++. W celu stworzenia graficznego interfejsu graficznego wykorzystano bibliotekę Qt. Natomiast do analizy obrazów wykorzystano bibliotekę OpenCV. Dostarcza ona narzędzi takich jak algorytmy PCA oraz LDA, dzięki czemu nie było wymagane skupienie się na aparacie matematycznym, a głównie koncepcją rozwiązania. 3.2 Instrukcja użytkownika Aplikacja została przygotowana i skompilowana pod 64-bitowe systemy Windows. Wraz z programem zostały dołączone wszelkie niezbędne biblioteki zewnętrzne. W przypadku innych systemów wymagane będzie ponowne skompilowanie źródeł pod docelową platformę oraz samodzielne dostarczenie bibliotek zewnętrznych (OpenCV oraz Qt) w odpowiednich wersjach. Aby uruchomić program, należy kliknąć dwukrotnie na plik klasyfikator.exe. Po uruchomieniu aplikacji pojawi się okno jak na poniższym obrazku: Rys 2. Widok główny programu Program podzielony jest na dwie sekcje. Pierwsza z nich służy do wprowadzenia danych niezbędnych do działania aplikacji, czyli: zbioru uczącego zbioru testującego ewentualnie pliku w którym zostaną zapisane wyniki klasyfikacji 4
Dane do programu można wprowadzać zasadniczo na dwa sposoby: w postaci wcześniej przygotowanych plików CSV (gdzie znajdują się ścieżki do zdjęć oraz ewentualnie (w zależności czy mamy do czynienia ze zbiorem uczącym czy testującym) dodatkowo cyfra określająca płeć osoby na zdjęciu (1 mężczyzna, 2 kobieta) wybierając pliki z listy. W tym przypadku można też zapisać ewentualnie wybrane obrazy do pliku CSV, aby w przyszłości szybciej wprowadzać te dane. Przykład wprowadzania danych o zbiorze uczącym przedstawiono na poniższym rysunku: Rys 3. Widok wyboru danych do zbioru uczącego W przypadku zbioru uczącego dostarczono również specjalną, własną bazę zdjęć. Jest ona zapisana w postaci pliku binarnego. Dzięki temu, aby tak naprawdę uruchomić klasyfikację wystarczy jedynie wskazać obrazy, które mają zostać sklasyfikowane. Jednak można również wskazać inne obrazy jak pokazano wcześniej na rysunku 3, a nawet zmienić plik binarny zaznaczając opcję Użyj własnego zbioru uczącego jako referencji w przyszłych obliczeniach. Dzięki temu, zbiór uczący zostanie zapisany i przy kolejnych uruchomieniach programu domyślnym zbiorem będzie inny niż ten, który dostarczono z programem. Po wprowadzeniu danych można nacisnąć przycisk Klasyfikuj. Pojawi się nowe okno z wynikami klasyfikacji jak na rysunku 4. 5
Rys 4. Przykładowe wyniki klasyfikacji Druga sekcja programu służy do wprowadzania danych, dzięki którym można sprawdzić jaką skuteczność odniosła metoda. Polega to na tym, że przekazujemy taki sam zbiór danych jak w przypadku zbioru testującego w tym przypadku jednak określamy płeć dla każdego z obrazków. Oczywiście zbiór ten nie jest w żaden sposób wykorzystywany w algorytmie, a jedynie służy do sprawdzenia w których przypadkach klasyfikacja się powiodła, a w których nie. Po dostarczeniu odpowiednego zbioru referencyjnego można kliknąć przycisk Testuj skuteczność metody (WAŻNE: Testowanie skuteczności metody może zostać dokonane dopiero po udanej klasyfikacji). Pojawi się nowe okno jak na rysunku 5. Rys 5. Przykładowy test skuteczności metody 6
W tym oknie zostanie przedstawiona tabela ze wszystkimi zdjęciami, ścieżkami do nich oraz otrzymanymi wynikami i rzeczywistymi danymi. Dodatkowo na dole wyświetlana jest procentowa skuteczność metody przy rozpoznawaniu kobiet oraz mężczyzn. Dzięki tym danym można określić jak skuteczna jest metoda dla danych zbiorów. 4 Uzyskane wyniki Wykorzystując zbiory danych znalezione w Internecie [5] przygotowano odpowiednie zbiory uczące oraz testujące. Poniżej przedstawione zostały wyniki dla trzech przypadków różnych zbiorów uczących oraz testujących. 3.1 Przypadek pierwszy Przypadek pierwszy jest przypadkiem skrajnym w obliczeniach zastosowano dokładnie taki sam zbiór uczący jak i testujący. Dzięki temu możliwe było sprawdzenie czy w idealnym przypadku algorytm nie wykonuje błędu. Jeśli algorytm działa poprawnie, to ten przypadek powinien charakteryzować się stuprocentową skutecznością. W obliczeniach zastosowano zbiór 5 kobiet oraz 5 mężczyzn. Wyniki zaprezentowano na poniższym rysunku: Rys 6. Wyniki klasyfikacji dla przypadku skrajnego W tym przypadku otrzymano stuprocentową skuteczność metody. Oznacza to, że algorytm poradził sobie z przypadkiem, kiedy zbiory danych są identyczne i potrafi wykorzystać wiedzę wynikającą z uczenia. Ten przypadek był jednak skrajny i miał na celu jedynie wykonanie testu poprawności wykonania algorytmu przynajmniej w idealnym przypadku. Nie można na jego podstawie określić, czy metoda rzeczywiście jest skuteczna, dlatego sprawdzono też kolejne przypadki. 7
3.2 Przypadek drugi W przypadku drugim żaden z elementów zbioru uczącego nie znalazł się w zbiorze testującym. Dzięki temu można było sprawdzić realną skuteczność metody. W zbiorze uczącym znalazło się równolicznie 8 zdjęć kobiet oraz 8 mężczyzn. W zbiorze testującym było natomiast po 5 osobników danej płci. Wyniki zaprezentowano na poniższym rysunku. Rys 7. Wyniki klasyfikacji dla przypadku równolicznego W tym przypadku skuteczność metody wyniosła 80%. Algorytm zarówno w przypadku mężczyzn jak i kobiet pomylił się raz. Można to jednak uznać za pozytywny rezultat. Po pierwsze zbiory zarówno uczący jak i testujący były dość mało-liczne. Po drugie analizując wykorzystane obrazy można zauważyć, że w przypadku mężczyzny w którym algorytm się pomylił rzeczywiście zdjęcie miało pewne podobieństwa do kobiet znajdujących się w zbiorze uczącym. Mimo to uzyskano przyzwoitą skuteczność 80%. 3.3 Przypadek trzeci W przypadku trzecim, tak samo jak w drugim żaden z elementów zbioru uczącego nie znalazł się w zbiorze testującym. Tym razem liczba zdjęć danej płci nie była równoliczna. Płcią dominującą w zbiorach byli mężczyźni (wynika to ze zbiorów, które znaleziono, a nie z powodu poglądów autorów). W zbiorze uczącym było 17 mężczyzn i 9 kobiet. W zbiorze testującym było 15 mężczyzn oraz 8 kobiet. Wyniki zaprezentowano na poniższym rysunku. 8
Rys 8. Wyniki klasyfikacji dla przypadku z dominacją mężczyzn W tym przypadku uzyskano skuteczność 75% w przypadku kobiet oraz stuprocentową dla mężczyzn (mimo, że było ich aż 15 algorytm nigdy się nie pomylił). Łącznie daje to wynik 21/23 czyli ponad 91%. Jest to bardzo dobry wynik. W tym przypadku próba była większa, co poskutkowało lepszą skutecznością metody niż w przypadku drugim. Widać też, że algorytm mylił się raczej w przypadku kobiet, aniżeli mężczyzn skoro w zbiorze uczącym było więcej zdjęć mężczyzn stąd większa szansa, że algorytm znajdzie podobne zdjęcia mężczyzn. Poza tym w jednym przypadku nawet autorzy nie są pewni płci osoby na zdjęciu i tworząc zbiór referencyjny dla zbioru testującego zasugerowali się opisem zdjęcia. 5 Wnioski 1. Dzięki połączeniu algorytmów PCA z LDA oraz algorytmu znajdowania najbliższych sąsiadów udało się stworzyć program dokonujący klasyfikacji płci ze skutecznością wynoszącą 80-90% (dla większych zbiorów skuteczność powinna wynosić ~90%). 2. Ponadto atutem wykorzystanego algorytmu jest także szybkość działania co uzasadnia celowość wykorzystania go w praktyce. 3. Minusem algorytmu są jego wymogi wobec zdjęć powinny być one robione z przodu, powinny mieć te same wymiary (w przeciwnym wypadku następuje ich skalowanie), najlepiej gdyby były robione w tych samych warunkach świetlnych. 4. W przypadku zdjęć z twarzami z innego profilu, należałoby skorzystać z innych metod wyszukiwania twarzy niż PCA (np. metod geometrycznych). 5. W przypadku gdy w zbiorze uczącym dominuje pewna płeć algorytm może popełniać więcej błędów przy klasyfikacji osobników drugiej płci. 9
6 Bibliografia 1. Opis analizy głównych składowych (PCA) - http://sebastianraschka.com/articles/2014_pca_step_by_step.html 2. Opis liniowej analizy dyskryminacyjnej (LDA) - http://www.bytefish.de/blog/pca_lda_with_gnu_octave/ 3. Opis algorytmu Fisherfaces - http://bytefish.de/blog/fisherfaces/ 4. Porównanie różnych rozwiązań problemu rozpoznawania płci - https://research.iiitd.edu.in/groups/iab/ijcb11-gender.pdf 5. Zbiór danych z twarzami - http://face-rec.org/databases/. 6. Opis konwersji między typami QByteArray, a cv::mat potrzebne przy serializacji obiektów http://stackoverflow.com/questions/15198131/store-exact-cvmat-image-in-sqlite3-database 7. Serializacja przy użyciu biblioteki Qt - http://www.bogotobogo.com/qt/qt5_qfile_serialization_class.php 10