Metody i algorytmy sztucznej inteligencji

Projekt*

Rozpoznawanie emocji na zdjęciach twarzy


Autor: Marcin Namysł
Prowadzący: dr inż Witold Paluszyński.
Data wykonania: 15.06.2007 r.

* Projekt wykonany w ramach zajęć z przedmiotu Metody i algorytmy sztucznej inteligencji prowadzonych na Politechnice Wrocławskiej, na wydziale Elektroniki, na kierunku Automatyka i Robotyka (specjalność ARR).

1. Opis zadania

Niewątpliwie jest to bardzo ciekawe i przydatne zagadnienie, którego rozwój jest ze wszech miar konieczny i uzasadniony. Ciągły postęp cywilizacji pociąga za sobą między innymi rozwój robotyki. Wizja świata, w którym człowiekowi w wielu czynnościach i obowiązkach będą pomagały roboty wydaje się być nie aż tak odległa. Robot, który miałby być towarzyszem człowieka, musiałby z pewnością umieć rozpoznawać jego stan emocjonalny. Mógłby wtedy dla przykładu lepiej rozpoznać czy jego działania odnoszą oczekiwany przez człowieka skutek, czy też nie i w ten sposób je korygować. W tym celu konieczne jest opracowanie różnorodnych technik odczytywania stanów emocjonalnych człowieka przez robota. Oczywiście zagadnienie może znaleźć zastosowanie w komputerach, które mogłyby uzyskać umiejętność odczytywania emocji użytkownika, tworzenie dzięki temu inteligentnego oprogramowania dostosowującego się do jego nastroju lub we wszelakich innych urządzeniach nie tylko domowego użytku. Podjąłem się na projekcie skonstruowania rozwiązania w pewnym sensie uproszczonego zagadnienia rozpoznawania emocji. Ograniczyłem się do rozpoznawania z wyrazu twarzy osoby tego, czy się ona uśmiecha, czy też nie.

2. Realizacja zadania

Analizę przeprowadzono na podstawie zdjęć dwóch osób. Została im zrobiona seria zdjęć, na których osoby te wyrażały dwojakiego typu emocje - radość (widoczna na twarzy jako uśmiech) oraz neutralny stan emocjonalny ("kamienna twarz", zamyślenie itp.).

2.1 Przetwarzanie i obróbka zdjęć

Pierwszym etapem była obróbka zdjęć. Do tego celu wykorzystano bibliotekę OpenCV przeznaczoną do przetwarzania obrazów. Poniżej przedstawiono kolejne etapy przetwarzania i obróbki zdjęć

2.2 Klasyfikacja przy użyciu sieci neuronowej

Kolejny etap pracy związany był z sieciami neuronowymi. Tutaj wykorzystano gotową aplikację, mianowicie SNNS. Jest to dobry, rozbudowany i co ważne darmowy symulator sieci neuronowych. Początek pracy z sieciami neuronowymi polegał na uczeniu sieci. Zastosowano sieć jednokierunkową (feed forward). Jako funkcje uczącą wybrano Std_Backpropagation. Próbowano również funkcji Quickprop, jednak lepsze rezultaty uzyskano dla funkcji Std_Backpropagation. Mając do dyspozycji 131 próbek uczących przystąpiono do uczenia sieci. W poprzednim podrozdziale przedstawiono obróbkę zdjęć oraz ich parametryzację. Każde zdjęcie sparametryzowano 6 wartościami, które tutaj są używane jako wagi dla neuronów warstwy wejściowej. Warstwa wyjściowa sieci zawiera 2 neurony wyjściowe (oznaczające odpowiednio uśmiech i brak emocji). Aby dobrać ilość neuronów w warstwie ukrytej, dokonano szeregu eksperymentów z uczeniem sieci dla różnej liczby tych neuronów. Dobre wyniki uzyskano dla ich liczby równej 10 i na taką liczbę neuronów ostatecznie się zdecydowano.

net

Rysunek: Schemat zastosowanej sieci neuronowej


Podczas eksperymentów z uczeniem sieci dla jednej osoby uzyskiwane błędy (SSE) były praktycznie zerowe. Podczas uczenia sieci dla dwóch osób, udało się zejść do wartości błędu równej w przybliżeniu 4. Biorąc pod uwagę takie czynniki jak różnice w oświetleniu w jakim były robione obie serie zdjęć, różnice w rysach twarzy (kobieta, mężczyzna), itp. można uznać ten wynik za dobry.

