0% ont trouvé ce document utile (0 vote)
112 vues31 pages

Rapport Pos

Ce document présente un projet tutoré sur la reconnaissance des panneaux routiers à l'aide de réseaux de neurones convolutifs (CNN), réalisé par Hamza EL Ghali, Abdelmoghit Ezouine et Yasyn Najih sous la supervision du Prof. Tarik Berroug. Le projet vise à développer un modèle capable de classer les panneaux de signalisation pour les véhicules autonomes, en utilisant des techniques d'apprentissage automatique et le langage de programmation Python. Le mémoire est structuré en trois chapitres, abordant respectivement l'apprentissage automatique, les réseaux de neurones et l'implémentation pratique du modèle.

Transféré par

halimabaddou62
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
112 vues31 pages

Rapport Pos

Ce document présente un projet tutoré sur la reconnaissance des panneaux routiers à l'aide de réseaux de neurones convolutifs (CNN), réalisé par Hamza EL Ghali, Abdelmoghit Ezouine et Yasyn Najih sous la supervision du Prof. Tarik Berroug. Le projet vise à développer un modèle capable de classer les panneaux de signalisation pour les véhicules autonomes, en utilisant des techniques d'apprentissage automatique et le langage de programmation Python. Le mémoire est structuré en trois chapitres, abordant respectivement l'apprentissage automatique, les réseaux de neurones et l'implémentation pratique du modèle.

Transféré par

halimabaddou62
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Département de Mathématiques, Informatique et Gestion

Filière Sciences Mathématiques et Informatique

Numéro d’ordre : ...

La reconnaissance des panneaux routières par les réseaux de


neurones convolatifs (CNN)

Projet tutoré préparé par :


Hamza EL Ghali
Abdelmoghit Ezouine
Yasyn Najih

Sous l’encadrement de
Prof. Tarik Berroug

Soutenu le : 11/06/2021

Devant le jury :

Prof Tarik Berroug. : Professeur à la Faculté Polydisciplinaire de Ouarzazate


Prof Ali Ou-Yassine. : Professeur à la Faculté Polydisciplinaire de Ouarzazate

Année Universitaire : 2020-2021

1
Dédicaces

A Allah

Le Tout-Puissant pour sa Grâce et son Amour qui nous ont permis d’achever ce travail.

A nos très chères et douces Mères et à nos très chers Pères

Qui nous ont fourni au quotidien un soutien et une confiance sans faille, pour leur patience et sagesse.
Aucun mot ne saurait exprimer notre gratitude, notre amour et notre profond respect à vous tous. Puisse
Dieu, tout puissant, vous prêter longue vie, santé et bonheur.

A nos précieux frères et sœurs

Pour leur aide et leur amour qui nous ont permis de surmonter tant de difficultés et obstacles, en particu-
lier quand les choses tournaient au pire.

A tous nos amis fidèles

Qui ont su être là quand nous en avions besoin.

A tous nos Professeurs

Qui ont contribué à notre éducation et formation et qui, par leurs compétences, nous ont soutenus dans
la poursuite de nos études.

A l’ensemble du corps administratif de la Faculté Polydisciplinaire

Qui a su être présent pendant ces trois années et pour qui nous donnons tout le mérite, de nous avoir
guidés vers le chemin de la réussite.

2
Remerciements

Apres avoir rendu grâce à ALLAH le tout puissant et le miséricordieux de nous avoir donné le
courage, la volonté et la patience afin d’achever ce projet de fin d’étude. Nous tenons à remercier vivement
tous ceux qui, de pris ou de loin ont participé à la rédaction de ce rapport il s’agit plus particulièrement
de notre encadrant Monsieur Tarik Berroug pour sa disponibilité, sa rigueur scientifique et son sens
d’écoute et d’échange de plus ses remarques pertinentes et son encouragement.
Nos grands remerciements vont également à l’examinateur de notre jury, Monsieur Ali Ou-Yassine,
d’avoir accepté d’évaluer notre travail et d’avoir, prit le temps de l’évaluer soigneusement, ainsi que les
remarques formulées à ce propos.
Un grand merci à nos mères et nos pères, pour leurs conseils ainsi que leur soutien inconditionnel, à
la fois moral et économique. Nous voudrions exprimer nos reconnaissances envers les amis et collègues
qui nous ont apporté leur soutien moral et intellectuel tout au long de ce projet.
Nous saisissons cette occasion pour adresser nos profonds remerciements à tous les professeurs de la
filière sciences mathématiques et informatique pour la qualité de l’enseignement qui nous ont fourni les
outils nécessaires au bon déroulement de notre projet.

3
Table des matières
Remerciements 3

Introduction générale 5

1 La Machine Learning 7
1.1 Définition et histoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Les types d’apprentissage automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.1 Apprentissage supervisé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Apprentissage non-supervisé . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3 Apprentissage par renforcement . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2 Réseau de neurone (NN) ou Deep Learning (DL) 9


