La classification d'images
Ce que nous allons découvrir et les prérequis
Dans le chapitre précédent, nous avons découvert l’utilisation d’un réseau de neurones pour réaliser des prédictions et des classifications. Nous allons à présent voir comment il nous est possible d’apprendre à notre machine à classifier des images à l’aide de réseaux de neurones un peu particuliers que l’on nomme "Réseaux de neurones convolutifs".
Prérequis nécessaires pour bien aborder ce chapitre : avoir lu les chapitres Les fondamentaux du langage Python, Des statistiques pour comprendre les données, Principaux algorithmes du Machine Learning, Un neurone pour prédire et Utilisation de plusieurs couches de neurones.
Différence entre détection et classification d’images
Il est important de faire la distinction entre une détection et une classification d’images. Savoir détecter un cercle, un triangle, une forme, voire un visage, ne relève pas forcément du domaine de l’intelligence artificielle (bien que certains algorithmes en soient capables). En effet, ces tâches sont confiées à des algorithmes de traitement d’images que nous aurons l’occasion de manipuler dans le chapitre suivant.
Cependant, être en mesure de reconnaître une voiture d’un vélo, de réaliser de la reconnaissance faciale relève de l’intelligence artificielle où des algorithmes d’apprentissage ont été entraînés pour reconnaître (classifier) les éléments. Néanmoins, la détection de formes dans une image peut aider l’algorithme de classification, en ce sens où l’on peut facilement extraire un visage d’une photo ou d’une vidéo et le proposer à un algorithme de classification capable alors de réaliser de la reconnaissance faciale.
Des réseaux de neurones convolutifs pour classifier des images
Pour classifier des images, nous allons utiliser un réseau de neurones un peu particulier : le réseau de neurones convolutifs ou encore appelé CNN (Convulational Neural Network ou encore ConvNet).
Cet algorithme d’apprentissage peut être assimilé à un millefeuille composé de plusieurs couches. Les dernières couches (hautes du millefeuille) sont constituées de réseaux de neurones tels que nous les avons découverts dans les chapitres précédents, dont les données en entrée sont issues des couches précédentes appelées couches de convolutions dont nous allons à présent découvrir le principe.
1. De nombreuses données d’apprentissage nécessaires
Pour que le réseau de neurones puisse réaliser une bonne classification d’images, il faut bien entendu lui donner une base d’apprentissage. Mais lorsqu’il s’agit d’images, leur nombre peut vite devenir impressionnant.
En effet, en tant qu’humain, notre cerveau est capable de réaliser la classification entre un chat et un chien, qu’il soit noir, blanc, de face, de profil, de dos, en plein jour, dans la pénombre… c’est-à-dire dans différents environnements et positions possibles ! Ce qui vous laisse imaginer le nombre d’images nécessaires.
Si vous souhaitez vous lancer dans un projet personnel de classification d’images, cela vous permet également d’apprécier le travail de photographie à réaliser. Heureusement pour nous, des jeux d’observations sont disponibles sur Internet pour nous entraîner.
Pour pouvoir réaliser son apprentissage, la machine va devoir manipuler l’image. Nous entrons donc dans le domaine du traitement d’image qui comme vous le savez sans doute est gourmand en ressources matérielles. Par conséquent, réaliser la classification d’images nécessite un temps important pour la création du jeu d’apprentissage et un investissement dans le matériel pour réaliser l’apprentissage.
2. Un outil pour illustrer nos propos
Les réseaux de neurones convolutifs sont composés de plusieurs couches de traitements que l’on...
Un cas pratique autour de la mode
1. Présentation de Kaggle
Kaggle (www.kaggle.com) est le site de référence en termes de propositions de défis liés au Machine Learning. Ce site regorge de cas d’études et de challenges proposés par de grands groupes tels que McDonalds, Netflix… Chacun d’entre nous peut tenter de résoudre ces différents défis en proposant ses propres modèles de prédiction. Ce site permet également d’apprendre énormément sur les techniques liées au Machine Learning, car chaque proposition de solution soumise par les participants aux différents défis est visible, commentée et peut ainsi être étudiée. Ce site est entièrement gratuit, alors pourquoi s’en priver ?
C’est à partir de ce site que nous allons réaliser notre cas pratique qui permettra d’illustrer les principes de codage d’un réseau de neurones à convolution.
2. Parlons un peu de Keras
Dans le chapitre précédent, nous avons utilisé la librairie TensorFlow. Il existe un module complémentaire à cette librairie appelé Keras se voulant avant tout facile d’utilisation. Cette facilité se trouve notamment dans la phase de création et de paramétrage des différents modèles d’apprentissage, sans oublier qu’il se prête très bien à l’utilisation de réseaux de neurones à convolution, car il possède nativement les fonctions pour y parvenir.
3. Classifier des robes, pulls et chaussures ?
L’un des cas d’étude les plus utilisés dans la mise en pratique des réseaux de neurones convolutifs est la classification de lettres manuscrites à l’aide de la collection d’observations MNIST (Mixed National Institute of Standards and Technology). Cependant, en 2018, Zalando a publié sa propre collection d’images nommée Zalando-MNIST. Cette collection d’images ayant pour but de permettre à des algorithmes de s’entraîner en la classification d’objets de mode : pull, robe, sac… C’est cette collection que nous allons utiliser pour notre cas pratique.
Au-delà de l’aspect très concret du projet...
Utilisation du modèle avec de nouvelles images
Nous allons à présent utiliser le dernier modèle avec de nouvelles images.
Fort heureusement pour vous, nous avons réalisé une sauvegarde du modèle précédemment généré vous évitant ainsi d’attendre le temps de sa création. Libre à vous de le télécharger et de le placer dans le répertoire modèle du projet.
Nous vous invitons à créer un nouveau fichier Python que l’on nommera classification.py.
La première étape va être de charger le modèle comme suit :
#----------------------------
# CHARGEMENT DU MODELE
#----------------------------
#Chargement de la description du modèle
fichier_json = open('modele/modele_4convolutions.json', 'r')
modele_json = fichier_json.read()
fichier_json.close()
#Chargement de la description des poids du modèle
from keras.models import model_from_json
modele = model_from_json(modele_json)
#Chargement des poids
modele.load_weights("modele/modele_4convolutions.h5")
On définit ensuite les différentes catégories de classifications :
#Définition des catégories de classifications
classes = ["Un T-shirt/haut","Un pantalon","Un pull&quo ...
Pour conclure ce chapitre
Dans ce chapitre, nous avons abordé les notions de classification d’images à l’aide de réseaux de neurones convolutifs. Son nom peut paraître de prime abord un peu barbare, mais si l’on procède à son analyse, son fonctionnement est assez simple à comprendre.
Cependant, nous avons vu que l’apprentissage de ce type d’algorithme nécessite de nombreuses images, du temps et de bonnes ressources matérielles.
Enfin, nous avons également vu comment sauvegarder un modèle et l’utiliser à travers un nouveau script dans le but de réaliser des prédictions sur de nouvelles images inconnues du modèle. Cette approche étant similaire à l’utilisation du modèle dans une nouvelle application.
Dans le chapitre suivant, nous allons construire un projet complet alliant détection et reconnaissance d’image.