Sunteți pe pagina 1din 9

Universitatea ,Politehnica Bucuresti

Facultatea de Electronica, Telecomunicatii si Tehnologia informatiei

Proiect RNSF
(Retele neuronale si sisteme fuzzy)

Recunoasterea formelor
geometrice

Studenti:

Pestritu Ionut-Alexandru
Anton Andra- Ioana
Stefan Elena-Mihaela
Gingalau Alexandru
Grupa: 442B

Introducere
Vom desena o retea neuronala capabila sa identifice cateva forme geometrice conventionale.Pentru a ne
simplifica munca (din motive de simplitate) am ales urmatoarele forme: triunghiul, dreptunghiul si cercul.
Reteaua va fi o retea de tip MLP (Multilayer Perceptron) In primul rand, vom pregati esantioanele imaginii apoi
vom continua cu memorarea si in final cu recunoasterea formelor mai sus mentionate. Aceste procese se vor
desfasura in programul MAtlab prin exploatarea functiilor din biblioteca Neural Network Toolbox.
II.Pregatirea datelor de memorareantrenare si simulare
Datele utilizate sunt 4 imagini pentru fiecare tip de forma geometrica(12 in total) din care 9(3 din fiecare
tip de froma) vor fi utilizate pentru invatare /memorare iar 3 vor fi folosite pentru test. Imaginile sunt imagini
binare de tip bitmap cu o rezolutie de 192 x 160. Una din etapele necesare pentru pregatirea datelor este
procesarea/tratarea imaginilor cu scopul de a obtine imagini de dimensiuni uniforme si care nu prezinta
interferente (zgomot).Astfel, pentru a simplifica procesul, toate imaginile vor avea aceeasi dimensiune, nu vor
prezenta zgomote, iar formele vor avea aproape aceeasi dimensiune relativ la rezolutiile lor.

t1.bmp

r1.bmp

c1.bmp

Criteriul ales pentru umplerea matricei de intrare este de a diviza liniile unei imagini in seturi de 16 linii,
vom parcurge cele 16 linii si daca vom avea un pixel negru atunci vom memora valoarea absicei sale (nunmarul
coloanei) pe care o vom acumula intr-o matrice P. Cum imaginea noastra este de 160 linii, vom avea 10 intrari
corespunzatoare. Deci, matricea P va avea 10 linii si 9 coloane(numarul esantioanelor al datelor de intrare),
fiecare coloane reprezinta cele 10 caractere ale unei imagini. In acelasi mod trebuie pregatita o matrice T care
va indica la reteaua neuronala daca invatarea tulbura una din formele dreptunghi, triunghi sau cerc. Matricea
T e o matrice de dimensiune 3 x 9, astfel daca scriem valoarea 1 atunci forma asociata este adevarata si daca
scriem -1 forma este falsa. Prima linie reprezinta starea formei triunghiulare, a doua linie starea formei
dreptunghiulare, iar a treia linie starea corespunzatoare formei circulare. Codul asociat este:
%Etapa 1 - Pregatirea pentru introducerea datelor de antrenare
nr_intrari=10 ;
% numar de intrari
P=zeros(nr_intrari,9); % Definim si initializam matricea de intrare cu elemente 0 pe
10 randuri a cate 9 coloane
T=zeros(3,9);
% Definim si initializam matricea de iesire ideala(dorita)
pentru setul de antrenare cu elemente de 0 pe 3 randuri a cate 9 coloane
for h=1:9 % incarcare imagini cu bucla for
switch h
case 1
Img = imread('t1.bmp');
Target=[1;-1;-1] ; %vectorul iesirii dorite pentru triunghi
case 2
Img = imread('t2.bmp');

Target=[1;-1;-1] ;
case 3
Img = imread('t3.bmp');
Target=[1;-1;-1] ;
case 4
Img = imread('r1.bmp');
Target=[-1;1;-1] ; %vectorul iesirii dorite pentru patrat
case 5
Img = imread('r2.bmp');
Target=[-1;1;-1];
case 6
Img = imread('r3.bmp');
Target=[-1;1;-1];
case 7
Img = imread('c1.bmp'); %vectorul iesirii dorite pentru cerc
Target=[-1;-1;1];
case 8
Img = imread('c2.bmp');
Target=[-1;-1;1];
case 9
Img = imread('c3.bmp');
Target=[-1;-1;1];
end
T(:,h)=Target ; % Inlocuim valorile de 0 din matricea T cu cei 9 vectori de iesire
doriti. Fiecare vector va fi transpus si pus pe cate o coloana in matrice.
[nr_randuri,nr_coloane] = size(Img) ;% Functia pentru determinarea marimii imaginii
% Completam matricea P de intrare
for i=1:nr_intrari %de la 1-10
for j=(((nr_randuri/nr_intrari)*(i-1))+1) : ((nr_randuri/nr_intrari)*(i))
for k=1 : nr_coloane
if Img(j,k)==0 %daca pixelul este negru
P(i,h)=P(i,h)+k ; %ii adunam abcisa coloanei
end
end
end
end
end %terminare for

%Terminarea etapei de pregatire a datelor de antrenare


Dupa executie matricea P este:

si matricea T este :

Matricea de simulare S de dimensiune 10 x 3, reprezinta cele 10 criterii ale celor 3


