Vous êtes sur la page 1sur 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

Thse de reconnaissance de formes

Mr CIRRINCIONE

Page 1 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

PLAN

1) Introduction

p3

2) Premire approche

p4

3) Problme trouv

p6

4) Travail ralis

p7

5) Rsultats

p10

6) Conclusion

p13

7) Annexe

p14

Mr CIRRINCIONE

Page 2 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

1) Introduction
Dans le cadre du cour de reconnaissance de forme, il nous a t demand de trouver une base de donnes utiliser avec un rseau de neurone. Ce rseau de neurone est ralis sous Matlab laide de Netlab. Dans un premier temps, nous avons apprit utiliser Netlab puis nous avons fait une longue recherche sur internet pour trouver notre base de donnes et enfin raliser notre rseau de neurone.

Mr CIRRINCIONE

Page 3 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

2) Premire approche
Dans un premier temps nous avons du trouver un problme ncessitant le recours la reconnaissance de forme. Une fois celui-ci trouv nous avons recherch une base de donnes permettant de le rsoudre. Le problme que nous avons choisit est la reconnaissance de modle de voiture (ex : Renault Twingo). Nous avons choisit ce problme car la base de donne tait importante, ce qui nous permet davoir un meilleur apprentissage et donc un nombre de correspondance importante. Voici un tableau montrant le nombre dexemple pour les tests et lapprentissage de chaque modle.

Cela ncessite de connatre les coordonnes des 4 coins de la plaque dimmatriculation, sous forme de coordonnes pixeliques. Nous avons donc au total 8 valeurs (2 pour chaque coin). Ces informations sont stockes dans un fichier diffrent pour chaque exemple, sous cette forme : 540 666 820 661 824 715 540 719 A B C D

Mr CIRRINCIONE

Page 4 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

Ces donnes correspondent aux entres du rseau de neurones (8 entres). Nous avons 5 classes, se qui signifie que nous avons 5 sorties. Notre but tait donc de programmer sous Matlab un rseau de neurones capable de dterminer le modle dune voiture uniquement avec les coordonnes des coins de la plaque dimmatriculation. Malheureusement ces paramtre dentre ne son pas suffisant pour notre base de donnes. En effet, pour une mme voiture, si nous prenons des photos avec des cadrages diffrents, nous allons avoir des coordonnes trs diffrentes pour le couple de points {ABCD}. Il nest donc pas concevable dutiliser ces paramtres en entre de notre rseau de neurone. Nous avons ds lors nous avons tudi les publications, de la personne qui nous a fournis la base de donne, pour comprendre la mthode quil a utilis dans son rseau de neurone. Nous avons alors dcouvert quil utilisait les point {ABCD} pour dcouper limage en une sous image de 200*600 qui reprsente le gabarit avant de la voiture. Ainsi, on peut extraire les coordonnes des points A,B,C,D et les distances H et W. ces paramtres sont cette fois si reprsentatif et utilisable par un rseau de neurone.

Toutefois nous navons pu raliser lextraction de la sous image. Cette transformation dpasse nos comptences et le temps mis a notre disposition nest pas suffisant. Nous avons donc dcid de partir sur une autre base de donn qui, jen suis sure va galement vous intresser.

Mr CIRRINCIONE

Page 5 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

3) Problme trouv
Base de donne cr par Michael Bain et Arthur van Hoff a linstitue de Turin

Entres du systme 1. Roi blanc (colonne) 2. Roi blanc (ligne) 3. Tour blanc (colonne) 4. Tour blanc (ligne) 5. Roi noir (colonne) 6. Roi noir (ligne)

Sortie du systme On trouve a partir des positions de ces trois pices le nombre de coup a jouer pour arriver a un chec et mat sur le roi noir en 16 coups maximum. On a donc 18 sorties {impossible ,0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11, 12, 13, 14, 15, 16} La base de donnes ne comporte pas de valeurs perdues. draw 2796 zero 27 one 78 two 246 three 81 four 198 five 471 six 592 seven 683 eight 1433 nine 1712 ten 1985 eleven 2854 twelve 3597 thirteen 4194 fourteen 4553 fifteen 2166 sixteen 390 Total 28056

Mr CIRRINCIONE

Page 6 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

4) Travail ralis
a) Mise en forme de la base de donnes La base de donnes initiale tait en un seul block, nous avons donc dcoup cette base en deux parties. La 1ere pour la base de donnes dapprentissage et la 2eme pour la base de donnes de test. De plus la base initiale tait sous la forme : a,1,b,3,c,2,draw d,4,h,8,h,5,ten a,1,a,3,c,1,eleven Nous avons donc remplac les mots et les lettres par des nombres 0,1,1,3,2,2,0

