UNIVERSITE D’ANTANANARIVO
----------------------
ECOLE SUPERIEURE POLYTECHNIQUE
-----------------------
MENTION TELECOMMUNICATION
MEMOIRE
en vue de l‟obtention
du DIPLOME de MASTER
Titre : Ingénieur
Domaine : Sciences de l‟Ingénieur
Mention : Télécommunication
Parcours : Ingénierie des Radiocommunications (IRC)
Président :
M. RAKOTONDRAINA Tahina Ezéchiel
Examinateurs :
M. RANDRIAMITANTSOA Andry Auguste
M. ANDRIAMIASY Zidora
M. RAJAONARISON Tianandrasana Roméo
Directeur de mémoire :
M. RATSIMBAZAFY Andriamanga
REMERCIEMENTS
Avant toute chose, je rends grâce à l‟Eternel Dieu pour l‟amour inconditionnel qu‟Il m‟a témoigné.
Mais aussi pour le temps, le courage, la force et la santé nécessaire à l‟aboutissement de ce travail.
Je tiens aussi à exprimer mes plus vifs remerciements aux quelques personnes suivantes sans qui ce
mémoire n‟aurait pas pu être réalisé :
Les membres du jury qui ont bien voulu accepter de procéder à l'évaluation de ce modeste travail
malgré leurs occupations, à savoir :
Toute ma famille, mes collègues, mes amis et tous ceux qui ont contribué de près ou de loin à la
réalisation de ce travail.
i
TABLE DES MATIERES
REMERCIEMENTS .......................................................................................................................... i
ii
1.5.4 Apprentissage des réseaux de neurones ........................................................................20
2.2.1 Numérisation....................................................................................................................27
2.2.8 Luminance........................................................................................................................30
2.2.11 Histogramme..................................................................................................................31
2.3.2 Traitement........................................................................................................................32
iii
2.4.1 Filtrage par produit de convolution ..............................................................................36
iv
3.6.1 Fine tuning total ..............................................................................................................61
4.3.1 Tensorflow........................................................................................................................69
4.3.3 Flask..................................................................................................................................71
Conclusion .....................................................................................................................................85
v
ANNEXE 2 EXTRAITS DE CODES SOURCES .........................................................................93
BIBLIOGRAPHIE ...........................................................................................................................95
RESUME
ABSTRACT
vi
NOTATIONS
1. Minuscules latines
fonction d‟activation
contraste
( ) sortie désirée
( ) erreur observée
fonction
( ) image de sortie
h fonction
i variable
image intégrale
j variable
k variable
dimension du filtre w
dimension du filtre w
couche
m variable
n variable
p variable
vii
s amplitude du pas
valeurs cibles
matrice de poids
( ) poids de connexion
variable
entrée de l‟observation
⃗( ) vecteur d‟entrée
variable
sortie du réseau
( ): sortie du neurone i
2. Majuscules latines
A variable
viii
zone d‟une image
B variable
C variable
( ) classifieur fort
D variable
distance euclidienne
E variable
F variable
variable
I variable
J fonction coût
K variable
L variable
ix
M nombre de ligne dans une image
masque de dérivation
masque de dérivation
N variable
O dimension de la sortie
P variable
surface apparente
T tâche
‖ ‖ L2-Norme du vecteur V
dimension de l‟entrée
X variable
Y variable
3. Minuscules grecques
( ) gradient local
gradient
taux d‟apprentissage
θ variable
x
variable
variable
fonction softmax
: fonction d‟activation
4. Majuscules grecques
5. Abréviations
IA Intelligence artificielle
xi
ML Machine Learning
R-CNN Region-basedCNN
xii
INTRODUCTION GENERALE
L‟intelligence artificielle n‟est pas une science nouvelle, les premières traces de l‟IA (Intelligence
artificielle) remontent en 1950. A cette époque, Alan Turing a publié un article intitulé «Computing
Machinery and Intelligence », dans lequel il propose de définir si une machine est consciente ou
non. Le machine learning ou ML, une branche de l‟IA, quant à lui apparait pour la première fois en
1959 : Arthur Samuel y présente alors un programme de jeu de dames capable de s‟améliorer à
chaque partie. Si le machine learning est considéré comme une branche de l‟IA, alors le deep
learning pourrait être vu comme une branche du machine learning. Les idées de base du deep
learning remontent à la fin des années 80, avec la naissance des premiers réseaux de neurones.
Cependant, si la théorie était déjà en place, les moyens, eux, ne sont apparus que récemment.
De nos jours, les avancées en IA sont colossales et couvrent de nombreux domaines comme le
traitement du langage naturel, la reconnaissance d‟écriture ou encore la vision par ordinateur.
Récemment, grâce aux réseaux de neurones convolutifs qui allient le deep learning et la vision
artificielle ; le secteur du « retail » ou vente au détail se trouve complètement bouleversé. Bien que
le commerce en ligne soit de mise aujourd‟hui, nombreux sont les consommateurs à encore se
rendre dans un point de vente physique. Les magasins physiques présentent néanmoins quelques
faiblesses comme : l‟impossibilité de gérer les stocks en temps réel qui fait perdre des profits aux
magasins, les attentes trop longues en caisse qui donne aux clients peu de satisfaction, la difficulté
d‟avoir plus d‟information sur le produit contrairement à une expérience en ligne. Tous ces
problèmes sont à l‟origine d‟une qualité de services moindres. Aujourd‟hui, le « phygital », poussé
par l‟utilisation du deep learning, notamment de la détéction d‟objet, vise à intégrer de façon
efficace les atouts du monde digital dans les lieux physiques. Le phygital est en train de s‟émerger :
à l‟image des magasins sans caisses, des systèmes de recommandation de produit, ou de
l‟évaluation de la disponibilité des stocks en magasin. C‟est dans ce cadre qu‟est née l‟idée de ce
mémoire, la conception d‟un SYSTEME DE DETECTION D'OBJET BASE SUR LE DEEP
LEARNING DANS UN MAGASIN INTELLIGENT pour une meilleure qualité de service afin de
permettre aux magasins d‟entrer dans l‟ère du phygital.
Cet ouvrage se divise en quatre chapitres : le premier traite du machine learning et conduit au deep
learning, le deuxième est dédié à ce qui concerne la vision par ordinateur, le troisième décrit les
réseaux de neurones convolutifs et le dernier est consacré à l‟application créée.
1
CHAPITRE 1
DU MACHINE LEARNING AU DEEP LEARNING
1.1 Introduction
Le machine learning, que l‟on traduit en français par « apprentissage automatique », ou plus
généralement l‟intelligence artificielle dont le machine learning est un sous domaine, évoque de la
science-fiction pour la plupart des gens. Pourtant le machine learning n‟est pas un rêve futuriste
mais fait déjà partie de la vie quotidienne. A vrai dire, il s‟est déjà imposé depuis des décennies
comme dans les filtres anti-spam vers les années quatre-vingts dix ou encore dans les jeux vidéo
depuis le début des années 2000. Aujourd‟hui le machine learning est partout, il existe que ce soit à
travers la voiture autonome de Google, la reconnaissance de parole de Siri, la detection de visage de
Facebook ou encore le magasin autonome d‟Amazon. Le machine learning est en train de
révolutionner le monde.
Définition 1.01:
L‟intelligence artificielle est définie par Marvin Minsky, qui fut un pionnier de l‟IA, comme : « la
construction de programmes informatiques qui s'adonnent à des tâches qui sont pour l'instant,
accomplies de façon plus satisfaisante par des êtres humains car elles demandent des processus
mentaux de haut niveau tels que : l'apprentissage perceptuel, l'organisation de la mémoire et le
raisonnement critique». [1]
Définition 1.02:
Le machine learning est quant à lui défini en 1959 par Arthur Samuel comme suit:
« L‟apprentissage automatique est la discipline donnant aux ordinateurs la capacité d‟apprendre
sans qu‟ils soient explicitement programmés.» [2]
Dans ce chapitre les types de système d‟apprentissage automatique seront approchés. Ensuite, il
faudra parler de la différence entre la régression et la classification. S‟ensuivra des différents
algorithmes utilisés dans le cadre du machine learning ainsi qu‟une présentation des réseaux de
neurones artificiel et enfin, la dernière partie se concentrera sur le deep learning et clôturera ce
chapitre.
2
1.2 Types de système d’apprentissage automatique
Il existe plusieurs types de système d‟apprentissage et cela varie en fonction du type de problème
que l‟on se pose. Il est alors utile de les classer en différentes catégories. Les systèmes de machine
learning peuvent-être classés en fonction de l‟importance et de la nature de la supervision qu‟ils
requièrent durant la phase d‟entraînement. On distingue alors quatre grandes catégories:
l‟apprentissage supervisé, l‟apprentissage non supervisé, l‟apprentissage semi-supervisé et
l‟apprentissage avec renforcement.
Un autre exemple consiste à prédire le prix d‟une voiture à partir des valeurs d‟un certain nombre
d‟attributs ou variables qu‟on appelle caractéristiques d‟une observation ou features en anglais. Ces
variables peuvent être le kilométrage, l‟âge, la marque, etc. Ils sont également appelés variables
explicatives ou prédictives. L‟entrainement se fait alors à partir de ces variables et des étiquettes. La
catégorie de la variable prédite Y fait décliner l‟apprentissage supervisé en deux sous catégories : la
classification et la régression, ces deux concepts seront abordés plus tard. [2] [3] [4]
3
Figure 1.01 : Un jeu d‟entraînement étiqueté pour un apprentissage supervisé
A première vue, on pourrait penser que l‟apprentissage non supervisé a peu d‟utilité dans les
applications de la vraie vie, mais les applications de cette technique sont nombreuses. Les sites
comme Amazon, Netflix ou encore Youtube utilisent les algorithmes de partitionnement ou
Clustering en anglais pour faire des recommandations de produits ou de films. Il peut être
également utilisé pour explorer de larges ensembles de données et de découvrir d‟intéressantes
relations entre les variables : pour un supermarché par exemple, exécuter une règle d‟association sur
les journaux de vente permettrait peut-être de découvrir que les personnes achetant de la sauce
barbecue et des chips ont aussi tendance à acheter des grillades. Cela permettrait de réorganiser les
rayons afin de présenter ces articles à proximité les uns des autres. [2] [4] [5]
4
Figure 1.02 : Un jeu d‟entraînement non étiqueté pour un apprentissage non supervisé
5
1.2.4 Apprentissage avec renforcement
L‟apprentissage par renforcement est très différent des types d‟apprentissage vus jusqu‟ici. Il
consiste à apprendre, à partir d‟expériences successives, ce qu‟il convient de faire de façon à
trouver la meilleure solution. Le système d‟apprentissage, que l‟on appelle ici « agent », interagit
avec l‟environnement, en sélectionnant et accomplissant des actions afin de trouver la solution
optimale et obtenir en retour des récompenses. L‟agent essaie plusieurs solutions, on parle d‟«
exploration », observe la réaction de l‟environnement et adapte son comportement, c‟est-à-dire les
variables pour trouver la meilleure stratégie. Pour ce type d‟apprentissage, les données
d‟entrainement proviennent directement de l‟environnement.
L‟apprentissage par renforcement peut être utilisé pour apprendre à un robot à marcher, ou à un
programme à jouer, comme AlphaGo de DeepMind qui a vaincu l‟un des meilleurs joueurs de go au
niveau mondial. En 2018, une startup issue des travaux de l‟université de Cambridge a formé une
intelligence artificielle à la conduite automobile. Au bout de seulement vingt minutes, l'IA est
parvenue à savoir comment maintenir la voiture sur sa voie de circulation. Durant cette expérience
un chauffeur été présent à bord de la voiture pour corriger les écarts de trajectoire causés par le
logiciel, en arrêtant la voiture. Le programme a rapidement progressé en suivant une logique
pénalité-récompense, en l'occurrence, respectivement, une intervention humaine et la distance
maximale parcourue sans correction par le conducteur. [2] [6] [7]
6
1.3.1 Approximation de fonction
Le terme « modélisation prédictive » (en anglais : Predictive Modelling) désigne un ensemble de
méthodes qui permettent d‟analyser et d‟interpréter des données définies afin d‟effectuer une
prédiction sur de futurs données. La modélisation prédictive peut être décrite comme un problème
mathématique consistant à approximer une fonction de mappage f entre les variables prédictives en
entrée X et la variable à prédire Y. C'est ce qu'on appelle un problème d'approximation de fonction.
En règle générale, toutes les tâches d'approximation de fonctions peuvent être divisées en tâches de
classification et en tâches de régression. [8]
1.3.2 Classification
Les algorithmes de classification sont utilisés lorsque la variable à prédire Y est discrète. Exemple :
la classification d‟email à l‟aide de filtre anti spam présenté précédemment. Une classification peut
avoir des variables d'entrée à valeurs réelles ou discrètes. Il est courant que les modèles de
classification prédisent des valeurs continues comme les probabilités d‟appartenance à chaque
classe de sortie. Une probabilité prédite peut être convertie en une valeur de classe en sélectionnant
l'étiquette de la classe qui présente la probabilité la plus élevée. [8]
1.3.3 Régression
Les algorithmes de régression sont quant à eux utilisés lorsque la variable à prédire Y est continue.
Comme le cas de la prédiction du prix d‟une voiture. Un problème de régression nécessite la
prédiction d'une quantité. Il peut avoir des variables d'entrée à valeurs réelles ou discrètes.
Remarquons que certains algorithmes ont le mot «régression» dans leur nom, tels que régression
linéaire et régression logistique, ce qui peut prêter à confusion, car la régression linéaire est un
algorithme de régression alors que la régression logistique est un algorithme de classification.
Certains algorithmes peuvent être utilisés à la fois pour la classification et la régression avec de
petites modifications, telles que les arbres de décision et les réseaux de neurones artificiels. [8]
7
d‟apprentissage supervisé de types régression. Dans un problème de régression, les caractères ne
sont pas considérés de la même façon, il y a les caractères explicatifs et le caractère à expliquer.
( ) (1.01)
Le problème revient à trouver le couple ( ) qui rapproche le plus ( ) de Y pour les couples
( ) de notre base de données. Pour chaque point , la fonction hypothèse prend une valeur ( )
qui est plus ou moins proche de . La proximité se mesure en général comme une erreur
quadratique moyenne. L‟erreur unitaire pour est alors définie par :
( ( ) ) (1.02)
L‟erreur unitaire pour étant définie, on peut ensuite sommer les erreurs pour l‟ensemble des
points :
(1.03)
∑( ( ) )
La fonction de coût est alors obtenue en effectuant une normalisation par le nombre m de points
dans la base d‟apprentissage et en remplaçant ( ) :
(1.04)
( ) ∑( )
Trouver le couple ( ) qui rapproche le plus h(x) de Y revient à minimiser la fonction coût
( ). Une façon de minimiser ( ) est d‟utiliser l‟algorithme de descente de gradient qui se
présente comme suit:
8
( ) pour et 0 (1.05)
L‟algorithme calcule le gradient de la fonction de coût au point θ. Pour trouver le minimum de cette
fonction, il faut se déplacer dans la direction opposée au gradient. Lorsque le gradient est nul, le
minimum est atteint. Ici α représente le taux d‟apprentissage ou learning rate en anglais.
Physiquement, c‟est la vitesse à laquelle on souhaite terminer les itérations. Comme la fonction
( ) est une fonction convexe, alors tout minimum local est aussi le minimum global, cela nous
permet d‟éviter d‟être induit en erreur.
( ) (1.06)
(1.07)
( )
La fonction coût est quant à elle donnée par une généralisation de celle vue précédemment:
(1.08)
( ) ∑( ( ) )
( ) pour (1.09)
J étant toujours convexe, nous n‟aurons pas de problème de minima. [9] [10] [2]
9
Figure 1.05 : Descente du gradient
( | ) ( ) (1.10)
( | )
( )
( | ) ( ) (1.11)
Dans le cas où deux événements d'un espace probabilisé sont indépendants, on voit bien que la
connaissance de l'un n'affectera pas la prévision de l'autre. Cette notion peut également être
10
quantifiée de la façon suivante : deux évènements A et B sont dits indépendants par rapport à la
mesure de probabilité P si et seulement si :
( ) ( ) ( ) (1.12)
Cette notion d‟indépendance est une hypothèse forte et qui est violée dans la majorité des cas réels.
Types Long Non long Sucré Non sucré Jaune Pas Jaune Total
Le but est de prédire le type d‟un fruit (orange, banane ou autre) qu‟on n‟a pas encore vu. Ceci en se
basant sur ses caractéristiques. Soit un fruit ayant les caractéristiques suivantes : long, jaune, sucré
qu‟on va noter respectivement L, J, S. Pour savoir s‟il s‟agit d‟une banane, d‟une orange ou d‟un
autre fruit, il faut qu‟on calcule les trois probabilités suivantes: ( | ),
( | ), ( | )
( | ) ( | ) (| ) ( ) (1.13)
( | )
( ) ( ) ()
11
( ) (1.14)
( )
( )
D‟où
( )
( )
( )
On a également :
( ) (1.15)
( | )
( )
( )
( | )
( )
Ainsi :
( | )
La probabilité que le fruit en question soit une banane est largement plus grande que les autres. Le
fruit inconnu est donc classifié comme Banane.
En se basant sur cet exemple, on peut constater que le Naive Bayes est rapide en termes de calcul et
que la classification est possible même avec un petit jeu de données. [10] [4]
12
1.4.3.1 Méthode de prédiction
La spécificité de l‟algorithme K-NN est le fait qu‟il ne nécessite pas d‟apprentissage mais
simplement le stockage des données. En effet, pour une observation qui ne fait pas parti du jeu de
données qu‟on souhaite prédire, l‟algorithme va chercher les K instances du jeu de données les plus
proches de notre observation. Ensuite, en utilisant les variables de sortie de ses voisins, l‟algorithme
calcul la valeur de la variable de sortie de l‟observation qu‟on souhaite prédire. Si K-NN est utilisé
pour la régression, alors on calcule la moyenne ou la médiane des variables de sortie des K plus
proches observations. Par ailleurs, si K-NN est utilisé pour une classification, alors c‟est le mode
des variables de sortie des K plus proches observations qui servira pour la prédiction.
Notons que la médiane désigne une valeur réelle m telle qu‟il y ait autant d‟observations
inférieures ou égales à m que supérieure ou égales à m. Le mode, quant à lui, est la valeur la plus
représentée d'une variable quelconque dans une population donnée.
(1.16)
( ) √∑( )
(1.17)
( ) ∑| |
13
La figure 1.06 montre une classification avec l'algorithme des k plus proches voisins, ici en prend
deux cas : k = 5 ou k = 18. Le nouvel individu sera affecté à la classe « cercle bleu » dans ces deux
cas. [4] [11] [12] [13]
Entrée :
Début :
14
Etape 1 : choisir k individus au hasard (comme centre des classes initiales)
Etape 2 : affecter chaque individu au centre le plus proche
Etape 3 : recalculer le centre de chaque cluster
Etape 4 : recommencer les étapes 2 et 3 jusqu‟à stabilité des centres
Fin
Le corps cellulaire contient le noyau du neurone, son rôle est d‟effectuer les transformations
biochimiques nécessaires à la synthèse des enzymes qui assurent la vie du neurone. Chaque neurone
possède des dendrites, qui sont les récepteurs principaux du neurone et servent à capter les signaux
qui lui parviennent. L‟axone quant à lui, sert de moyen de transport pour les signaux émis par le
neurone. Les neurones sont connectés les uns aux autres suivant des répartitions spatiales
complexes. Le lien physique entre deux neurones se fait grâce aux synapses. [16] [17]
15
Figure 1.08 : Neurone biologique
16
La somme pondérée consiste à calculer la somme de toutes les entrées multipliées par leur poids
c‟est-à-dire :
(1.18)
∑
Le calcul des distances consiste plutôt à comparer les entrées aux poids (qui sont les entrées
attendues par le neurone), et calculer la distance entre les deux. Dans ce cas la distance est données
par :
(1.19)
∑( )
La fonction de Heaviside : c‟est une fonction qui permet l'obtention de sorties binaires, 1 si la
valeur agrégée calculée est plus grande que le seuil, 0 sinon.
( ) 2 (1.20)
Elle est principalement utilisée pour les problèmes de classifications en indiquant qu'un objet
appartient ou non à une classe donnée. L‟inconvénient, c‟est qu‟elle n‟indique pas à quel point une
valeur est forte.
(1.21)
( )
Elle est dérivable et donc contrairement à la fonction de Heaviside, permet de savoir vers quelle
direction aller pour améliorer les résultats.
17
La fonction softmax : elle est utilisée pour de la classification multi-classe. Elle prend en entrée un
vecteur ( ) de K nombres réels et en sort un vecteur ( ) de K nombres réels
strictement positifs de somme 1. Elle est définie par la relation mathématique suivante : pour
tout * +. [17] [18]
(1.22)
( )
∑
1.5.3 Perceptron
Le perceptron a été inventé par Frank Rosenblatt en 1955, il est constitué d‟une première couche
d‟unité permettant de lire les données. On peut rajouter une unité de biais qui est toujours activée.
Ces unités sont reliées à une seule unité de sortie. Mais pour une classification multi-classe, il peut
avoir plusieurs sorties.
18
Figure 1.11 : Perceptron à une unité de sortie
Pour les problèmes de classification multi-classe, le réseau va avoir autant de neurones de sortie que
de classes. Ainsi, chacune de ces unités sera connectée à toutes les unités d'entrée. Dans ce cas, c'est
la sortie ayant la plus forte valeur qui est prise en compte.
Le perceptron est simple à mettre en œuvre, son plus grand défaut est qu‟il ne permet de résoudre
que les problèmes linéairement séparables. La fonction d‟activation utilisée (sigmoïde ou
Heaviside) présente un seuil, séparant deux zones de l'espace. [17] [18]
19
d‟une ou plusieurs couches cachées de neurones, entre la couche d'entrée et celle de sortie. Dans
cette architecture, chaque neurone d'une couche est connecté à tous les neurones de la couche au-
dessus de lui. La structure feed-forward ou non bouclée signifie que les neurones ne sont connectés
que dans un sens : les signaux provenant des entrées traversent les unités cachées pour
éventuellement atteindre les unités de sortie.
L‟exemple le plus connu de réseau de neurones feed-forward est le réseau MPL ou Multi-layer
Perceptron. [17] [18]
Soit les n Observations qui sont observées séquentiellement, l'une après l'autre.
Comme dans la régression linéaire, on commence par choisir aléatoirement des valeurs initiales
( ) ( ) ( ) () ()
pour les poids de connections. Après chaque observation ( ) nous allons
appliquer à chacun des poids la règle de mise à jour suivante :
20
( ( ) ) (1.23)
L‟itération peut se faire sur l‟intégralité du jeu d‟entrainement et s‟arrête quand l'algorithme
converge ou quand le nombre d‟itération fixé est atteint.
( ) ( ) ( ) ( ) ( ) ( ) (1.25)
( ) ( ) ( )[ ( )] (1.26)
( ) {
( )[ ( )] [∑ ( ) ( )]
Etape 5 : répéter les étapes 3 et 4 jusqu‟à un nombre maximum d‟itérations ou jusqu‟à ce que la
racine de l‟erreur quadratique moyenne soit inférieure à un certain seuil.
21
Remarques:
La plupart du temps, en machine Learning, les Data Set proviennent avec des ordres de grandeurs
différents. La normalisation des données restreint les valeurs numériques à une plage spécifiée. La
normalisation peut être effectuée par la technique du Min-Max Scaling. La transformation se fait
grâce à la formule suivante :
(1.27)
Avec
Les équations 1.25 et 1.26 présentes dans l‟étape 4 seront détaillées dans l‟annexe A1. [4] [18] [19]
Définition 1.03 :
Le Deep Learning est basé sur l‟idée des réseaux de neurones artificiels et il est taillé pour gérer de
larges quantités de données en ajoutant des couches au réseau. Pour Yann LeCun, un des pionniers
du deep learning et lauréat du prix Turing 2019, « la technologie du deep learning apprend à
22
représenter le monde. C'est-à-dire comment la machine va représenter la parole ou l'image par
exemple ». [21]
La principale différence entre les algorithmes de machine learning traditionnel et le deep learning
est l‟étape de l‟extraction de caractéristiques. Pour le machine learning traditionnel les
caractéristiques à identifier dépendent de l‟expertise humaine. Cette pratique est très difficile et
requiert un spécialiste en la matière, parfois les caractéristiques distinctives ne sont même pas
identifiables par l‟homme. Le deep learning permet de pallier à ce problème en utilisant plusieurs
couches de réseau de neurones. Les premières couches extrairont des caractéristiques simples
(présence de contours) que les couches suivantes combineront pour former des concepts de plus en
plus complexes et abstraits : assemblages de contours en motifs, de motifs en parties d‟objets, de
parties d‟objets en objets, etc.
Un autre avantage du deep learning c‟est qu‟il s‟adapte bien, plus la quantité de données fournie est
grande plus les performances sont meilleurs. Les algorithmes de ML classiques quant à eux
possèdent une borne supérieure à la quantité de données qu‟ils peuvent recevoir appelée "plateau de
performance". [20] [22]
23
Les couches présentes dans un CNN sont de l‟ordre de plusieurs dizaines, voire plusieurs centaines
de couches. Toutes ces couches effectuent des opérations qui modifient les données dans l‟objectif
d‟apprendre les caractéristiques spécifiques à ces données. On distingue trois principaux types de
couches :
la couche convolution qui fait passer les images d‟entrée par un ensemble de filtres
convolutifs, chacun de ces filtres activant certaines caractéristiques des images ;
la couche ReLU (Rectified linear unit) permet d‟accélérer et d‟optimiser l‟apprentissage en
remplaçant toutes les valeurs négatives reçues en entrées par des zéros. Elle joue le rôle de
fonction d'activation ;
la couche de pooling qui consiste à réduire la taille des images, tout en préservant leurs
caractéristiques importantes.
Après l‟apprentissage des caractéristiques, la dernière couche du CNN est un réseau complètement
connectée (perceptron ou bien un MLP).
Les différentes couches d‟un CNN seront expliquées plus en détails dans un autre chapitre.
En 2014, Google a acheté la société anglaise DeepMind, dont l‟objectif est actuellement de «
comprendre ce qu‟est l‟intelligence ». DeepMind est célèbre pour son programme AlphaGo, qui a
24
battu le champion du monde de go. Un des grands projets de Google, la Google Car renommé en
2016 par le projet Waymo, fonctionne à base de reconnaissance et de détection d‟objet utilisant du
deep learning pour la reconnaissance des panneaux pour savoir à quelle vitesse rouler, quelles voies
ne pas prendre, quand s‟arrêter, reconnaissance des lignes blanches etc. Aujourd‟hui, ces voitures
sont déjà utilisées en tant que robot taxi, c‟est ainsi que WALMART (le leader mondial des
supermarchés) et AVIS l‟utilisent pour transporter des clients jusqu‟à leur magasins.
Facebook, quant à lui, est un très grand acteur de l‟intelligence artificielle, plus précisément le deep
learning. Il choisit les messages qu‟il affiche en utilisant un moteur de recommandation.
Récemment, Facebook a mis en place un moteur d‟intelligence artificielle pour détecter les
tendances suicidaires. Facebook utilise également le deep learning pour l‟analyse de scène dans les
images pour masquer les images à caractère violent ou inapproprié.
Amazon utilise l‟intelligence artificielle dans son moteur de recommandation, nommé Echo, et dans
ses assistants basés sur son système de reconnaissance vocale Alexa. Mais une des grandes
révolutions apportée par Amazon, est le fameux Amazon Go. Amazon Go est un magasin sans
caisse, munie de centaine de caméras et des capteurs sur des étagères. Le magasin permet de se
saisir les produits et de les ajouter au panier virtuel d‟une l‟application sur le smartphone du client
qui, en retraversant les portiques, sera facturé et débité.
Le deep learning est aujourd‟hui présent dans tous les domaines, et continuera sans doute à avoir
une place importante dans les décennies à venir. [25] [26] [27]
1.7 Conclusion
Le machine learning ne date pas d‟aujourd‟hui, les différents algorithmes utilisé dans le ML ont vu
le jour durant le XXe siècle. Durant des années, les réseaux de neurones ont été mis aux oubliettes.
L‟émergence récent du deep learning, qui est une branche du machine learning, est due à
l‟évolution des GPU ainsi qu‟à la disponibilité des données en grande quantité. On peut dire que
cette technologie a été en avance sur son temps. Les applications du deep learning sont nombreuses
et touche tous les domaines, que ce soit pour le traitement de la voix ou la vision par ordinateur. Le
chapitre suivant se focalisera sur la vision par ordinateur car elle est essentielle à ce projet.
25
CHAPITRE 2
FONDEMENTS DE LA VISION PAR ORDINATEUR
2.1 Introduction
La vision a suscité l‟intérêt de nombreux philosophes et scientifiques depuis longtemps. Avec
l‟avènement des machines modernes, un certains nombres de scientifiques se sont attaqués au
problème de la vision d‟un point de vue quantitatif, c‟est-à-dire créer un modèle qui vu de
l‟extérieur, possède des propriétés semblables à la vision humaine.
La vision par ordinateur a vu le jour aux Etats Unis au début des années soixante. Elle s‟est vite
imposée comme étant très utile dans divers domaines : militaire, aérospatiale, médicale et
industrielle. Aujourd‟hui avec l‟énorme quantité d‟image disponible sur internet et l‟arrivé du deep
learning, ses performances se sont considérablement améliorées. Cela a permis l‟utilisation de la
vision par ordinateur par tous dans nos vies quotidiennes.
Définition 2.01:
La vision par ordinateur est une discipline informatique qui consiste à mettre en œuvre des outils et
techniques pour permettre à un ordinateur d‟interpréter un élément visuel c‟est-à-dire, de créer des
descriptions intelligentes et utiles de séquences et de scènes visuelles, ainsi que des objets au moyen
d'opérations menées sur des images ou des vidéos. [29]
Dans ce chapitre, les points suivants seront évoqués : premièrement, quelques notions de base
concernant les images, deuxièmement, les étapes d‟un processus de vision par ordinateur,
troisièmement, la notion de filtrage et finalement, la détection d‟objet dans le cadre du machine
learning.
26
toutes les représentations de ce genre ». Dans ce paragraphe, on parlera d‟image en étant plus un
ensemble structuré d‟information défini par plusieurs caractéristiques.
Définition 2.02:
Une image est une représentation planaire d‟une scène ou d‟un objet situé en général dans un espace
tridimensionnel, elle est issue du contact des rayons lumineux provenant des objets formants la
scène avec un capteur (caméra, scanner, rayons X, etc.). L‟image est constituée de plusieurs points
qui sont représentatifs d‟une grandeur physique comme la luminance et la couleur. [30]
Définition 2.03:
Le terme image numérique désigne généralement toute image qui a été acquise ou créée, traitée et
sauvegardée sous une forme codée, représentable par des valeurs numériques. La surface d‟une
image numérique est divisée en éléments de tailles fixes appelés pixels. Chaque pixel possède
comme caractéristique un niveau de gris ou de couleurs prélevé à l‟emplacement correspondant
dans l‟image réelle ou calculé à partir d‟une description interne de la scène à représenter. [31] [32]
2.2.1 Numérisation
La numérisation est le processus qui permet de passer de l‟état d‟image physique (image optique
par exemple) qui est caractérisée par l‟aspect continu du signal qu‟elle représente c‟est-à-dire une
image dans un état analogique (une infinité de valeur dans l‟intensité lumineuse), à l‟état d‟image
numérique qui est caractérisée par l‟aspect discret (l‟intensité lumineuse ne peut prendre que des
valeurs quantifiées en un nombre fini). L‟image peut être représentée par une matrice
bidimensionnelle de valeurs numériques ( ), où sont les coordonnées cartésiennes d‟un
point de l‟image et ( ) donne le niveau de gris en ce point. En général, la représentation pour
l‟affichage et l‟adressage des données se fait sous formes de tableau, ici nous le nommons I, de n
lignes et p colonnes. Chaque élément ( ) de ce tableau est représentatif d‟un pixel de l‟image.
La valeur de ce pixel sera associée à un niveau de gris codée sur bits ( niveaux de gris ; 0 =
noir ; blanc). La valeur en chaque point exprime la mesure d‟intensité lumineuse perçue
par le capteur. [31] [32]
27
Figure 2.01 : Image numérique
2.2.2 Pixel
Le pixel est l‟abréviation du mot « Picture élément », c‟est le plus petit élément permettant de
définir la base d‟une image numérique. Il matérialise un point donné ( ) du plan de l‟image.
L‟information présentée par le pixel est le niveau de gris (ou la couleur) prélevée à l‟emplacement
correspondant dans l‟image réelle.
Pour une image monochrome, chaque pixel est codé sur un octet. Dans une image couleur (R.V.B.),
un pixel peut être représenté sur trois octets c‟est à dire un octet pour chacune des couleurs
primaires: rouge (R), vert (V) et bleu (B). [30] [32]
2.2.3 Dimension
La dimension représente la taille de l‟image en pixel, c‟est-à-dire le nombre total de pixel dans
l‟image. La dimension D de l‟image est donc donnée par le nombre de colonnes N de l'image que
multiplie son nombre de lignes M. [32]
(2.01)
2.2.4 Résolution
La résolution, c'est le nombre de points contenu dans une longueur donnée (en pouce). Elle est
exprimée en points par pouce (en anglais: DPI pour Dots Per Inch). Un pouce mesure 2.54 cm, c'est
une unité de mesure britannique. La résolution représente la clarté ou la finesse de détails atteinte
par un moniteur ou une imprimante dans la production d‟images. Le mot résolution désigne le
nombre total de pixel affichables horizontalement ou verticalement sur un moniteur; plus ce nombre
est grand, meilleure est la résolution. Pour une même image, plus la valeur de la résolution est
élevée moins l‟image imprimée sera grande et plus les détails seront fins. [32] [33]
28
2.2.5 Niveau de gris
Le niveau de gris représente la valeur d‟intensité lumineuse d‟un pixel. Cette valeur peut aller du
noir (0) jusqu‟au blanc (255) en passant par les nuances qui sont contenues dans l‟intervalle [0,
255]. Chaque pixel est donc représenté par un octet. Les images qui sont communément appelées
images en "noir et blanc" sont appelées images en niveaux de gris dans le domaine de l'image
numérique. [32]
2.2.7 Contraste
Le contraste d‟une image correspond à l‟écart de densité entre ses teintes les plus claires et ses
teintes les plus sombres. C‟est l‟opposition marquée entre deux régions d‟une image, plus
précisément entre les régions sombres et les régions claires. Si une image possède à la fois des
éléments très clairs et des zones très sombres, c‟est qu‟elle est contrastée.
Soit et les degrés de luminosité respectivement de deux zones voisines et d‟une image,
on définit par contraste le rapport :
(2.02)
[32] [34]
29
Figure 2.03 : Représentation des contrastes d‟une image
2.2.8 Luminance
La luminance est le degré de luminosité des points d‟une image. La luminance est également
l'intensité lumineuse divisée par la surface apparente, exprimée en candela par mètre carré ou nit.
Pour un observateur lointain, on parle plutôt de brillance qui correspond à l‟éclat d‟un objet.
(2.03)
Une image a une bonne luminance si : elle est lumineuse, possède un bon contraste, et n‟est pas
parasitée. [30]
2.2.10 Contour
Les contours sont la représentation des frontières entre les objets de l‟image, c‟est la limite entre
deux pixels dont les niveaux de gris sont largement différents. La structure des contours peuvent
30
être décrite par les textures. L‟extraction de contour consiste donc à reconnaitre dans l‟image les
points qui séparent deux textures différentes. [32]
2.2.11 Histogramme
L‟histogramme des niveaux de gris ou de couleur d‟une image est une fonction représentant la
fréquence d‟apparition de chaque niveau de gris ou de couleur dans l‟image. L‟histogramme est un
moyen efficace pour connaitre la distribution des niveaux de gris ou de couleur et de voir entre
quelles bornes sont reparties la majorité des niveaux dans les cas d‟une image trop claire ou trop
foncée. [32]
2.3.1 Acquisition
La phase d‟acquisition est essentielle au processus de vision par ordinateur car elle permet de
simplifier les étapes de traitement et d‟analyse. La manipulation d‟image sur un système
informatique nécessite son extraction sous une forme numérique, c‟est-à-dire une numérisation.
Cette étape nécessite plusieurs outils dont l‟éclairage, les cartes d‟acquisition (carte ajoutée à un
ordinateur pour la numérisation de sons et d'images en provenance de sources externes), les caméras
et les scanners.
Le principe d‟acquisition d‟image se présente comme suit : des sources lumineuses éclairent une
scène composée d‟objets, chaque objet absorbe et renvoie cette énergie lumineuse, le capteur
d‟images transforme l‟énergie lumineuse renvoyée dans sa direction en un signal électrique. Cette
transformation est basée sur l‟effet photoélectrique, il permet à un photon incident d‟arracher des
électrons à des éléments sensibles ou photosites d'une matrice de petits capteurs élémentaires. Les
deux principaux types de capteurs sont : les capteurs CCD et les capteurs CMOS. [32] [36]
31
2.3.1.1 Capteur CCD
Inventés dans les laboratoires Bell en 1970 par Willard S. Boyle et George Smith, les capteurs CCD
(Charged Coupled Device) sont les premiers à faire leur apparition. Ces capteurs sont des systèmes
à base de charge.
Les photons sont reçus sur l‟électrode semi-transparente et sont transformés en électron par effet
photoélectrique. Les électrons sont ensuite collectés dans la zone désertée. À la fin de l'exposition,
grâce à un jeu de variation de potentiel cyclique résultant d'une horloge externe, les charges sont
transportées de photosite en photosite et envoyées dans un registre de sortie. Finalement, les
charges sont transformées en tension. Ce signal sera, à l'extérieur du CCD, amplifié et numérisé.
[37]
2.3.1.2 CMOS
Les capteurs CMOS (Complementary Metal Oxide Semiconductor) sont apparus au début des
années 80, son fonctionnement est différent de celle des capteurs CCD. Mais néanmoins, le principe
de base reste le même. Les photosites sont également sensibles à la lumière et obtiennent une
certaine charge électrique qui est en fonction de la quantité de lumière reçue. La différence est que
pour un capteur CMOS ; à l'intérieur de chaque photosite, la charge générée est directement
convertie en tension utilisable. [37]
2.3.2 Traitement
Le traitement est souvent appelé prétraitement, cette phase regroupe un ensemble de techniques
pour l‟amélioration de l‟image. En effet, des bruits accompagnent toujours la phase d‟acquisition
dus essentiellement aux phénomènes physiques tels que : la diffraction (déviation) du système
optique ou le flou causé par le mouvement de l‟image durant son acquisition.
32
Les techniques de prétraitement les plus courants sont : la modification d‟histogramme et la
réduction de bruit par filtrage. [32] [38]
L‟expansion de dynamique : c‟est une opération consistant à répartir les fréquences d'apparition des
pixels sur la largeur de l'histogramme. Ceci revient à étendre l'histogramme afin que la valeur
d'intensité la plus faible soit à zéro et que la plus haute soit à la valeur maximale.
2.3.2.2 Filtrage
Un des objectifs du filtrage est d‟éliminer les perturbations qui accompagnent les procédés
d‟acquisitions. Le filtrage d‟une image consiste à lui appliquer une transformation mathématique,
modifiant les valeurs de gris d‟une partie ou de tous ces pixels. Durant ce procédé les éléments
significatifs de l‟image doivent être préservés au mieux. Les filtres les plus utilisés sont basées sur
le filtrage linéaire, mais il existe également d‟autres filtres basés sur le filtrage non linéaire.
La notion de filtre sera plus approfondie dans un autre paragraphe qui lui sera voué
particulièrement. [32] [41]
2.3.3 Analyse
Le principal but de la phase d‟analyse est l‟extraction d‟information caractéristique contenue dans
l‟image. Pour cela elle a recours à divers techniques telles que :
la classification d‟objet qui consiste à catégoriser l‟image entière dans une classe ;
33
la détection d‟objet qui consiste à localiser des instances dans une image, en dessinant un
rectangle autour de chacune d‟elle ;
la segmentation d‟objet qui consiste à identifier les parties de l‟image. Elle constitue la base
de la classification et la détection d‟objet.
La segmentation étant la base des autres techniques, elle sera approfondie dans ce qui suit. [42]
La segmentation permet de prendre en compte des composants plus grands et élimine la nécessité
de considérer les pixels comme unité d‟observation.
Ci-après les principales techniques de segmentation non basée sur le deep learning :
seuillage : le seuillage est un procédé de segmentation très simple, il consiste à dire que tout
objet se différencie de son arrière-plan. Une valeur seuil spécifiée sépare les pixels en deux
niveaux (exemple 255 si le niveau est supérieur au seuil et 0 si il est inférieur). Le seuillage
convertit les images en niveaux de gris en images binaires ou distingue les pixels clairs et
foncés d‟une image couleur.
K-means : l‟algorithme K-means identifie des groupes dans les données, K représentant le
nombre de groupe. L'algorithme assigne chaque pixel à l'un des groupes en fonction de la
34
similarité des caractéristiques. Cet algorithme étant présenté dans le chapitre 1, le lecteur est
invité à revoir le sous paragraphe 1.4.4 de ce chapitre pour plus de précision.
segmentation basée sur l‟analyse d‟histogramme : cette technique utilise l‟histogramme pour
regrouper les pixels en fonction du niveau de gris. Les images simples étant constituées d‟un
objet et d‟un arrière-plan. L‟arrière-plan est généralement sur un niveau de gris et est la plus
grande entité. Ainsi, un pic élevé de niveau de gris dans l‟histogramme représente le fond de
l‟image et une valeur plus petite correspondant à un autre niveau de gris représentant l‟objet.
détection de contour : La segmentation par détection de contour consiste à identifier les
changements brusques ou les discontinuités de luminosité dans l‟image.
35
2.3.4 Interprétation
La phase d‟interprétation consiste à interpréter les informations et à décider des actions à engager :
la visualisation, le stockage et la transmission des images. L‟image est alors décrite de manière
sémantique.
( ) ( ) ( ) (2.04)
Le filtrage par produit de convolution met en jeu les pixels voisins, ce qui n‟est pas le cas pour les
manipulations d‟histogramme qui sont des opérations ponctuelles.
Le produit de convolution est défini dans le cas continu et à une dimension par:
(2.05)
( ) ( ) ( ) ∫ ( ) ( )
(2.06)
( ) ( ) ( ) ∫ ∫ ( ) ( )
36
Pour le cas d‟une image numérique, la convolution numérique est donnée par sa forme discrète:
(2.07)
( ) ( )( ) ∑∑ ( ) ( )
( ) ( ) ( ) ( ) ( ) ( ) ( ) (2.08)
( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
Illustrons cela par un exemple plus concret donné par la figure 2.09 :
37
Sur la figure 2.09 l‟image de 150 après filtrage est 350, pour la convolution des bords, on peut
utiliser l‟ajout de zéro ou l‟ajout de valeurs par défaut. [32]
( ) , - (2.09)
(2.10)
( )
( ) ∑∑ ( )
38
2.5.1.1 Principe
Dans l‟algorithme original une fenêtre de détection de taille initiale 24px par 24px est utilisée pour
balayer l‟image et déterminer si un visage y est présent. Une fois l‟image parcourue entièrement, la
taille de la fenêtre est augmentée d‟un facteur multiplicatif de 1,25 et le balayage recommence, en
décalant d‟un pixel, jusqu‟à ce que la fenêtre fasse la taille de l‟image. Ce décalage peut être changé
afin d‟accélérer le processus, mais un décalage d‟un pixel assure une précision maximale.
Cette méthode a comme particularités : l‟utilisation d‟image intégrale, la sélection par boosting des
caractéristiques, la combinaison en cascade de classifieurs boostés. [46]
2.5.1.3 Caractéristiques
Une caractéristique est une représentation synthétique et informative, calculée à partir des valeurs
des pixels, ici on utilise les caractéristiques pseudo-Haar. Les caractéristiques sont calculées par la
différence des sommes de pixels de deux ou plusieurs zones rectangulaires adjacentes. Une
caractéristique est donc donnée par un nombre réel codant les variations des pixels à une position
donnée dans la fenêtre de détection. Pour calculer ces caractéristiques rapidement, on utilise les
images intégrales. [46]
39
( ) ∑ ( ) (2.11)
En utilisant l‟image intégrale, à partir de ( ) n‟importe quel rectangle de l‟image peut être
calculé avec 4 points:
( ) (2.12)
Ainsi pour calculer tous les pixels dans la région D (figure 2.10), on n‟a pas à additionner tous les
pixels qui le composent. [47]
( ) (2.13)
( ) 2
Etant donné les exemples négatifs et positifs, on initialise les poids de chaque exemple et on
applique un processus de boosting : T itérations sélectionnant T classifieurs faibles ( ) avec
chacun un poids pour obtenir finalement un classifieur fort ( ). Pour chaque itération, un
classifieur est choisi en minimisant le taux d‟erreur calculé avec les poids courants des exemples.
40
On augmente ensuite les poids des exemples mal classifiés pour la sélection suivante. L‟itération se
termine quand le taux de bonnes détections et le taux de faux positifs atteignent le compromis
choisi au départ. Le classifieur fort final est composé de la somme pondérée des classifieurs
sélectionnés. [47]
Une décision « fausse » interrompe le calcul et impose au détecteur de retourner faux, une décision
vraie passe l‟image d‟entrée au prochain classifieur. Cela nécessite que pour qu‟une entrée soit
classifier vraie tous les classifieurs doivent voter « vraie ».
En pratique, la cascade est constituée d'une succession d'étages, chacune étant formée d'un
classifieur fort. L'apprentissage du classifieur de l'étage (n) est réalisé avec les exemples qui ont
passé l'étage (n – 1). Ce classifieur doit donc faire face à un problème plus difficile : plus on monte
dans les étages, plus les classifieurs sont complexes.
La principale limitation de la méthode de Viola et Jones est sa non adaptation à la rotation. Il est
donc difficile d‟apprendre plusieurs vues d‟un même objet. Plusieurs améliorations ont été
proposées pour remédier à ce problème. [46] [48]
41
descripteur HOG se fait en trois étapes : le calcul du gradient, le calcul de l‟orientation, la
construction de l‟histogramme.
Pour tous les points de l‟image, une approximation de la composante horizontale du gradient notée
et de la composante verticale notée est ainsi obtenue. Ici ce qui importe le plus c‟est le
contraste entre deux régions, cela implique que dans la plupart des cas la valeur absolue du gradient
est prise. Cela signifie qu‟un objet noir sur un fond blanc aura le même résultat qu‟un objet blanc
sur un fond noir.
(2.14)
( )
D‟abord, les occurrences peuvent être pondérées par la magnitude du gradient. Les régions
uniformes se représentent par un gradient de faible amplitude. L‟information est donc plus
significative quand le gradient atteint de grande valeur. Cela correspond par exemple à des coins ou
à des contours d‟un objet.
Ensuite, le nombre de barres d‟histogramme désirées influe directement sur la précision des
informations. Une barre d‟histogramme correspond au nombre d‟occurrence de l‟orientation du
gradient pour un intervalle donné. En effet, un petit nombre de barres réduit l‟information
disponible et trop de barres risquent de ne pas faire ressortir une information globale intéressante.
42
Enfin, l‟étape suivante est la normalisation, les histogrammes locaux sont normalisés en contrastes
afin d‟avoir une meilleure résistance aux changements d'illuminations et aux ombres. Pour cela les
cellules sont regroupées en blocs (concaténation des histogrammes des cellules d‟un bloc). Après sa
combinaison, les histogrammes sont normalisés en utilisant l'équation :
(2.15)
√‖ ‖
: est le vecteur non normalisé contenant tous les histogrammes d'un bloc donné,
Le processus de détection d‟objet nécessite l‟utilisation des descripteurs HOG pour entraîner un
classifieur supervisé. Différents types de classifieurs peuvent-être utilisés, initialement un
classifieur SVM ou Support Vector Machine a été utilisé. [49] [50]
43
2.6 Conclusion
Les scientifiques se sont toujours intéressés à la vision et ont essayé de le reproduire. Grâce à la
vision par ordinateur, on arrive à permettre à une machine d‟interpréter des éléments visuels et de
créer des descriptions intelligentes et utiles de séquences, de scènes visuelles, ainsi que d‟objets.
L‟exploitation de la vision par ordinateur nécessite plusieurs bases de connaissances sur les images
et sur leurs manipulations. Son utilisation dans le domaine de la détection d‟objet a connue
plusieurs bouleversements et dernièrement les connaissances acquises grâce au deep learning ont
permis un changement majeur. Les méthodes de détection d‟objet présentées dans ce chapitre sont
basées sur le machine learning, dans le chapitre 3, l‟intérêt des méthodes utilisant le deep learning
sera mis en avant.
44
CHAPITRE 3
RESEAUX DE NEURONES CONVOLUTIONNELS
3.1 Introduction
Les méthodes de détection d‟objet vues dans le chapitre précédent se basent sur des méthodes
traditionnelles qui consistent à extraire les caractéristiques « features » de chaque image du jeu de
données, puis à entraîner un classifieur sur ces features. Ces techniques peuvent fournir de bons
résultats, dépendant de la qualité des features préalablement trouvées.
En 2012, commence une révolution, lors de la compétition imagenet, un nouvel algorithme basé sur
le deep learning va se démarquer de tous les autres en explosant les records. C‟est un réseau de
neurone convolutif appelé « AlexNet ». La méthode utilisée par les CNN est similaire à celle des
méthodes traditionnelles, c‟est-à-dire ils reçoivent des images en entrée, détectent les features de
chacune d'entre elles, puis entraînent un classifieur dessus. Les grandes différences sont l'extraction
et la hiérarchisation automatique des features. Le CNN est l‟un des algorithmes les plus répandus
pour le Deep Learning. Selon l‟utilisation, on peut soit créer un CNN à partir de zéro, soit utiliser
un modèle pré-entrainé.
Ce chapitre a pour but de présenter les CNN et leur application à la détection d‟objet. Pour ce faire,
une présentation générale des CNN s‟impose, ensuite, on verra en détail les différentes couches et
les différents architectures des CNN, s‟en suivra la présentation de la rétropropagation dans un
CNN, enfin, l‟apprentissage par transfert et la détection d‟objet utilisant les CNN seront abordés
pour conclure ce chapitre. [24]
La première partie est la partie convolutive, elle fait la particularité de ce type de réseau. Cette
partie fonctionne comme un extracteur de caractéristiques. Une image passe à travers une
succession de filtres de convolution. Habituellement, une couche de convolution est suivie d'une
fonction d'activation. Certains filtres intermédiaires sont là pour réduire la résolution de l‟image par
une opération de maximum local. Ce procédé peut être réitéré plusieurs fois. Finalement, les cartes
45
de convolutions sont concaténées dans un vecteur, appelé code CNN. Ce vecteur représente la sortie
du premier bloc, et l‟entrée du second.
La deuxième partie n‟est pas caractéristique d‟un CNN, elle est constituée d‟une couche
entièrement connectée. Cette partie a pour rôle de combiner les caractéristiques du code CNN pour
classer l‟image. La sortie est une dernière couche qui contient autant d'éléments qu'il y a de classes.
Les valeurs numériques obtenues sont généralement normalisées entre 0 et 1, de somme 1, pour
produire une distribution de probabilité sur les catégories. Comme pour les réseaux de neurones
ordinaires, les paramètres des couches sont déterminés par rétropropagation du gradient. Mais dans
le cas des CNN, ces paramètres désignent en particulier les features des images. [34]
46
l‟image. Dans un CNN, les features ne sont pas prédéfinies selon un formalisme particulier comme
pour les méthodes traditionnelles (Viola Jones ou HOG par exemple), elles sont apprises lors de la
phase d‟entrainement du réseau. Les CNN sont donc capables de déterminer tout seul les éléments
discriminants d'une image.
Le pas : dans le contexte d‟une opération de convolution, le pas ou « stride » désigne le pas
de déplacement du noyau après chaque opération à travers l'image.
La profondeur : c‟est le nombre de noyaux de convolution ou filtre.
La marge à zéro ou zéro padding : il est commun d‟utiliser une épaisseur de marge de zéros
autour de l‟entrée, le zero-padding est une technique consistant à ajouter P zeros à chaque
côté des frontières de l‟entrée.
(3.01)
(3.02)
47
3.3.2 Couche de pooling
Pour l‟average pooling : chaque case correspond à la moyenne du carré d‟entrée de la même
couleur, exemple pour le cas de la case jaune, on a :
48
Pour le max pooling : chaque case correspond à la valeur maximum du carré d‟entrée de la même
couleur, exemple pour la case bleu :
( )
[22] [52]
( ) ( ) (3.03)
La couche de correction ReLU remplace donc toutes les valeurs négatives reçues en entrées par des
zéros. Elle joue le rôle de fonction d'activation et a pour but d‟introduire des complexités non-
linéaires au réseau. [52] [53]
49
Pour calculer les probabilités, la couche entièrement connectée multiplie donc chaque élément en
entrée par un poids, fait la somme, puis applique une fonction d'activation (ici on utilise la fonction
softmax si le nombre de classe ou sigmoïde logistique si ). L‟apprentissage des
valeurs des poids se fait lors de phase d'entraînement, par rétropropagation du gradient.
La couche entièrement connectée cherche les liens entre la position des features dans l'image et une
classe. En effet, le tableau en entrée correspond à une carte d'activation pour une feature donnée :
les valeurs élevées indiquent la localisation de cette feature dans l'image. Si la localisation d'une
feature à un certain endroit de l'image est caractéristique d'une certaine classe, alors on accorde un
poids important à la valeur correspondante dans le tableau. [24] [53]
3.4.1 LeNet
Les premières applications réussies des réseaux convolutifs ont été développées par Yann LeCun
dans les années 1990. Parmi ceux-ci, le plus connu est l‟architecture LeNet. LeNet est un réseau de
convolution à 7 niveaux, il permet de classifier des chiffres. Il a été utilisé par plusieurs banques
pour reconnaitre les nombres manuscrits sur les chèques numérisés en image d‟entrée de taille
. Cette technique est limitée par la disponibilité des ressources informatiques de l‟époque. [54]
50
Figure 3.06 : Architecture de LeNet
3.4.2 AlexNet
AlexNet a été proposé par Alex Krizhevsky durant le défi ImageNet Large-Scale Visual
Recognition Challenge (ILSVRC) de 2012 et remporte le premier prix. Ce réseau a permis
d‟accroitre considérablement la précision de la classification par rapport aux méthodes
traditionnelles. Il avait une architecture très similaire à celle de LeNet, mais été plus profond avec
plus de filtre par couche et des couches de convolution empilées. AlexNet est constitué de 5
couches convolutives, suivies de 3 couches entièrement connectées et utilise Relu pour la partie non
linéaire. AlexNet a été formé pendant 6 jours simultanément sur deux GPU Nvidia Geforce GTX
580. [54]
3.4.3 VGGNet
Le finaliste du concours ILSVRC 2014 est baptisé VGGNet et a été développé par Simonyan et
Zisserman. VGGNet est composé de 16 couches convolutives très attrayant en raison de son
architecture très uniforme. VGGNet est similaire à ALexNet mais apporte une amélioration en
51
remplaçant les filtres de noyau volumineux par des filtres de taille . Il a nécessité quatre GPU
et un temps de deux à trois semaines pour la formation. Bien que VGG atteigne une grande
précision sur le jeu de données ImageNet, son déploiement est un problème. Les exigences en
calcul sont énormes, à la fois en terme de mémoire et de temps. [54]
3.4.4 GoogLeNet/Inception
3.4.4.1 InceptionV1
Le gagnant du concours ILSVRC 2014 était GoogLeNet ou InceptionV1. Il contient une pile de 22
convolutions et un nouveau module appelé le « module Inception ». Ce modèle est composé de
calculs parallèles de convolutions de formes différentes et de max-pooling. La sortie de tous ces
modules est concaténée à la fin de chaque module Inception.
52
En empilant ces blocs les uns sur les autres et en insérant occasionnellement des couches de max-
pooling, l‟architecture Inception atteint des vitesses 2 à 3 fois plus rapide comparé à des
architectures n‟utilisant pas Inception. Cela est due au fait que l‟architecture Inception est plus
centrée sur la disposition spécifique du réseau plutôt que d‟ajouter simplement plus de couches dans
la séquence. En augmentant efficacement la largeur du réseau en plus de sa profondeur, le réseau
résultant contient plus de couches au total, mais comme les couches ne sont pas simplement
connectées directement les unes aux autres, le nombre total de connexions dans le réseau est réduit.
Ainsi, il y a moins de connexions qui doivent être ajustées durant l‟entrainement du réseau ce qui
fait gagner beaucoup plus de temps.
Le réseau débute comme n'importe quel autre réseau convolutionnel, les couches convolutionnelles
et de max-pooling étant empilées de manière séquentielle. Cependant, après les quatre premières
couches, les modules Inception sont utilisés, les deux premiers d'une rangée, puis cinq autres après
une couche de max-pooling. De cette manière, le réseau initial contient un grand nombre de
couches, tout en limitant la profondeur totale du réseau, ce qui a permis d'améliorer
considérablement les performances. [54] [55]
3.4.4.2 InceptionV2
Il existe plusieurs améliorations d‟Inception, Inception v2 et Inception v3 ont été présentés dans le
même document. Les auteurs ont proposé un certain nombre de mises à niveau qui augmentent la
53
précision et réduisent la complexité des calculs. Les améliorations apportées pour l‟obtention
d‟InceptionV2 sont :
54
Les banques de filtre du module ont été développées (élargies). Car si le module était approfondi, il
y aurait une réduction excessive des dimensions et donc une perte d'informations appelée
«representational bottleneck »
Les trois principes vus précédemment seront utilisés pour construire trois différents types de
modules Inception.
Dans la figure 3.14, 5 représente le module Inception de la figure 3.11 ; 6 le module de la figure
3.12 et 7 le module de la figure 3.13. [56]
55
3.5 Rétropropagation dans un CNN
(3.04)
∑∑ ( ) ( )
Le produit de convolution de la matrice image I et du filtre K est obtenu en appliquant une rotation
de 180° sur le filtre et en faisant le calcul de la corrélation croisée du résultat par I. [57]
56
∑∑ (3.05)
( ) (3.06)
[57]
{ }
(3.07)
∑∑
[57]
3.5.4 Erreur
Pour un total de P prédictions, les sorties du réseau et les valeurs cibles correspondantes ,
l‟erreur quadratique moyenne est donnée par :
(3.08)
∑( )
L‟apprentissage se fera en ajustant les poids de manière à ce que soit aussi proche de que
possible. [57]
On cherche à calculer , qui peut se traduire par la mesure de la manière dont la modification
d‟un seul pixel dans le noyau de poids affecte la fonction d‟erreur. Le pixel affecte tous
les éléments de la sortie.
57
La convolution entre l‟entrée de dimension et le filtre de dimension produit une
sortie de dimension ( ) ( ). En appliquant la règle de la dérivation en
chaine :
∑ ∑
∑ ∑
(3.09)
(3.10)
(∑ ∑ )
Développons encore la somme de l‟équation si dessus et en prenant la dérivée partielle de tous les
composantes, on obtient les valeurs nulles sauf les composantes où et :
. /
(3.11)
∑ ∑
(3.12)
{ }
La double somme résulte du partage de poids dans le réseau (le même filtre est appliqué à l‟entrée
durant la phase de convolution).
L‟opération de convolution pour obtenir le nouvel ensemble de poids est représentée sur la figure
3.16:
58
Figure 3.16 : Obtention d‟un nouvel ensemble de poids
(3.13)
Ici on cherche à calculer qui peut être interprété par la mesure de la manière dont la
modification d‟un seul pixel dans la carte de caractéristiques en entrée affecte la fonction
d‟erreur.
La figure 3.17 montre que la région de sortie affectée par le pixel de l‟entrée est la région
délimitée par les pointillés.
59
(3.14)
∑
Q représente la région délimitée par les pointillées dans la figure 3.17. Plus formellement l‟équation
3.14 peut s‟écrire :
∑ ∑
(3.15)
∑ ∑
et .
(∑ ∑ )
(3.16)
(∑ ∑ . / )
Développons encore la somme de l‟équation si dessus et en prenant la dérivée partielle de tous les
composantes, on obtient les valeurs nulles sauf les composantes où et :
. ( )/
(3.17)
( )
60
(3.18)
∑ ∑ ( )
On a une convolution exprimée sous forme de corrélation croisée avec un filtre retourné, d‟où :
{∑ ∑ } ( )
(3.19)
{ } ( )
[57]
Le fine tuning total doit être utilisé avec une très grande collection de nouvelles images, sinon on
risque le surapprentissage. L‟utilisation de cette méthode permet à l‟apprentissage d‟être plus
rapide. En effet, les paramètres utilisés étant ceux du réseau pré-entrainé et non aléatoirement
choisi. [24]
61
3.6.2 Extraction des caractéristiques
Cette méthode consiste à utiliser les features apprises par le réseau pré-entrainé pour représenter les
images du nouveau problème. La dernière couche entièrement connectée est également retirée et
tous les autres paramètres sont fixés. Ce réseau tronqué va ainsi calculer la représentation de chaque
image en entrée à partir des features déjà apprises lors du pré-entraînement. On entraîne alors un
classifieur initialisé aléatoirement sur ces représentations pour résoudre le nouveau problème.
L‟utilisation de cette méthode est conseillée lorsque les nouvelles images sont peu nombreuses et
similaires aux images de pré-entraînement. Cela permettra d‟éviter le surapprentissage et de plus, si
les nouvelles images ressemblent aux anciennes, la représentation par les même features sera
possible. [24]
L‟utilisation de cette méthode se fait lorsque la nouvelle collection d'images est petite mais très
différente des images du pré-entraînement. Comme les couches basses sont simples et génériques,
les fixer ne pose donc pas de problème. [24]
3.7.1 R-CNN
La détection d‟objet nécessite la connaissance de la classe d‟objet ainsi que l‟emplacement et la
taille du cadre de sélection. La méthode classique utilise une fenêtre coulissante pour chercher dans
chaque portion de l„image. Toutefois, différents objets, voire un même type d‟objet, peuvent avoir
différentes tailles et format d‟image, cela dépend de la distance qui le sépare de la camera. Le
nombre d‟emplacement à considérer devient alors trop nombreux pour être classifié par un CNN.
62
Figure 3.18 : Illustration d‟une fenêtre coulissante (gauche) avec formats, tailles différents (droite)
La classification par un CNN est ensuite effectuée pour chaque cadre de sélection, les propositions
de région sont alors tronquées et redimensionnées. Les 2000 propositions de région sont
transformées en carrés de taille fixe pour être ensuite introduites dans un CNN dont la sortie est un
vecteur de caractéristiques de 4096 dimensions. Le CNN agit comme un extracteur de
caractéristiques (features). Ces caractéristiques sont introduites dans un SVM formé pour chaque
classe afin de classifier la présence d‟un objet. L‟ensemble des propositions de région classées est
réduit à l‟aide d‟une suppression non maximale ou Non Maximum Suppression (NMS). NMS trie
les détections en fonction du score de confiance des objets, prend la détection de score le plus élevé
et supprime celles qui ont un Intersection Over Union ou IOU inférieur à un seuil.
En plus de prédire la présence d‟un objet, l‟algorithme prédit également quatre valeurs qui sont des
valeurs de décalage pour augmenter la précision du cadre de sélection. En effet, l‟algorithme aurait
pu prédire la présence d‟une personne, alors que le visage de cette personne est réduit de moitié.
Dans ces cas, les valeurs de décalages aident à ajuster le cadre de sélection de la proposition de
région.
63
Figure 3.19 : Illustration du système de détection d‟objet utilisant un R-CNN
Le R-CNN n‟est pas parfait et présente encore quelques défauts : l‟entrainement du réseau prend
beaucoup de temps (il faut classifier 2000 propositions de région), l‟implémentation pour une
application en temps réels n‟est pas possible (47s pour chaque image test), l‟algorithme de
recherche sélective est un algorithme fixe (génération de mauvaise propositions de région
candidates). [58] [59]
La couche RoI pooling procède comme suit : pour chaque proposition de région sur la liste d‟entrée,
il prend une section de la carte de caractéristique qui lui correspond et la redimensionne à une taille
prédéfinie. La mise à l‟échelle se fait en divisant la région en section et en procédant à une
opération de max pooling sur chaque section. Le nombre de section correspond à la taille de la
sortie.
64
Figure 3.20 : Illustration du système de détection d‟objet utilisant un fast R-CNN
La raison pour laquelle Fast R-CNN est plus rapide que R-CNN est que l‟opération de convolution
n‟est effectuée qu‟une seule fois. [58] [60]
3.7.3.1 Anchor
Faster RCNN introduit l‟idée d‟anchors, afin de gérer les variations de format d‟image et d‟échelle
des objets. Un anchors est une boite, dans la configuration d‟origine, Faster R-CNN utilise neuf
anchors pour chaque emplacement.
65
Figure 3.22 : Illustration des anchors dans l‟emplacement (320,320)
La figure 3.22 montre neuf anchors dans la position (320,320) sur une image de taille (600,800).
Les trois couleurs représentent trois différentes tailles : , , .
Chaque couleur ont des rapports hauteur/ largeur de : 1:1, 1:2, 2:1.
66
Pour une carte de caractéristique, de taille , le nombre total de anchors est de .
Les régions pouvant se chevaucher fortement, afin de réduire les redondances, la suppression non
maximale est utilisée sur des propositions de régions en fonction de leurs scores de classification, le
seuil de IOU est fixé à 0,7. [60] [61]
3.8 Conclusion
Les méthodes de détection d‟objet utilisant les CNN sont aujourd‟hui très populaires. Ces
techniques se démarquent par l'extraction et la hiérarchisation automatiques des features. Ils sont
également les plus performants et se sont toujours démarqués lors des compétitions comme
ILSVRC. Les CNN sont composés de plusieurs couches qui peuvent être disposées de façons
différentes afin de former différentes architectures. Cependant, concevoir un CNN en partant de
zéro n‟est pas envisageable pour tout un chacun car cela nécessite une puissance de calcul
phénoménale. Il faut alors se tourner vers une autre alternative qui est l‟apprentissage par transfert.
L‟apprentissage par transfert permet de modifier des modèles pré-entrainés comme celles de
détection d‟objet, pour la détection de nouveaux objets. Le chapitre suivant sera consacré à la
conception d‟une application basée sur l‟utilisation du transfert de connaissance sur un modèle de
détection d‟objet utilisant le Faster-RCNN.
67
CHAPITRE 4
APPLICATION A LA CONCEPTION D’UN SMART STORE
4.1 Introduction
Face aux récentes avancées en termes de détection d‟objet et leurs applications dans le domaine du
commerce, notamment l‟évaluation de la disponibilité des stocks en magasin, l‟ajout d‟information
digitale sur les produits, les caisses intelligentes, on a choisi de dédier ce chapitre à la conception de
tels systèmes. Le système créé aura pour but d‟améliorer les qualités de services dans les magasins
et d‟offrir une nouvelle expérience d‟achat pour le client.
La partie théorique destinée à expliquer les concepts nécessaires à la compréhension d‟un système
de détection d‟objet utilisant les CNN ont été abordés dans les chapitres précédents. Ce dernier
chapitre a pour but d‟expliquer la conception d‟une étagère intelligente et d‟un système de caisse
intelligent basée sur les CNN afin de concrétiser les études menées préalablement.
Ce chapitre commencera par une présentation des environnements de développement, suivit des
outils utilisés, ensuite, des méthodes de développement et finalement, des tests de l‟application.
RAM : 4,00 Go
L‟entrainement et le déploiement du modèle de détection d‟objet ont été effectués sur un ordinateur
de bureau TAROX ayant les caractéristiques suivantes :
RAM : 6,00 Go
68
Mémoire système partagée 3035 Mo
CUDA a été développé par NVIDIA en réponse aux demandes sans cesse croissantes de puissance
de calcul. Cette librairie, dévoilée en 2007, permet d'exploiter la puissance de calcul des GPU. Pour
fonctionner CUDA nécessite une carte graphique compatible. En effet, elle n'est que la partie
logicielle du tout.
cuDNN est une librairie accélérée par GPU pour les réseaux de neurones profonds. Elle fournit des
implémentations très optimisées pour les routines standards comme : les convolutions, pooling et
activation. [62] [63]
4.3.1 Tensorflow
Tensorflow est un outil open source lancé en 2015 par Google pour aider les développeurs à
concevoir, créer et entrainer des modèles de deep learning. Une version stable 1.0 a été annoncée en
février 2017. Tensorflow est multiplateforme, il fonctionne sur les GPU, les CPU (central
processing unit) et même les TPU (TensorFlow Processing Unit) qui sont des matériels spécialisés
pour effectuer des calculs sur des tenseurs et permettant ainsi de faire profiter d‟une importante
accélération.
La particularité de Tensorflow est qu‟il permet de représenter les calculs sous la forme d‟un graphe
d‟exécution: chaque nœud représente une opération à réaliser et chaque lien représente un tenseur.
Les opérations peuvent aller des plus simples aux plus complexes. Les données dans Tensorflow
sont représentées par des tenseurs qui sont des tableaux multidimensionnels. Un exemple typique de
tenseur est un batch d‟images. Un batch d‟images est représenté par un tenseur à 4 dimensions:
taille du batch qui représente le nombre d‟images dans le batch, la hauteur, la largeur et le nombre
de canaux de représentation. De plus, Tensorflow possède un support très vaste d‟opérations
spécifiques au deep learning, ce qui donne la faculté de construire un réseau de neurones et
69
d‟utiliser les opérations mathématiques couramment associées pour l‟entraîner avec les bons
optimiseurs. L‟exécution du graphe doit être faite dans une session. Une session place les
opérations du graphe dans le CPU ou le GPU et donne également les méthodes permettant de les
exécuter. Pour lancer les opérations du graphe on utilise la méthode run() de la session.
Le plus important est qu‟il est possible de fractionner le graphe en morceaux et de les exécuter en
parallèle sur plusieurs CPU ou GPU. Il est également possible d‟entrainer des réseaux de neurones
gigantesques en un temps raisonnable en répartissant le calcul sur des centaines de serveurs.
70
le graphe est portable, car il peut être exécuté tout de suite ou sauvegardé pour une
utilisation ultérieure. En outre, il peut être déployé en production sans avoir à dépendre du
code qui l‟a construit, mais uniquement du temps nécessaire à son exécution.
le graphe peut être transformé pour produire une version plus optimale pour une plate-
forme donnée. En outre, des optimisations de mémoire ou de calcul peuvent être
effectuées. Ceci est utile, par exemple, pour l‟exécution sur des appareils mobiles.
Tensorflow propose également plusieurs modèles comme Tensorflow object detection API
(Application Programming Interface) qui est un framework open source construit sur Tensorflow.
La réalisation du projet est basée sur ce dernier. Il permet d'utiliser des modèles de détection
d'objets pré-entraînés ou d‟entrainer des modèles en utilisant l'apprentissage par transfert. [64] [65]
[66]
4.3.2 OpenCV
OpenCV ou Open Source Computer Vision est une bibliothèque contenant plus de 2500
algorithmes de vision par ordinateur. Il est accessible au travers d‟API pour plusieurs langages dont
Python qui est le principal langage de programmation utilisé dans ce projet. Initialement écrite en C
par des chercheurs de la société Intel, OpenCV est aujourd‟hui la bibliothèque de référence pour la
vision par ordinateur, aussi bien dans le monde de la recherche que celui de l'industrie.
En comparaison avec d‟autre langage comme C ou C++, Python est plus lent. Mais Python peut être
étendu avec C ou C++. Cette fonctionnalité aide à écrire des codes gourmands en termes de calculs
en C ou C++ et à créer un wrapper (une fonction qui est destinée à appeler une ou plusieurs autres
fonctions) Python pour pouvoir les utiliser en tant que modules. Le code est alors aussi rapide que
l‟original, puisqu‟il s‟agit d‟un code C++ travaillant en arrière-plan. Python-OpenCV fonctionne
ainsi, c‟est un warper Python sur une implémentation C++ originale. [67] [68]
4.3.3 Flask
Flask est un micro Framework de développement web écrit en Python. Il est livré avec : un moteur
de template qui est Jinja 2, un serveur web de développement werkzeug WSGI (Web Server
Gateway Interface), un système de distribution de requête compatible REST ou Representational
State Transfer, un support de débogage intégrer au serveur web, un micro Framework doté d‟une
très grande flexibilité, une très bonne documentation. Par défaut Flask n‟inclut pas : une solution
d‟authentification, le support de base de données etc. Cependant la grande flexibilité du micro
71
Framework permet l‟utilisation d‟extensions Flask couvrant ces manques apparents. Avec Flask il
est donc possible de choisir les extensions qui conviennent le mieux à un projet. [69]
On a utilisé 154 images par produits et environs 100 images montrant plusieurs produits ensembles.
Les dimensions des images doivent être réduites pour plus de rapidité durant le processus
d‟entrainement. Les images dont on a besoin sont maintenant à disposition, 80% d‟entre eux seront
72
utilisées pour apprentissage et 20% pour l‟évaluation. La séparation des données permet d‟éviter le
surapprentissage.
Pour créer le cadre de sélection on utilise le bouton « Create RectBox », après la sélection,
l‟annotation correspondante est ajoutée.
La conversion au format TFrecord nécessite la conversion des fichiers individuels au format xml en
un fichier unique au format csv. C‟est ce fichier qui sera converti au format TFrecord pour chaque
jeu de données. Pour ce faire on doit lire dans le fichier csv un exemple à la fois, le formater en
utilisant tf.train.Exemple() puis imprimer cet exemple dans un fichier sur le disque. Chaque
« tf.train.Exemple » stocke des informations sur l‟exemple en particulier via des fonctions. Chaque
73
caractéristique sera alors stocker entant qu‟élément d‟un dictionnaire, la clé devant être descriptive.
L‟écriture des exemples dans un fichier TFrecord se fait par la classe tf.io.TFRecordWriter via
la méthode write().
item {
id: 1
name: 'EauVive'
}
item {
id: 2
name: 'Mira'
}(…)
74
Le MSCOCO dataset contient 91 catégories d‟objets communs avec 82 d'entre eux ayant plus de 5
000 instances étiquetées. Au total, le jeu de données contient 2500000 instances étiquetées dans
328000 images. [70]
Le projet ne consiste pas à détecter des objets dans ce dataset mais à utiliser l‟apprentissage par
transfert pour la détection de nouveaux objets. Il est donc nécessaire de modifier l‟exemple de
fichiers de configuration procuré par Tensorflow object detection api. Tensorflow object detection
api donne accès à plusieurs fichiers de configuration de pipeline, celui qui est spécifique au modèle
Faster_rcnn_inception_v2 _coco sera utilisé. Dans ce fichier les différentes sections suivantes
doivent être modifiées :
faster_rcnn {
num_classes: 90
image_resizer {
keep_aspect_ratio_resizer {
min_dimension: 600
max_dimension: 1024
}
}
Le num_classes d‟origine est de 90 et doit être remplacé par le nombre de classe utilisé. Dans
notre cas, cela est au chiffre 4 et qui correspond au nombre de catégorie d‟objet.
La variable fine_tune_checkpoint doit être également modifiée. Elle indique le chemin d‟accès
au modèle qui servira pour l‟apprentissage par transfert. Initialement, elle se présente comme suit :
fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"
Le chemin d‟accès au fichier train.record, qui contient les données d‟entrée utilisées pour
l‟entrainement et le chemin d‟accès au Label Map doivent être également spécifiés. Ainsi que le
chemin d‟accès au fichier test.record, qui lui contient l‟ensemble des données d‟évaluation.
On doit donner le nombre d‟exemple pour l‟évaluation, ici on a utilisé 169 exemples :
eval_config: {
num_examples: 169
…
}
75
Une fois le script lancé, il est possible de suivre la progression de l‟apprentissage :
Le global step représente l‟itération, cela correspond donc à une mise à jour du gradient de la
fonction de coût, loss ici représente l‟erreur correspondant à chaque itération. L‟application de la
mise à jour se fait par la méthode suivante :
grad_updates = training_optimizer.apply_gradients()
Au début le loss aura une valeur élevée est baissera au fur et à mesure que l‟entrainement avance.
Tensorflow inclus une suite d‟outil de visualisation nommée Tensorboard qui permet le suivi du
travail d‟apprentissage avec plus de détails. La figure 4.07 montre le loss en fonction du global
step vue dans tensorboard :
Des points de contrôle sont sauvegardés toutes les 5 minutes, pour éviter de remplir le disque, on ne
conserve que les fichiers les plus récents. La méthode suivante permet la sauvegarde des fichiers :
keep_checkpoint_every_n_hours = train_config.keep_checkpoint_every_n_hours
saver = tf.train.Saver(keep_checkpoint_every_n_hours =
keep_checkpoint_every_n_hours)
76
4.4.1.7 Exporter le graphe d‟inférence
Une fois l‟apprentissage fini, on doit extraire le graphe d‟inférence nouvellement formé. Il sera
utilisé pour effectuer la détection d‟objet. Tensorflow stocke la structure du graphe séparément des
valeurs des variables. Après la sauvegarde du modèle, on aura 4 fichiers :
Un BundleEntryProto séréalisé contient les métadonnées des tenseurs : lequel des fichiers « data »
contient le contenu d‟un tenseur, le décalage dans ce fichier, la somme de contrôle ect.
Pour conserver toutes les valeurs des variables et du graphe dans un seul fichier, on fait un freezing.
Le freezing est une opération permettant d‟identifier et de sauvegarder toutes les choses requises
lors du déploiement du modèle dans un seul fichier facilement utilisable.
Le script d‟exportation du graphe d‟inférence est également fourni par Tensorflow object detection
api. En interne, le script commence une session et y restaure les poids du graphe à l‟aide de la
fonction :
saver.restore(sess, input_checkpoint).
Ensuite, toutes les variables du graphe sont remplacées par des constantes de mêmes valeurs en
utilisant :
77
Pour commencer on charge le frozen graphe en mémoire :
detection_graph = tf.Graph()
with detection_graph.as_default():
od_graph_def = tf.GraphDef()
with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
serialized_graph = fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')
On charge également le Label Map, le label map fait correspondre les indices à des noms. Par
exemple dans le cas du projet: si le réseau prédit «1 » cela indique EauVive.
label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(
label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
category_index = label_map_util.create_category_index(categories)
Les tenseurs d‟entrées et de sorties sont ensuite définis, la méthode get_tensor_by_name retourne
un tenseur du même nom ; le nom des tenseurs sont déjà défini par défaut lors de l‟opération de
freezing.
#Tenseur d'entrée
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
#Tenseur de sortie
#chaque "boxes" représente une partie de l'image ou un objet a été détecté.
detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
#Chaque score représente le niveau de confiance pour chacun des objets.
detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')
num_detections = detection_graph.get_tensor_by_name('num_detections:0')
while True:
#Capture frame par frame
ret, frame = cap.read()
Pour la visualisation des résultats sur l‟image (cadre, scores, classe…), on va utiliser la méthode :
vis_util.visualize_boxes_and_labels_on_image_array()
78
Cette méthode retourne également une variable « counting_mode » contenant la liste des objets
détectés et leurs nombres. La méthode suivante permet de mettre le texte contenu dans
counting_mode sur l‟image :
Finalement, la vidéo est affichée et les données contenues sont envoyées pour la mise à jour de la
base de données contenant le nombre de produits.
app.config['MYSQL_HOST']='localhost'
app.config['MYSQL_USER']='root'
app.config['MYSQL_PASSWORD']=''
app.config['MYSQL_DB']='Smartstore'
On instancie un objet de la classe MySQLCursor pouvant exécuter des opérations telles que des
instructions SQL :
cur = mysql.connection.cursor()
79
cur.execute("""
UPDATE produits
SET nom=%s, nombre=%s, Prix=%s, rayon=%s, image=%s
WHERE id=%s
""", (Nom, Nombre, Prix, Rayon, image, id_data))
mysql.connection.commit()
Cur.close
Pour commencer, on a élaboré une fonction permettant de mettre automatiquement à jour la base de
données. Les données reçues par l‟application web contiennent la liste des noms et des nombres des
produits sur l‟étagère, ce qui permet de mettre à jour la base de données. La méthode suivante est
utilisée pour l‟acquisition des données :
updata = json.loads(request.data)
Ici, il est mieux de préciser que les données ne sont envoyées que s‟il y a un changement perçu.
Dans la page qui gère l‟étagère, on prend alors les données dans la base de données et on les places
dans une variable :
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM produits")
data = cur.fetchall()
cur.close()
80
Ces données seront affichées dans un tableau qui sera rafraîchi automatiquement et rendra possible
la visualisation en temps réel des produits présents sur l‟étagère. L‟application donne également des
informations sur le produit sélectionné par le client du magasin, cela se fait à l‟aide d‟image.
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM produits where nombre != 0")
Ici, seuls les produits présents sont comptabilisés, la somme est alors calculée.
Le système est constitué d‟une application de détection d‟objet et d‟une application web servant
d‟interface utilisateur. L‟application de détection d‟objet sert à identifier et compter les différents
produits. Une caméra permet l‟acquisition de la vidéo qui sera traitée afin de distinguer les
différents éléments à détecter. Une fois les informations sur les différents objets collectées (le
nombre et le nom de chaque produit) et à chaque changement perçu sur l‟étagère, les données seront
transmises sous un format json à l‟application web.
L‟exploitation des informations contenues dans les données transmises permet alors de concevoir le
système. Le système est capable d‟effectuer l‟inventaire en temps réel des produits, de l‟afficher
sous forme d‟un tableau et de donner un surplus d‟information sur chaque produit. Il peut être
également utilisé comme une caisse automatique, les produits sont présentés à la caméra et le total
des prix sont comptabilisés.
81
Figure 4.08 : Mode de fonctionnement globale du système
Une webcam est utilisée pour l‟acquisition des images. Une fois les images captées par la caméra,
elles seront traitées par le système de détection.
82
Figure 4.10 : Illustration de la détection effectuée par le système
La figure 4.10 indique le nom, le nombre ainsi que le score de confiance de chaque objet. Les
données sont envoyées à l‟application web et sont ensuite traitées. La figure 4.11 affiche le nom et
le nombre de chaque produit sous forme de tableau, ainsi que de l‟information digitale concernant
chaque produit. Le produit dont on veut obtenir plus d‟information doit être soumis à la caméra.
La figure 4.12 illustre la page de modification de la base de données, elle permet l‟ajout, la
suppression ainsi que la modification de la base de données.
83
Figure 4.12 : Interface permettant la modification de la base de données
La figure 4.13 montre l‟utilisation du système en tant que smart caisse, les produits soumis à la
caméra sont comptabilisés, le coût total est alors affiché.
84
Conclusion
La détection d‟objet trouve son utilité dans de nombreux domaines notamment dans le secteur du
commerce, les magasins subissent aujourd‟hui de grands bouleversements. Le deep learning est un
outil essentiel pour l‟entrer des magasins dans l‟ère du Phygital. C‟est dans ce cadre qu‟on a choisi
de s‟orienter dans ce domaine pour la conception d‟une application de détection d‟objet basée sur
les CNN, donnant une alternative pour améliorer la qualité de service. L‟application conçue
comprend un système d‟évaluation de la disponibilité des stocks en magasin, de l‟ajout
d‟information digitale sur les produits, ainsi que d‟un système de caisse intelligent. Le
développement de cette application a nécessité plusieurs outils et étapes. Les applications
présentées ici sont très restreintes, cependant, les méthodes vues dans ce chapitre sont applicable à
la conception de n‟importe quels systèmes de détection d‟objet.
85
CONCLUSION GENERALE
L‟augmentation permanant de la puissance des ordinateurs actuels ainsi que la grande disponibilité
des données ont permis l‟émergence du deep learning. Le deep learning est aujourd‟hui très
sollicité, ce mémoire a permis une démystification totale du terme et en a donné une meilleure
compréhension. Il a également mis en avant la possibilité de son utilité dans le secteur du commerce
afin de résoudre les problèmes rencontrés dans les magasins physiques et apporter une meilleure
qualité de service. Le deep learning pousse le commerce vers une nouvelle ère : la mutation des
magasins physiques sous l‟ère digitale ou « le phygital ». Pour permettre la fusion du monde
physique avec le digital, la vision par ordinateur constitue un atout essentiel.
Une des principales applications de la vision par ordinateur est la détection d‟objet. Depuis de
nombreuses années, les scientifiques ont cherché des moyens efficaces pour obtenir de bons
résultats dans ce domaine. Les méthodes comme celle de Viola et Jones ou les HOG ont été la
référence pendant plusieurs années. Elles ont permis un tournant majeur dans le problème de
détection d‟objet. Mais en 2012, le mariage du deep learning avec cette discipline, les détrône et
met en avant les CNN.
Aujourd‟hui, les méthodes de détection d‟objet basées sur les CNN sont les plus performants. Ce
sont des réseaux de neurones spécialement conçus pour le traitement d‟image. Ils sont composés de
plusieurs couches qui peuvent être agencées de différentes manières afin de donner divers
architectures. La conception d‟un CNN en partant de zéro n‟est cependant pas envisageable car cela
serait trop gourmand en ressource, l‟apprentissage par transfert permet de résoudre ce problème.
Dans ce mémoire, on a utilisé l‟apprentissage par transfert sur un réseau de détection d‟objet de la
famille des R-CNN qui est le Faster RCNN.
L‟application conçue pour la mise en pratique des connaissances acquises dans la partie théorique
permet l‟évaluation de la disponibilité des stocks dans un magasin, l‟ajout d‟information digitale sur
les produits ainsi que l‟utilisation d‟une caisse intelligente. Ce système présente un grand nombre
d‟intérêt car il peut être utilisé comme base d‟un autre système plus spécifique.
Il faut dire que des améliorations peuvent encore être apportées à ce système, notamment l‟ajout
d‟un système de notification instantané ou encore un système de recommandation de produit basée
sur une connaissance du client. Ces améliorations peuvent faire l‟objet d‟une autre étude.
86
ANNEXE 1
NOTIONS SUPPLEMENTAIRES
⃗( ) ( ) ( ) ( ) (A1.01)
⃗( ) ( ) ( ) ( ) (A1.02)
⃗( ) ( ) ( ) ( ) (A1.03)
L‟algorithme de rétropropagation permet de calculer l‟erreur entre les sorties désirées et observées
résultant de la propagation vers l‟avant des entrées ⃗( ) et de rétropropager cette erreur à travers les
couches du réseau en allant des sorties vers les entrées.
( ) ( ) ( ) (A1.04)
Considérons la somme des erreurs quadratiques observé sur l‟ensemble C des neurones de sortie :
(A1.05)
( ) ∑ ( )
( ) [ ( )] (A1.06)
87
Avec
( ) : la sortie du neurone i.
( )
Pour minimiser l‟erreur, on va modifier les poids ( ) dans le sens opposé du gradient
( )
On va décomposer l'erreur grâce au théorème de dérivation des fonctions composées énoncé comme
suit :
Si une variable y dépend d'une seconde variable u, qui dépend à son tour d'une variable x, le taux de
variation de y selon x est calculable comme le produit de taux de variation de y selon u et du taux
de variation de u selon x, autrement dit :
(A1.07)
88
( ) ( ) ( ) ( ) ( ) (A1.08)
( ) ( ) ( ) ( ) ( )
( ) (A1.09)
( )
( )
Premier terme :
( ) 0 ∑ 1
( ) ( )
( ) ( ) (A1.10)
( )
( ) ( )
Le deuxième terme :
( ) [ ( ) ( )] (A1.11)
( ) ( )
Le troisième terme :
( ) , ( )-
( ) ( )
( )
( )
( ) [ ( )
]
( )
( )
( )
( ) ( )
[ ]
89
( )
( )
( )[ ]
( ) ( ) ( )
[ ] [ ]
( ) (A1.12)
( ), ( )-
( )
( ) [∑ ( ) ( )]
( ) ( )
( ) , ( ) ( )-
( ) (A1.13)
( ) ( )
( ) (A1.14)
( ) ( )[ ( )] ( )
( )
( ) ( ) ( ) (A1.15)
Avec ( ) ( ) ( )[ ( )] (A1.16)
L‟objectif sera toujours d‟adapter les poids de la couche courante en minimisant la somme des
erreurs sur les neurones de la couche de sortie. L‟indice k désigne un neurone sur la couche
suivante. Comme ( ) est inconnue pour les couches cachées l‟expression de la dérivée partielle
de l‟erreur totale devient :
( ) ( ) ( ) ( ) (A1.17)
( ) ( ) ( ) ( )
90
0 ∑ ( )1 (A1.18)
( )
( ) ( )
0 ∑ ( )1 ( )
∑[ ( ) ]
( ) ( )
( ) ( ) ( )
∑[ ( ) ] ∑[ ( ) ]
( ) ( ) ( )
( ) ( ) [ ( ) ( ( ))] ,∑ ( ) ( )- (A1.19)
∑[ ( ) ] ∑[ ( ) ]
( ) ( ) ( ) ( )
∑[ ( )( ( ), ( )-) ( )] (A1.20)
∑[ ( )( ( ), ( )-) ( )] ∑ ( ) ( ) (A1.21)
( ) (A1.22)
( ), ( )- [∑ ( ) ( )] ( )
( )
Et on a :
( ) (A1.23)
( ) ( ) ( )
( )
Avec : ( ), ( )-[∑ ( ) ( )]
(A1.24)
Notons que dans le cas de la première couche cachée du réseau, puisqu‟il n‟y a pas de couche
précédente de neurones, il faut substituer la variable ( ) par l‟entrée ( ). [19]
91
A1.2 Intersection Over Union
Soit un algorithme qui produit un cadre de sélection (noté A) pour un objet. L‟Intersection Over
Union montre combien la prédiction est proche de la vérité (noté B). Pour ce faire, on divise
l‟intersection de A et B par l‟union de A et B. Si IOU est supérieure à un certain seuil, la prédiction
est considérée comme correcte, sinon on doit travailler d‟avantage sur l‟algorithme. [71]
92
ANNEXE 2
EXTRAITS DE CODES SOURCES
93
A2.4 Calcul des prix pour la caisse
def caisse():
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM produits where nombre != 0")
data = cur.fetchall()
cur.close()
a = []
#calcul total prix
for i in data:
multi = i[2]*i[3]
a.append(multi)
total=sum(a)
return render_template('caisse.html', nom=data, total=total)
<tr>
<td>{{row.1}}</td>
<td>{{row.2}}</td>
<td>{{row.3}}</td>
</tr>
{%endfor%}
</table>
94
BIBLIOGRAPHIE
[9] G. Idiou, « Régression et modélisation par les réseaux de neurones », Mémoire de Magistère,
Université Mentouri-Constantine, Faculté des sciences exactes, Département mathématique, juin
2009.
[10] E. Biernat, M. Lutz, Y. LeCun, « Data science fondamentaux et études de cas », Eyrolles :
Paris, 2015.
[12] J. Grus, « Data science par la pratique Eyrolles », Eyrolles : Paris, 2017.
95
[13] B. Sarra, K. Ikram, « Algorithmes de classification pour la prévision des maladies agricoles »,
Mémoire de Master, Ecole Nationale Supérieure d‟informatique, Option Système informatique,
2017.
[16] « Les réseaux de Neurones Artificiels », Cours, Université de M‟SILA, Faculté des Sciences et
Sciences de l'Ingénieur, Département d'électrotechnique, 2006.
[17] V. Mathivet, « L'Intelligence Artificielle pour les développeurs », Eni : France, Décembre
2014.
[22] M. D. Youcef, « Deep Learning pour la classification des images », Mémoire de Master,
Université Abou Bakr Belkaid Tlemcen, Faculté des sciences, Département informatique, 2017.
96
[24] P. Monasse, K. Nadjahi, « Classez et segmentez des données visuelles»,
https://openclassrooms.com/fr/courses/4470531-classez-et-segmentez-des-donnees-visuelles, Mai
2019.
[28] R. Horaud, O. Monga, « Vision par ordinateur : outils fondamentaux », Hermès, 1995.
[30] M. M. Zakaria, « Classification des images avec les réseaux de neurones convolutionnels »,
Mémoire de Master, Université Abou Bakr Belkaid Tlemcen, Faculté des sciences, Département
informatique, 03 Juillet 2017.
[32] M. A. Rakotomalala, « Traitement Numérique des Images », Cours M1- TCO, Ment. TCO.-
E.S.P.A., A.U. : 2016-2017.
97
[38] B. Djemaa, « Résolution de problèmes par écosystèmes : Application au traitement
d’images », Mémoire de Magistère, Universite Mohamed Khider Biskra, Faculté des Sciences et
des Sciences de l‟Ingénieur, Département Informatique, 2005.
[45] « Outils fondamentaux en traitements d’images», cours M2- INSA, Ment. Mention optique,
image, vision, multimédia- INSA. AU : 2018-2019.
[48] B. Chahrazed, B. Afef, « La détection des visages », Mémoire de Master, Université Larbi Ben
M‟hidi Oum El Bouaghi, Faculté des sciences, Département de mathématiques et Informatique,
Option : Vision Artificielle, 09 Juin 2014.
98
[49] L. Leyrit, « Reconnaissance d’objets en vision artificielle : Application à la reconnaissance de
piétons », Mémoire de Docteur, Université Blaise Pascal, Sciences Pour L‟Ingénieur De Clermont-
Ferrand, Spécialité : Vision pour la robotique, 22 novembre 2010.
[54] S. Das, « CNN Architectures: LeNet, AlexNet, VGG, GoogLeNet, ResNet and more… »,
https://medium.com/@sidereal/cnns-architectures-lenet-alexnet-vgg-googlenet-resnet-and-more-
666091488df5, 16 Novembre 2017.
[55] R. Ek, « Automatic Image Annotation Using Transfer Learning on Convolutional Neural
Networks », Mémoire de Master, Université Åbo Akademi, Faculté des Sciences et Sciences de
l'Ingénieur, May 2018.
[58] R. Gandhi, « R-CNN, Fast R-CNN, Faster R-CNN, YOLO — Object Detection Algorithms »,
https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-
36d53571365e, 9 Juillet 2018.
99
[59] S. H Tsang, « Review: R-CNN Object Detection », https://medium.com/coinmonks/review-r-
cnn-object-detection-b476aba290d1, 31 Aout 2018.
[66] A. Géron, «Hands-On Machine Learning with Scikit-Learn & TensorFlow», O'Reilly Media :
United States of America, March 2017.
100
FICHE DE RENSEIGNEMENTS
Nom : ANDRIAMIANDRASOA
Prénom(s) : Ianjafitia
ianjafitia@gmail.com
+261 34 68 943 81
Titre du mémoire :
Nombres de tableaux : 01
Nombre de figures : 64
101
RESUME
Le deep learning est une branche du machine learning qui est lui-même une branche de
l‟intelligence artificielle. Les idées fondatrices du deep learning remontent à la fin des années 80,
avec l‟apparition des premiers réseaux de neurones. Aujourd‟hui, grâce au développement
grandissant de la puissance des ordinateurs et la grande disponibilité des données, le deep learning
est utilisé dans plusieurs domaines surtout dans la vision industrielle. La détection d‟objet qui est
une des applications de la vision par ordinateur se voit alors être complètement révolutionnée. Les
CNN dépassent largement les compétences les méthodes de détection d‟objet traditionnelles comme
celle de Viola et Jones ou les HOG lors des grandes compétitions comme celles de ILSVRC. Le
secteur du commerce est un des secteurs les plus touchés par le deep learning, les méthodes de
détection d‟objet par CNN permettent alors d‟améliorer la qualité de service vue dans les magasins
et aident à leurs entrer dans l‟ère du phygital.
Mots clés: Apprentissage profond, apprentissage par transfert, Vison par ordinateur, CNN,
Détection d‟objet.
ABSTRACT
Deep learning is a subset of machine learning that is itself a subset of artificial intelligence. Deep
learning was founded in the late 80s, when the first neural networks appeared. Nowaday, with the
development of computing power and the wide high availability of data, deep learning is used in
several fields, especially in computer vision. Object detection, which is one of the applications of
computer vision, is then revolutionized. Cnns far exceed the capabilities of traditional object
detection methods such as Viola and Jones or HOG in major competitions like ILSVRC. The
commercial sector is one of the sectors most affected by deep learning, the methods of object
detection by CNN allow to improve the quality of service seen in the stores and help them to enter
the phygital era.
Key-words: Deep learning, Transfer learning, Computer Vision, CNN, Object detection.