Memoire PFE Moad Elamarti Yassir ZDAALI Version Final
Memoire PFE Moad Elamarti Yassir ZDAALI Version Final
Projet Tutoré
Semestre S6
Mémoire
Présenté par :
EL AMARTI MOAD
ZDA ALI YASSIR
Encadré par :
Pr : Fatima EL HAOUSSI
Pr : Hanane CHERGUI HALI
À nous chers parents qui nous ont soutenus et encadrés tout au long de notre
cursus.
A nos frères et soeurs.
A nos enseignants.
A nos amies.
A tous ceux qui nous ont soutenus.
1
Remerciement
Nous tenons ainsi à adresser nos vifs remerciements à Mme Hanane Chergui Hali pour
son suivie et son énorme soutien qu’elle n’a cessé de nous prodiguer tout au long de cette
période.
Nous tenons ainsi à adresser nos remerciements aux membres du jury pour m’avoir ho-
noré en acceptant d’évaluer ce travail et d’être présents dans de telles conditions.
Et Finalement, nous exprimons nos profondes gratitudes à tout le personnel que nous
avons contacté, auprès desquels on a trouvé l’accueil chaleureux, l’aide et l’assistance.
2
Resumé
Nul doute que ces dernières décennies on a un recours sans précédent à l’intelligence
artificielle AI qui se présente comme étant un outil très puissant capable essentiellement de
trouver des solutions sophistiquées à nos problématiques existentielles, Cependant.
ce progrès a créé une nouvelle révolution technologique fournies un ensemble de moyens
pour arriver dans un premier lieu à l’intégration de l’être humain avec la machine dans le but
de moderniser le monde au meilleur.
Et l’une des branches qui fait partie de cette technologie, on trouve le Deep Learning qui
fera l’objet de notre projet en se plongeant impérativement sur le traitement des vidéos et
l’extraction de l’information via le décryptage de la séquence image vidéo afin de classifier
les caractéristiques de celle-ci.
Mots clés : AI, Deep Learning, révolution technologique, traitement de vidéos, séquence,
image, classification.
3
Abstract
There is no doubt that in the last decades there has been an unprecedented recourse to
artificial intelligence AI, which presents itself as a very powerful tool capable of finding
sophisticated solutions to our existential problems. However, this progress has created a new
technological revolution providing a set of means to integrate the human being with the
machine in order to modernize the world to the best. And one of the branches that is part of
this technology, we find the deep learning that will be the subject of our project by diving
imperatively on the processing of videos and the extraction of information via the decoding
of the video image sequence in order to classify the characteristics of it.
Keywords : AI, Deep learning, technological revolution, video processing, sequence, image,
classification.
4
Table des matières
Dédicaces 1
Remerciement 2
Resumé 3
Abstract 4
Introduction Générale 10
1 État de l’art 12
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2 Traitement de données vidéo . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 Qu’est-ce qu’une vidéo numérique ? . . . . . . . . . . . . . . . . . 12
1.2.2 Les formats de fichiers vidéo . . . . . . . . . . . . . . . . . . . . . 13
1.3 Les caractéristiques de vidéo . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.1 Représentation d’image . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.2 Pixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.3 Échantillonnage vidéo . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.4 Principes de la compression vidéo . . . . . . . . . . . . . . . . . . 14
1.4 Classification des vidéos . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.1 Histoire de AI/Deep Learning . . . . . . . . . . . . . . . . . . . . 15
1.4.2 L’apprentissage Automatique . . . . . . . . . . . . . . . . . . . . 17
1.4.3 Deep Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.4.4 Types d’apprentissage automatique . . . . . . . . . . . . . . . . . 19
1.4.4.1 L’apprentissage supervisé . . . . . . . . . . . . . . . . . 19
1.4.4.2 L’apprentissage non-supervisé . . . . . . . . . . . . . . 20
1.4.4.3 L’apprentissage semi supervisé . . . . . . . . . . . . . . 20
1.4.4.4 L’apprentissage par renforcement . . . . . . . . . . . . 21
1.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5
TABLE DES MATIÈRES
6
TABLE DES MATIÈRES
Bibliographies 64
7
Table des figures
8
TABLE DES FIGURES
9
Introduction Générale
La technologie Deep Learning vient en quelque sorte pour remédier à une telle problé-
matique puisqu’elle repose sur un ensemble des théories et des techniques afin de permettre
à la machine de pouvoir analyser chaque données reçue de la décoder sous forme d’une in-
formation et de l’interpréter en comparaison avec les autres données stockées, ce qui leur
permettra d’apprendre à travers une séquence d’exemples.
A cet égard, une analyse vidéo intelligente vient nous offrir véritablement une alternative aux
anciens méthodes de détection, cette approche manipule des algorithmes visant la détection
automatique de personnes, véhicules, toutes sortes d’objets à travers l’extraction d’images
vidéo à partir desquels on peut détecter le mouvement, l’apparition et la disparition d’objet
avec une traçabilité trop optimisée.
Ce travail est réparti comme suit :
Dans un premier lieu, nous définissons les caractéristiques d’une vidéo numérique et l’intêret
d’une classification vidéo, ainsi nous avons mis en accent les différents type d’apprentissage.
Dans un second lieu, nous avons abordé le principe de fonctionnement d’un réseau de neu-
ronne en traitant les architectures CNN et LSTM, et leurs rôles qui jouent dans l’extraction
des caractéristiques spatiales et temporelles d’une image vidéo, de plus, on a discuté quelque
modèles pré entrainés tel que Resnet50, VGG16....
10
INTRODUCTION GÉNÉRALE
fication vidéo à travers le concept Deep learning, pour ce faire, on a travaillé sur la classifi-
cation des activités sportives en incluant l’architeture ResNet50 pour voir l’intêret de passer
à une classification d’image et la mettre au service d’une classification vidéo, à partir de
cette classification on a pu mettre en exergue une combinaison entre CNN et LSTM qui sert
principalement à la classifiction des données séquentielles lieés à la dimension temporelle.
et par la suite on a opté pour une comparaison entre trois architectures à savoir ResNet50-
LSTM et VGG16-LSTM et Inceptionv3-LSTM pour en conclure finalement l’approche la
plus optimale.
11
Chapitre 1
État de l’art
1.1 Introduction
Dans ce chapitre, nous allons présenter les caractéristiques de la donnée vidéo en met-
tant l’accent sur ses dimensions spatiales et temporelles. Ainsi,nous avons traité le principe
de la classification vidéo qui réside sur les algorithmes d’apprentissages en se focalisant sur
l’intérêt de Deep Learning.
12
1.3. LES CARACTÉRISTIQUES DE VIDÉO
13
1.3. LES CARACTÉRISTIQUES DE VIDÉO
1.3.2 Pixel
Le pixel désigne le petit élément constitutif d’une image numérique, chaque pixel dans
une image vidéo conserve une quantité d’information qui crée une différence par rapport à
ses contigus. De plus, étant donné que cette dernière se présente sous forme d’une matrice à
savoir les valeurs de pixels, nombre de colonnes multiplié par le nombre de ligne donne le
nombre total de pixels dans l’image.
En prenant à titre d’exemple une image de 620*400 en couleur ce qui va nous produire
un nombre de pixel égal à (640*480=248 000) avec un poids de chaque pixel (3 octets), alors
on peut estimer le poids de lâimage dans sa globalité (248 000*3=744 000 octets) dans les
alentours de 700ko.
Dans le même sens, pour coder une image vidéo généralement on la code via le codage dite
RVB, chaque couleur est codée sur 8bits (1 octet) et chaque pixel sur 3 octets rouge R [0-
255], vert V [0-255], bleu B [0-255]. Le principe est dâadditionné les couleurs pour obtenir
les différentes couleurs possibles [256*256*256=16 777 216] couleurs différents.
14
1.4. CLASSIFICATION DES VIDÉOS
spatial qui repose sur les redondances spatiales et le codage entropique. [9]
La première chose dans la compression consiste d’abord à prendre en charge le modèle
temporel de prédire l’image courante à coder en utilisant une des images de références ti-1,
en contrepartie, on trouve la prédiction spatiale qui permet de diviser l’image en plusieurs
blocs de façon à ce que on obtient la différence entre ces blocs. Et le codage entropique vient
pour exploiter la redondance statique afin de représenter chacun d’eux par une série de bits
de sorte à minimiser la taille globale.
15
1.4. CLASSIFICATION DES VIDÉOS
comme disait Steve jobs « innovation, c’est une situation qu’on choisit parce qu’on a une
passion brulante pour quelque chose », l’idée de la machine pensante a abordée dans un pre-
mier temps divers interrogations, à savoir :
16
1.4. CLASSIFICATION DES VIDÉOS
naux avec des dizaines de couches cachées ce qui a fait normalement l’émergence de Deep
Learning.[12]
17
1.4. CLASSIFICATION DES VIDÉOS
Une des perspectives des techniques de l’apprentissage profond est le remplacement de cer-
tains travaux encore relativement laborieux, par des modèles algorithmiques d’apprentissage
supervisé, non supervisé (c’est-à-dire ne prenant pas en compte pas des connaissances spé-
cifiques du domaine étudié) ou encore par des techniques d’extraction hiérarchique des ca-
ractéristiques. Les recherches dans ce domaine s’efforcent de construire de meilleures repré-
sentations du réel et de créer des modèles capables d’apprendre ces représentations à partir
de données non labellisées à grande échelle. Certaines de ces représentations s’inspirent des
dernières avancées en neuroscience. Il s’agit d’interprétations du traitement de l’information
et des modèles de communication du système nerveux.
Les différentes architectures d’apprentissage profond telles que les réseaux de neurones pro-
fonds, les réseaux neuronaux convolutifs « convolutional deep neural networks », et les ré-
seaux de croyance profonde ont plusieurs champs d’application :
— La vision par ordinateur (reconnaissance de formes) ;
— La reconnaissance automatique de la parole ;
— Le traitement automatique du langage naturel ;
— La reconnaissance audio et la bio-informatique.
[14]
18
1.4. CLASSIFICATION DES VIDÉOS
Dans une autre part, l’apprentissage se différencie au premier qu’il fait appel à la généra-
lisation en identifiant plus à l’apprentissage de lecture la manière dont le mot est écrit.[15]
19
1.4. CLASSIFICATION DES VIDÉOS
des symptômes de différents patients le système peut catégoriser les patients en vu de leurs
analyses médicales en risque de développer telle ou telle maladie.
Quand le système ne dispose que d’exemples mais que le nombre de classes et leurs
natures n’ont pas été prédéterminés, on parle justement d’apprentissage non supervisé (ou
clustering). L’algorithme doit découvrir par lui-même la structure plus ou moins cachée des
données, ainsi le système a le devoir de cibler les données selon leurs attributs afin de les
classer en groupe homogènes. La similarité est généralement calculée selon la fonction de
distance entre paires d’exemples. A titre dâexemple, un épidémiologiste veut tenter à partir
d’un ensemble assez large de victimes de cancers du foie faire émerger des hypothèses expli-
catives, le système peuvent différencier différents groupes, (leur provenance géographique,
génétiqueâ).
L’intérêt d’utiliser cette approche réside dans le fait que l’étiquetage de données prend sou-
vent beaucoup de temps, dans ce cas l’inclusion d’un grand nombre de données non étique-
tées au cours du processus dâentrainement a tendance à améliorer la performance du modèle
final tout en réduisant le temps et les coûts consacrés à sa construction.
20
1.5. CONCLUSION
1.5 Conclusion
Dans ce chapitre, nous avons donné des concepts de base concernant les données vi-
déos, de plus nous avons traité de manière générale quelques types d’apprentissage tels que
apprentissage supervisé, apprentissage non supervisé ,semi-supervisé et par renforcement.
Notre objectif dans le chapitre suivant sera basé sur des algorithmes d’apprentissage super-
visé dédié à la classification de CNN et LSTM.
21
1.5. CONCLUSION
22
Chapitre 2
23
2.2. LE RÉSEAU NEURONE ARTIFICIEL
Le principe de fonctionnement :
Les neurones biologiques disposent d’un centre de contrôle (appelé cellule somatique) fai-
sant la somme des informations recueillies par les dendrites. Ensuite, le centre de contrôle
retourne un potentiel d’action en suivant les règles suivantes :
— la somme en entrée ne dépasse pas le seuil d’excitation : pas de message nerveux via
l’axone.
— Si la somme en entrée dépasse le seuil d’excitation : un message nerveux est émis via
l’axone.
24
2.2. LE RÉSEAU NEURONE ARTIFICIEL
25
2.3. LES RÉSEAUX DE NEURONES CONVOLUTIFS
— Une partie convolutive : Son objectif final est d’extraire des caractéristiques propres
à chaque image en les compressant de façon à réduire leur taille initiale. En résumé,
l’image fournie en entrée passe à travers une succession de filtres, créant par la même
occasion de nouvelles images appelées cartes de convolutions. Enfin, les cartes de
convolutions obtenues sont concaténées dans un vecteur de caractéristiques appelé
code CNN.
— Une partie classification : Le code CNN obtenu en sortie de la partie convolutive
est fourni en entrée dans une deuxième partie, constituée de couches entièrement
connectées appelées perceptron multicouche (MLP pour Multi Layers Perceptron).
Le rôle de cette partie est de combiner les caractéristiques du code CNN afin de
classer l’image.
26
2.3. LES RÉSEAUX DE NEURONES CONVOLUTIFS
27
2.3. LES RÉSEAUX DE NEURONES CONVOLUTIFS
pas l’ rgmax correspondant à la valeur la plus grande parmi les 4 valeurs de pixels.. (voir
figure 1.6 )
28
2.4. LES MODÈLES CNN PRÉ-ENTRAÎNÉS
voie enfin en sortie un vecteur de taille d correspondant au nombre de classes dans lequel
chaque composante représente la probabilité pour l’input image d’appartenir à une classe.
Finalement, le principe de fonctionnement d’un CNN est assez facile à comprendre mais
le faite de créer un nouveau réseaux de neurones convolutés est couteaux en terme d’ex-
pertise,de matériel et de quantité de données annotées nécessaire ,il s’agit d’abord de fixer
l’architecture de réseau c’est-à-dire le nombre de couches ,leur tailles et les opérations matri-
cielles qui les connectent ,ainsi l’entrainement d’un réseau peut prendre plusieurs semaines
pour une meilleur CNN , Pour pallier à ces obstacles, Python , offre la possibilité d’exploiter
des modèles CNN pré-entraînés performants tels que ResNet50,VGG16, Inceptionv3.
29
2.4. LES MODÈLES CNN PRÉ-ENTRAÎNÉS
2.4.2 VGG 16
VGG16 est un modèle de réseau de neurones à convolution qui a une profondeur de
16,conçu par K. Simonyan et A. Zisserman[2].Ce modèle est également formé Pendant 3
semaines sur 14 millions d’images appartenant à 1000 classes. Voici de brèves informations
sur sa taille et ses performances.
— Taille : 528 MB
— Top-1 : Précision : 74.4%
— Top 5 : Précision : 90,1%
— Nombre de paramètres : 138 357 544
2.4.3 Inceptionv3
Inceptionv3 est un réseau neuronal convolutif de reconnaissance d’images qui a une pro-
fondeur de 50 couches,(voire la figure 2.10). Il a été construit par Google,la version pré-
entraînée d’Inceptionv3 avec les poids ImageNet,Voici de brèves informations sur sa taille et
ses performances :
— Taille : : 92 MB
— Top-1 : Précision : 78,95%
— Top 5 : Précision : 94.49%
— Nombre de paramètres : 23 851 784
— Profondeur : 159
30
2.5. LES RÉSEAUX DE NEURONES RÉCURRENTS
31
2.5. LES RÉSEAUX DE NEURONES RÉCURRENTS
Pour chaque entres de données dans le RNN, la sortie, notée ht pour l’entre prétendante est
ajoutée en entrée avec le nouveau entre. Cette sortie est appelée l’ état caché (hidden state
en anglais).
Les donnees traversant la RNN dans le figure 2.12 sont mises bout-à-bout c’est-à-dire conca-
ténées puis passent dans la fonction mathématique tanh pour ’éviter que les sorties des
neurones ne deviennent trop grandes valeurs en des nouvelles valeurs entre -1 et 1,car cela
demanderait alors plus de temps de calculs et de mémoire d’ordinateur avant de devenir la
nouvelle sortie notée ht .
32
2.6. LA CELLULE LSTM (LONG-SHORT-TERM-MEMORY)
le cas des réseaux de neurones, les poids synaptiques qui contribuent plus à une erreur seront
modifiés de manière plus importante que les poids qui provoquent une erreur marginale.
Selon la formule suivante :
w(t + 1) = w(t) − α · F w
avec :
— w un poids du réseau
— α la vitesse d’apprentissage du réseau
— Fw le gradient du réseau par rapport au poids
L’algorithme du gradient a pour but de converger de manière itérative vers une configuration
optimale des poids synaptiques. Cet état peut être le minimum global la fonction,d’optimaistaion
de probleme cest à dire le point où se trouve le meilleur modèle , C’est grâce à cet algorithme
que le reseau apprend.
Alors ici Le RNN souffre du problème c’est que le faite de la mise à jour des poids se fait
de droite à gauche. Au fur et a mesure que l’on avance vers la gauche, a travers l’algorithme
de descendante Gardiane , le produit α · F w devient très petit et les poids des premières
couches de neurones qui ne sont quasiment pas modifiés ! Ainsi, ces couches n’apprennent
strictement rien.
Et par conséquent, le RNN peut facilement oublier des données appris des premières couches
lors de la phase d’apprentissage donc on dit que sa mémoire est courte et c’est la raison lequel
on doit voir autre architecture de réseau neurone plus performantes comme LSTM.
33
2.6. LA CELLULE LSTM (LONG-SHORT-TERM-MEMORY)
34
2.6. LA CELLULE LSTM (LONG-SHORT-TERM-MEMORY)
F IGURE 2.14 – Le LSTM dispose de 4 matrices de poids (avec leurs biais) contrôlant ses portes.
Porte d’oubli (forget gate) La porte d’entrée a pour rôle d’extraire l’information de
la donnée courante on va appliquer en parallèle sigmoïde aux deux données concaténées (cf
porte précédente) et une tanh
Le Sigmoïde deva renvoyer un vecteur pour lequel une coordonnée proche de 0 si-
gnifie que la coordonnée en position équivalente dans le vecteur concaténé n’est pas
importante. A l’inverse, une coordonnée proche de 1 sera jugée importante (i.e. utile
pour la prédiction que cherche à faire le LSTM).
Le tanh va simplement normaliser les valeurs (les écraser) entre -1 et 1 pour éviter les
problèmes de surcharge de l’ordinateur en calculs.
Le produit des deux permettra donc de ne garder que les informations importantes, les
autres étant quasiment remplacées par 0
Etat de la cellule (cell state) On parle de l’état de la cellule avant d’aborder la dernière
porte (porte de sortie), car la valeur calculée ici est utilisée dedans. L’état de la cellule se
calcule assez simplement à partir de la porte d’oubli et de la porte d’entrée : d’abord on
multiplie coordonnée à coordonnée la sortie de l’oubli ft avec l’ancien état de la cellule
c( t − 1). Cela permet d’oublier certaines informations de l’état précédent qui ne servent pas
pour la nouvelle prédiction à faire. Ensuite, on additionne le tout (coordonnée à coordonnée)
avec la sortie de la porte d’entrée it · ċ, ce qui permet d’enregistrer dans l’état de la cellule ce
que le LSTM (parmi les entrées et l’état caché précédent) a jugé pertinent, tout en respectant
l’equation suivante :
ct = ft · c( t − 1) + it · ċ (2.1)
35
2.7. CONCLUSION
Porte de sortie (output gate) Dernière étape : la porte de sortie doit décider de quel
sera le prochain état caché, qui contient des informations sur les entrées précédentes du ré-
seau et sert aux prédictions.
Pour ce faire, le nouvel état de la cellule calculé juste avant est normalisé entre -1 et 1 grâce
à tanh Le vecteur concaténé de l’entrée courante avec l’état caché précédent passe, pour
sa part, dans une fonction sigmoïde dont le but est de décider des informations à conserver
(proche de 0 signifie que l’on oublie, et proche de 1 que l’on va conserver cette coordonnée
de l’état de la cellule).
Tout cela peut sembler magique en ce sens où on dirait que le réseau doit deviner ce qu’il doit
retenir dans un vecteur à la volée, mais rappelons bien qu’une matrice de poids est appliquée
en entrée. C’est cette matrice qui va, concrètement, stocker le fait que telle information est
importante ou non à partir des milliers d’exemples qu’aura vu le réseau !
2.7 Conclusion
Les architectures CNN sont des réseaux de neurones à propagation avant, feed-forward
en anglais dont l’information ne se déplace que dans une seule direction, vers l’avant,à partir
des noeuds d’entrée, en passant par les couches cachées (le cas échéant) et vers les noeuds de
sortie ainsi les connexions ne forment pas de cycles, ce qui est insuffisant pour l’étiquetage
de la séquence. Pour mieux explorer l’information temporelle des données séquentielles, des
réseaux récurrents (RNNs) ont été introduits, ils autorisent des connexions cycliques ce qui
active une "mémoire" des entrées précédentes pour persister dans l’état interne du réseau .
Le problème avec les RNNs est qu’ils ne sont pas bien capables de modéliser à longue dis-
tance les dépendances et de stocker des informations sur les entrées passées pour une longue
période. Pour résoudre ces problèmes, les chercheurs ont introduit les réseaux récurrents de
longue mémoire à court terme(LSTM) qui est une variante de RNNs conçue pour stocker et
accéder à l’information dans une séquence de longue durée. Comparés aux RNNs standards,
des portes multiplicatives non linéaires et une cellule de mémoire sont introduites.
Ces portes, y compris l’entrée, la sortie et la porte d’oubli, régissent l’information circu-
lée à l’intérieur et l’extérieur de la cellule de mémoire. Avec ces unités, LSTM est capable
d’exploiter la mémoire temporelle à longue distance et évite les problèmes de disparition de
gradients et explosion.
36
Chapitre 3
3.1 Introduction
Ce chapitre comprend deux parties essentielles de classification :
37
3.3. PRÉSENTATION DES BIBLIOTHÈQUES UTILISÉES EN DL
communautaire dont l’objectif est de développer des logiciels libres, des formats ouverts
et des services pour l’informatique interactive. Jupyter est une évolution du projet IPython.
Ainsi il permet de réaliser des programmes contenant à la fois du texte en markdown et du
code. Ces calepins sont utilisés en science des données pour explorer et analyser des don-
nées.
Jupyter Notebook se caractérise par un environnement de programmation interactif basé sur
le Web permettant de créer des documents Jupyter Notebook. Un document Jupyter Note-
book est un document JSON. Il suit un schéma contenant une liste ordonnée de cellules
d’entrée/sortie. Celles-ci peuvent contenir du code, du texte (à l’aide de Markdown), des
formules mathématiques, des graphiques et des médias interactifs. Ce document se termine
généralement par l’extension ".ipynb".
PYTHON[21] : est un langage de programmation interprété, multi-paradigme et multiplate-
formes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il
est doté d’un typage dynamique fort, d’une gestion automatique de la mémoire par ramasse-
miettes et d’un système de gestion d’exceptions ; il est ainsi similaire à Perl, Ruby, Scheme,
Smalltalk et Tcl.
Le langage Python est placé sous une licence libre proche de la licence BSD et fonctionne
sur la plupart des plates-formes informatiques, des smartphones aux ordinateurs centraux, de
Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android,
iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des
programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser. Il est éga-
lement apprécié par certains pédagogues qui y trouvent un langage où la syntaxe, clairement
séparée des mécanismes de bas niveau, permet une initiation aisée aux concepts de base de
la programmation.
3.3.1 TensorFlow
Il s’agit d’une bibliothèque Open Source de calcul numérique et de Machine Learning
compatible avec le langage Python. Elle simplifie le processus d’acquisition de données,
d’entraînement des modèles de Machine Learning, de génération de prédictions et de raffi-
nement des résultats futurs. TensorFlow regroupe des modèles et des algorithmes de Machine
Learning et de Deep Learning. Le langage Python offre une API front-end pratique et confor-
table pour créer des applications à l’aide de ce framework. Ces applications peuvent ensuite
38
3.3. PRÉSENTATION DES BIBLIOTHÈQUES UTILISÉES EN DL
être exécutées en C++. Il est possible de se servir de ce framework pour entraîner et exé-
cuter des réseaux de neurones profonds pour la classification de chiffres manuscrits, pour
la reconnaissance d’image, pour le plongement lexical, pour les réseaux de neurones récur-
rents, pour les modèles "sequenceto-sequence" de traduction automatique, pour le traitement
naturel du langage, et pour les simulations basées sur les équations aux dérivées partielles.
Son nom s’inspire notamment du fait que les opérations actuelles des réseaux de neurones
s’effectuent principalement via une table multidimensionnelle de données, appelée Tenseurs
(Tensor) qui est l’équivalent d’une matrice. Aujourd’hui, ce framework est utilisé par les
grandes entreprises [22] comme Intel, Twitter, Lenovo, Nvidia, etc...
39
3.4. TRANSFER LEARNING ET FINE TUNING
40
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
— Le remplacement des noeuds entièrement connectés par des noeuds fraîchement ini-
tialisés.
— Congélation des couches de convolution précédentes au début du réseau (veiller à
ce que toutes les fonctions robustes précédemment apprises par CNN ne soient pas
détruites).
— L’entraînement uniquement les têtes (head) de couches entièrement connectées
Il est utilisé pour :
— Accélérer l’entrainement
— Les petites taille de données
41
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
42
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
Dans ce script, nous avons spécifié le chemin d’accès aux données d’entrée, le chemin vers
le fichier de modèle keras en sortie, le chemin d’accès au fichier pickle d’étiquettes de sortie,
et le nombre d’époques pour entrainer notre réseau, on a choisi dans cet état 25 époques.
1 datapath = r"C:\Users\PC\Desktop\AI\sport_type_classifier\data"
2 outputmodel =r"C:\Users\PC\Desktop\AI\sport_type_classifier\
video_classification_model\videoclassificationModel"
3 outpulablbinarizer = r"C:\Users\PC\Desktop\AI\sport_type_classifier\
video_classification_model\videoclassificationbinarizer"
4 epoch=25
L’ensemble des classes contenant dans LABELS (Linges 1-2) à partir de laquelle il sera
compose notre ensemble de données. Et toutes étiquettes non présents dans cet ensemble
seront exclues.
1 Sport_Labels = set([’boxing’,’swimming’,’table_tennis’])
2 print("Images is being loaded.......")
3 pathToImages = list(paths.list_images(datapath))
4 data = []
5 labels= []
6 for images in pathToImages:
7 label = images.split(os.path.sep)[-2]
8 if label not in Sport_Labels:
9 continue
10 image = cv2.imread(images)
11 image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
12 image = cv2.resize(image,(244,244))
13 data.append(image)
14 labels.append(label)
On convertit la liste de données et les étiquettes en tableau Numpy après on les code de façon
à ce que une étiquette de classe peut se présenter à partir des éléments de tableau binaire. Par
exemple, "football" peut être un tableau ([1, 0, 0]) tandis que "Baseball" peut être un tableau
([0, 0, 1]). Puis, on subdivise nos données en fractions d’entrainement et de test en utilisant
43
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
44
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
Entrainement du modèle
Les lignes 4-5-6 compiler notre modèle avec l’optimiseur Stochastic Gradient Descent (SGD)
avec un taux d’apprentissage initial(lr=1e-4),et une désintégration du taux d’apprentissage
(decay=1e-4) pour commencer à entrainer le réseau avec un grand taux d’apprentissage, puis
à le réduire jusqu’à ce que les minima locaux soient obtenus.pour aider à l’optimisation et à
la généralisation de modèle formé.
Nous utilisons la perte "categorical_crossentropy" pour l’entraînement car on a plusieurs
classes de donnés.Après on fait Un appel à la fonction fit_generator sur notre modèle (Lignes
11-16) pour entrainer notre réseau avec les données augmentées.
ant donné que notre modèle de base ResNet50 est gelé et que nous ne formons que la tête i.e
le headModel. C’est ce qu’on appelle le fine-tuning ou le réglage à fin.
1 #compiler notre modèle formé après avoir défini notrecouches à être non
entraînable
2 print("[INFO] compiling model...")
3 opt = SGD(lr=0.0001, momentum=0.9, decay=1e-4 /epoch)
4 model.compile(loss="categorical_crossentropy", optimizer=opt,
45
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
5 metrics=["accuracy"])
6 print("[INFO] training head...")
7 H = model.fit_generator(
8 trainAug.flow(trainX, trainY, batch_size=32),
9 steps_per_epoch=len(trainX) // 32,
10 validation_data=valAug.flow(testX, testY),
11 validation_steps=len(testX) // 32,
12 epochs=epoch )
Dans ce script on enregistre notre modèle et fichier binaire d’étiquettes des classes de don-
nées.
1 # serializing the model to disk
2 print("[INFO] serializing network...")
3 model.save(outputmodel)
4 lbinarizer=open(r"C:\Users\moad\PFE\Input\binarizer.pickle","wb")
5 lbinarizer.write(pickle.dumps(lb))
6 lbinarizer.close()
46
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
47
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
Nous avons obtenu une précision de 92% après l’entraînement de notre ensemble de données
sportives (Voir la Figure 3.3)
La Figure 3.4 montre :
— La perte fait référence à la valeur de perte sur les données d’entraînement après
chaque époque. C’est ce que le processus d’optimisation essaie de minimiser avec
l’entrainement,donc, plus c’est bas,plus c’est mieux.
— La précision fait référence au rapport entre les prédictions correctes et le nombre total
de prédictions dans les données d’entraînement. Plus c’est élevé,plus c’est mieux.Ceci
est normalement inversement corrélé avec la perte
Remarque Dans la Figure 3.4 On remarque que les deux courbes Bleu charrette,Gris de
Payne qui font référence à la valeur de précision sur les données d’entraînement et de va-
lidation ont convergé après chaque époque vers des grandes valeurs jusqu’à atteindre une
précision de 92%.
Par contre, les deux courbes rouge, bleu qui font référence à la valeur de perte sur les données
d’entraînement et de validation ont convergé après chaque époque vers des petites valeurs
proches de zéros.
48
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
Dans ce script, nous avons chargé les paquets et modules nécessaires.En particulier,nous uti-
lisons deque du module collections de Python pour faciliter le calcule de moyenne mobile
ou moyenne glissante ; qui est une moyenne statistique utilisée pour analyser des séries or-
données de données, le plus souvent des séries temporelles, en supprimant les fluctuations
transitoires de façon à en souligner les tendances à plus long terme.
Cette moyenne est dite mobile parce qu’elle est recalculée de façon continue, en utilisant à
chaque calcul un sous-ensemble d’éléments dans lequel un nouvel élément remplace le plus
ancien ou s’ajoute au sous-ensemble.
1 from keras.models import load_model
2 from collections import deque
3 import numpy as np
4 import argparse
5 import pickle
6 import cv2
49
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
Traitement de frame
Dans le script suivant, nous effectuons une série d’opérations sur chaque image particulière. :
— Permutation des canaux de couleur (Ligne 5)
— Redimensionnement à 22424px (Ligne 6)
— Soustraction moyenne (Ligne 7)
Remarque : La soustraction moyenne est soustraite de toute image d’entrée que nous avions
fournissez au réseau de neurones. L’intérêt est d’avoir des entrées qui sont (en moyenne)
centrées autour de zéro. Le pixel moyenne (mean) est simplement la moyenne de tous les
pixels de l’image
1 # clonez l’image de sortie, puis convertissez-la de BGR en RVB
2 # ordonnez, redimensionnez le frame à un 224x224 fixe, puis
3 # effectuer une soustraction moyenne
4 output = frame.copy()
5 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
6 frame = cv2.resize(frame, (224, 224)).astype("float32")
7 frame -= mean
Calcul de prédictions
Concernant la ligne 2 on fait des calculs de prédictions sur l’image actuelle. Les résultats de
la prédiction sont ajoutés au Q via la ligne 3. partir de là, les lignes 5 à 8 effectuent une
moyenne de prédiction sur Q, ce qui donne une étiquette de classe pour la moyenne mo-
bile. en général ces lignes trouvent l’étiquette avec la plus grande probabilité correspondante
parmi les prédictions moyennes.
50
3.5. L’APPROCHE DU RÉSEAU CNN POUR LA CLASSIFICATION VIDÉO
1 # faire des prédictions sur le frame, puis mettre à jour les prédictions
file d’attente
2 preds = model.predict(np.expand_dims(frame, axis=0))[0]
3 Q.append(preds)
4 # effectuer une moyenne de prédiction
5 results = np.array(Q).mean(axis=0)
6 i = np.argmax(results)
7 label = lb.classes_[i]
51
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
52
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
4 import math
5 import numpy as np
6 import pandas as pd
7 import tensorflow as tf
8 import matplotlib.pyplot as plt
9 from tensorflow.keras.models import Model, Sequential
10 from tensorflow.keras.layers import Dense, Activation, Dropout, Flatten,
TimeDistributed, LSTM, Input, BatchNormalization, Conv2D, MaxPooling2D
, Reshape, Conv1D, GlobalAveragePooling1D, MaxPooling1D, Lambda
11 from tensorflow.keras.utils import to_categorical
12 from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
, EarlyStopping
13 from tensorflow.keras.preprocessing.image import ImageDataGenerator
14 import matplotlib.pyplot as plt
Dans le script suivant on a crée une fonction read\_gif qui va prendre comme paramètre le
fichier d’image animée va lire le fichier frame par frame et redimensionner puis convertir en
RGB tous les frames de fichier stocker tous les frames d’un tableau.
1 from PIL import Image, ImageSequence
2 import numpy as np
3 def read_gif(filename):
4 max_frames = 50
5 im = Image.open(filename)
6 frames = []
7 for frame in ImageSequence.Iterator(im):
8 #print(frame.size)
9 resized_frame = np.array(frame.convert(’RGB’).resize((200,200)))
10 frames.append(resized_frame)
11 frames = frames*max_frames
12 return np.asarray(frames[:max_frames])
53
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
l’architecture du modèle.
Le modèle est composé de :
— Le modèle pré-entrainé de CNN Res Net50 avec 25 636 712 paramètres
— Une couche time_distributede avec 23587712 paramètres, cette couche permettant d’ap-
pliquer un flux de convolutions à plusieurs entrées(ie frames) et il produit une sortie par
entrée pour obtenir le résultat à tempset aussi d’éviter le faite passé un seul frame à un
bloc de convolution car ceci génère un entraînement très long avec plusieurs erreurs
— Une couche LSTM avec 256 unités et 25636712 paramètres.
— Deux couches Denses qui permettent de chaque neurone de connecter à tous les neurones
de la couche précédente.
La génération des données d’entrainement et de validation
Dans le script suivant on fait la génération 40 fichiers des images animés des données entrai-
nement et 10 fichiers pour la validation[18]à l’aide de méthode Generate Dataset().
1 gen = GenerateDataset(’data/train/’, ’’, 40)
2 datasets = gen.generator()
3 num_samples = gen.get_sample_size()
4 steps_per_epoch = 5
5 # validation
6 val_gen = GenerateDataset(’data/val/’, ’’, 10)
7 val_datasets = val_gen.generator()
8 num_valid_samples = val_gen.get_sample_size()
9 steps_per_valid_epoch = 5
10 num_samples
L’entrainement
1 def train(self, generator,steps_per_epoch=None, epochs=1,
validation_data=None, validation_steps=None):
2 early_stopping_monitor = EarlyStopping(patience=3)
3 callbacks_list = [early_stopping_monitor]
4 print(’Training...’)
54
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
55
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
56
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
1 def build(self):
2 #video = Input(shape=(frames, channels,rows, columns))
3 video =Input(shape=(self.frames_n,self.img_w, self.img_h,
IMAGE_CHANNEL)) # input shape
4 #input_shape=(channels,rows,columns)
5 cnn_base = VGG16(weights=’imagenet’, input_shape=(200, 200, 3),
include_top=False)
6 cnn_out = GlobalAveragePooling2D()(cnn_base.output)
7 cnn = Model(cnn_base.input, cnn_out)
8 cnn.trainable = False
9 encoded_frames = TimeDistributed(cnn)(video)
10 encoded_sequence = LSTM(256)(encoded_frames)
11 hidden_layer = Dense(1024, activation="relu")(encoded_sequence)
12 outputs = Dense(NUM_CLASSES, activation="softmax")(hidden_layer)
13 self.model = Model([video], outputs)
Architecture de ce modèle
Dans la figure 3.10 ci-dessous montre un résumé sur le modèle hybride VGG16-LSTM
qui accepte un total de paramètres égal à 15 767 362
Visualisation de la précision/perte d’entrainement et de test de modèle
Remarque :
Pour le graphe de précision de notre modèle nous pouvons voir que les courbes d’orange,
bleu respectivement de test et d’entraînement, Au début d’entraînement ont pris des va-
57
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
leurs croissantes, à de l’époque 19, la précision et la perte ont pris des valeurs plus bas
et à partir d’époque 35 les deux ont convergé vers de grande valeur selon les époques de
façons croissantes.
Par contre pour le graphe de perte de notre modèle nous pouvons estimer que les courbes
d’orange, bleu respectivement de test et d’entraînement,au début ils ont des grandes va-
leurs ce qui est normal car notre modèle dans son début d’apprentissage, et plus qu’on
s’approche à l’époque 40 plus les valeurs des deux courbes s’amoindrissent. ce qui
montre que notre modèle a bien appris.(Voir la Figure 3.11).
Prédiction
Dans cette étape, on a trouvé un taux entre 91% et 99% ce qui montre très bien l’apparte-
nance de notre modèle VGG16-LSTM que l’approche dont on a utilisé hybride Resnet50
et LSTM,(Voire la Figure 3.12)
58
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
Architecture de ce modèle
Dans la figure 3.13 montre un résumé sur le modèle hybride Inceptionv3 et LSTM qui
accepte un total de paramètres égal à 24 428 322.
Visualisation du résultat
Remarque :
Pour le graphe de précision de notre modèle nous pouvons voir que les courbes d’orange,
bleu respectivement de test et d’entraînement, au début de ce dernier ont pris des valeurs
croissantes, à partir de l’époque 5, la précision et la perte ont pris des valeurs plus proches
de 1 (0.99) et constantes tout au long d’entraînement ce qui montre que le modèle d’hy-
bride Inceptionv3-LSTM est capable d’apprendre plus vite et avec plus de performance .
Par contre, pour le graphe de perte de notre modèle nous pouvons voir que les courbes
d’orange, bleu respectivement de test et d’entraînement, au début d’entrainement ont des
grandes valeurs et c’est normal, car notre système est dans son début d’apprentissage,
et une fois, on dépasse l’époque 5 on voit la décroissance de leurs valeurs tout au long
d’entraînement.Ce qui montre que notre modèle est capable d’apprendre plus vite d’être
plus prédictif avec une grande performance en comparant avec les autres modèles. En
général on voit bien que la précision et la perte dans les deux graphes ont des valeurs
inversées.(Voir la Figure 3.14).
Prédiction
Dans cette étape, on a trouvé une moyenne de prédiction de 99% qui est très élevés par
59
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
60
3.6. CLASSIFICATION VIDÉO AVEC DES MODÈLES HYBRIDES CNN-LSTM
3.6.4 Discussion
Le choix de la meilleure architecture était basé sur 4 métriques :
Précision : est la métrique utilisée pour évaluer les modèles de classification, elle repré-
sente notamment le nombre de prédictions vrais obtenues par le modèle.
la perte : est la pénalité pour les mauvaises prédictions, décrivant à quel point la prédic-
tion est mauvaise ou éloignée de sa valeur réelle.
Précision de la validation : qui représente la précision calculée pendant l’entrainement
mais sur les données qui ne sont pas utilisées pour l’entrainement. Elle est utilisée surtout
pour valider le degré de généralisation de notre modèle sur les données.
la perte de validation : Calculée de la même manière que la perte d’apprentissage mais
n’est pas utilisée pour mettre à jour les poids, elle sert uniquement à voir les pertes géné-
ralisées.
A partir des graphes, on a pu comparer entre les trois architectures, on a trouvé Incep-
tionv3 est une architecture qui fonctionne très bien dans de nombreux problèmes, ce que
nous pouvons voir clairement dans le nôtre parce que il atteint une précision décente en
l’associant avec le LSTM avec une bonne généralisation.
Voici une table comparative entre les trois architectures :
la perte la précision la perte de test la précision de test
ResNet50-LSTM 0,291 0,602 0,451 0,983
VGG16-LSTM 0,154 0,981 0,101 0,992
Inceptionv3-LSTM 0,092 1,013 0,093 1,014
61
3.7. CONCLUSION
3.7 Conclusion
Dans ce chapitre, nous avons appris à effectuer une classification vidéo avec Keras, un
algorithme de classification vidéo CNN consisterait à traiter chaque image d’une vidéo
individuellement indépendamment des autres. Ce type de mise en oeuvre entraînera un
problème lequel les frames de vidéo sont des séquences temporelles dépendent que ne
doivent pas traiter individuellement.
Des réseaux de neurones plus avancés, y compris les LSTM plus généraux, peuvent aider
à lutter contre ce problème et conduire à une précision beaucoup plus élevée grâce à ses
caractéristiques de traitement des séquences temporelles et de sa capacité d’accéder à
l’information dans une séquence de longue durée.
Dans la deuxième partie, nous avons fusionné les architectures CNN à savoir ResNet50,
VGG16 et Inceptionv3 avec le LSTM pour pouvoir arriver à la combinaison la plus per-
formante en matière de la précision, pour ce faire on a tenté d’utiliser une approche
comparative qui compare les degrés de la précision et de perte pour chaque architecture
et en déduire par la suite le modèle le plus prédictif.
62
Conclusion Générale et Perspectives
L’objectif de ce travail était d’étudier l’ensemble des techniques permettant une bonne
classification vidéo vu son importance dans la détection des caractéristiques liés à l’image
vidéo. Ce travail consiste au début une collecte d’informations qui va nous servir de vi-
sualiser les différentes approches permettant une classification vidéo et en choisir la plus
déterminante en terme de la précision. En effet, on a opté dans un premier temps de
mettre en application le modèle CNN dédié notamment à la classification des images au
service d’une Classification vidéo dont on a utilisé une classification des activités spor-
tives comme outil de l’expérimentation afin d’extraire les caractéristiques de celle-ci et
d’en connaitre l’avantage qu’il apporte au niveau de la performance. Ensuite, on a pu
passer à une classification en adoptant le choix d’hybride CNN associé avec le LSTM
pour qu’on puisse savoir l’utilité de la mémorisation des séquences dans les vidéos du
plus longue durée. De telle manière, nous avons choisi une approche comparative entre
trois architectures de CNN en l’associant avec le LSTM pour en conclure la meilleur
démarche au niveau de la précision. À vrai dire, les obstacles que nous avons retrouvé
durant la réalisation de ce projet précisément au niveau de quantités de ressources que
nos ordinateurs consomment qui nous a limités en quelques sorte de bien approfondir
nos connaissances d’une telle sujet intéressant. En guise de conclusion, nous trouvons
que ce projet est une vrai démarche pour mettre en relief cette étude avec ce qui existe
dans le milieu professionnel puisque ça va nous permettre d’étudier des problématiques
existentielles dans les différentes domaines en adoptant ces algorithmes qui vont nous
permettre de bien instrumentaliser les données.
Pour les travaux futurs, nous pouvons citer :
— La classification des vidéos avec des modèles plus complexes tels que Inception-
v4.
— La classification des vidéos audiovisuelles.
— L’étude d’autres concepts permettant de former des modèles afin d’interpréter des
données dans le domaine médical.
63
Bibliographie
64
BIBLIOGRAPHIE
65