jpg Wykonali:
Anna Sadowska
Roman Michalak

Data: 18.06.2006


RAPORT
OPRACOWANY NA ZALICZENIE PRZEDMIOTU
METODY I ALGORYTMY SZTUCZNEJ INTELIGENCJI


Spis treści:

Cel projektu.
Założenia projektowe.
Zastosowane rozwiązania problemu.
Zastosowane algorytmy uczące.
Analiza przeprowadzonych testów i otrzymanych wyników.
Podsumowanie i wnioski.
Źródła.

Cel projektu.

W ramach projektu z przedmiotu Metody i algorytmy sztucznej inteligencji chcieliśmy analizować zagadnienie rozpoznawania twarzy i na podstawie emulatora sieci neuronowych przeprowadzić badania nad tym zagadnieniem. Sieć nasza miała za zadanie nauczyć się na podstawie wzorów (to jest zdjęć) 10 osób i potem dawać odpowiedź, czy nowe zdjęcie jednej z 10 osób, ale spoza próbki uczącej, jest to zdjęcie jednej z osób z bazy, a jeśli tak, to której to osoby. Tym samym, chcieliśmy opracować program, który pozwoli na odpowiedź na pytanie: czy jakaś osoba (której zdjęcie mamy) należy do pewnej zamkniętej grupy oraz która to osoba z tej grupy.

< Powrót >


Założenia projektowe.

Do naszych badań znaleźliśmy w Internecie bazę danych ze zdjęciami kilkunastu osób. Zdjęcia wykonywane były przy w miarę jednakowym oświetleniu, na jasnym tle, z przodu twarzy i oba profile. Z bazy wybraliśmy po 10 zdjęć dla wybranych 10 osób, na podstawie których przeprowadziliśmy uczenie stworzonej przez nas sieci neuronowej. Wybraliśmy zdjęcia przedstawiające twarz z przodu, z ewentualnymi drobnymi odstępstwami od tej reguły (jednak zdecydowanie odbiegające od zdjęć typowo profilowych). Dodatkowo wybraliśmy po 2 zdjęcia dla każdej osoby do testowania nauczonej sieci neuronowej.
Przykładowe rysunki dla jednej osoby z wykorzystanej przez nas bazy danych znajdują się poniżej.

gifgifgifgifgif

Rysunek 1-5 Przykładowe zdjęcia z użytej przez nas bazy twarzy


Głównym narzędziem, z którego korzystaliśmy był emulator sieci neuronowych SNNSv4.2. W tym środowisku możliwe było stworzenie odpowiedniej sieci neuronowej, przetestowanie różnych konfiguracji sieci. Pakiet ten umożliwia także wygenerowanie na podstawie nauczonej już sieci funkcji w C, dzięki czemu testowanie sieci (sprawdzanie, jakie są jej wyniki) było dla nas łatwiejsze i bardziej intuicyjne.
 

< Powrót >


Zastosowane rozwiązania problemu.

I metoda
Podczas początkowej pracy nad projektem chcieliśmy uniknąć zagadnień związanych z przetwarzaniem obrazów, a głównie skoncentrować się na tworzeniu i konfiguracji sieci neuronowej. W związku z tym postanowiliśmy, że neuronami wejściowymi do sieci będą wartości szarości dla wszystkich pikseli. Aby wykonać to zadanie, zdjęcia z bazy danych musieliśmy wyostrzyć, zwiększyć kontrast i przede wszystkim zmniejszyć do rozmiaru 50x50. Początkowo zdjęcia miały rozmiar około 200x200 pikseli, co powodowałoby, że powstała sieć byłaby bardzo duża i bardzo długo by się uczyła. 2500 wejść dla zdjęć pomniejszonych to i tak bardzo dużo, ale, jak się w testach okazało, wcale nie uczyła się wyjątkowo długo.

Rysunek 6: Oryginalny obraz      

     Rysunek 7: Obraz przetworzony
gif

gif