imagini necesare pentru simulare.
% Etapa 2 - Pregatirea efectuarii simularii
S=zeros(nr_intrari,3); % Declararam si initializam matricea de simulare cu 0
for h=1:3 % Incarcam imaginile pentru simulare
switch h
case 1
Img = imread('t4.bmp');
case 2
Img = imread('r4.bmp');
case 3
Img = imread('c4.bmp');
end
[nr_randuri,nr_coloane] = size(Img) ; %aflarea dimensiunii matricii
% Completam matricea de simulare
for i=1:nr_intrari
for j=(((nr_randuri/nr_intrari)*(i-1))+1) : ((nr_randuri/nr_intrari)*(i))
for k=1 : nr_coloane
if Img(j,k)==0 %daca pixelul este negru
S(i,h)=S(i,h)+k ; %ii adunam abcisa coloanei
end
end
end
end
end

%Terminarea etapei de pregatire pentru simulare


Dupa executie, matricea S devine:

Urmeaza normalizarea valorilor matricilor P si S intre 1 si -1, codul asociat fiind


urmatorul:

% Etapa 3 - Normalizarea matricilor


A=[P,S] ; %uneste matricile P si S intr-o matrice A
maxi=max(max(A)); %calculeaza cea mai mare valoare din matricea A (max(A) afisa doar un
rand cu cele mai mari valori de pe fiecare coloana)
mini=min(min(A)); %calculeaza cea mai mica valoare din matricea A
[a,b]=size(A); %a=nr randuri, b=nr coloane
for i=1:a
for j=1:b
AN(i,j)=2*(A(i,j)/(maxi-mini))-1; %crearea unei matrici AN cu valori normalizate
intre -1 si 1
end
end
P=AN(:,1:9); %atribuirea valorilor normalizate matricii P
S=AN(:,10:12) %atribuirea valorilor normalizate matricii S

%Terminarea etapei de normalizare a matricilor


Dupa executie, matricile P si S sunt:

III. Invatarea si simularea


Reteaua neuronala este o retea MLP in care stratul ascuns contine 20 de neuroni cu functia de activare
tansig-sigmoidala si stratul de iesire contine 3 neuroni avand functia de activare purelin-liniara. Algoritmul
de invatare este traingd si reprezinta o functie de invatare cu propagare-inversa cu gradient descendent
(algoritmul se repeta pana ce se ajunge la convergenta(minim local), la fiecare repetare ajustandu-se ponderile si
bias-ul.
Feedforward arhitectura de retea neuronala in care conexiunile se propaga inainte si nu formeaza
cercuri(retele recurente)
Backpropagation algoritm de antrenare care contine 2 pasi: 1)imping valorile in fata(in stratul ascuns
apoi in iesiri) 2)calculeaza eroarea, ajusteaza ponderile si se propaga inapoi la straturile precedente

Codul etapei de creare si invatare este urmatorul:


%Etapa 4 - Crearea retelei neuronale si invtarea
nr_neuroni_ascunsi = 20;%numarul de neuroni din stratul ascuns
net = newff(P,T,nr_neuroni,ascunsi,{},'traingd'); %functia de creare retea feedforward
backpropagation cu functie de activare sigmoidala pentru stratul ascuns si funtie liniara
de activare pentru iesiri
net=init(net); % reinitializarea ponderilor si a biasului
net.trainparam.epochs=1000;% numarul maxim de itineratii
net.trainparam.goal=0.0001; % eroarea acceptat
net=train(net,P,T); % nceputul nvtrii

%terminarea nvtrii
%Etapa 5 - Etapa de simulare
y = sim(net,S);

% Terminarea simularii
Ceea ce trebuie mentionat e faptul ca algoritmul de propagare inversa utilizat este algoritmul gradientului
descendent ai carui parametrii initiali sunt:

Dupa executie, instrumentul nntraintool ne afiseaza:

Cu o variatie a erorii medii patratice:

Pentru etapa de simulare ne vom folosi de cele 3 esantioane mentionate mai sus ca fiind :triunghiul,
dreptunghiul si cercul.
Lansam simularea al carei cod este:
%Etapa 5 - Etapa de simulare
y = sim(net,S);
% Terminarea simularii
if (y(1,1) > y(2,1)) && (y(1,1)>y(3,1))
display ('**test triunghi trecut**');
end
if (y(2,2) > y(1,2))
display ('**test
end
if (y(3,3) > y(1,3))
display ('**test
end

&& (y(2,2)>y(3,2))
dreptunghi trecut**');
&& (y(3,3)>y(2,3))
cerc trecut**');

Si obtinem matricea de iesire Y:


Verdictul pentru prima
forma

Verdictul pentru
forma 3

Verdictul pentru forma


2

Linia 1 pentru forma


triunghiulara
Linia 2 pentru forma
dreptunghiulara
Linia 3 pentru forma circulara

Remarcam ca reteaua neuronala a identificat cu bine cele 3 forme geometrice. Pentru prima forma
descoperim ca obtinem valorile 0.37 triunghiulara, -0.3265 dreptunghiulara si de -1.1244 circulara.Deci
valoarea cea mai mare o are forma triunghiulara, astfel reteaua ne indica ca forma este triunghiulara, facand
exceptie de faptul ca stiam inca de la inceput acest lucru. Pentru forma a doua reteaua ne indica o forma
dreptunghiulara (1.5965>0.4745>-0.4391). Pentru a treia forma reteaua ne indica o forma circulara (0.2083>1.3437>-1.4397).
Deci, putem afirma ca reteaua neuronala a recunoscut fara probleme cele 3 forme.