2.1 Les Neurones artificiels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Définition et comparaison avec un neurone biologique . . . . . . . . . . . . . . 9
2.2 Introduction aux réseaux des neurones . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Les images numériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.3 Convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.4 Les fonctions d’activation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.5 Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.6 Flatten Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.7 Les différentes couches (Layers) d’un CNN . . . . . . . . . . . . . . . . . . . . 17
2.3.8 Full connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.9 Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3 Implémentation 22
3.1 L’environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.1 Langage (Python) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.2 Bibliothèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.3 IDE (Jupyter Notebook) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 L’ensemble des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.1 Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2 Explorer les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 La création du Modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.1 Construction du modèle CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.2 Entraîner, valider et tester le modèle . . . . . . . . . . . . . . . . . . . . . . . . 27
Conclusion 30

Bibliographie 31
4
Introduction générale

Vous devez avoir entendu parler des voitures à conduite autonome dans lesquelles le passager peut
entièrement dépendre de la voiture pour se déplacer. Mais pour atteindre ce niveau d’autonomie, il est
nécessaire que les véhicules comprennent et suivent toutes les règles de circulation. Dans le monde de
l’intelligence artificielle et de l’avancement des technologies, de nombreux chercheurs et de grandes
entreprises comme Tesla, Uber, Google, Mercedes-Benz, etc. travaillent sur les véhicules autonomes et
les voitures à conduite autonome. Ainsi, pour atteindre la précision dans cette technologie, les véhi-
cules doivent être capables d’interpréter les panneaux de signalisation et de prendre des décisions en
conséquence. Qu’est-ce que la reconnaissance des panneaux de signalisation ? Il existe plusieurs types de
panneaux de signalisation comme les limitations de vitesse, l’interdiction d’entrer, de tourner à gauche
ou à droite, la traversée des enfants, etc. La classification des panneaux de signalisation est le processus
d’identification de la classe à laquelle appartient un panneau de signalisation.

Ce travail s’inscrit dans le cadre du projet tutoré pour l’obtention du diplôme de licence fondamentale
Sciences Mathématiques et Informatique (SMI), au sein de la Faculté Polydisciplinaire de Ouarzazate. Le
travail présenté dans ce mémoire s’inclut dans le domaine d’Apprentissage automatique (Machine Lear-
ning), plus particulièrement, il s’intéresse à la reconnaissance des Panneaux de Signalisation Routière.
L’objectif dans ce projet est la classification des images de la base de données, qui consiste à répartir
les données en un sous-ensemble d’apprentissage et un sous-ensemble test, entrainer un classificateur
sur l’ensemble d’apprentissage et l’évaluer sur l’ensemble test. Pour la réalisation de ce travail nous
nous intéressons au réseau de neurone convolutif (CNN), ainsi qu’au langage de programmation Python
en raison de ses avantages au niveau de sa portabilité, ce langage peut théoriquement être exécuté sur
n’importe quelle plate-forme. Dans cet exemple de projet Python, nous allons construire un modèle de
réseau neuronal profond capable de classer les panneaux de signalisation présents dans l’image en dif-
férentes catégories. Avec ce modèle, nous sommes en mesure de lire et de comprendre les panneaux de
signalisation, ce qui est une tâche très importante pour tous les véhicules autonomes.

5
Ce projet a pour but : Développer un réseau neuronal qui lit les panneaux de signalisation et les
classifie correctement. Voici les étapes que nous suivrons pour accomplir cette tâche :
— Explorer et visualiser les données
— Développer un modèle CNN
— Entraîner et valider le modèle
— Optimiser le modèle en expérimentant avec différents hyper-paramètres
— Tester le modèle avec les données de test
Ce mémoire comporte trois chapitres :

— Chapitre 1 : nous allons parler, dans ce chapitre, de l’apprentissage automatique (MACHINE


LEARNING).
— Chapitre 2 : on s’intéresse ici aux réseaux de neurones : Méthode approuvée pour classer les
Images.
— Chapitre 3 : ce chapitre concerne l’implémentation des principes de CNN sur l’environnement
d’application.

6
Chapitre 1

La Machine Learning

1.1 Définition et histoire


En 1956 , Arthur Samuel a créé un programme pour jouer aux dames qui utilise des stratégies et
des techniques pour calculer les chances de victoire et l’action optimale à prendre en supposant que
l’adversaire joue d’une manière optimale, il a aussi désigner un mécanisme pour que ce programme se
développe par rappeler les précédentes actions des dames et les comparer avec les chances de victoire.
Arthur est la première personne qui a nommé ce domaine « machine learning ». De nos jours la ML est
une technique utilisée dans plusieurs domaines tels que la sécurité, médecine, statistique etc... .
Machine learning ou également apprentissage automatique, est une application de l’intelligence arti-
ficielle (imiter l’intelligence humaine de façon artificielle). Si on dit que IA est l’idée la machine learning
représente l’implémentation de cette idée.
L’objectif est donc de rendre la machine capable d’apprendre et se développer sans l’aide d’un pro-
gramme explicite, pour cela la machine a besoin des données à analyser et sur lesquelles s’entrainer,
alors les données représentent le cœur de la machine learning.

1.2 Les types d’apprentissage automatique


Les types d’apprentissage automatique sont divisé en deux catégories : des types qui fonctionnent
selon des entrainements sur des donnés qui ont des sorties et d’autres qui aident la machine à prédire la
sortie. En général il y a trois types majeurs :
— Apprentissage supervisé.
— Apprentissage non-supervisé.
— Apprentissage par renforcement.

