Rapport Pos
Rapport Pos
Sous l’encadrement de
Prof. Tarik Berroug
Soutenu le : 11/06/2021
Devant le jury :
1
Dédicaces
A Allah
Le Tout-Puissant pour sa Grâce et son Amour qui nous ont permis d’achever ce travail.
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.
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.
Qui ont contribué à notre éducation et formation et qui, par leurs compétences, nous ont soutenus dans
la poursuite de nos études.
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
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 :
6
Chapitre 1
La Machine Learning
7
à une probabilité d’appartenance à chacune des classes prédéterminées (on parle alors d’apprentissage
supervisé probabiliste).
8
Chapitre 2
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.
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.
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.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 :
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.
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 ).
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
13
FIGURE 2.9 – convolution
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 :
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.
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.
15
FIGURE 2.12 – Max 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.
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.
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).
17
FIGURE 2.17 – input layer de CNN
18
FIGURE 2.19 – ouput layer
On peut décomposer chaque neurone des couches cachée et de sortie comme suit :
— 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 :
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)
"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.
21
Chapitre 3
Implémentation
3.1 L’environnement
3.1.1 Langage (Python)
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
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
Est un puissant outil pour tracer des graphes et visualiser des données.
3.1.2.3 Scikit-learn
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
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
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
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
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.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.
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
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.
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
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
[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