Puis nous avons mis les bases sous une forme exploitable par le fonction netlab : datread()
nin 1 1 1 1 1 1 6 2 3 3 nout 18 3 3 2 1 1 3 2 1 1 4 1 1 ndata 0 0 0 0 0 0 0 0 0 2635 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Pour finir, nous avons rparti la base dans les proportions suivante pour lapprentissage et pour les tests. Apprentissage Impossible 932 0 9 1 26 2 82 3 27 4 66 5 157 6 197 7 227 8 481 9 570 10 661 11 951 12 1199 13 1398 14 1517 15 722 16 130 total : 9352 Mr CIRRINCIONE Test 1864 18 52 164 54 132 314 395 456 962 1142 1324 1903 2398 2796 3036 1444 260 18704 Page 7 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

b) Lecture des bases de donnes et normalisation Dans un premier temps notre programme doit aller chercher toutes les donnes, aussi bien celles permettant lapprentissage que celles utilis pour tester la validit de notre rseau. Toutes ces donnes sont sauvegardes dans 2 matrices distinctes (X_train et X_test). Afin dtre sur que toutes ces donnes aient la mme importance dans le cas o ces valeurs ne soient pas nous avons du raliser une normalisation Puis nous normalisons les valeurs des matrices pour nous permettre de comparer toutes les entres mme si elles nont pas les mmes units et les mmes plages de valeurs. En effet, il nest pas concevable de comparer par exemple des kg et des km. De plus il est prfrable dviter de trop grandes variances entre les valeurs, ce qui nous vite de ngliger les valeurs trop faible par rapport a dautres plus importante (ex : 0.01kg sera nglig face a 50km).

Tableau reprsentant les exemples, suivant les diffrentes entres :

Exemple 1 Exemple 2 Exemple m-1 Exemple m

Entre 1 X1,1 X1,1 Xm-1,1 Xm,1

Entre n X1,n X2,n Xm-1,n Xm,n

Tout dabord nous calculons la moyenne de chaque colonne (not ), ainsi que la variance (not ).
m

1 =

X i1
i =1

2 =

(X
i =1

i1

1)

Ensuite pour chaque exemple nous utilisons la fonction suivante :

Zij =

Xij j j

Mr CIRRINCIONE

Page 8 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

c) Cration du rseau de neurone Pour crer le rseau de neurone nous utilisons la fonction mlp (perceptron multi couche) qui prend en paramtre le nombre dentre, le nombre de sortie, le nombre de neurones cachs et la fonction dactivation. Nous nutilisons que deux paramtres doption. Le premier nous permet de visualiser lerreur au fur et mesure quelle est calcule, lautre nous permet de spcifier le nombre ditration que lon souhaite effectuer.

d) Apprentissage Pour cela nous utilisons la fonction netopt qui prend en paramtre le rseau de neurone prcdemment cr, les options, les exemples normalis, les target, et lalgorithme doptimisation. e) test Ensuite nous utilisons la fonction mlpfwd qui prend en compte le rseau de neurone aprs apprentissage et la base de donnes de test normalis. Pour finir nous affichons la matrice de confusion pour vrifier la qualit de nos rsultats grce la fonction conffig .

Mr CIRRINCIONE

Page 9 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

5) Rsultats
Nous avons, dans un premier temps, fait tourner notre rseau de neurone avec les bases compltent. En raison du nombre de donnes trs impotentes dans cette base, nous devions attendre plus dune heure pour avoir un rsultat. Nous avons donc dcid de rduire la taille de notre base de donnes pour effectuer notre analyse.

Neurones cachs : 10 Itrations : 50 Normalisation : non Apprentissage : quasinew Nous navons mme pas 50% de correspondance. Mais nous pouvons remarquer que le nombre de neurones cachs est insuffisant pour notre problme. En effet nous avons 6 entres et 18 sorties. Il nous parait importent davoir plus de neurones cachs que dentres/sorties. Cest pour cela que nous avons dans un premier temps fait varier le nombre de neurones cachs.

Neurones cachs : 80 Itrations : 50 Normalisation : non Apprentissage : quasinew Nous avons ici un bien meilleur rsultat. Cette fois-ci, le nombre de neurones cach est bien plus importent que le nombre dentres/sorties, ce qui permet a notre rseau de neurone de mieux apprendre et donc dobtenir un meilleur rsultat. Puis nous avons test la normalisation (voir 2.B). il est importent que toutes les entres aient la mme influence sur le systme.