1.2.1 Apprentissage supervisé


Si les classes sont prédéterminées et les exemples connus, le système apprend à classer selon un mo-
dèle de classement, on parle alors d’apprentissage supervisé(ou d’analyse discriminante). Un expert doit
préalablement étiqueter des exemples. Le processus se passe en deux phases. Lors de la première phase
(hors ligne, dite d’apprentissage), il s’agit de déterminer un modèle des données étiquetées. La seconde
phase (en ligne, dite de test) consiste à prédire l’étiquette d’une nouvelle donnée, connaissant le modèle
préalablement appris. Parfois il est préférable d’associer une donnée non pas à une classe unique, mais

7
à une probabilité d’appartenance à chacune des classes prédéterminées (on parle alors d’apprentissage
supervisé probabiliste).

1.2.2 Apprentissage non-supervisé


À la différence de l’apprentissage supervisé, l’apprentissage non supervisé est celui où l’algorithme
doit opérer à partir d’exemples non annotés. En effet, dans ce cas de figure, l’apprentissage par la machine
se fait de manière entièrement indépendante. Des données sont alors renseignées à la machine sans qu’on
lui fournisse des exemples de résultats.
Ainsi, dans cette situation d’apprentissage, les réponses que l’on veut trouver ne sont pas présentes
dans les données fournies : l’algorithme utilise des données non étiquetées. On attend donc de la
machine qu’elle crée elle-même les réponses grâce à différentes analyses et au classement des données.
Les modèles d’apprentissage non-supervisé sont notamment utilisés pour :
— Le classement des données
— Le calcul approximatif de la densité de distribution
— La réduction des dimensions.

1.2.3 Apprentissage par renforcement


L’apprentissage par renforcement consiste, pour un agent autonome (robot, etc.), à apprendre les
actions à prendre, à partir d’expériences, de façon à optimiser une récompense quantitative au cours
du temps. L’agent est plongé au sein d’un environnement, et prend ses décisions en fonction de son
état courant. En retour, l’environnement procure à l’agent une récompense, qui peut être positive ou
négative. L’agent cherche, à travers d’expériences itérées, un comportement décisionnel (appelé stratégie
ou politique, et qui est une fonction associant à l’état courant l’action à exécuter) optimal, en ce sens qu’il
maximise la somme des récompenses au cours du temps.

8
Chapitre 2

Réseau de neurone (NN)ou Deep Learning


(DL)

2.1 Les Neurones artificiels


2.1.1 Définition et comparaison avec un neurone biologique
Les neurones artificiels sont simplement des systèmes inspirés du fonctionnement des neurones bio-
logiques. Un système artificiel capable d’apprendre par l’expérience et qui a été modélisé par ‘Franck
Rosenblatt’ en 1957. De façon très réductrice, un neurone biologique est une cellule qui se caractérise
par : des synapses, les points de connexion avec les autres neurones, fibres nerveuses ou musculaires, des
dendrites ou entrées des neurones, les axones, ou sorties du neurone vers d’autres neurones, le noyau qui
active les sorties en fonction des stimulations en entrée.
Par analogie, le neurone formel est un modèle qui se caractérise par :
— un état interne s Appartient S
— des signaux d’entrée X1, . . ., Xp
— une fonction d’activation
Sur la base de ces fonctions et principes de fonctionnement, nous pourrons comparer un neurone bio-
logique et un neurone artificiel comme ci-après.

FIGURE 2.1 – neurone bio vs artificiel

9
2.2 Introduction aux réseaux des neurones
Pourquoi recourir à des réseaux de neurones ?
La réponse est plutôt simple dans le sens où les réseaux de neurones s’avèrent plus performants que les
autres algorithmes et les techniques de régressions pour des tâches de Machine Learning.

En mathématiques, la régression recouvre plusieurs méthodes d’analyse statistique permettant d’appro-


cher une variable à partir d’autres qui lui sont corrélées.
Quelques domaines d’applications des réseaux de neurones :
La reconnaissance d’image - Les classifications de textes ou d’images - Identification d’objets - Prédic-
tion de données - Filtrage d’un set de données . . . .
Les types de réseaux de neurones diffèrent par plusieurs paramètres : - La topologie des connexions entre
les neurones - la fonction d’agrégation utilisée (somme pondérée, distance pseudo-euclidienne...) - la
fonction de seuillage utilisée (sigmoïde, échelon, fonction linéaire, fonction de Gauss, ) - l’algorithme
d’apprentissage (rétro-propagation du gradient, cascade corrélation...) . . . .

2.3 CNN
2.3.1 Définition
Pour le traitement d’informations complexes et très variées (comme la classification d’image), il
est envisageable de créer plusieurs réseaux de neurones distincts dédiés à traiter chacun une partie de
l’information. Ces réseaux de neurones sont appelés des réseaux neuronaux convolutifs (Convolutional
Neural Networks). Ç’est pourquoi nous avons choisi ce type de réseau.

FIGURE 2.2 – simple architecture de CNN

