neuronowe 5

PROGRAMOWANIE SIECIOWE

Prowadzący:

Dr Marek Bazan

Data:

17.05.2012

ZADANIE KLASYFIKACJI OBRAZÓW ROZPOZNAWANIE TWARZY

1. Wstęp teoretyczny.

Klasyfikacja jest jedną z najbardziej typowych form przetwarzania neuronowego. Jeżeli zbiór sygnałów wejściowych można podzielid na kilka klas, (nb. muszą istnied takie cechy (atrybuty), które pozwolą na dokonanie takiego jednoznacznego podziału), to w odpowiedzi na sygnał wejściowy klasyfikator powinien podad informację o klasie, do której ten sygnał należy.
Sieć MLP (Multilayer Perceptron neural network) składa się z "n" warstw ukrytych oraz jednej warstwy wyjściowej. Do badao stworzono sied dwuwarstwową. Warstwa ukryta jest pobudzana funkcją tangensa hiperbolicznego będącego sigmoidalną funkcją bipolarną, warstwa wyjściowa pobudzana funkcją sigmoidalną.
Zadanie polega na klasyfikacji obrazów, rozpoznawaniu twarzy. Zadanie wykonano na zdjęciach zapisanych w formacie jpg. W celu przetwarzania takich obrazów należy je przetransformować na obrazy binarne poleceniem "im2bw". Obrazy poddano redukcji rozdzielczości do rozmiaru 50x56, ze względu na dużą złożoność obliczeniową algorytmu krosswalidacji.
Walidacja krzyżowa działa następująco. Dzielimy zbiór danych na "k" możliwie równych części. Dla k'tej częsci jako zbiór treningowy przyjmujemy wszystkie elementy zbioru obrazów oprócz k'tego obrazu. Zbiorem testowym jest k'ta część zbioru obrazów. Dla każdego takiego zestawu liczymy błąd predykcji RSE(M;Z(k)) i dla wszystkich "k" części uśredniamy wynik. Generujemy "L" sieci o różnej strukturze i wybieramy tę, dla której błąd CV wynosi minimum.

SKRYPT

for i=1:1:5

p=num2str(i);

%osoba 1

eval(['os1' p '= (im2bw(imread([''D:/neuronowe 5/faces/male/9332898/9332898.' p asda'.jpg''])));']);

eval(['os2' p '= (im2bw(imread([''D:/neuronowe 5/faces/male/bplyce/bplyce.' p aaaa'.jpg''])));']);

eval(['os3' p '= (im2bw(imread([''D:/neuronowe 5/faces/male/cchris/cchris.' p aaaa'.jpg''])));']);

eval(['os4' p '= (im2bw(imread([''D:/neuronowe 5/faces/female/phughe/phughe.' p aaaa'.jpg''])));']);

eval(['os5' p '= (im2bw(imread([''D:/neuronowe 5/faces/female/asamma/asamma.' p aaaa'.jpg''])));']);

end

%zamiana macierzy na wektor

%osoba1

os11=os11(:); os12=os12(:); os13=os13(:); os14=os14(:); os15=os15(:);

%osoba2

os21=os21(:); os22=os22(:); os23=os23(:); os24=os24(:); os25=os25(:);

%osoba3

os31=os31(:); os32=os32(:); os33=os33(:); os34=os34(:); os35=os35(:);

%osoba4

os41=os41(:); os42=os42(:); os43=os43(:); os44=os44(:); os45=os45(:);

%osoba5

os51=os51(:); os52=os52(:); os53=os53(:); os54=os54(:); os55=os55(:);

%wektor klasyfikujacy, odpowiedzi sieci

out=[os11 os11 os11 os11 os11 os21 os21 os21 os21 os21 os31 os31 os31 os31 os31 os41 os41 os41 os41 os41 os52 os52 os52 os52 os52];

%wektor obrazow

osoby=[os11 os12 os13 os14 os15 os21 os22 os23 os24 os25 os31 os32 os33 os34 os35 os41 os42 os43 os44 os45 os51 os52 os53 os54 os55];

%metoda krosswalidacji wyznaczamy ilosc neuronow do warstwy ukrytej

CV=99999;

RSM=0;

suma=0;

for neurony=100:100:2800

neurony

net=mlp(2800,neurony,2800,'logistic');

for i=1:1:25

temp_osoby=osoby;

temp_out=out;

temp_osoby(:,i)=[]; %usuwamy i'ty element z macierzy danych

temp_out(:,i)=[];

[net,error]=mlptrain(net,temp_osoby',temp_out',10); %wszystkie elementy ze a zbioru "osoba1" bez i'tego