W pakiecie SNNS utworzyliśmy sieć o 2500 wejściach, 144 neuronach w warstwie ukrytej i 10 neuronach wyjściowych (1 neuron = 1 osoba). Powstała sieć jest bardzo duża, dlatego nie ma możliwości przedstawienia jej w tym sprawozdaniu. Wyniki, jakie uzyskaliśmy stosując tą metodę są zadowalające, wręcz bardzo dobre. Przedstawiamy je w punkcie tu.


 II metoda
jpg Sieć neuronowa, jaką utworzyliśmy na początku (I metoda) była bardzo duża, dlatego zaczęliśmy się zastanawiać nad innym podejściem do tego zagadnienia. Mianowicie postanowiliśmy nie wprowadzać do sieci neuronowej jako jej wejścia wszystkich pikseli z obrazka, ale wydobyć z obrazków pewne cechy, które będą charakteryzować osoby na obrazkach. Cechy te wydobyliśmy zgodnie z rysunkiem po lewej.

Jak widać na rysunku, z każdego zdjęcia wydobyliśmy 20 charakterystycznych punktów. Jako neurony wejściowe do sieci neuronowej wprowadziliśmy nie bezpośrednio te wartości, ale odległości pomiędzy zaznaczonymi punktami. W ten sposób utworzyliśmy sieć neuronową o 190 neuronach wejściowych, 15 neuronach w warstwie ukrytej i 10 w wyjściowej.

gif

< Powrót >


Zastosowane algorytmy uczące.

Do uczenia sieci wykorzystaliśmy dwie funkcje uczące :
a) Vanilla Backpropagation
Jest to standardowy algorytm uczący. Można go zdefiniować jako:
gif
Vanilla Backpropagation jest także nazywany algorytmem online backpropagation, ponieważ w trakcie uczenia aktualizuje wagi po każdym wzorcu.

gif

gif

Przebieg uczenia się sieci (1. metoda)

Przebieg uczenia się sieci (2. metoda)


W pakiecie SNNS algorytm Vanilla Backpropagation jest możliwy do wywołania pod nazwą Std_Backpropagation.


b) Quickprop
Jedną z metod przyspieszenia procesu uczenia się sieci neuronowej jest zastosowanie informacji o krzywiźnie płaszczyzny utworzonej przez błąd. Quickprop przybliża wykres błędu do lokalnie kwadratowego i usiłuje przeskoczyć w jednym skoku bezpośrednio z obecnego punktu do minimum paraboli.
Quickprop wylicza pochodne w kierunku każdej wagi. Po obliczeniu pierwszego gradientu metodą standardową, bezpośredni krok do minimum błędu wynosi:
 

gif

gif

gif

Przebieg uczenia się sieci (2. metoda) przy użyciu funkcji Quickprop. Przebieg uczenia się sieci (1. metoda) przy użyciu funkcji Quickprop.

< Powrót >



Analiza przeprowadzonych testów i otrzymanych wyników.

Po nauczeniu sieci neuronowej wzorcami uczącymi po 10 zdjęć dla każdej z 10 osób postanowiliśmy sprawdzić odpowiedzi sieci na wprowadzanie do niej nowych zdjęć tych 10 osób (na których sieć się nie uczyła). Poniżej przedstawiamy przykładowe uzyskane wyniki.. Zauważyliśmy, że większość osób została rozpoznana prawidłowo przez nauczoną sieć w obu metodach. Dodatkowo, współczynnik rozpoznania, czyli wartość jaką podaje sieć jako odpowiedź dla danego wejścia jest wysoki (zazwyczaj wyższy niż 0.9). Współczynnik rozpoznania przyjmuje wartości [0…1]. Wartość 0 oznacza brak rozpoznania, 1 oznacza całkowitą pewność sieci.

Prawidłowo mamy rozpoznane zdjęcia w 33 przypadkach a 7 blednie.

w II metodzie nieprawidłowo rozpoznane są:
- 2 zdjęcia os 6-rozpoznanie os 4 (0.128111)
- 2 zdjęcia osoby 9 rozpoznanie osoby 1 (0.498529)
- 2 zdjęcia osoby 10 rozpoznanie osoby 1(0.508156)