2.3 Opis działania programu

Poniższy rysunek przedstawia krótki opis działania programu (w zależności od wybranej opcji)

log2

3. Otrzymane wyniki

Uzyska skuteczność rozpoznawania emocji to w przybliżeniu 80%.
Nauczona sieć była testowana na podstawie serii zdjęć obu osób (w ilości równej 50). Poniżej Przedstawiono rysunek przedstawiający otrzymane wyniki.

wynik


W dalszej części pokrótce zostaną omówione wybrane poprawne i niepoprawne wyniki jakie udało się uzyskać.

3.1 Przykład poprawnego rozpoznawania emocji przez sieć

Zostaną tutaj przedstawione dwa wybrane przykłady poprawnego rozpoznania stanu emocjonalnego przez sieć neuronową wśród próbek testowych. Jak widać osoby zachowały powagę, na obrobionych zdjęciach ust również nie widać grama uśmiechu - sieć nie miała w tym przypadku problemów z rozpoznaniem emocji.

log7log6
i21i1212
u21u1212

3.2 Przykład błędnego rozpoznawania emocji przez sieć

Zostaną tutaj przedstawione dwa przykłady błędnego rozpoznania stanu emocjonalnego przez nauczoną sieć neuronową wśród próbek testowych. Jak widać na zdjęciu pierwszym od lewej - kobieta, ktorej robiono zdjęcia, była wyraźnie zmęczona ciągłym do nich pozowaniem i już nawet zabrakło jej sił, aby się wyraźniej uśmiechnąć (co również obrazuje zdjęcie obrobionych ust). Człowiek na zdjęciu po prawej już najwyraźniej myślał o momencie, w którym będzie oddawał ten projekt - radość była, jednak nieco ukryta. Zdjęcia ust również nie są przekonywujące, prezentują mało wyraźny uśmiech. Zatem sieć neuronowa rzeczywiście mogła mieć duże problemy z poprawną klasyfikacją tych danych - stąd prawdopodobnie wynika błędne rozpoznanie stanu emocjonalnego dla tych próbek testowych.

log3log5
i13i13
u13u13

4. Wnioski

Można powiedzieć, że udało się rozwiązać postawione w projekcie zadanie. Udało się odpowiednio obrobić zdjęcia, odpowiednio sparametryzować usta, oraz co najważniejsze przeprowadzić poprawne eksperymenty z siecią neuronową. Osiągnięcie skuteczności rozpoznawania dla próbek testowych równej 80% wydaje się być dobrym wynikiem. Prawdopodobnie można by go jeszcze poprawić stosując bardziej wyszukane sposoby obróbki zdjęć, w jeszcze lepszy sposób uwypuklające usta na zdjęciu, jeszcze lepiej eliminujące z obrabianego zdjęcia takie elementy jak np. nos, który na niektórych obrobionych zdjęciach ust jest w pewnym stopniu widoczny i może czasem psuć wyniki. Rozbudowa i udoskonalanie takiego systemu wymagałyby również podjęcia próby podobnego rozpoznawania emocji dodatkowo na podstawie innych elementów z twarzy (brwi, czoło itd.).

Uważam, że zastosowana metoda rozwiązania jest dobra i warto przy rozwiązywaniu podobnego problemu pójść podobną drogą. Biblioteka OpenCV bardzo dobrze nadaje się do przeprowadzenia etapu obróbki zdjęć, a symulator sieci neuronowych SNNS jest bardzo dobrym narzędziem ułatwiającym znacząco pracę z sieciami neuronowymi, posiadającym bardzo wiele możliwości, których mimo iż bardzo intensywnie korzystałem z tego symulatora, nie udało mi się w całości poznać.

Źródła danych

Poniżej zaprezentowano zestawienie wykorzystanych przy tworzeniu projektu materiałów źródłowych.

Klasyfikator Haara (lokalizacja twarzy na zdjęciu)
Biblioteka OpenCV
Algorytm Canny (wykrywanie krawędzi)
Analiza obrazów w systemie wizyjnym
Symulator sieci neuronowych SNNS (Stuttgart Neural Network Simulator)

Również korzystano z dokumentacji do OpenCV dostępnej po zainstalowaniu tej biblioteki.

Valid HTML 4.01 Transitional