Un réseau neuronal convolutif est un type de réseau multicouche. Il est procédé sur chacune de ces
couches à une reconnaissance de motif. Le résultat obtenu sur chaque couche est transmis à la couche
suivante.
CNN est une classe de réseaux de neurones d’apprentissage en profondeur. En bref, considérez CNN
comme un algorithme d’apprentissage automatique qui peut prendre une image d’entrée, attribuer de
l’importance à divers aspects / objets de l’image et être capable de les différencier les uns des autres.
CNN fonctionne en extrayant des caractéristiques des images.
Tout CNN comprend les éléments suivants comme elle le montre la figure précédente (figure2.2) :
— La phase d’Input ; La couche d’entrée qui est une image en niveaux de gris.

10
— La phase d’Output ; La couche de sortie qui est une étiquette binaire ou multi-classe
— Les phases cachées ; constituées de couches de convolution, ReLU (unité linéaire rectifiée), les
couches de "mise en commun" (Pooling Layers) et d’un réseau de neurones entièrement connecté
(Fully connected).
Ces réseaux peuvent être imaginés comme une compilation d’un segment d’informations pour au
final traiter l’ensemble de l’information (par exemple le traitement d’image est basé sur l’analyse des
pixels).

2.3.2 Les images numériques


Une image numérique est constituée d’un ensemble de points appelés pixels (picture element). Le
pixel représente ainsi le plus petit élément constitutif d’une image numérique. L’ensemble de ces pixels
est contenu dans un tableau de deux dimensions (matrice) constituant l’image (figure 2.3).

FIGURE 2.3 – pixels

2.3.3 Convolution
Introduction
La convolution est la première phase de CNN et sa base. Il s’agit de glisser le filtre (créé par notre
réseau en phase d’entrainement se basant sur la database) sur l’image (input) pour obtenir l’image convo-
luée (feature map), l’image suivante est un exemple :

FIGURE 2.4 – convolution-feature map

11
Le fonctionnement de la convolution
Pour savoir comment la convolution fonctionne voici un exemple :
Dans l’exemple, on prend un filtre de 3*3 et une image de taille 9*9 avec une dimension (deux
possibilités, pixel=0 ou pixel=1). Et on choisit une matrice (élémentaire) de même taille que le filtre,
comme le montre la figure 2.5.

FIGURE 2.5 – convolution

On multiple la valeur de chaque position de la matrice élémentaire d’image par la valeur de la même
position dans le filtre (voir la figure 2.6 ).

FIGURE 2.6 – convolution

On ajoute les valeurs de la matrice obtenue et les divise sur le nombre des valeurs de la matrice obtenue
(dans notre cas le nombre des valeurs est 9 ) :
8/9 =0,78 (avec, 8 = (-1) +1 +1 +1 +1 +1 +1 +1 +1 )
On répète les trois précédentes étapes en glissant (convolant) le filtre sur l’image par un pixel (à droite ou
en bas) à chaque fois comme le montre la figure 2.7. En fin on trouve une matrice qui représente l’image
convoluée (Figure 2.8) de la taille qui est égale à :
(Nombre de colonne d’image initial –nombre de colonne de filtre + 1)* (nombre de lignes d’image
initial –nombre de lignes de filtre + 1).
Puisque presque toutes les données traitées par notre réseau sont non linéaires, donc on utilise la fonction
Relu pour avoir une non linéarité dans le réseau car Relu est la plus commune des fonctions utilisées dans
CNN. On applique Relu sur notre image convoluée ce qui donne le résultat de la figure 2.9.

12
FIGURE 2.7 – convolution

FIGURE 2.8 – convolution

13
FIGURE 2.9 – convolution

2.3.4 Les fonctions d’activation


Définition générale
Une fonction d’activation est une fonction mathématique appliquée à un signal en sortie d’un neu-
rone artificiel d’un réseau de neurone pour maximiser le potentiel du réseau et l’aider à apprendre des
modèles complexes. Si la fonction n’est pas appliqué , le signal de sortie sera une fonction linéaire et
l’apprentissage du réseau sera limité.

Les fonctions utilisées


Il y a plusieurs fonctions d’activation qu’on peut utiliser dans notre réseau comme sigmoïde(), tanh(),
Relu(), softmax(), elu() etc. Dans notre projet, on va utiliser les deux suivantes :

Relu (La fonction Rectified Linear Unit) : est la fonction d’activation la plus simple et la plus uti-
lisée. Relu introduit la non linéarité au réseau et grâce à sa simplicité il n y a pas de calculs complexes,
ce que aide à augmenter la vitesse d’entraîner notre réseau. Elle est donnée par :

FIGURE 2.10 – Le graphe et l’expression de Relu

14
Softmax : La fonction Softmax permet de transformer un vecteur réel en un vecteur de probabilité. On
l’utilise souvent dans la couche finale d’un modèle de classification, notamment pour les problèmes multi
classe.

FIGURE 2.11 – Le graphe et l’expression de Softmax

2.3.5 Pooling
Définition :
Pooling est la seconde phase de CNN qui prend place après la convolution, cette phase est responsable
de la réduction de taille de l’image convoluée ce qui aide à réduire les opérations et les calculs requis
pour traiter les données dans le réseau.

Les types de pooling