jeśli chodzi o I metodę tylko jedno rozpoznanie jest błędne.

Wyniki, jakie daje sieć przy drugiej metodzie są mniej prawidłowe. Sieć się częściej „gubi”. Myślimy jednak, że nie wynika to jednak ze złej topologii sieci czy złego doboru parametrów. Bardziej prawdopodobne wydaje nam się, że jest to spowodowane niezbyt dokładnym etapem związanym z przetwarzaniem obrazów wprowadzanych na wejście sieci. Pełne wyniki znajdują się tutaj.

Prawidłowe rozpoznawanie.

I metoda

 

II metoda

Zadane zdjęcie  Wskazana przez sieć osoba Współczynnik rozpoznania   Zadane zdjęcie  Wskazana przez sieć osoba Współczynnik rozpoznania
gif gif 0.97   gif gif 0.78
gif gif 0.99   gif gif 0.99
gif gif 0.99   gif gif 0.96

< Powrót >


Podsumowanie i wnioski.

Zagadnienie, jakim się zajmowaliśmy w ramach projektu jest zagadnieniem bardzo popularnym na czasie. W Internecie znaleźliśmy wiele publikacji i programów na ten temat. Nic dziwnego, jest to zagadnienie bardzo ciekawe i niestety trudne. My także w trakcie realizacji projektu napotkaliśmy liczne trudności. Część z nich udało nam się rozwiązać, a część niestety pozostaje przed nami. W ramach naszej dalszej pracy nad tym zagadnieniem, chcielibyśmy przede wszystkim bardziej się skoncentrować na technikach przetwarzania obrazu. Jest to część niezwykle istotna dla nas. Nie można mówić o rozpoznawaniu osób na zdjęciach (czy idąc dalej rozpoznawanie osób on-line, czyli z włączonej kamery) bez odpowiedniej obróbki obrazu. My tą obróbkę bardzo uprościliśmy, a mimo to uzyskaliśmy satysfakcjonujące wyniki. Jednak podczas dalszej pracy chcielibyśmy zająć się efektywniejszym wyłuskiwaniem ze zdjęć cech, które moglibyśmy wrzucić do sieci. W tej chwili, nasza II metoda jest to jakby zalążek tego, co planujemy zrobić. Dalej warto pomyśleć o znalezieniu algorytmu, który by automatycznie znajdował na obrazie położenie oczu, ust, nosa. W tej chwili niestety nasza metoda nie działa zbyt "efektywnie". Dodatkowo, sposób, w jaki w tej chwili uzyskujemy cechy (II metoda) może powodować błędy, które są wynikiem niedokładności osoby zaznaczającej punkty. Taka sytuacja jest nie do pomyślenia, jeżeli byśmy chcieli wykorzystać naszą sieć do zadań bardziej "profesjonalnych". Wydaje nam się, że wymyślona przez nas II metoda jest skuteczna (zakładając dokładne zaznaczanie punktów), ale warto może dodać do niej pewną modyfikację. W tej chwili metoda ta jest czuła na wprowadzanie zdjęć nie całkiem z przodu. Gdybyśmy analizowali nie same odległości, ale np. iloraz dwóch odległości, które w takim samym stopniu są przekształcane w wyniku odwrócenia twarzy, to uzyskalibyśmy wartość niezależna od obrotu twarzy.

< Powrót >



Źródła.

5.1.   images.ee.umist.ac.uk/danny/database.html
5.2.   www.face-rec.org/
5.3.   www.ri.cmu.edu/projects/project_416.html
5.4.   www.cs.cmu.edu/~tom/faces.html
5.5.   www.betaface.com/downloads.aspx 
5.6.   SNNSv4.2 Manual
5.7.   Sprawozdania z projektów o podobne tematyce z ubiegłych lat.

< Powrót >


Valid HTML 4.0 Transitional