Classification des Panneaux par CNN
Classification des Panneaux par CNN
كلية التكنولوجيا
Faculté de Technologie
قسم اإللكترونيـك
Département d’Électronique
Mémoire de Master
Filière Électronique
Spécialité Électronique des Systèmes embarqués
présenté par
OUACHEMI Ahcene
&
OUCHFOUN Aness
travail, et qui a été avec nous à tous les moments de notre chemin d’étude.
A nos chers parents pour leur Patience, leur Amour, leur Soutien et leur
Automatic recognition of traffic signs is required in advanced driver assistance systems and
constitutes a challenging real-world computer vision and pattern recognition problem. A
comprehensive, lifelike dataset of more than 34,000 traffic sign images has been collected. It
reflects the strong variations in visual appearance of signs due to illumination, weather
conditions, partial occlusions, and rotations. The images are complemented by several
precomputed feature sets (rgb to grayscale, normalization) to allow for applying machine
learning algorithms without background knowledge in image processing. The dataset
comprises
43 classes with unbalanced class frequencies
A traffic sign image is passed through a set of layers such as convolution layers and max
pooling layers, some filters reduce the image resolution by the local maximum operation, and
after each convolution layer we get a new image with less characteristics compared to the
previous image
Called a convolution map
In order to improve neural network performance and facilitate recognition work, we will use
some simple and effective techniques such as data augmentation and dropout. We will also
cite information such as how long does it take to train and how much data of each class is
needed to have a good classification model.
The entire procedure for recognizing traffic signs is executed in real time on a GPU and CPU.
The experimental results confirmed the high efficiency of the developed computer vision
system.
The results obtained showed that the choice of the epoch number, the size of the image
database and the depth of the network have a great influence to have better results
.
Table des matières
Liste des figures ........................................................................................................... 1
Acronymes…………………………………………………………………………….4
Introduction Générale................................................................................................. 5
1. Introduction .......................................................................................................... 24
2. Le réseaux perceptron multicouche PMC……………………………….….…….26
2.1. Modèle du perceptron…………………………………………….………….27
2.2. Fonctions d’activation………………………………………….……………28
2.3. La notion de rétropropagation…………………………………….………....30
3. Différents types de réseaux de neurones artificiels .............................................. 31
3.1. Adaline (adaptive linéaire neurones) .............................................................. 31
3.2. PMC à fonctions radiales (RBF) .................................................................... 31
3.3. Kohonen …………………………………………………………………….32
4. L’apprentissage profond Deep learning ……………………………………….....32
4.1. Qu’est-ce que l’apprentissage profond (DL) ................................................. 32
4.2. Algorithmes de deep learning ...................................................................... 32
5. Les réseaux de neurones convolutionnels ........................................................... 33
5.1. Réseaux de neurones convolutionnels et PMC ............................................ 33
5.2. Architecture du réseau de neurones convolutionnels ………………………34
5.2.1. Couche de convolution ……………………………………………….35
5.2.2. Couche de Pooling (Pool) …………………………………………….37
5.2.3. Couche de correction …………………………………………………38
5.2.4. Couche entièrement connectée (FC) ………………………………….39
5.2.5. Couche de perte (LOSS) ……………………………………………...39
6. Exemple de modèles de CNN …………………………………………………..40
7. Choix des hyperparamètres ……………………………………………………..40
7.1. Nombre de filtres……………………………………………………………40
7.2. Forme du filtre ……………………………………………………………...41
7.3. Forme de max pooling ……………………………………………………...41
8. Méthodes de régularisation ……………………… ……………………………..41
8.1. Empirique……………………………………………………………………41
8.1.1. Dropout………………………………………………………………...41
8.1.2. DropConnect…………………………………………………………...42
8.1.3. Pooling sochastique……………………………………………………42
8.2. Explicite………………………………………………………….…………..42
8.2.1. Taille de réseau ………………………………………………………..42
8.2.2. Dégradation des poids…………………………………………………42
9. Paramètres du le réseau CNN ……………………………….. ………………....43
10. Conclusion ………………………………………………………………………44
Chapitre 3 : L’implémentation
1. Introduction ......................................................................................................... 46
2. Logiciels et librairies Utilisés dans l’implémentation…………………………...46
2.1. Python…………………………………………………..……………………46
2.1.1. Python et version utilisée…………..…………….………………....…46
2.2. TensorFlow ………………………………………………………………… 47
2.2.1. Installation TensorFlow……………………………………………….47
2.3. Keras…………………………………………………………………………48
2.3.1. Installation keras………………………………………………………48
2.4. Scikit-learn…………………………………………………………………...48
2.5. Matplotlib…………………………………………………………………….48
2.6. Configuration utilisé dans l’implémentation…………………………………49
1
Figure 3.2: MyData ................................................................................................................ 49
Figure 3.3 : les étiquettes ....................................................................................................... 50
Figure 3.4: Transformer des images RGB en niveau de gris ............................................. 51
Figure 3.5: Normalisation des images .................................................................................. 51
Figure 3.6: Distribution d'échantillons pour chaque classe. .............................................. 52
Figure 3.7: Architecture de notre réseau ............................................................................. 53
Figure 3.8: Configuration du notre modèle ........................................................................ 54
Figure 3.9: Précision et Erreur pour le Modèle implémenté (CPU) .................................. 55
Figure 3.10: Détails sur l'apprentissage de notre modèle sur CPU ................................... 56
Figure 3.11: Précision et Erreur pour le Modèle implémenté avec 30 époques ............... 57
Figure 3.12 : Les pilotes et les bibliothèques utilisées avec ses versions…........................57
Figure 3.13 : Installation de CUDA.......................................................................................58
Figure 3.14 : Copier les bibliothèques de cuDNN…………...…………...………….…….58
Figure 3.15: Remplacement des bibliothèques avec les bibliothèques de cuDNN……....58
Figure 3.16 : Ajoutez CUDA, cuDNN à la variable d'environnement…………….……..59
Figure 3.17 : Installation de Microsoft Visual c++…………………...……………….…...59
Figure 3.18 : Limitation de mémoire……………...……………………...………………...60
Figure 3.19: Détails sur l'apprentissage de notre modèle sur GPU ................................... 60
Figure 3.20 : Précision et Erreur pour le Modèle implémenté (GPU)............................... 61
Figure 3.21: Reconnaissance d'une image "Entrée interdite" ........................................... 63
Figure 3.22: Reconnaissance d'une image "limitation de vitesse 70km/h"....................... 63
Figure 3.23: Reconnaissance d'une image "limitation de vitesse 30 Km/h" ..................... 64
Figure 3.24: Reconnaissance d'une image "Interdiction de depasser" ............................. 64
Figure 3.25: Reconnaissance d'une image "Interdiction aux poids lourds"..................... 65
Figure 3.26: Reconnaissance d'une image "Limitation de vitesse 120 km/h" .................. 65
Figure 3.27: Reconnaissance d'une image "STOP" ............................................................ 66
2
Liste des tableaux
Chapitre 1 : Classification des images
Tableau 1.1: Classification vs clustering .............................................................................. 17
Tableau 1.2: Matrice de confusion ........................................................................................ 18
Tableau 3.1 : Résultats sur CPU & GPU ............................................................................. 61
3
Acronymes
TSR : Traffic Signs Recognition
ADAS : Advanced driver-assistance systems
CNN : Convolutional neural network
CPU : Central processing unit
GPU : Graphical Processing Unit
GTSR : Germany traffic sign recognition
ROC : Receiver operating characteristic
AUC : Aire sous la courbe ROC
ML : Machine learning
DL : Deep learning
PMC : Perceptron MultiCouche
Tanh : Tangente hyperbolique
Relu : Unité linéaire rectifiée
Adaline : Adaptive linéaire neurones
RNN : Réseau de neurones récurrent
ConvNets : Convolution network
CONV : Couche de convolution
Pool : Couche de pooling
FC : Fully connected (entièrement connectée)
4
Introduction générale
Un conducteur peut être distrait de sa tâche principale, la conduite, ce qui occasionne un
manque de vigilance vis à vis de la signalisation courante. Cette situation augmente le
risque d'accident. En effet, manquer un panneau de limitation de vitesse ou d'interdiction
de doubler génère une situation à risque en plus du fait d'exposer le conducteur à des
sanctions.
Parmi les tâches résolues avec la vision par ordinateur dans cette situation, le problème
de la reconnaissance des panneaux de signalisation, ce problème est l'un des plus connus
et largement discuté par de nombreux chercheurs.
5
Ce système crée une aide à la conduite automobile conçu dans le but d’éviter les
situations dangereuses qui conduisent à des accidents, d’éloigner le conducteur de tous
les effets de distraction, de le doter de la capacité de percevoir l'environnement extérieur
et de lui permettre de percevoir et de gérer les risques à l'avance.
Dans la fin des années 80 Yan le Cun a développé un type de réseau particulier qui s’appelle
le réseau de neurone convolutionnel CNN (convolutional neural network), ces réseaux sont
une forme particulière de réseau neuronal multicouche dont l’architecture des connexions est
inspirée de celle du cortex visuel des mammifères. En 1995, Yan le Cun et deux autres
ingénieurs ont développé un système automatique de lecture de chèques qui a été déployé
largement dans le monde. À la fin des années 90, ce système lisait entre 10 et 20 % de tous les
chèques émis aux États-Unis. Mais ces méthodes étaient plutôt difficiles à mettre en œuvre
avec les ordinateurs de l’époque.
Dans notre projet on va utiliser les réseaux de neurones convolutionnels pour classifier les
panneaux de signalisation routière, on va créer un modèle de réseau de neurones convolutifs
proche de l’architecture LeNet-5 et par la suite on va appliquer ce modèle sur la base
d’images GTSR.
Ce mémoire est organisé comme suit :
Le premier chapitre, s’ouvre sur une présentation des différents types d’images et de leurs
caractéristiques, sur les méthodes de la classification des images de panneaux routière,
ainsi que sur l’utilisation des réseaux de neurones dans la classification de ces images.
6
Le deuxième chapitre est consacré à la description des réseaux de neurones convolutionnels et
de leurs intérêts dans le domaine de la classification des images.
Le troisième chapitre présente la partie expérimentale de notre travail donnant suite à la
discussion des différents résultats obtenus
Et enfin on termine par une conclusion générale.
7
Chapitre 1 : Classification des images
8
1 Introduction
La classification d'images est un problème fondamental en vision par ordinateur, qui a de
nombreuses applications concrètes telle la classification d’objets, la reconnaissance faciale, ou
la classification de la maladie (COVID-19). Le but est de construire un système capable
d'assigner correctement une classe à n'importe quelle image en entrée. Un tel système
exploite des algorithmes de Machine Learning issus de l’apprentissage, il existe deux types
d'apprentissage : supervisé et non supervisé, nous nous intéresserons à l'apprentissage
supervisé. Ce chapitre va présenter des notions générales sur la classification.
2 Motivation
De nos jours, le nombre d'images augmente en fonction du domaine d’applications de façon
exponentielle, par conséquent, il est important de les classer de manière fiable. Le concept de
classification d'images classique consiste généralement à extraire des entités d'image locales,
à les coder en tant que vecteur d'entités et à les classer à l'aide d'un modèle créé
précédemment.
Toutes les applications de classification ont un point commun, la chaine de traitement qui
consiste à extraire des caractéristiques pendant la phase d’apprentissage.
Avant de faire l'extraction des caractéristiques, il y a une phase très importante qui précède
l’extraction dite le prétraitement, cette phase permet d’occulter ou d’atténuer toute
information susceptible de nuire la description du contenu pertinent lors de la phase
d'extraction de caractéristiques.
Parmi les techniques de prétraitement et d'amélioration de l’image, on en cite :
Transformation de l’image de RGB en niveau de gris.
Atténuation de bruits.
Rehaussement de contraste.
Extraction de contours par technique de filtrage.
L’objectif de la classification d’images est d’effectuer une tâche qui peut s’avérer coûteuse à
acquérir par un être humain en raison notamment de contraintes physiques comme la
concentration, la fatigue ou le temps nécessité par un volume important de data set. [1]
9
3 Différents types d’image
Un pixel est le plus petit élément d'une image numérique auquel on peut accéder, et son
adresse définit les coordonnées physiques dans lesquelles il se trouve. En fonction des pixels
et de la façon dont ils sont stockés, il existe les différents types d'images suivants [2] :
- Image binaire
- Image en niveaux de gris
- Image RVB
- Image indexée
C'est le type d'image numérique dans lequel il n'y a qu'un seul bit par pixel 1 ou 0,
généralement 0 signifie « noir » et 1 signifie « blanc », bien qu'il soit possible d'utiliser deux
couleurs quelconques, Les images binaires sont codées sous forme de tableau 2D (matrice).
[2]
Le code Python complet et final, pour convertir une image RVB colorée en binaire est donné
ci-dessous :
10
3.2 Image en niveaux de gris :
L'image en niveaux de gris ou monochrome est codée sous la forme d'un tableau 2D de pixels.
Si le pixel est codé sur 8bits, chaque valeur de pixel va aller de 0 à 255, 0 correspondant au «
noir » et 255 au « blanc ». Les valeurs intermédiaires indiquent différentes nuances de gris.
[2]
Le code Python complet et final, pour convertir une image RVB colorée en niveau de gris est
donné ci-dessous :
11
3.3 Image RBV :
Une image peut étre représentée a l'aide de trois tableaux 2D (méme taille) chaque tableau
représente un canal de couleur : Rouge (R) , vert(V) et bleu (B).
Chaque tableau contient une valeur de 8 bits sur une échelle [0,255] .la combinaison des trois
valeur de 8bits forme un nombre de 24 bits , ce qui signfie 244 combinaisons de couleur.[2]
Matrice d'index
Carte couleur
Ces images sont une représentation indexée, dans laquelle un tableau 2D,
contient des index / pointeurs vers une palette de couleurs de taille maximale fixe
(généralement 256 couleurs). La carte des couleurs n'est qu'une liste de couleurs
utilisées dans l’image. [2]
12
4 Caractéristiques de l’image
L’image est une représentation d'un ensemble d'information formalisé par des paramètres
suivants :
4.1 Pixels :
4.2 La résolution :
La résolution d'une image est le nombre de pixels par pouce qu'elle contient (1 pouce =
2.54 centimètres). Elle est exprimée en "PPP" (points par pouce). Plus il y a de pixels (ou
points) par pouce et plus il y aura d'information dans l’image. [3]
13
4.3 Voisinage :
La surface d'une image est représentée par l’ensemble des surfaces rectangulaires
On distingue deux type de voisinage [4] :
4.4 Contraste :
Le contraste est une propriété intrinsèque d'une image qui quantifie la différence de
luminosité entre les parties claires et sombres d'une image.
- Une image contrastée : présente une bonne dynamique de la distribution des valeurs
de gris sur tout l’intervalle des valeurs possibles, avec des blancs bien clairs et des
noirs profonds.
- Une image faible contrastée : a une faible dynamique, la plupart des pixels ayant des
valeurs de gris très proches.
14
4.5 Niveau de gris (Grayscale) :
Une intensité lumineuse d’un pixel situé dans la surface de l’image, la plage de
l’intensité entre 0 (noire) et 255 (blanc) elle représente aussi la quantité de la lumière
réfléchie pour 8bits, on dispose 256 niveau de gris, plus le nombre de bit augmente plus
les niveaux sont nombreux.
4.6 Luminance :
La luminance est une mesure photométrique de l'intensité lumineuse par unité de surface
de lumière se déplaçant dans une direction donnée, pour une bonne luminance :
L’absence de bruit.
4.7 Bruit :
Dans une image, le bruit est toute fluctuation parasite ou dégradation que subit l'image de
l'instant de son acquisition jusqu'à son enregistrement à cause de variation de l'intensité
d'un pixel par rapport à ses voisins. Ce qui donne certains défauts (petits nuages,
poussière et la diminution de l'intensité électrique sur les capteurs), Les sources de bruit
sont multiples, certaines sont physiques liées à la qualité de l’éclairage de la scène, et
électroniques liées à la stabilité du capteur de l'image durant l'acquisition [6].
4.8 Contour :
Le contour est la frontière qui sépare des objets dans une image qui ont des pixels dont les
niveaux de gris différents, ou la limite des objets qui marquant des changement d'intensité.
15
5 Méthodes de classification
De nombreuses méthodes classiques ont été consacrés, elles peuvent être séparées en
deux grandes catégories : les méthodes de classification supervisée et les méthodes de
classification non supervisée.
Les Méthodes de classification supervisée sont des méthodes dans lesquelles les classes sont
connues avant l'identification des éléments de l’image. On utilise comme première phase, la
phase l’apprentissage, cette dernière permet de définir des règles de classement à partir d'un
ensemble d'objets de référence dont on connait l'identité à priori et qui sont représentatifs de
chaque classe, Il est nécessaire de vérifier la crédibilité de ces règles pour évaluer notre
apprentissage (sous apprentissage ou sur apprentissage en fonction de la complexité du
modèle).
Classification bayésienne.
Réseaux neurones.
Arbres de décision.
Au Contraire de la classification supervisée, les classe sont pas identifiés et les données
ne sont pas étiquetées et nécessitent aucun apprentissage, Elle consiste à représenter
ensemble de groupes appelé cluster, chaque groupe collecte des objets, des objets qui
sont semblables entre eux et des objets qui sont dissemblables par rapport d'autre objets
de groupes, on peut le classer comme domaine de l'analyse des données [7].
16
Classification Clustering
6 Modèle de classification
Nous allons maintenant nous concentrer sur les modèles de classification : on utilise des
données étiquetées pour prédire à quelle classe un objet appartient. Nous allons surtout parler
de classification binaire, où il s'agit de distinguer si un objet appartient ou non à une classe.
Par exemple, dire si une image représente une girafe ou non. Si oui, on dit que cette image est
positive ; sinon, qu'elle est négative.
Jusqu'à présent, en évaluant des modèles de classification, on déduit le nombre d’erreurs
comme mesure de performance d’un modèle. Mais ce n'est pas le seul critère, dans cette partie
on va montrer différentes manières d'évaluer un modèle de classification.
17
Classe réelle
Classe 0 Classe 1
Classe Vrai négatifs Faux positifs
0
6.2 Classe prédite Classe Faux négatifs Vrais positifs
1
𝐕𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬
𝐑𝐚𝐩𝐩𝐞𝐥 =
𝐕𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬 + 𝐅𝐚𝐮𝐱 𝐧é𝐠𝐚𝐭𝐢𝐟𝐬
𝐕𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬
𝐩𝐫é𝐜𝐢𝐬𝐢𝐨𝐧 =
𝐕𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐟𝐢𝐭𝐬 + 𝐅𝐚𝐮𝐱 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬
𝐩𝐫é𝐜𝐢𝐬𝐢𝐨𝐧 × 𝐫𝐞𝐩𝐩𝐞𝐥
𝐅 − 𝐦𝐞𝐬𝐮𝐫𝐞 = 𝟐 ×
𝐩𝐫é𝐜𝐢𝐬𝐢𝐨𝐧 + 𝐫𝐚𝐩𝐩𝐞𝐥
2 vrai positifs
F − mesure =
2 vrai positifs + faux positifs + faux négatifs
18
Donc Mesure globale de performance d’un classifieur. :
K : nombre de classe
𝐤
𝟏 𝐯𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬𝐢
𝐫𝐚𝐩𝐩𝐞𝐥 = ∑
𝐊 𝐯𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬𝐢 + 𝐟𝐚𝐮𝐱 𝐧é𝐠𝐚𝐭𝐢𝐟𝐬𝐢
𝐢=𝟏
𝟏
𝟏 𝐯𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬𝐢
𝐩𝐫é𝐜𝐢𝐬𝐢𝐨𝐧 = ∑
𝐤 𝐯𝐫𝐚𝐢 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬𝐢 + 𝐟𝐚𝐮𝐱 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬𝐢
𝐢=𝟏
𝐩𝐫é𝐜𝐢𝐬𝐢𝐨𝐧 × 𝐫𝐚𝐩𝐩𝐞𝐥
𝐅 − 𝐦𝐞𝐬𝐮𝐫𝐞 = 𝟐 ×
𝐩𝐫é𝐜𝐢𝐬𝐢𝐨𝐧 + 𝐫𝐚𝐩𝐩𝐞𝐥
Une courbe ROC (receiver operating characteristic) est un graphique représentant les
performances d'un modèle de classification pour tous les seuils de classification. Cette
courbe trace le taux de vrais positifs en fonction du taux de faux positifs [8].
Le taux de vrais positifs (TVP) est l'équivalent du : rappel
Le taux de faux positifs (TFP) est défini comme suit :
𝐟𝐚𝐮𝐱 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐢𝐬
𝐭𝐚𝐮𝐱 𝐟𝐚𝐮𝐱 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐢𝐬 =
𝐟𝐚𝐮𝐱 𝐩𝐨𝐬𝐢𝐭𝐢𝐟𝐬 + 𝐯𝐫𝐚𝐢 𝐧é𝐠𝐚𝐭𝐢𝐟𝐬
Une courbe ROC trace les valeurs TVP et TFP pour différents seuils de classification.
Diminuer la valeur du seuil de classification (seuil de décision) permet de classer plus
d'éléments comme positifs, ce qui augmente le nombre de faux positifs et de vrais
positifs. La figure ci-dessous représente une courbe ROC classique.
19
AUC "aire sous la courbe ROC". Cette valeur mesure l'intégralité de l'aire à deux dimensions
située sous l'ensemble de la courbe ROC (par calculs d'intégrales) de (0,0) à (1,1).
Il n'est pas facile d'écrire un programme qui solutionne cette problématique, C’est là
qu’intervient le ML (machine Learning), très utilisé au sein d’importantes entreprises,
qui l’utilisent depuis longtemps pour filtrer les contenus indésirables et
sélectionner les informations intéressantes pour chaque utilisateur.
20
peut même classifier des images qu'elle n'a jamais vu durant la phase d'apprentissage
c'est ce qu'on appelle la capacité de généralisation.
Deux étapes importantes pour la reconnaissance d'une image, sont l'extraction des
caractéristiques (featur extraction) et le classifieur entrainable. L’extracteur de
caractéristiques permet l'extraction de tableaux de nombres qui représentent l’image
(l’extraction est programmée par data scientiste ou faite à la main Hand-designed feature
Extraction) et le transforme en une série de nombres, un vecteur de
caractéristiques dont chacun indique la présence ou l’absence d’un motif simple
dans l’image.
Ce vecteur de données va entrer dans un classifieur, qui calcule une somme pondérée des
caractéristiques, chaque nombre est multiplié par un poids, puis la somme est calculée, si
la somme est supérieure à un seuil, la classe est reconnue, les poids sont modifiés lors de
l’apprentissage pour bien optimiser la classification, Les premières méthodes de
classification linéaire entraînable datent de la fin des années cinquante et sont toujours
largement utilisées aujourd’hui [9].
Le système est entraîné de bout en bout, à chaque exemple, tous les paramètres de tous
les modules sont ajustés de manière à rapprocher la sortie produite par le système de la
sortie désirée.
Pour entraîner le système, il faut connaitre combien ajuster chaque paramètre de chaque
module. Pour cela il faut calculer un gradient, qui représente la quantité par laquelle
21
l’erreur en sortie augmentera ou diminuera lorsqu’on modifiera le paramètre, Le calcul
de ce gradient se fait par la méthode de rétropropagation [10].
9 Conclusion
Dans ce chapitre nous avons présenté les concepts de la classification dans le domaine de
l’imagerie, et nous avons également introduit l'apprentissage automatique et l'utilisation
des réseaux de neurones dans le domaine de la classification.
22
Chapitre 2 : Les Réseaux de Neurones
Convolutionnels CNN
23
1 Introduction
Le Perceptron MultiCouche (PMC) est un des réseaux de neurones artificiels les plus utilisés
actuellement, pour la classification supervisée sur toute la classification des images, avec
extraction des caractéristiques c’est-à-dire extraction de tableau de nombres qui représente
l'image. Deux approches principales sont alors nécessaires :
1) Extraire des caractéristiques par un algorithme écrit par un utilisateur (Hand-
designed feature Extraction) et les présenter en entrée d'un réseau de neurones
pour les classifier. Cette approche appelée « shallow learning » (Reconnaissance
traditionnelle) est comme illustrée sur la Figure 2.1 :
24
Dans le cadre de la classification des images, la classification par PMC peut avoir beaucoup
de problèmes et de défauts, parmi ces défauts, le nombre énorme de paramètres (le nombre de
connexion entre les différents neurones), si une image a une taille de 32 × 32, la dimension en
entrée sera 1024 avec une couche cachée de 100 neurones par exemple, cela donne 102400
paramètres, et ce nombre va augmenter pour toutes les couches suivantes. Cette grande
complexité et le nombre énorme de paramètres du réseau impose d’avoir un sur apprentissage
qui proposera donc une mauvaise capacité de généralisation.
Un autre défaut du PMC pour une application des images : Peu ou pas d'invariance au
décalage, à la mise à l'échelle et à d'autres formes de distorsion (pas d’invariance de
translation) c’est-à-dire en cas de décalage d’une image les pixels changent ce qui donne aussi
un changement de formes.
25
Pour répondre aux défauts de PMC, il existe un type de réseaux de neurone artificiel CNN
(Les réseaux de neurones convolutionnels ) découvrir par Hubel et Wiesel [11] , et
développer par Y. Lecun [12], ce réseau est inspiré de neurones en orientation dans le
système visuel du chat[11] , il fait l’extraction des caractéristiques automatiquement avec
l’application de la notion de partage des poids pour réduire le nombre de paramètres du réseau
, cette application permet également de prendre en compte de manière forte les corrélations
locales contenues dans une image (les pixels).
La première application réalisée avec les réseaux CNN dont l’apprentissage par propagation
arrière (backpropagation), est la reconnaissance de caractères manuscrits qui a été effectuée
par Y. Lecun [13]. Dans ce chapitre on va présenter les réseaux de neurones convolutionnels.
26
2.1 Modèle du perceptron
Un neurone de perceptron réalise un produit scalaire entre son vecteur d’entrée et un vecteur
de paramètres appelé poids, y ajoute un biais, et utilise une fonction d’activation pour
déterminer sa sortie, Figure 2.5 [14] :
- P le potentiel :
𝐩 = ∑ 𝐖𝐧 . 𝐗 𝐧 (2.1)
- Y la sortie :
𝐲 = 𝐩(𝐗 𝐧 . 𝐖𝐧 + 𝐛) (2.2)
B : Biais Une valeur particulière peut être considérée comme une entrée supplémentaire dont
la valeur est toujours à 1.
𝟎 𝐬𝐢 𝐩 < 0
𝐲= { (2.3)
𝟏 𝐬𝐢 𝐩 ≥ 𝟏
27
2.2 Fonctions d’activation
Tout apprentissage d’un modèle de réseau neurones se fait par la détermination des poids du
réseau et de leur mise à jour pour que la sortie se rapproche de la sortie désirée, ceci se fait par
un algorithme de rétro propagation du gradient, cet algorithme repose sur le calcul du gradient
de sortie puis sur la rétro propagation de celui-ci à travers la fonction de seuil puis des poids.
C’est pourquoi la fonction de seuil doit être dérivable. La fonction d’activation de Heaviside
est donc remplacée par des fonctions d’activation qui sont dérivables, parmi les fonctions
classiquement utilisées sont la fonction linéaire, la tangente hyperbolique (Tanh) , la fonction
sigmoïde standard et la fonction relue :
Fonction d'activation linéaire : C'est une fonction simple de la forme : f(p)
= a. p ou bien f(p) =p. L’entrée passe à la sortie sans une très grande
modification ou alors sans aucune modification. On reste ici dans une
situation de proportionnalité [15].
28
Figure 2.5 : Fonction d'activation sigmoïde
La fonction sigmoïde a plusieurs défauts, parmi ces défauts le fait que la fonction n'est pas
centrée sur zéro, c'est à dire que des entrées négatives peuvent engendrer des sorties positives,
et aussi elle influe assez faiblement sur les neurones par rapport à d'autres fonctions
d'activation. Le résultat est souvent très proche de 0 ou de 1 causant la saturation de certains
neurones. [15]
Mis à part cet avantage, la fonction Tanh possède les mêmes autres inconvénients
que la fonction Sigmoïde. [15]
29
Relu (Unité linéaire rectifiée) : La fonction ReLU est interprétée par la
formule : f(x) = max (0, x). Si l'entrée est négative la sortie est 0 et si elle est
positive alors la sortie est x. Cette fonction d'activation augmente
considérablement la convergence du réseau et ne sature pas.
La rétropropagation du gradient, c'est l’estimation des gradients de E par rapport aux poids en
progressant de la sortie vers l'entrée du réseau de neurone :
𝑑𝐸 𝑑𝐸 𝑑𝑦
=
𝑑𝑝 𝑑𝑦 𝑑𝑝
𝑑𝐸
= 𝑑𝑦 𝜃(𝑝)′
𝑑𝐸 𝑑𝐸 𝑑𝑝
=
𝑑𝑥 𝑑𝑝 𝑑𝑥
30
𝑑𝐸
= 𝑤
𝑑𝑝
Dans un apprentissage supervisé, les poids vont être corrigés de façon itérative.
A l'itération k, étant données les poids, 𝑤𝑘𝑛 , composantes du vecteur 𝑤 𝑘 , on sélectionne
𝑑𝐸
𝑤𝑛𝑘+1 = 𝑤𝑛𝑘 + 𝛼 𝑘 𝑑𝑤 (𝑥 𝑘 ,𝑤 𝑘 )
𝑛
Taux d’apprentissage
3.3 Kohonen :
Ce réseau de neurones peut être considéré comme dynamique, des neurones peuvent être
détruits et créés, le réseau n'a pas de taille fixe. Généralement ce réseau est appelé carte de
kohonen, en effet ce réseau est représenté à plat comme une grille rectangulaire à 1, 2, 3 ou 4
dimensions.
Les applications sont multiples : sélection de données représentatives dans une grande base de
cas, compression d'images, diagnostic de pannes, optimisation combinatoire (dont le fameux
"voyageur de commerce", modélisation de la cartographie des aires visuelles....
32
L'objectif d'un auto-encodeur est d'apprendre une représentation d'un ensemble
de données, généralement dans le but de réduire la dimension de cet ensemble .
Les auto encodeurs sont appliqués principalement à la détection d’anomalie (par
exemple pour détecter la fraude en banque ou bien pour trouver des anomalies
dans une ligne de production industrielle.
33
paramètres à estimer étant réduit, leur estimation (statistique) est plus robuste pour un
volume de données fixé (comparé à un PMC). [18]
Poids partagés : dans les réseaux de neurones convolutifs, les paramètres de filtrage
d'un neurone (pour un champ récepteur donné) sont identiques pour tous les autres
neurones d'un même noyau (traitant tous les autres champs récepteurs de l'image). Ce
paramétrage (vecteur de poids et biais) est défini dans une « carte de fonction ». [18]
Invariance à la translation : comme tous les neurones d'un même noyau (filtre) sont
identiques, le motif détecté par ce noyau est indépendant de localisation spatiale dans
l'image. [18]
Ces propriétés permettent aux réseaux de neurones à convolution d'obtenir une meilleure
robustesse dans l'estimation des paramètres sur des problèmes d'apprentissage puisque, pour
une taille de corpus d'apprentissage fixée, la quantité de données par paramètres est plus
grande. Le partage de poids permet aussi de réduire considérablement le nombre de
paramètres libres à apprendre, et ainsi les besoins en mémoire pour le fonctionnement du
réseau. La diminution de l'empreinte mémoire permet l'apprentissage de réseaux plus grands
donc souvent plus puissants. [18]
Figure 2.10: Une couche du CNN en 3 dimensions. (Vert = volume d'entrée, bleu =
volume du champ récepteur, gris = couche de CNN, cercles = neurones artificiels
indépendants)
34
un tableau de nombre ou un tableau de pixels et cela dépend de la résolution de l'image, H x L
x D, H = hauteur, L = largeur, D = dimension. Par exemple, une image d'un tableau 32 x 32 x
3 de matrice RVB (3 se réfère aux valeurs RVB) et une image d'un tableau 32 x 32 x 1 de
matrice d'image en niveaux de gris.
Les neurones d'un CNN sont divisés en une structure tridimensionnelle (longueur, largeur et
profondeur), le nombre d’entrées de neurones limité par le champ de récepteurs, chaque
ensemble de neurones analysant une petite région ou caractéristique de l'image.
35
La couche de correction (ReLU) : souvent appelée par abus « ReLU » en référence à la
fonction d'activation (Unité de rectification linéaire) ;
La couche « entièrement connectée » (FC) : qui est une couche de type perceptron ;
La couche de perte (LOSS).
Vérification :
𝐾−1
𝑊𝑖 − 𝑘 + 2 ×
𝑊𝑜 = 2 +1
𝑆
Avec S = 1 :
Donc : 𝑊0 = 𝑊𝑖
36
Figure 2.12 : Calcul le nombre de neurones du volume de sortie
𝑊𝑖 = 32 , = 5 , 𝑆 = 1 , P =0
32 − 5
𝑊0 = + 1 = 28
1
37
d'utiliser de petits filtres (type 2x2). Il est aussi possible d'éviter la couche de pooling mais
cela implique un risque de sur-apprentissage plus important. [18]
38
5.2.4 Couche entièrement connectée (FC) :
Après plusieurs couches de convolution et de max-pooling, le raisonnement de haut niveau
dans le réseau neuronal se fait via des couches entièrement connectées. Les neurones dans une
couche entièrement connectée ont des connexions vers toutes les sorties de la couche
précédente (comme on le voit régulièrement dans les réseaux réguliers de neurones).
La couche que nous appelons couche FC, nous avons aplati notre matrice en vecteur et
l’avons introduite dans une couche entièrement connectée comme un réseau de neurones.
39
6 Exemple de modèles de CNN
La forme d'une architecture la plus utilisée pour implémenter un réseau de neurones
convolutifs est généralement une couche de convolution et relu, suivie par des couches pool,
et cette forme va se répéter pour réduire la taille d'une image, et enfin la dernière couche
empilée est la couche entièrement connectée reliée vers la sortie.
Voici quelques architectures communes de réseau de neurones convolutifs qui suivent ce
modèle :
40
Une carte de caractéristiques est le résultat de l'application d'un filtre (vous avez donc autant
de cartes de caractéristiques que de filtres), et sa taille est le résultat de la taille de la
fenêtre/du noyau de votre filtre et de la foulée (le pas). [18]
Pour mieux comprendre, des filtres de convolution différents sont appliqués à l'image
d'entrée, ce qui donne des cartes de caractéristiques différentes (la sortie des filtres). Chaque
pixel de chaque carte de caractéristiques est une sortie de la couche de convolution.
Par exemple, si vous avez des images d'entrée 32x32 et un calque convolutif avec 20 filtres
5x5 et la foulée (le pas) à 1, vous obtiendrez 20 cartes de caractéristiques 28x28 à la sortie de
ce calque. Notez que ceci est présenté au calque suivant comme un volume de largeur =
hauteur = 28 et profondeur = num_channels = 20.
8 Méthodes de régularisation
Pour améliorer les performances et la capacité de généralisation d’un algorithme
d’apprentissage et pour éviter le sur-apprentissage il y’a des méthodes de régularisation à
utiliser :
8.1 Empirique :
8.1.1 Dropout :
Le concept de FC (couches entièrement connectées) crée un problème exponentiel de
mémoire appelé "overfitting" c'est à dire une sur-connexion qui conduit au sur-apprentissage
ralentissant le traitement de l'information. Pour prévenir cela, La méthode du dropout consiste
41
à « désactiver » des neurones aléatoirement (avec une probabilité prédéfinie, souvent un
neurone sur deux), pendant la phase d'apprentissage, avec moins de neurones, le réseau est
plus réactif et peut donc apprendre plus rapidement. Après la phase d’apprentissage les
neurones "désactivés" sont "rallumés" (avec leurs poids originaux).
Cette technique a montré non seulement un gain dans la vitesse d'apprentissage, mais en
déconnectant les neurones, on a aussi limité des effets marginaux, rendant le réseau plus
robuste et capable de mieux généraliser les concepts appris.
8.1.2 DropConnect :
Le DropConnect est une évolution du dropout, où on ne va non plus éteindre un neurone, le
DropConnect consistant à inhiber une connexion (l'équivalent de la synapse), et ce de manière
toujours aléatoire. Les résultats sont similaires au dropout (rapidité, capacité de généralisation
de l'apprentissage), mais présentent une différence au niveau de l'évolution des poids des
connexions. Une couche « complètement connectée » avec un DropConnect peut s'apparenter
à une couche à connexion « diffuse ».
8.1.3 Pooling stochastique :
Le pooling stochastique reprend le même principe que le Max-pooling, mais la sortie choisie
sera prise au hasard, selon une distribution multinomiale définie en fonction de l'activité de la
zone adressée par le pool.
Dans les faits, ce système s'apparente à faire du Max-pooling avec un grand nombre d'images
similaires, qui ne varient que par des déformations localisées. On peut aussi considérer cette
méthode comme une adaptation à des déformations élastiques de l'image. C'est pourquoi cette
méthode est très efficace sur les images MNIST (base de données d'images représentant des
chiffres manuscrits). La force du pooling stochastique est de voir ses performances croître de
manière exponentielle avec le nombre de couches du réseau. [18]
8.2 Explicite :
8.2.1 Taille de réseau :
La manière la plus simple de limiter le sur apprentissage est de limiter le nombre de couches
du réseau et de libérer les paramètres libres (connexions) du réseau. [18]
8.2.2 Dégradation des poids :
Le concept est de considérer le vecteur des poids d'un neurone (liste des poids associés aux
signaux entrants), et de lui rajouter un vecteur d'erreur proportionnel à la somme des poids
(norme 1) ou du carré des poids (norme 2 ou euclidienne). Ce vecteur d'erreur peut ensuite
42
être multiplié par un coefficient de proportionnalité que l'on va augmenter pour pénaliser
davantage les vecteurs de poids forts. [18]
La régulation par norme 1 : La spécificité de cette régulation est de diminuer le poids
des entrées aléatoires et faibles et d'augmenter le poids des entrées "importantes". Le
système devient moins sensible au bruit.
La régulation par norme 2 : (norme euclidienne) La spécificité de cette régulation est de
diminuer le poids des entrées fortes, et de forcer le neurone à plus prendre en compte les
entrées de poids faible
Les régularisations par norme 1 et norme 2 peuvent être combinées : c'est la "régularisation de
réseau élastique" (Elastic net regulation).
43
Ici, l'entrée a des cartes de caractéristiques l=32 en entrée, des cartes de fonction k=64 en
sortie et la taille du filtre est de n=3 X m=3. Il est important de comprendre que nous n’avons
pas simplement un filtre 3x3, mais en réalité un filtre 3x3x32, car notre entrée est à 32
dimensions. Et nous apprenons 64 filtres 3x3x32 différents. Ainsi, le nombre total de poids
est de n*m*k*l. Ensuite, il y a aussi un terme de biais pour chaque carte de caractéristiques,
nous avons donc un nombre total de paramètres de (n*m*l+1) *k.
Couche de max pool : par exemple. Procédez comme suit : "remplacer un quartier 2x2
par sa valeur maximale". Il n'y a donc aucun paramètre que nous pourrons apprendre dans
une couche de max pool.
Couche entièrement connectée : dans une couche entièrement connectée, toutes les
unités d'entrée ont un poids distinct pour chaque unité de sortie. Pour n entrées et m
sorties, le nombre de poids est de n*m. De plus, nous avons un biais pour chaque nœud de
sortie, nous sommes donc à des paramètres (n+1) *m.
Couche de sortie : la couche de sortie est une couche entièrement connectée, donc les
paramètres sont au nombre de (n+1) *m, Où n est le nombre d'entrées et m est le nombre
de sorties.
10 Conclusion
Nous avons consacré ce chapitre à la présentation des réseaux de neurones convolutionnels
capables d’extraire des caractéristiques d’images présentées en entrée, et de les classifier.
Nous avons parlé aussi sur des avantages du réseau CNN par rapport au réseau multicouche
PMC. Un avantage majeur est l'utilisation d'un poids unique associé aux signaux entrants pour
tous les neurones d'un même noyau de convolution (partage du poids), Cette méthode réduit
l'empreinte mémoire, améliore les performances et permet une invariance du traitement par
translation.
Nous avons mentionné aussi les hyper paramètres du réseau et qui sont difficiles à évaluer
avant l’apprentissage, le nombre de couches, les nombre de neurones par couche ou encore les
différentes connexions entre couches, on peut déterminer ces éléments par une bonne intuition
ou par une succession de tests/calcul d’erreurs.
Dans le chapitre suivant, on va présenter notre modèle de CNN implémenté et appliqué pour
la classification des panneaux de signalisation routière, ensuite on va interpréter les résultats
obtenus dans la phase d’apprentissage et de test et les discuter.
44
Chapitre 3 : Implémentation
45
1 Introduction
Dans ce chapitre, on va définir l’architecture de notre modèle implémenté qu’on a créé et par
la suite on va appliquer ce modèle sur la base d’images GTSR. Pour cela, on va travailler
avec les bibliothèques Tensorflow et Keras pour l’apprentissage et la classification. Afin
d’améliorer les performances des modèles et faciliter le travail, on va utiliser quelques
techniques simples et efficaces comme data augmentation et dropout. On donnera également
des informations telles que combien de temps faut-il pour s'entraîner et combien de données
de chaque classe sont nécessaires pour avoir un bon modèle de classification.
Comme tout processus de création de modèle d'apprentissage automatique, nous
exécuterons les étapes définies ci-dessous :
Explorez et visualisez l'ensemble de données
Pré-traiter et augmenter l'ensemble de données, si nécessaire
Développer un modèle CNN
Former et valider le modèle
Optimiser le modèle en expérimentant différents hyper-paramètres
Tester le modèle avec l'ensemble de données de test
46
2.2 TensorFlow :
TensorFlow est une bibliothèque open source de Machine Learning créée par GOOGLE en
novembre 2015, TensorFlow n’a cessé de gagner en popularité, pour devenir très rapidement
l’un des frameworks le plus utilisé , permettant de développer et d’exécuter des applications
de Machine Learning et de Deep Learning, son nom est notamment inspiré du fait que les
opérations courantes sur des réseaux de neurones sont principalement faite via des tables de
données multidimensionnelles, appelées tenseurs, comme par exemple un Tensor à deux
dimensions étant une matrice.
Comme nous avons téléchargé la dernière version 3.8, le gestionnaire de package est pip3, au
lieu de pip, qui a été utilisé avec Python 2.7.
Pour l’installation de TensorFlow, on va dans le menu démarrer de notre machine Windows,
nous recherchons "cmd", et à l’aide du clic droit nous choisissons "Exécuter en tant
qu'administrateur, une commande est exécutée pour installer TensorFlow.
Voici la commande :
47
2.3 Keras :
La bibliothèque Keras permet d'interagir avec les algorithmes de réseaux de neurones
profonds et d'apprentissage automatique, notamment Tensorflow, Theano, Microsoft
Cognitive Toolkit ou PlaidML.
Conçue pour permettre une expérimentation rapide avec les réseaux de neurones profonds, la
bibliothéque Keras se concentre sur son ergonomie, sa modularité et ses capacités
d’extension. Elle a été développée dans le cadre du projet ONEIROS (Open-ended Neuro-
Electronic Intelligent Robot Operating System). Elle a été initialement écrite par François
Chollet.
2.4 Scikit-learn :
Scikit-learn est une bibliothèque libre Python dédiée à l'apprentissage automatique. Elle est
développée par de nombreux contributeurs notamment dans le monde académique par des
instituts français d'enseignement supérieur et de recherche comme Inria et Télécom
ParisTech. Elle comprend notamment des fonctions pour estimer des forêts aléatoires, des
régressions logistiques, des algorithmes de classification, et les machines à vecteurs de
support (SVM). Elle est conçue pour s'harmoniser avec des autres bibliothèques libre Python,
notamment NumPy et SciPy.
2.5 Matplotlib :
Matplotlib est une bibliothèque du langage de programmation Python destinée à tracer et
visualiser des données sous formes de graphiques. Elle peut être combinée avec les
bibliothèques python de calcul scientifique comme NumPy. Matplotlib est distribuée
librement et gratuitement sous une licence de style BSD. Sa version stable actuelle est
compatible avec la version 3 de Python.
48
2.6 Configuration utilisé dans l’implémentation :
Un pc portable HP i5 CPU 2.40 GHZ.
Carte graphique intel (r) hd graphics 520.
RAM de taille 8 GO.
Taille disque dur 256 GO.
Système d’exploitation Windows 10 64 bits.
50
3.1 Exploration et visualisation de l'ensemble de données :
3.1.1 Prétraitement des images :
Pour mieux faciliter l'opération d'extraction des caractéristiques par des couches de réseaux de
neurones, il existe des étapes de prétraitement, donc nous appliquons dans un premier temps
deux étapes de prétraitement à nos images :
Niveaux de gris :
Nous convertissons des images à 3 canaux (RGB) en niveau de gris :
La quantité de données dont nous disposons n'est pas suffisante pour qu'un modèle se
généralise correctement. Il est également assez déséquilibré, et certaines classes sont
représentées dans une moindre mesure que les autres. Nous allons résoudre ce problème avec
l'augmentation des données.
Nous devons donc le faire pour rendre le modèle plus générique comme la rotation des
images, zoomer des images, déplacer des images de gauche vers la droite et de droite vers la
gauche. On peut faire l’augmentation par une fonction ImageDataGenerator.
52
L’image en entrée est de taille 32*32*3, après la transformation en niveaux de gris la taille
sera 32*32*1, l’image passe d’abord à la première couche de convolution. Cette couche est
composée de 60 filtres de taille 5*5, la fonction d’activation ReLU est utilisée, cette fonction
d’activation force les neurones à retourner des valeurs positives, après cette convolution 60
features maps seront créés de taille 28*28 (la taille spatiale du volume de sortie).
32−5
28 = +1
1
Ensuite, les 60 feature maps obtenus, sont donnés en entrée à la deuxième couche de
convolution qui est composée aussi de 60 filtres. La fonction d’activation ReLU est appliquée
sur cette couche. Le Maxpooling est appliqué après pour réduire la taille de l’image. À la
sortie de cette couche, nous aurons 60 feature maps de taille 12*12.
On répète la même chose avec les couches de convolutions trois et quatre qui sont composées
de 30 filtres, la fonction d’activation ReLU est appliquée toujours sur chaque convolution.
Une couche de Maxpooling est appliquée après la couche de convolution quatre. À la sortie
de cette couche, nous aurons 30 feature maps de taille 4*4. Le vecteur de caractéristiques issu
des convolutions a une dimension de 480.
Après ces quatre couches de convolution, nous utilisons un réseau de neurones composé de
deux couches fully connected. La première couche est composée de 500 neurones où la
fonction d’activation utilisée est la fonction ReLU, la deuxième couche utilise la fonction
softmax qui permet de calculer la distribution de probabilité des 43 classes (nombre de classes
dans la base d’image GTSR).
53
Figure 3.8 : Configuration de notre modèle
54
Couche de convolution 4 :
Nombre de paramètres : (3*3*30+1) *30 = 8130 paramètres.
Couche de max pool 2 :
Aucun paramètre à apprendre dans une couche de max pool.
Couche entièrement connectée :
Pour calculer le nombre de paramètres dans la couche entièrement connectée, on applique la
loi suivante : (n+1) *m. Pour n entrées et m sorties :
Nombre de paramètres : (480+1) *500 = 240 500 Paramètres.
Couche de sortie : la couche de sortie est une couche entièrement connectée, le nombre
de paramètres est alors (n+1) *m :
Le nombre de paramètres de la couche de sortie s’élève à : (500+1) *43 = 21 543
paramètres.
Le Nombre total de paramètres entrainés est : 1560 + 90 060 + 16230 + 8130 + 240 500
+ 21 543 = 378023 paramètres.
55
Après l’analyse des résultats obtenus, On constate les remarques suivantes :
D’après la Figure 3.9 la précision de l’apprentissage et de la validation augmente dans le
temps en fonction du nombre d’époques (une époque est un ensemble d’itérations en avant et
en arrière à travers le réseau neuronal seulement une fois), ceci reflète que le modèle apprend
au fur et mesure plus d’informations. Si la précision est moindre alors on aura besoin de plus
d’informations pour faire apprendre notre modèle et par conséquent on doit augmenter le
nombre d’époques et vice versa. De même, l’erreur d’apprentissage et de validation diminue
en fonction du temps. Les résultats nous mènent à une précision d’entrainement de 0,9558,
une perte d'entraînement de 0,1450, une perte de validation de 0,0176 et une précision de
validation de 0,9955.
La durée totale d’apprentissage pour 10 époques est de 10 198 secondes (CPU) presque 3
heures, chaque époque prend environ 16 min.
Remarque : on a débuté l’implémentation avec 30 époques comme montré sur la Figure 3.11,
mais d’après la Figure 3.11 (accuracy en fonction d’époques) le nombre 10 époques était
suffisant pour obtenir un bon résultat, on l’a réduit pour gagner en temps (À 10 époques
accuracy est plus que 0 ,95)
56
Figure 3.11 : Précision et Erreur pour le Modèle implémenté 30 époques
Figure 3.12 : Les pilotes et les bibliothèques utilisés avec ses versions
Une fois le téléchargement de CUDA et CUDNN terminé, on procède à l’installation
automatique de CUDA en suivant le guide d’installation et en extrayant le fichier de CUDNN
57
du fichier de type. rar, par la suite tous les fichiers seront copiés dans l’emplacement
approprié de CUDA
Figure 3.15 : Remplacement des bibliothèques par défaut de cuda avec les bibliothèques
de cuDNN
58
Par la suite les répertoires d'installation de CUDA, et de cuDNN ont été ajoutés à la variable
d'environnement
59
Figure 3.18 : Limitation de mémoire
60
Figure 3.20 : Précision et Erreur pour le Modèle implémenté (GPU)
Nous remarquons une bonne précision d’entrainement de 0,9615, une perte d'entraînement de
0,1275, une perte de validation de 0,0147 et une précision de validation de 0,9959.
La durée totale d’apprentissage pour 10 époques est de 319 secondes (GPU) soit 5,31 min,
chaque époque prend environ 32 secondes.
61
de test d’erreur et enfin de temps d’exécution. Le temps d’exécution étant trop couteux, Ceci
nécessite l’utilisation d’un GPU au lieu d’un CPU.
6.5 Résultats :
Les figures 3.21, 3.22, 3.23, 3.24, et 3.25 montrent les résultats de la classification de notre
système.
62
Figure 3.21: Reconnaissance d'une image "Entrée interdite"
63
Figure 3.23: Reconnaissance d'une image "limitation de vitesse 30 Km/h"
64
Figure 3.25: Reconnaissance d'une image "Interdiction aux poids lourds"
6.6 Observation :
Lors de l’évaluation de notre modèle, on a constaté quelques observations concernant la
précision de la reconnaissance comme le montre la Figure 3.27 et la Figure 3.28.
66
F) L’augmentation des données
G) Création de notre modèle de neurones
8 Conclusion
Nous avons présenté dans ce chapitre l’architecture utilisée pour la classification basée sur les
réseaux de neurones convolutionnels, proche de l’architecture LeNet-5. Pour cela on a utilisé
le modèle avec différentes couches de convolution, de max pool et de couches entièrement
connectées et on a montré les résultats obtenus en termes de précision et d’erreur. Le temps
d’exécution étant trop couteux, ceci nécessite au mieux l’utilisation d’un GPU au lieu d’un
CPU.
On a constaté aussi que le nombre de données de chaque classe nécessaire pour avoir un bon
modèle de classification est de 500 images. Les résultats obtenus montrent également que le
nombre d’époques, la taille de la base et la profondeur du réseau, sont des facteurs importants
pour l’obtention de meilleurs résultats.
67
Conclusion Générale
Dans les systèmes modernes de sécurité des véhicules, de nombreuses technologies pourraient
nous aider à conduire et informer le conducteur en cas de danger.
La capacité à surveiller en permanence les panneaux de signalisation de restrictions et les
avertissements sur la route, conduit à ce que le conducteur est souvent distrait du contrôle du
véhicule. Ainsi, cela augmente les risques d’accidents.
La solution consiste à développer activement des systèmes de classification des panneaux de
signalisation pour informer le conducteur.
À la suite de ce travail, on a développé une application de classification des panneaux de
signalisation en introduisant les notions fondamentales des réseaux de neurones en général et
des réseaux de neurones convolutionnels en particulier. Nous avons introduit ces réseaux de
neurones convolutifs en présentant les différents types de couches utilisées dans la
classification, la couche de convolution, la couche de rectification, la couche de pooling et la
couche entièrement connectée (fully connected). On a parlé aussi des méthodes de
régularisation (dropout et data augmentation) utilisées pour éviter le problème de sur
apprentissage.
Le nombre d'images réparties sur les classes sont importantes pour obtenir un bon résultat,
dans notre cas et en fonction de notre réseau la moyenne d'image nécessaire est de 500
images.
Nous avons rencontré quelques problèmes dans la phase d’implémentation, l’utilisation d’un
CPU a fait que le temps d’exécution était trop couteux. Cependant pour un gain en temps, le
déploiement des réseaux de neurones convolutionnels plus profonds sur des bases plus
importantes sur un GPU est souhaitable.
La mise en œuvre logicielle de l’application a été réalisée à l’aide de l’environnement de
développement PYTHON car cet environnement est multiplateforme avec l’utilisation de la
librairie OpenCV.
Les résultats de notre projet montrent que l’application de classification des panneaux de
signalisation est efficace et peut s’appliquer plus tard à des systèmes de reconnaissance des
panneaux de signalisation visant le code de la route d’Algérie, afin d’aider les routiers et les
transporteurs
Durant ce projet, nous avons eu l’occasion de se rapprocher du monde de l’intelligence
artificielle, et découvrir l’importance de ce domaine actuellement.
68
Références Bibliographiques
[3] [Link]
image#:~:text=La%20r%C3%A9solution%20d'une%20image,'image%20(plus%20pr
%C3%A9cise)
[7] [Link]
[9] Yann LeCun, L. Bottou, Y. Bengio, and P. Haffner, “Gradient-based learning applied
to document recognition,” Proceedings of the IEEE, vol. 86, no. 11, pp. 2278–2324,
1998.
[10] [Link]
[11] D. H. Hubel and T. Wiesel. Receptive fields, binocular interaction and functional
architecturein the cat’s visual cortex. Physiol, 160 :106–154, 1962.
69
[13] Yann LeCun,THE MNIST DATABASE of handwritten digits,1999
[18] [Link]
[20] [Link]
70
Annexe
A) Paramètres :
Path = "myData" : #après l'installation des packages nécessaires, nous avons nos
paramètres dans lequel on va mentionner l’endroit des données, le dossier dans lequel
LabelFile = 'étiquettes .csv' : #fichier csv avec tous les noms de classes.
obtenir un bon résultat mais allez jusqu’à 20 à 30, cela prendra plus de temps
Testratio = 0.2 .validationRatio = 0.2 :#nombre d’images que nous prenons pour
l’entrainement et nombre d’images pour le test et de validation , on a pris 20% pour le test
Donc le nombre total de classes détecté est 43, après il importe toutes ces images de
classes dans une matrice images, et le numéro d'identification de classes classé dans une
matrice classNo.
71
C) Diviser data :
X_train, X_test, y_train, y_test = train_test_split(images,
classNo,test_size=testRatio) : #divisé data en notre test.
X_train, X_validation, y_train, y_validation = train_test_split(X_train, y_train,
test_size=validationRatio) : #divisé data en validation.
E) Prétraitement d’image :
72
Pool _size = 2 : # Taille de pool.
Nombre _de_ nœuds = 500 : #Couche cachée avec une taille de 500 neurones.
Couche de convolution 1 :
appliqué sur une image d’entrée de taille 32*32*3 et une fonction d’activation de type
RELU.
Couche de convolution 2 :
Couche de convolution 4 :
[Link]((Conv2D(no_Of_Filters // 2, size_of_Filter2, activation='relu'))) : # Cette
commande permet de créer 30 cartes de caractéristiques en utilisant un filtre de taille 3 par
3 pixels et une fonction d’activation de type RELU.
Couche de max pooling 2 :
[Link](MaxPooling2D(pool_size=size_of_pool)) : #Cette ligne de commande
permet de réduire la taille de l’image, La méthode Max Pooling est utilisée et la taille de
l’image sera divisée sur 2.
73
[Link](Dropout(0.5)) : #Pour ne pas tomber dans le problème de sur apprentissage il
faut utiliser dropout , très efficace pour les réseaux de neurones pour régulariser et n’a
besoin que de deux paramètres pour être défini, dont :
Le paramètre type avec pour valeur 'dropout'
Le paramètre rate avec pour valeur 0.5.
[Link](Flatten()) : #Cette commande permet de créer un seul vecteur 1D puis
connecter avec la première couche cachée pour commencer la classification.
[Link](Dense(Nombre_de_ nœuds,activation='relu')) : #Cette commande permet
de créer une couche cachée avec une taille de 500 neurones, la fonction RELU est utilisée
comme fonction d’activation.
[Link](Dense(noOfClasses,activation='softmax') : : #Cette commande permet de
créer une couche de sortie composée de 43 neurones (nombre de classes) la fonction
softmax est utilisé pour calculer la probabilité de chaque classe.
[Link](Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy']
#Cette commande permet de compiler notre modèle, elle prend deux paramètres la
fonction loss et Opimizer. On a choisi la fonction categorical_crossentropy comme
fonction loss et Adam comme optimizer avec un taux d’apprentissage de 0.001.
74