Il y a deux types différents de pooling qu’on peut appliquer dans un réseau CNN :
— A - Max Pooling :
C’est une opération qui sélectionne l’élément maximum de la région couverte par le filtre dans l’image
convoluée, et qui donne comme résultat une nouvelle image convoluée qui contient les plus importantes
caractéristiques de la première. (Voir l’exemple dans la figure 2.12).
— B - Average Pooling :
C’est une opération qui calcule la moyenne des éléments de la région couverte par le filtre dans l’image
convoluée, et qui donne comme résultat une nouvelle image convoluée qui contient les moyennes des
caractéristiques de la première. (Voir l’exemple dans la figure 2.13).

15
FIGURE 2.12 – Max Pooling

FIGURE 2.13 – Average Pooling

— Remarque :
- Max pooling est plus efficace que average pooling.
- On peut appliquer la convolution et pooling sur une image plusieurs fois pour obtenir des caractéris-
tiques plus précises ce qui aide à une bonne classification de l’image.

2.3.6 Flatten Layers


Nous avons ainsi, la carte d’entités groupées, après avoir appliqué l’opération de convolution et poo-
ling à notre image. Qu’allons-nous faire avec cette carte des entités groupées? et qu’est-ce que l’apla-
tissement (flattening) ?
Nous allons la prendre et nous allons l’aplatir dans une colonne. En gros, on prend simplement les
nombres ligne par ligne et on les met dans cette longue colonne.

FIGURE 2.14 – flatten-feature map

16
Le but est que nous souhaitons entrer plus tard ceci dans un réseau neuronal artificiel pour un traite-
ment ultérieur. Lorsque nous avons de nombreuses couches de pooling, ou que nous avons les couches de
pooling avec de nombreuses cartes d’entités groupées, nous les aplatissons. Donc, nous les mettons dans
cette longue colonne séquentiellement l’une après l’autre. Et nous obtenons un énorme vecteur d’entrées
pour un réseau neuronal artificiel.

FIGURE 2.15 – flatten-input layer

FIGURE 2.16 – flatten-CNN

Donc, pour résumer tout cela, nous avons une image d’entrée. Nous appliquons une couche de
convolution, puis nous appliquons la "mise en commun" (pooling), puis nous aplatissons tout en un long
vecteur qui sera notre couche d’entrée pour un réseau de neurones artificiels (figure 2.16).

2.3.7 Les différentes couches (Layers) d’un CNN


Un CNN contient trois types de couches, chaqu’une a son rôle.

2.3.7.1 Input layer


Cette couche reçoit le vecteur généré d’après la phase "flattening" , donc il faut au moins avoir un seul
neurone pour créer la couche. Le nombre des neurones (input) dépend de la taille du vecteur "flattening".

17
FIGURE 2.17 – input layer de CNN

2.3.7.2 Hidden Layer


Ce sont des couches situées entre la couche d’entrée et de sortie, ces couches aident à calculer les
résultats finals de couche de sortie.

FIGURE 2.18 – Hidden layer

2.3.7.3 Output Layer


Cette couche est responsable de la production du résultat final de notre CNN. Le nombre des neurones
outputs est défini par le nombre des classes de notre problème (si notre problème est de classifier 5 objets
différents donc le nombre des neurones de sortie ‘outputs’ sera 5).

18
FIGURE 2.19 – ouput layer

On peut décomposer chaque neurone des couches cachée et de sortie comme suit :

FIGURE 2.20 – décomposition d’un neurone

— A- La phase de pré-activation :

Pour calculer la valeur, il faut multiplier tout simplement tous les X[i] avec les W[i], ensuite addition-
ner les résultats obtenus, puis ajouter un biais b, comme le montre la figure suivante :

FIGURE 2.21 – pré-activation d’un neurone

19
— B- La phase d’activation :

On applique la fonction d’activation au résultat obtenu dans la phase pré-activation. Cette valeur est
utilisée comme nouvelle valeur de x pour les neurones de la couche suivante qui va être soit une couche
cachée soit une couche de sortie.
Activation = fonction d’activation (pré-activation)

2.3.8 Full connection


La couche entièrement connectée (fully-connected) constitue toujours la dernière couche d’un réseau
de neurones, convolutif ou non – elle n’est donc pas caractéristique d’un CNN. Ce type de couche reçoit
un vecteur en entrée et produit un nouveau vecteur en sortie. Pour cela, elle applique une combinaison
linéaire puis éventuellement une fonction d’activation aux valeurs reçues en entrée.
La couche "fully-connected" permet de classifier l’image en entrée du réseau : elle renvoie un vecteur de
taille N, où N est le nombre de classes dans notre problème de classification d’images. Chaque élément
du vecteur indique la probabilité pour l’image en entrée d’appartenir à une classe.
Par exemple, si le problème consiste à distinguer les chats des chiens (figure 2.22), le vecteur final sera
de taille 2 : le premier élément (respectivement, le deuxième) donne la probabilité d’appartenir à la classe
"chat" (respectivement "chien"). Ainsi, le vecteur [0.9 , 0.1] signifie que l’image a 90% de chances de
représenter un chat et 10% de chances de représenter un chien . Chaque valeur du tableau en entrée

FIGURE 2.22 – full connection

"vote" en faveur d’une classe. Les votes n’ont pas tous la même importance : la couche leur accorde
des poids qui dépendent de l’élément du tableau et de la classe. Pour calculer les probabilités, la couche
"fully-connected" multiplie donc chaque élément en entrée par un poids, fait la somme, puis applique une
fonction d’activation ( Relu(), Softmax(), tanh() ) .

