2. COMPUTER
VISION
2
SOMMAIRE
1. Contexte et problématique du projet.
2. Analyse exploratoire et préparation.
3. Les différentes pistes de modélisation
:
• From scratch
• Transfert Learning
• Fine tuning …
4. Modèle final et ses améliorations.
5. Interface de test du modèle.
4. COMPUTER
VISION
4
COMPUTER
VISION
D E E P L E A R N I N G
L’idée principale est de pouvoir déterminer la
race d’un chien à partir d’une simple photo
pour accélérer le travail d’indexation de la base
de données.
L’association ne pouvant fournir de banque
d’images, nous allons travailler sur la base de
données Stanford Dogs Dataset.
A partir de ces images, nous allons développer
plusieurs modèles de réseaux de neurones à
convolution pour extraire des features et tenter
de déterminer la race du chien.
Ces réseaux CNN demandent de fortes
ressources en terme de calculs, nous utilisons
donc la plateforme spécialisée Kaggle pour
développer nos scripts (GPU).
5. COMPUTER
VISION
5
LES DONNEES
S TA N F O R D D O G S D ATA S E T
Le dataset Stanford Dogs contient des images de 120
races de chiens du monde entier. Il a été construit à l'aide
d'images et d'annotations d'ImageNet pour la tâche de
catégorisation fine des images.
Pour notre analyse, nous allons utiliser les 15 races de
chiens préférées des Français.
Si la modélisation est concluante, elle pourra être étendue à
l’ensemble des races.
7. COMPUTER
VISION
7
NOMBRE D’IMAGES PAR RACE
S O U S - T I T R E I C I
Chacune des 120
races de chien est
alimentée en images.
En moyenne, les
dossiers comptent
171 images ce qui est
relativement peu pour
un algorithme de
classification.
8. COMPUTER
VISION
8
QUELQUES EXEMPLES DE PHOTOS
Sur cet échantillon de quelques
images, on peut déjà remarquer
plusieurs points :
• Orientation portrait ou
paysage des photos.
• Taille des images très
variable.
• Niveau d’exposition,
contraste et luminosité très
différents.
• Présence d’humains ou
d’objets sur certaines photos.
Des prétraitements vont donc
être appliqués aux images pour
gommer ces différences.
9. COMPUTER
VISION
9
REDIMENSIONNEMENT DES IMAGES
La première étape consiste à redimensionner les images. La librairie Python OpenCV, spécialisée dans le traitement
des images, a été utilisée. L’image est cependant déformée.
Ainsi, les tableaux de pixels composant l’image ont tous la même shape pour être interprétés par les futurs
modèles.
10. COMPUTER
VISION
10
MODIFICATIONS D’HISTOGRAMMES
L'histogramme d'une image numérique est une courbe statistique représentant la répartition de ses pixels selon
leur intensité.
L’image RGB classique est convertie au format YUV, codé en 3 composantes : Y étant la luminance, U et V les
chrominances.
On remarque ici des pics importants au centre de l’histogramme. La lumière n’est donc pas répartie
équitablement dans l’image.
11. COMPUTER
VISION
11
EGALISATION DES HISTOGRAMMES
En agissant sur le canal Y de l’image YUV avec la fonction equalizeHist d’OpenCV, l’histogramme est égalisé.
La lumière est donc répartie sur l’ensemble du spectre de l’image. La distribution cumulative ici en rouge est
linéaire.
Cette opération permet de ne pas focaliser la feature extraction sur des zones particulièrement exposées.
12. COMPUTER
VISION
12
FILTRE DE DÉBRUITAGE
Le bruit correspond à des pixels atypiques qui peuvent fausser la détection de features. Ce bruit à plusieurs
origines :
• Compression des images JPEG
• Mauvaise résolution d’une image téléchargée …
Pour débruiter nos images, nous allons appliquer un filtre non-local means, qui est un des meilleur filtres de
débruitage. Il existe d’autres types de filtres : filtres linéaires (gaussien) ou non-linéaires (filtre médian).
Image bruitée Image originale Bruit
13. COMPUTER
VISION
13
DÉBRUITAGE DES IMAGES
La fonction fastNlMeansDenoisingColored d’OpenCV est donc appliquée à nos images pour supprimer ce bruit.
On remarque ici un léger flou de l’image filtrée. En effet, le filtre n’est pas appliqué en local sur les pixels proches,
mais sur la moyenne de l’ensemble de l’image (pondérée par les valeurs des pixels locaux). Cette étape est très
importante pour obtenir de meilleurs résultats de détection de features.
14. COMPUTER
VISION
14
L’AUGMENTATION DES DONNÉES
Comme nous l’avons vu
précédemment, nous disposons
d’environ 170 images par race
de chien. Pour un modèle de
deep learning, cela reste faible.
Le risque principal est donc le
surentrainement du modèle qui
ne pourra pas développer de
règle de décisions
généralisables.
Nous allons donc augmenter
artificiellement le nombre
d’images (Data augmentation)
en réalisant des zoom, des
rotations, du mirroring …
Cette augmentation sera réalisée
dans des générateurs Keras.
15. COMPUTER
VISION
15
SYNTHÈSE
PREPROCESSING
Nous allons donc appliquer à nos images une
fonction globale de preprocessing qui comprendra
les étapes :
• Redimensionnement de l’image
• Egalisation des histogrammes
• Application du filtre de débruitage
• Conversion des images en tenseur (4D array)
• Séparation des tableaux d’images et des
labels à identifier pour la classification
supervisée (X et y).
Cette fonction est appliquée aux 15 races de
chiens préférées des Français, pour éviter des
temps de calculs et des ressources mémoire trop
17. COMPUTER
VISION
17
LE RÉSEAU DE NEURONES À CONVOLUTION
Pour les problématiques de computer vision, nous allons développer des réseaux de neurones à convolution
(CNN).
Ces réseaux spécifiques comportent des couches spécifiques à l’apprentissage des features (convolution,
activation et pooling) et une couche de sortie destinée à la classification avec une activation Softmax dans notre
cas de classification multi-classes.
19. COMPUTER
VISION
19
ARCHITECTURE DU CNN SIMPLE
La première étape du traitement de nos
images consiste à les mélanger (pour ne
pas que les images d’une même race se
suivent).
Dans un second temps, vous créons un
split d’entrainement et un split de test
(qui sera utilisé sur le modèle final). Dans
le jeu d’entrainement, nous créons un split
de validation.
Enfin, nous procédons à la Data
Augmentation via un générateur d’images
Keras.
Data Generator Keras
20. COMPUTER
VISION
20
ARCHITECTURE DU CNN SIMPLE
Notre CNN est très peu profond et comptera
3 blocs principaux ayant tous la même
architecture :
Une couche de convolution
Une couche de normalisation
1 couche d’activation ReLu
1 couche de Pooling
Le nombre de filtres de sortie varie sur
chaque bloc. La taille de la fenêtre de
convolution (kernel_size) reste de 3 x 3.
Premier bloc du CNN
21. COMPUTER
VISION
21
ARCHITECTURE DU CNN SIMPLE
Le second bloc garde la même architecture
mais le nombre de filtres est doublé et passe
à 32.
On ajoute également une couche DropOut.
Cette couche va limiter le surentrainement en
désactivant aléatoirement certains neurones
(ici, 20%).
Second bloc du CNN
22. COMPUTER
VISION
22
RÉSULTATS DU CNN FROM SCRATCH
Les 2 métriques sur ce modèle développé de zéro ne sont pas très bonnes.
On remarque également que le modèle continu à apprendre après 20 époques. Il faudrait certainement multiplier le
nombre d’époques pour obtenir de meilleurs résultats.
Ce modèle de CNN servira de baseline pour les autres modélisations.
24. COMPUTER
VISION
24
Images d’origine
Modèle
Pré-entrainé
Classifier d’origine
Xception
LE TRANSFERT LEARNING
Nos images
Nouveau Classifier
Modèle
Pré-entrainé
« gelé »
Transfe
rt
Learnin
g
On pourrait schématiser (très
simplement) le Transfert Learning ainsi.
• Des modèles très profonds (Deep
Learning) sont pré-entrainés sur de
grosses bases d’images.
• Nous allons utiliser les poids de
ces modèles sur nos données,
sans modifier les couches
profondes.
• Nous entrainons uniquement un
nouveau classifier qui correspond
à nos besoins.
En d’autres termes, nous transférons le
savoir du modèle qui a déjà apprit à
nos données pour classifier nos
propres images.
27. COMPUTER
VISION
27
XCEPTION TRANSFERT LEARNING
1. Importation du modèle Xception pré-entrainé de
Keras.
• Les poids correspondent à la base ImageNet.
• Le classifier d’origine n’est pas importé.
2. Les différentes couches Xception ne sont pas ré-
entrainées. Les poids d’origine sont conservés.
3. On ajoute notre propre bloc supérieur de
classification.
• 1 couche fully connected avec activation ReLu
• 1 DropOut sur 20% des neurones
• 1 classifier avec activation Softmax pour obtenir
les probabilités pour chaque classe sur un total
de 100%.
28. COMPUTER
VISION
28
RÉSULTATS DU MODÈLE XCEPTION
Les 2 métriques sur ce modèle son bien meilleures que sur le modèle from scratch
On obtient ici une accuracy de 0,76 en moyenne sur le jeu de validation et un score F1 sur le même set de 2,05. Le
modèle semble continuer à apprendre au delà des 20 époques mais les scores de validation sont plus sur un
plateau.
29. COMPUTER
VISION
29
COMPARAISON DES RÉSULTATS
On constate que la courbe
d’apprentissage du modèle from
scratch est beaucoup plus lente.
Le modèle de transfert learning
Xception apprend beaucoup plus
vite et les résultats sont bien
supérieurs.
Les temps d’entrainement sur 20
époques sont également
relativement similaires.
31. COMPUTER
VISION
31
RESNET50 TRANSFERT LEARNING
Une seconde architecture est testée pour la
comparer au modèle Xception précédent.
Le modèle ResNet50 de Keras est donc
importé, toujours avec les poids basés sur
ImageNet.
La procédure est la même que pour Xception,
à noter simplement que les preprocessor
appliqués diffèrent d’un modèle à l’autre
dans les générateurs d’images Keras.
32. COMPUTER
VISION
32
RÉSULTATS DU MODÈLE RESNET50
Les métriques calculées sur chaque époque sont à nouveau stockées dans une variable history.
Les courbes de résultats indiquent également un apprentissage rapide et les résultats sont également meilleurs
que notre modèle développé de zéro.
33. COMPUTER
VISION
33
COMPARAISON DES RÉSULTATS
Le modèle ResNet50 suit la même
tendance que le modèle Xception
mais ses métriques sur le jeu
d’entrainement sont moins bonnes.
En effet, l’accuracy sur le train set
est 10% moins élevée avec le
modèle ResNet50.
Le modèle Xception est donc
conservé pour les prochaines
étapes.
34. COMPUTER
VISION
34
SYNTHÈSE
TRANSFERT LEARNING
Sur ces premières modélisations, nous avons
développé un réseau de neurones à convolution à
partir de zéro puis testé le Transfert Learning sur
2 architectures :
• Le CNN from scratch offre des
performances très limitées et a besoin de
beaucoup d’entrainement.
• Le transfert learning testé sur Xception et
ResNet50 offre des métriques bien
meilleures sans ré-entrainer les réseaux
profonds.
• Xception avec les poids ImageNet offre les
meilleurs performances pour cette étape.
36. COMPUTER
VISION
36
TUNING DES HYPERPARAMÈTRES
Sur ces méthodes de Transfert Learning, nous
avons ajouté notre propre couche de
classification.
Les Hyperparamètres de la couche fully-
connected peuvent être testés pour améliorer
le modèle grâce à Keras_tuner :
• Nombre de neurones de sortie,
dense_units, entre 32 et 300 avec un pas
de 32.
Le Learning Rate, taux d’apprentissage
(contrôle la vitesse à laquelle un algorithme
met à jour les estimations de paramètres), est
également tuné.
37. COMPUTER
VISION
37
TUNING DES HYPERPARAMÈTRES
Pour ne pas démultiplier les temps de calculs, une
RandomSearch, une recherche aléatoire sur les paramètres,
est pratiquée.
On définit également un EarlyStopping pour ne pas
continuer à entrainer le modèle si les scores d’accuracy en
validation n’évoluent plus sur 5 essais.
Puis la recherche aléatoire est lancée et les meilleurs
paramètres sont estimés et stockés pour pouvoir les
appliquer à un nouveau modèle.
38. COMPUTER
VISION
38
RÉSULTATS TUNING DES HYPERPARAMÈTRES
Le tuning des hyperparamètres sur notre
modèle Xception est assez long, même en
RandomSearch.
Une fois les meilleurs paramètres définis, le
modèle est ré-entrainé sur 30 époques et une
accuracy supérieure à 0,80 est obtenue sur
le jeu de validation. (Elle était de 0,78 sans
tuning des hyperparamètres sur Xception).
Le modèle Xception ainsi entrainé est
sauvegardé pour les prochaines étapes.
40. COMPUTER
VISION
40
LE FINE-TUNING
Xception
pré-entrainé
Fine-tuned
Xception
Couche de
fine-tuning
Poids fixes
Mise à jour des
poids
retro-propagation
Classe 1
Classe 2
Classe 3
…
Classe n
Classifier
Le fine-tuning nous permet de mieux détecter les features propres à notre problématique.
En effet, seules quelques couches hautes vont être ré-entrainées, les poids recalculés et rétro-propagés dans
le modèle pré-entrainé. Les couches les plus profondes restent inchangées, figées.
41. COMPUTER
VISION
41
FINE-TUNING DU MODÈLE XCEPTION
Comme nous l’avons vu,
Xception possède 3 blocs
principaux.
Dans le cadre du fine-tuning,
nous allons ré-entrainer les
layers du bloc de sortie.
Cette opération est réalisée
sur le modèle Xception dont
les paramètres ont été
améliorés à l’étape précédente
et que nous avons
sauvegardé.
42. COMPUTER
VISION
42
FINE-TUNING DU MODÈLE XCEPTION
• Le modèle Xception pré-
entrainé et amélioré est chargé.
• On détermine le nombre de
layers qui ne seront pas ré-
entrainés. Ici, 115 layers
restent inchangés.
• On conserve le classifier car il
correspond déjà à notre
problématique.
43. COMPUTER
VISION
43
RÉSULTATS DU FINE-TUNING XCEPTION
Le modèle avec Fine-tuning atteint très vite des scores importants en entrainement.
Grâce au EarlyStopping sur le score accuracy du set de validation, 5 époques seulement sont nécessaires pour
obtenir les meilleures métriques sur ce modèle.
44. COMPUTER
VISION
44
COMPARAISON DES RÉSULTATS
Le modèle Xception Fine-tuned,
dont les hyper-paramètres des
couches de classifier avaient été
préalablement améliorés, offre des
résultats encore meilleurs avec
moins d’époques.
Nous allons donc conserver ce
modèle et l’évaluer sur le jeu de
test.
46. COMPUTER
VISION
46
ÉVALUATION SUR LE SPLIT DE TEST
L’évaluation du meilleur modèle est
réalisée sur le split de test réalisé
au début du processus et qui
comporte 505 images de
différentes races de chien.
L’accuracy obtenue est de 0,745 et
le score F1 de 1,41.
Le modèle est donc à priori assez
performant pour cette
classification supervisée multi-
classes.
47. COMPUTER
VISION
47
MATRICE DE CONFUSION
Pour obtenir les prédictions du modèle, nous
utilisons la méthode predict de Keras (sans suffle
des données).
Nous obtenons ainsi les probabilités de chaque
classes (grâce à Softmax) sur un total de 100%.
La plus forte probabilité nous indique la race
prédite pour l’image.
En réalisant la transformation inverse du
Label_encoder, il est possible de visualiser la
matrice de confusion avec les labels des races de
chien.
On constate que le modèle est fiable et performant
sur toutes les races de chien.
48. COMPUTER
VISION
48
RAPPORT DE CLASSIFICATION
On remarque que les résultats sont satisfaisant sur
la plupart des races de chien.
Le labrador et Golder Retriver obtiennent
cependant des résultats moindre en score de
précision.
L’accuracy moyenne sur le je de test étant de 0,72.
49. COMPUTER
VISION
49
VISUALISATION DES PRÉDICTIONS
En projetant quelques prédictions et leurs labels
réels, cette constatation est la même. Peu de
prédictions sont fausses.
Pour vérifier les performance de ce modèle, en
conditions de production, un script de prédiction
via une interface d’upload d’image est
développé et déployé en ligne.
50. COMPUTER
VISION
50
SYNTHÈSE
MODÉLISATION
Sur toutes les modélisations effectuées, le
modèle Xception avec tuning des hyper-
paramètres de la couche de classification et
fine-tuning sur le dernier bloc offre des
performances satisfaisantes.
• L’accuracy sur les données test est supérieure
à 72%
• La matrice de confusion laisse présager de
bons résultats sur des images inconnues.
• Une interface de test online peut nous
permettre de tester l’algorithme en conditions
de production pour déterminer s’il est utilisable
par l’association.
51. COMPUTER
VISION
51
WEB APP DE TEST
Il est possible de tester
l’algorithme de
prédiction de race de
chien à partir de photos
uploadées !
Pour cela, rendez-vous à
l’adresse suivante :
https://dogs-breeds-
detection-
cnn.herokuapp.com/
52. COMPUTER
VISION
52
MERCI
N ’ h é s i t e z p a s à p o s e r v o s q u e s t i o n s .
MICHAEL FUMERY
+33 6.59.20.65.39
michael@mf-data-science.fr