Algorytm rozpoznawania: Konwertujemy obraz do skali szarości. 1
Transkrypt
Algorytm rozpoznawania: Konwertujemy obraz do skali szarości. 1
Algorytm rozpoznawania: Konwertujemy obraz do skali szarości. 1. 2. 3. 4. 5. Wybieramy z obrazu część 20 na 20 pikseli Wykonujemy wyrównanie histogramu dla wybranej części Podajemy przetworzone dane do dwóch sieci neuronowych Jeśli oba wyniki sieci przekraczają wybrany próg, to uznajemy, że w tym miejscu jest twarz Jeśli sprawdzimy już wszystkie części 20 na 20 pikseli, to zmniejszamy obraz i zaczynamy od początku na zmniejszonym obrazie, jeśli oczywiście jest sens zmniejszać jeszcze (tworzymy tzw. piramidę obrazów). Nauczanie sieci: Nauczamy dwie sieci neuronowe, żeby zmniejszyć ilość niepoprawnie znalezionych twarzy tam, gdzie ich nie ma. Najczęściej twarze źle rozpoznane są w miejscu, które podaje tylko jedna sieć, a dobre rozpoznania są wspólne dla obu sieci (oczywiście samemu do tego nie doszliśmy, tak jest w literaturze). 1. Przygotowujemy 100 obrazów 20 na 20 pikseli z wizerunkiem twarzy, każdy obraz konwertujemy do skali szarości i wykonujemy wyrównanie histogramu 2. Wybieramy losowo 100 wycinków 20 na 20 pikseli obrazów, na których nie ma twarzy; każdy obraz konwertujemy do skali szarości i wykonujemy wyrównanie histogramu 3. Uczymy sieć dla naszych przygotowanych wyżej przykładów uczących 4. Sprawdzamy na wylosowanych wycinkach obrazów, na których nie ma twarzy czy sieć poprawnie rozpoznaje brak twarzy. Jeśli nie, to dodajemy takie przykłady do nowych przykładów uczących bez twarzy 5. Jeśli były przykłady błędnie rozpoznanych twarzy, to uczymy sieć dla nowego zestawu uczącego przygotowanego z błędnie rozpoznanych miejsc i wracamy do punktu 4. (czyli znów wybieramy losowo wycinki i sprawdzamy czy sieć nie daje niepoprawnych odpowiedzi) Sieć neuronowa: Użyta sieć neuronowa to jednokierunkowa, wielowarstwowa sztuczna sieć neuronowa. Składa się z 3 warstw: wejściowej (której liczebność określona jest rozmiarem wektora wejściowego, w tym przypadku jest to 400 perceptronów (20 * 20 = 400)), ukryta (rozmiar dobrany eksperymentalnie i ustalony na 100 perceptronów) oraz wyjściowa (w tej warstwie jest tylko jeden perceptron, jego wyjście bliskie 1 oznaczać ma, że wykryto twarz, a bliskie 0, że w danych wejściowych nie ma twarzy). Każdy perceptron w warstwie jest połączony z każdym wyjściem perceptronu z poprzedniej warstwy. Wyjście perceptronu to suma wyjść perceptronów z poprzednich warstw przemnożonych przez wagi (neuron ma tyle wag, ile jest neuronów warstwie poprzedniej) podanych na funkcję aktywacji. 1 W tym przypadku jest to nieliniowa funkcja sigma: . 1e− x Nauczanie takiej sieci przebiega poprzez wykonanie algorytmu wstecznej propagacji błędów. Jest to nauczanie pod nadzorem (albo inaczej 'z nauczycielem'), dlatego, że podajemy do algorytmu dane wejściowe i oczekiwane wyjście, a sieć uczy się odpowiednio dla tych danych podawać odpowiednie wyniki. Nazwa algorytmu wzięła się od kolejności liczenia błędu. Najpierw obliczamy go dla warstwy wyjściowej (bo wiemy jaki wynik dała sieć, a jaki oczekiwaliśmy), a następnie obliczamy jakie były błędy poprzednich warstw. Cały algorytm opiera się o regułę delty. Więcej można poczytać w sieci, np. wykłady prof. W. Ducha: http://www.is.umk.pl/~duch/Wyklady/NN_plan.html (wykład o wielowarstwowych sieciach neuronowych: http://www.is.umk.pl/~duch/Wyklady/NN-CI/CI-8.ppt). Pytania: Pytania z jakimi możesz się spotkać: - ile jest neuronów (perceptronów) w poszczególnych warstwach? Warstwa wejściowa: 400 (bo 20*20), warstwa ukryta: 100, warstwa wyjściowa: 1 - jaki jest próg, po którym przyjmujemy, że sieć rozpoznała twarz? Został wybrany próg 0.9, czyli jeśli sieć poda wynik powyżej 0.9, to przyjmuję, że rozpoznała twarz - jaki jest próg/kryterium po którym przerywana jest nauka sieci? Sieć jest nauczana, aż średni błąd epoki nie będzie mniejszy niż 0.01, gdzie epoka, to jedno nauczanie sieci dla całego zestawu uczącego - jak zostały przygotowane twarze do uczenia? Twarze zostały wycięte ze zdjęć znalezionych w internecie i przeskalowane do rozmiaru 20*20