2.3.9 Backpropagation
La rétro-propagation est l’essence de l’entrainement des réseaux neuronaux. Elle consiste à détermi-
ner l’impact de la modification des poids "weights" sur l’erreur globale du réseau neuronal. Il s’agit d’une
méthode de réglage fin des poids d’un réseau neuronal en fonction du taux d’erreur "error rate" obtenu à

20
l’itération précédente. Un réglage correct des poids permet de réduire les taux d’erreur et de fiabiliser le
modèle en augmentant sa généralisation. Cette méthode permet de calculer le gradient d’une fonction de
perte par rapport à tous les poids du réseau.

Fonctionnement de la rétro-propagation : algorithme simple


Considérons le schéma suivant :

FIGURE 2.23 – backpropagation.

— Les entrées "inputs" X, arrivent par le chemin pré-connecté


— L’entrée est modélisée à l’aide de poids réels W. Les poids sont généralement choisis de manière
aléatoire
— Calculez la sortie pour chaque neurone de la couche d’entrée, pour les couches cachées et ce
jusqu’à la couche de sortie
— Calculez l’erreur dans les sorties Erreur = Sortie réelle - Sortie souhaitée
— Retournez de la couche de sortie à la couche cachée pour ajuster les poids de façon à réduire
l’erreur
Répétez le processus jusqu’à ce que le résultat souhaité soit atteint.

21
Chapitre 3

Implémentation

3.1 L’environnement
3.1.1 Langage (Python)

FIGURE 3.1 – Logo python

A- Définition et histoire de Python


Python est un langage de programmation de haut niveau et open source, créé par le programmeur
Guido van Rossum en 1991.
Il s’agit d’un langage de programmation interprété, qui ne nécessite donc pas d’être compilé pour fonc-
tionner. Un programme ” interpréteur ” permet d’exécuter le code Python sur n’importe quel ordinateur.
Ceci permet de voir rapidement les résultats d’un changement dans le code. En revanche, ceci rend ce
langage plus lent qu’un langage compilé comme le C.

B- Pourquoi Python ?
En effet, Python est utilisé dans plusieurs domaines tel que : programmation web, application, ma-
chine learning. Python est le langage le plus utilisé pour la Data Science, en effet 40% des Data Scien-
tists utilisent Python au quotidien car Python est un langage simple, lisible, et compatible avec de nom-
breuses plateformes. Ses nombreuses bibliothèques, telles que TensorFlow et Numpy etc, permettent
d’effectuer une large variété de tâches.

22
3.1.2 Bibliothèques
Python est populaire au domaine de machine learning grâce à ses bibliothèques qui aident à créer les
algorithmes et les réseaux de neurones, parmi ces bibliothèques il y a :

3.1.2.1 Numpy

FIGURE 3.2 – Logo Numpy

Est une extension du langage de programmation Python, destinée à manipuler des matrices ou tableaux
multidimensionnels ainsi que des fonctions mathématiques opérant sur ces tableaux.

3.1.2.2 Matplotlib

FIGURE 3.3 – Logo Matplotlib

Est un puissant outil pour tracer des graphes et visualiser des données.

3.1.2.3 Scikit-learn

FIGURE 3.4 – Logo sklearn

Ou Sklearn est une bibliothèque basée sur Python permettant de créer des modèles d’apprentissage auto-
matique. Elle fournit de nombreux algorithmes d’apprentissage pour la régression, le regroupement et la
classification.

23
3.1.2.4 keras

FIGURE 3.5 – Logo keras

Est une librairie de réseaux de neurones minimaliste et modulaire. Elle utilise TensorFlow comme "back-
end". Grâce à sa facilité et sa simplicité, Keras permet de mettre en place des projets rapidement. Elle
traite des réseaux de neurones de convolution et permet de construire des réseaux à base de séquences et
de graphes.

3.1.2.5 tensorflow

FIGURE 3.6 – Logo tensorflow

Est une librairie open-source pour le calcul numérique dans laquelle on utilise des graphiques de flux de
données, ainsi cette bibliothèque permet de créer les réseaux de neurones est les former.

3.1.2.6 Pandas

FIGURE 3.7 – Logo pandas

C’est une librairie très commune utilisée en data science, elle permet de manipuler les données et les
fusionner d’une façon facile grâce à ses fonctions.

3.1.2.7 OpenCV

FIGURE 3.8 – Logo openCV

24
Cette bibliothèque est principalement utilisée pour construire des applications de vision par ordinateur
et d’apprentissage automatique. Elle possède plusieurs algorithmes optimisés. Ces algorithmes peuvent
réaliser beaucoup de tâches telles que la détection et la reconnaissance des visages, l’identification des
objets et bien d’autres. On peut aussi l’utiliser pour extraire des informations d’une image.

3.1.3 IDE (Jupyter Notebook)


Jupyter est une application web "open source" qui supporte plus de 40 langages de programmation.
Elle offre plusieurs fonctionnements désirables par les data scientistes comme le nettoyage et la visuali-
sation des données etc. Cela rend Jupyter l’un des meilleurs outils utilisé en Machine Learning.

3.2 L’ensemble des données