Mr CIRRINCIONE

Page 10 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

Neurones cachs : 80 Itrations : 50 Normalisation : oui Apprentissage : quasinew Nous pouvons donc voir que la normalisation a un effet positif sur les rsultats. Il nous reste encore tester diffrentes mthode dapprentissage. Nous somme ici sur un quasinew.

Neurones cachs : 80 Itrations : 50 Normalisation : oui Apprentissage : scg Nous avons remarqu que la mthode dapprentissage ntait pas un facteur trs importent dans les rsultats obtenus. Toute fois, nous avons un maximum avec la mthode scg. Pour finir il nous reste plus qua faire varier le nombre ditrations pour affiner notre rseau de neurone.

Mr CIRRINCIONE

Page 11 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

Neurones cachs : 80 Itrations : 235 Normalisation : oui Apprentissage : scg Au final nous avons un rsultat trs satisfaisant pour notre rseau de neurone. Nous avons remarqu que notre rseau navais pas suffisamment apprit avec 50 itrations. De plus nous avons remarqu quun trop grand entrainement provoquait une augmentation de lerreur (comme nous avons pu le voir dans le cour).

Mr CIRRINCIONE

Page 12 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

6) Conclusion
Lors de ce petit projet, nous avons apprit utiliser les fonctions de Netlab. Nous avons galement vue comment utiliser une base de donnes et la mettre en forme pour ensuite lutiliser dans une base de donnes. Mais surtout nous avons acquit une certaine exprience dans la cration et lutilisation des rseaux de neurones. Cela nous a permis denfin voir une utilisation concrte des diffrents cours de reconnaissance de forme.

Mr CIRRINCIONE

Page 13 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

7) Annexe
a) Code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CAZY Thomas & CHEVREUX Stphane & MERCIER Arnaud % % TP de reconnaissance de forme % % Echec et mat % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all close all clc

%-------------------------------------------------% Initialisations %-------------------------------------------------nhidden = 80; % Neuronnes cachs alpha = 0; % Pour la rgularisation de l'erreur [X_train, t_train, nin, nout, ndata_train]=datread('data_test.txt'); [X_test, t_test, nin, nout, ndata_test]=datread('data_train.txt');

%-------------------------------------------------% Normalisation %-------------------------------------------------moyenne_X_train = mean(X_train); moyenne_X_test = mean(X_test); variance_train=zeros(1,nin); variance_test=zeros(1,nin); for i=1:ndata_train for k=1:nin variance_train(1,k) = variance_train(1,k) + (X_train(i,k)moyenne_X_train(k))^2; end end for i=1:ndata_test for k=1:nin variance_test(1,k) = variance_test(1,k) + (X_test(i,k)moyenne_X_test(k))^2; end end for j=1:nin variance_train (1,j) = variance_train (1,j)/ndata_train; variance_test (1,j) = variance_test (1,j)/ndata_test; end for ligne=1:ndata_train for col=1:nin Z_train(ligne,col) = (X_train(ligne,col)-moyenne_X_train(col)) / sqrt(variance_train(col)); end end

Mr CIRRINCIONE

Page 14 / 15

Arnaud MERCIER

Thomas CAZY

Stphane CHEVREUX

for ligne=1:ndata_test for col=1:nin Z_test(ligne,col) = (X_test(ligne,col)-moyenne_X_test(col)) / sqrt(variance_test(col)); end end

%-------------------------------------------------% Cration du rseau %-------------------------------------------------net = mlp(nin, nhidden, nout, 'softmax', alpha); l'achitecture du rseau options = zeros(1,18); options(1) = 1; options(14) = 235;

% Cration de

% Visualisation de l'erreur % Nombre d'itration

clc disp('Cration du resau effectue') pause

%-------------------------------------------------% Apprentissage %-------------------------------------------------[net, options] = netopt(net, options, Z_train, t_train, 'SCG'); Apprentissage disp('Apprentissage effectue') pause

%-------------------------------------------------% Rsultats %-------------------------------------------------[y] = mlpfwd(net, Z_test); %Testing CONFFIG(y, t_test) %Matrice de confusion

b) Extrait de la base de donnes

1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1

3 3 3 3 3 3 4 4 4 4 4 4 4

2 3 3 3 3 4 1 1 1 1 1 2 2

4 3 4 4 4 4 3 3 4 5 5 3 3

3 2 2 3 4 3 1 2 2 1 2 1 3

1 0 0 1 0 0 0 0 0 0 0 0 0

0 1 1 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 1
Page 15 / 15

Mr CIRRINCIONE