[Y Z]=mlpfwd(net,osoby(:,i)');

%policzyc bledy predykcji

suma=(osoby(:,i)'-Y).^2;

suma=suma/2800;

RSM=RSM+suma;

suma=0; %suma bledow predykcji

end

temp=(1/25)*RSM;

RSM = 0;

if temp<CV

CV=temp;

hidden_neurons=neurony; %i zapamietujemy dla ilu neuronow w warstwie ukrytej aa CV bylo minimalne

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

hidden_neurons=1400; %wybrana za pomoca walidacji krzyzowej, o najmniejszym bledzie a predykcji

net=mlp(2800,hidden_neurons,2800,'logistic');

[net,error]=mlptrain(net,osoby',out',10);

for ktory_obraz=1:1:25

szum=osoby;

for ile_pikseli=1:1:50

for ile=1:1:ile_pikseli

i=randi([1 2800]);

if szum(i,ktory_obraz)==0

wartosc=1;

else

wartosc=0;

end

szum(i,ktory_obraz)=wartosc;

end

[Y Z]=mlpfwd(net,szum(:,ktory_obraz)');

%porownanie wyniku ze wzorcem

licznik=0;

k=0;

for i=1:1:50

for j=1:1:56

k=k+1;

wynik(i,j)=Y(k);

wzor(i,j)=out(k,ktory_obraz);

if ((wynik(i,j)<=0.49) && (wzor(i,j)==0)||((wynik(i,j)>0.49)&&(wzor(i,j)==1)))

licznik=licznik+1;

end

end

end

bladMLP(1,ile_pikseli+ktory_obraz*50-50)=100-licznik;

end

end

2. Badania - sprawdzenie wpływu stopnia zaszumienia obrazu na wejściu sieci na jego aarozpoznawalność przez sieć.

Za pomocą algorytmu walidacji krzyżowej wyznaczono najlepiej pasującą ilość neuronów w warstwie ukrytej, tak aby błąd predykcji był najmniejszy. Wyznaczona wartość wynosi 1400 neuronów warstwie ukrytej sieć MLP. Sieć była trenowana 25 obrazami przedstawiających twarze pięciu różnych osób (po 5 obrazów dla każdej z osób). W zbiorze obrazów dla każdej osoby znajdował się wzorzec oraz obrazy z różnymi zakłóceniami, naniesiona ziarnistość różnego stopnia, rozmazanie obrazu itp.

Twarz osoby 1
Dane trenujące sieć
Twarz osoby 2
Dane trenujące sieć
Twarz osoby 3
Dane trenujące sieć
Twarz osoby 4
Dane trenujące sieć
Twarz osoby 5
Dane trenujące sieć

4. Wnioski.

Sieć nauczono obrazów twarzy pięciu różnych osób. Dla każdej z osób użyto czterech obrazów z różnymi efektami zaszumiającymi oraz jednego obrazu bez szumów. Dodatkowo, każdy obrazek przedstawia inną mimikę twarzy co dodatkowo urozmaica dane wejściowe.
Podając na wejście sieci twarze różnych ludzi, w różnym stopniu zaszumionych. Szumy te były dodatkowymi szumami nałożonymi na obrazy wejściowe już zaszumione. We wszystkich przypadkach, niezależnie od stopnia zaszumienia, twarze rozpoznane zostały poprawnie. Dla trzech twarzy odnotowano brak szumów na wyjściu sieci przy dodatkowym zaszumieniu nawet 40 pikseli. Dużo zależy od samych obrazów. Znaczny wpływ ma kontrast między twarzą a tłem oraz ilość miejsc, gdzie sąsiednie piksele są różnej wartości.
Ponieważ wszelkie działania na obrazach, a więc dużych macierzach, są związane z bardzo dużą złożonością obliczeniową - dlatego stosuje się metody akceleracyjne dla algorytmu. Zastosowanym tutaj algorytmem jest krosswalidacja pozwalająca wyznaczyć minimalną ilość potrzebnych neuronów w warstwie ukrytej sieci perceptronowej tak, aby błąd predykcji był najmniejszy. Zabieg ten przyspiesza działanie całego algorytmu klasyfikacji, ponieważ im mniej neuronów jest wykorzystywana przez sieć, tym mniej obliczeń trzeba wykonać. Wadą tej metody jest jednak konieczność kosztownych czasowo i pamięciowo obliczeń potrzebnych do wyznaczenia tejże ilości neuronów w warstwie ukrytej.

5. Bibliografia

- "Principal component analysis" I.T. Jolliffe

- "Neural networks for pattern recognition" Ch. Bishop


Wyszukiwarka

Podobne podstrony:
Neuron tarnsport aksonalny, Neurologia
neuron, II rok, II rok CM UMK, Giełdy, 2 rok od Pawła, fizjologia, Opracowanie ćwiczenia
Neuronalne i molekularne podstawy uzależnienia od opiatów
Neuronauka Funkcje wykonawcze (czarno biale)
MSI-program-stacjonarne-15h-2011, logistyka, semestr IV, sieci neuronowe w log (metody sztucznej int
Ontogeniczne sieci neuronowe skrypt(1)
Neuronalne podstawy mechanizmu A Buzzelli 2010 id 317584
04 Wyklad4 predykcja sieci neuronoweid 523 (2)
Pytania egz AGiSN, SiMR - st. mgr, Alg. i Sieci Neuronowe
MSI-ściaga, SiMR - st. mgr, Alg. i Sieci Neuronowe
neuronotatkicz 1
32 Sieci neuronowe
Identyfikacja Procesów Technologicznych, Identyfikacja charakterystyki statycznej obiektu dynamiczne
sieci neuronowe, Sieci NeuronoweKolos
sztuczne sieci neuronowe sciaga

więcej podobnych podstron