La classification des panneaux de signalisation est le processus qui consiste à reconnaître automa-
tiquement les panneaux de signalisation le long de la route, notamment les panneaux de limitation de
vitesse, les panneaux de céder le passage, les panneaux de fusion, etc. La capacité à reconnaître auto-
matiquement les panneaux de signalisation nous permet de construire des "voitures (autonomes) plus
intelligentes".
Notre approche pour construire ce modèle de classification des panneaux de signalisation est présentée
en quatre étapes :
1. Explorer l’ensemble de données
2. Construction d’un modèle CNN
3. Entraînement et validation du modèle
4. Tester le modèle avec l’ensemble de données de test

3.2.1 Dataset
L’ensemble des données utilisé pour ce projet est le « Benchmark de la reconnaissance des panneaux
de signalisation en Allemagne » GTSRB (German Traffic Sign Recognition Benchmark). Cette DATA-
SET contient plus de 50 000 images de différents panneaux de signalisation routière, elle contient un
dossier ’Train’ qui contient des images de panneaux de signalisation dans 43 classes différentes : limites
de vitesse, virages dangereux, route glissante, un dossier ’Test’ qui contient plus de 12 000 images à des
fins de test, et un fichier ’test.csv’ qui contient le chemin des images de test ainsi que leurs classes
respectives.

Cet ensemble de données a été utilisé dans un concours il y a quelques années. Le meilleur résultat
de la compétition a deviné correctement 99,46% des signes. En comparaison, la performance humaine
a été établie à 98,84%. Oui, la machine a été plus efficace que l’humain, car elle a mieux géré les cas
les plus difficiles, comme une image floue d’un panneau de limitation de vitesse pouvant être confondue
avec une autre limitation de vitesse. Quelques exemples de l’ensemble de données Dataset sont divisé
en ensembles d’entraînement, de test et de validation, avec les caractéristiques suivantes :
1. Les images sont de : 32 (largeur) * 32 (hauteur) * 3 (canaux de couleur RVB (rouge vert bleu)).
2. L’ensemble d’entraînement est composé de 34799 images.
3. L’ensemble de validation est composé de 4410 images.

25
4. L’ensemble de test est composé de 12630 images.

FIGURE 3.9 – distribution des données

3.2.2 Explorer les données


Notre dossier ’train’ contient 43 dossiers, chacun représentant une classe différente. L’étendue du
dossier est de 0 à 42. Avec l’aide du module OS , nous itérons sur toutes les classes et ajoutons les images
et leurs étiquettes respectives dans la liste des données et des étiquettes.
La bibliothèque PIL est utilisée pour ouvrir le contenu des images dans un tableau.
Tout d’abord, nous avons importé le module os , numpy , pandas ,matplotlib , pil ,keras . Nous avons
également créé quelques variables globales X, Y qui sont des listes vides dans lesquelles nous allons sto-
cker les données et les étiquettes (Labels). La variable cur_directory contient le chemin absolu du fichier
du projet.
Apès, nous avons stocké toutes les images et leurs étiquettes dans des listes (données et étiquettes). Nous
devons convertir la liste en tableaux numpy pour alimenter le modèle.
La forme des données est (39209, 30, 30, 3) ce qui signifie qu’il y a 39 209 images de taille 30×30 pixels
et le dernier 3 signifie que les données contiennent des images colorées (valeur RVB). Avec le package
sklearn , nous utilisons la méthode train_test_split() pour séparer les données d’entrainement et de test.
Dans le package keras.utils , nous utilisons la méthode to_categorical pour convertir les étiquettes pré-
sentes dans y_train et y_test en un codage à chaud (One hot encoding) qui est une représentation vecto-
rielle où tous les éléments du vecteur valent 0 sauf un, qui a une valeur de 1.

Après avoir divisé les données, les formes des ensembles de formation et d’essai sont les suivantes :
Forme de x_train : (31367, 30, 30, 3) et y_train : (31367,)
Forme de x_test : (7842, 30, 30, 3) et y_test : (7842,) (Figure 3.10)

26
FIGURE 3.10 – la taille des données

3.3 La création du Modèle


3.3.1 Construction du modèle CNN
Les réseaux neuronaux convolutifs ont fait leurs preuves dans les tâches de classification d’images
et c’est ce que nous allons utiliser pour notre modèle. Un réseau de neurones convolutif (CNN) est
composé de couches convolutives et de couches de pooling. À chaque couche, les caractéristiques de
l’image sont extraites pour aider à la classification de l’image. Nous compilons le modèle avec catego-
rical_crossentropy car notre jeu de données comporte plusieurs classes à classer. L’architecture de notre
modèle est la suivante :
— 2 Conv2D layer (filter=32, kernel_size=(5,5), activation=”relu”)
— MaxPool2D layer ( pool_size=(2,2))
— Dropout layer (rate=0.25)
— 2 Conv2D layer (filter=64, kernel_size=(3,3), activation=”relu”)
— MaxPool2D layer ( pool_size=(2,2))
— Dropout layer (rate=0.25)
— Flatten layer to squeeze the layers into 1 dimension
— Dense Fully connected layer (256 nodes, activation=”relu”)
— Dropout layer (rate=0.5)
— Dense layer (43 nodes, activation=”softmax”)

