Dans ce tutoriel VGG16, nous allons voir comment charger et utiliser ce modèle de reconnaissance d’image de la librairie Keras.
Ce modèle est utilisé dans la vision par ordinateur (Computer Vision). Il a notamment remporté le concours ILSVRC (ImageNet Large Scale Visual Recognition Challenge) en 2014.
Nous expliquerons en détails dans un prochain article en quoi consiste ce modèle, en attendant, nous vous proposons d’explorer l’implémentation de ce modèle.
Vous pouvez directement télécharger le code sur github ou bien suivre, ici, le tutoriel.
Charger le modèle – VGG16 Tutoriel
On utilise la librairie Keras pour charger le modèle VGG16, il faut donc l’avoir préalablement installé.
Keras Application comporte plusieurs modèles de Deep Learning. Ces modèles sont mis à disposition avec des poids pré-entraînés.
Charger un modèle sur Keras permet de charger automatiquement les poids pré-entraînés sur lesquels le modèle sera indexé, c’est ce qu’on appelle du Transfert Learning.
Dans Keras Application, VGG16 a été entraînés sur plus d’un million d’images provenant de la base de données ImageNet.
Ce réseau de neurones peut classer les images en 1000 classes d’objets, tels que des voitures, des souris, des crayons et de nombreux animaux.
Grâce au Transfert Learning, on peut directement utiliser ce réseau de neurones. C’est un gain de temps considérable étant donné que, sans Keras, il faudrait plusieurs heures pour entraîner soi-même ce modèle à partir d’ImageNet.
On charge donc le modèle:
from keras.applications.vgg16 import VGG16
model = VGG16()
Chargement et pré-traitement de l’image
Dans cet exemple, on utilise VGG16 sur une image d’ours polaire.
La taille de l’image d’entrée par défaut de VGG-16 est de 224×224. On redimensionne donc notre image.
from keras.preprocessing.image import load_img
image = load_img('/ice-bear-hans-jurgen-mager-unsplash.jpg', target_size=(224, 224))
Petit rappel: Un modèle de Machine Learning ne prend toujours que des numériques en entrée.
C’est pour cela qu’il faut que nous convertissons notre image en matrice de pixels. Pour ce faire on transforme notre image en numpy.array avec la fonction: img_to_array().
from keras.preprocessing.image import img_to_array
image = img_to_array(image)
La dimension de l’image d’entrée par défaut de VGG16 est (None,224,224,3).
On ajoute donc une autre dimension a notre matrice.
Au fait, si ton objectif est d'apprendre le Deep Learning - j’ai préparé pour toi le Plan d’action pour Maîtriser les Réseaux de neurones.
7 jours de conseils gratuits d’un ingénieur spécialisé en Intelligence Artificielle pour apprendre à maîtriser les réseaux de neurones à partir de zéro :
- Planifie ton apprentissage
- Structure tes projets
- Développe tes algorithmes d’Intelligence Artificielle
J’ai basé ce programme sur des faits scientifiques, des approches éprouvées par des chercheurs mais également mes propres techniques que j'ai conçues au fil de mes expériences dans le domaine du Deep Learning.
Pour y accéder, clique ici :
À présent, on peut revenir à ce que je mentionnais précédemment.
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
Ensuite, nous devons traiter les pixels de l’image de la même manière que les données d’entraînement d’ImageNet ont été préparées.
Expliqué plus précisément, dans le papier de recherche de Karen Simonyan et Andrew Zisserman :
Le seul pré-traitement que nous faisons est de soustraire à chaque pixel la valeur RVB moyenne des données d’entraînement. »
Heureusement, Keras fournit une fonction appelée preprocess_input() pour réaliser ce pré-traitement (encore appelé preprocessing).
from keras.applications.vgg16 import preprocess_input
image = preprocess_input(image)
Faire la prédiction – VGG16 Tutoriel
Enfin, on peut faire une prédiction sur notre image avec le modèle.
prediction = model.predict(image)
Allez, encore un dernier traitement pour décoder notre prédiction et nous pourrons voir le résultat de notre algorithme !
from keras.applications.vgg16 import decode_predictions
label = decode_predictions(prediction)
label = label[0][0]
print('%s (%.2f%%)' % (label[1], label[2]*100))
On obtient: ice_bear (99.95%)
Selon VGG16, l’image à une probabilité de 99.95% de contenir un ours polaire. Plutôt bien, non ?
En fait, VGG16 ne retourne pas une seul prédiction mais la liste des 1000 classes sur lequel il a été pré-entraîné.
Il associe le nom de chacune de ces classes à la probabilité que cette classe soit dans l’image.
Voici le code pour afficher le top 3 des classes que VGG-16 a prédit dans notre image:
labels = decode_predictions(prediction)
print('%s (%.2f%%)' % (labels[0][0][1], labels[0][0][2]*100))
print('%s (%.2f%%)' % (labels[0][1][1], labels[0][1][2]*100))
print('%s (%.2f%%)' % (labels[0][2][1], labels[0][2][2]*100))
On obtient:
- ice_bear (99.95%)
- weasel (0.03%)
- otter (0.01%)
VGG16 est utile pour débuter en Deep Learning. Néanmoins ce modèle est actuellement dépassé par d’autres réseaux de neurones bien plus performant!
Si la Computer Vision t’intéresse, je t’invite à t’intéresser au modèle YOLO.
J’ai récemment écrit un article sur ce modèle à la pointe de la technologie IA. Pour le lire – clique ici.
Autrement, si ton intérêt pour le Deep Learning est plus large, par exemple si tu souhaites, en plus de la Computer Vision, apprendre le NLP our l’Analyse de Série Temporelle, tu peux accéder à mon Plan d’action pour Maîtriser les Réseaux de neurones.
Un programme de 7 cours gratuits que j’ai préparé pour te guider dans ton parcours pour apprendre le Deep Learning.
Si ça t’intéresse, clique ici :
Un dernier mot, si tu veux aller plus loin et apprendre le Deep Learning - j’ai préparé pour toi le Plan d’action pour Maîtriser les Réseaux de neurones.
7 jours de conseils gratuits d’un ingénieur spécialisé en Intelligence Artificielle pour apprendre à maîtriser les réseaux de neurones à partir de zéro :
- Planifie ton apprentissage
- Structure tes projets
- Développe tes algorithmes d’Intelligence Artificielle
J’ai basé ce programme sur des faits scientifiques, des approches éprouvées par des chercheurs mais également mes propres techniques que j'ai conçues au fil de mes expériences dans le domaine du Deep Learning.
Pour y accéder, clique ici :
Thanks for your work !!!