Classification d`objets par apprentissage profond

publicité
Classification d’objets par apprentissage profond
David FILLIAT, Antoine Manzanera
19 janvier 2017
1
Introduction
Dans ce TP, nous allons utiliser différentes structures de réseau de neurones profonds pour travailler sur
la classification d’images. Pour cela, nous utiliserons une partie de la bibliothèque MATLAB MatConvNet 1 que vous devez télécharger sur la page http://perso.ensta-paristech.fr/~filliat/Courses/
index.html.
Du fait de la puissance limitée des machines à disposition (notamment le manque de processeur graphique dédié), nous allons travailler sur des bases réduites et avec des réseaux de petite taille qui ne sont
que partiellement représentatif des capacités de l’apprentissage profond. L’objectif est principalement de
comprendre la structure des réseau de convolution et l’influence des paramètres sur l’apprentissage.
2
Prise en main
Commencez par décompresser le code fourni, puis ajoutez le répertoire matconvnet-1.0-light et
tous ses sous-répertoires dans le path de MATLAB.
Lancez ensuite tinycnn_cifar. Le code applique un réseau de convolutions à la classification d’images
sur la base CIFAR10. Cette base (figure 1) contient des petites images (32x32 pixels) d’objets de dix classes
(avion, voiture, oiseau ...).
F IGURE 1 – Quelques images de la base de données CIFAR 10
Vous observerez tout d’abord un tableau récapitulant les paramètres de votre réseau, puis le défilement
des statistiques d’apprentissage, ainsi qu’une fenêtre graphique montrant les performances du réseau sur
la base d’apprentissage et de test. Vous pouvez arrêter l’entrainement en utilisant Ctrl-C sur la fenêtre de
commande.
1. http://www.vlfeat.org/matconvnet/
1
3
Question 1 - Structure du réseau
La structure du réseau est définie dans le fichier tinycnn_cifar_init.m, dans le répertoire examples/cifar/.
Analysez ce fichier, ainsi que le tableau récapitulatif affiché lors du lancement du code pour déterminer :
— La fonction de chacune des couches du réseau
— Le rôle des différents paramètres de chaque couche
— La taille de chacune des couches (hauteur,largeur, profondeur 2 )
— La manière dont la sortie (la classe) est codée
4
Question 2 - Paramètres d’apprentissage
Modifiez les paramètres fournis par défaut dans le fichier tinycnn_cifar_init.m afin d’obtenir les
meilleurs performances possibles sur la base de validation. Vous pouvez jouer sur :
— learningRate (ligne 47) : ce vecteur définit le nombre d’époques d’apprentissage (par sa longueur), et le taux d’apprentissage à chaque époque. Vous pouvez modifier les valeurs du taux d’apprentissage et le nombre d’époques
— weightDecay (ligne 48) : cette valeur est utilisée pour diminuer les poids lors de chaque descente
de gradient en imposant une pénalité sur leur norme. Elle permet de conserver des poids de valeur
relativement faible et ainsi d’éviter des divergences de l’apprentissage.
— batchSize (ligne 49) : la taille des paquets de données utilisés pour calculer le gradient avant
un pas de descente de gradient. Les gradients sont moyennés sur des paquets, permettant ainsi de
réduire le bruit.
— La taille de la base de données : la fonction reduce_database(new_size) dans le répertoire
data/cifar-tinycnn permet de réduire la base de donnée CIFAR10 de 20 000 exemples à la taille
désirée. Le code téléchargé utilise par défaut une base de 5000 exemples. Vous devez sélectionner
le répertoire datacifar-tinycnn comme répertoire courant avant d’exécuter cette fonction.
Lorsque vous relancez l’apprentissage, le réseau continue d’apprendre depuis la dernière époque réalisée en chargeant les derniers poids calculés. Pour repartir du début, vous pouvez effacer les fichiers
net-epoch-xx.mat dans le répertoire datacifar-tinycnn.
5
Question 3 - Approfondissement de la structure
Modifiez le réseau dans le fichier cnn_cifar_init.m pour ajouter des couches de convolution. Proposez une nouvelle structure à 4 couches de convolution (le code fournit ne contient que 2 couches). De
nombreuses architectures sont possibles (nombre de caractéristiques à chaque couche, pooling ou non,
stride ou non, utilisation de couche complètement connectée ou non...). Vous devez trouver une structure
qui respecte les contraintes de taille d’entrée (images 32x32x3) et de sortie (vecteur de taille 10).
Testez les performances de votre réseau par rapport au réseau de la question précédente. Attention :
pour la première utilisation, placez vous dans le répertoire Utilisez une base de seulement 5000 exemples
pour réduire les temps de calcul. Que constatez vous en terme de performances et d’écart entre les performances d’apprentissage et de validation ?
6
Question 4 - Comparaison avec une régression linéaire
Modifiez le réseau dans le fichier microcnn_cifar_init.m pour implémenter une simple régression
linéaire à l’aide d’une seule couche de convolution. Vous devez trouvez une structure qui respecte les
contraintes de taille d’entrée (images 32x32x3) et de sortie (vecteur de taille 10).
Testez les performances de cette méthode par rapport aux réseaux des questions précédentes. Que
constatez vous en terme de performances et d’écart entre les performances d’apprentissage et de validation ?
2. Le nombre de caractéristiques
2
Téléchargement