3.3.2 Entraîner, valider et tester le modèle


Maintenant le modèle est défini et les données sont prêtes. Pour commencer l’entraînement de notre
modèle, nous utilisons la fonction model.fit() qui prend l’ensemble d’entraînement, l’ensemble de valida-
tion, la taille du lot et le nombre d’époques. Nous avons essayé avec une taille de lot de 32 Et 15 époques,
la précision était stable.

La précision " accuracy" obtenue est de 0,913 et la validation_précision "val_accuracy" est de 0,97.

Avec l’aide des foncions de matplotlib, nous allons tracer le graphique de la précision de l’entraine-
ment et de la validation (Figure 3.11).

27
FIGURE 3.11

Pour tester notre modèle, nous avons un dossier de test qui contient environ 12 000 images. Le fichier
test.csv contient le chemin de l’image ainsi que l’étiquette de la classe. Pandas est une excellente biblio-
thèque pour extraire le chemin et l’étiquette du fichier CSV. Pour prédire le modèle, nous devons redi-
mensionner nos images à 30×30 pixels et créer un tableau numpy contenant toutes les données d’image,
et ensuite avec l’aide de la fonction sklearn.accurac_score(), nous pouvons comparer les valeurs réelles
avec les valeurs prédites de notre modèle.
On va l’essayer à nouveau avec d’autres hyper-paramètres (un paramètre dont la valeur est utilisé pour
contrôler le processus d’apprentissage. En revanche, les valeurs des autres paramètres sont obtenues par
apprentissage.) :
rate : une petite valeur positive, souvent comprise entre 0,0 et 1,0. Contrôle la rapidité avec laquelle le
modèle est adapté au problème.
epochs : On parle d’une ‘epoch’ lorsqu’un ensemble de données est transmis en avant et en arrière par le
réseau neuronal une seule fois.
batch-size : Nombre total d’exemples d’entrainement présents dans un seul lot.

Si on a rate_1=rate_2=0.25, rate_3=0.1, epochs=15 et batch_size=32, on obtient une précision de


test égale à 92.37% :

FIGURE 3.12

28
Si on a rate_1=rate_2=0.001, rate_3=0.1, epochs=25 et batch_size=64, on obtient une précision de
test égale à 94.15% :

FIGURE 3.13

Si on a rate_1=rate_2=0.001, rate_3=0.5, epochs=25 et batch_size=64, on obtient une précision de


test égale à 96.64% :

FIGURE 3.14

29
Conclusion

Dans ce projet, nous avons réussi à classer les panneaux de signalisation avec une précision de 96%
et nous avons également visualisé l’évolution de notre précision et notre perte avec le temps, ce qui est
plutôt bon pour un simple modèle CNN.
Nous comprenons maintenant comment les véhicules autonomes peuvent tirer parti des techniques de
vision par ordinateur et d’apprentissage profond pour reconnaître et classer automatiquement des classes
multiples. Nous apprenons à mettre en œuvre un réseau de neurones convolutif pour les tâches de classi-
fication d’images.

Dans les recherches futures, nous prévoyons d’entraîner le CNN à prendre en compte davantage de
classes de panneaux de signalisation et d’éventuelles mauvaises conditions météorologiques. Nous pré-
voyons également d’utiliser un CNN non seulement pour la classification mais aussi pour la détection
d’objets.

30
Bibliographie

[1] : https://mrmint.fr/9-algorithmes-de-machine-learning-que-chaque-data-scientist-doit-connaitre
consulté le 30/03/2021

[2] : https://www.lossendiere.com/2016/08/31/caracteristiques-dune-image-numerique/
consulté le 13/04/2021

[3] : https://www.futura-sciences.com/sante/definitions/biologie-neurone-209/
consulté le 02/04/2021

[4] : https://www.lebigdata.fr/reseau-de-neurones-artificiels-definition
consulté le 08/04/2021

[5] : https://www.guru99.com/backpropogation-neural-network.html
consulté le 16/05/2021

[6] : https://blog.clevy.io/nlp-et-ia/introduction-machine-learning-1-3-histoire/
consulté le 27/03/2021

[7] : https://fr.blog.businessdecision.com/tutoriel-deep-learning-le-reseau-neuronal-convolutif-cnn/
consulté le 20/04/2021

[8] : https://towardsdatascience.com/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way3bd2b1164a53
consulté le 20/04/2021

[9] : https://fr.blog.businessdecision.com/tutoriel-machine-learning-comprendre-ce-quest-un-reseau-de-neurones-et-en-
creer-un/
consulté le 23/04/2021

[10] : https://inside-machinelearning.com/fonction-dactivation-comment-ca-marche-une-explication-simple/
consulté le 04/05/2021

[11] : https://www.lebigdata.fr/python-langage-definition# :~:text=Le%20langage%20Python%20pour%20le,ou%20les%20


GUI%20d'applications
consulté le 16/05/2021

[12] : https://datasciencetoday.net/index.php/en-us/deep-learning
consulté le 03/04/2021

[13] : https://medium.com/@PK_KwanG/
consulté le 10/04/2021

[14] : https://deepai.org/machine-learning-glossary-and-terms/
consulté le 15/05/2021

31

Vous aimerez peut-être aussi