|
 |
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.
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 |
 |
 |
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
 |
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. |
< 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:

Vanilla Backpropagation jest także nazywany algorytmem online backpropagation,
ponieważ w trakcie uczenia aktualizuje wagi po każdym wzorcu.
 |
 |
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:
 |
 |
 |
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.
< 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 >
|