[EXPERT’TECH] Visualiser son modèle de Deep Learning créé avec les Custom Vision API’s

Posté le : 03/04/2019

Partager

Suddenly I see

 

Azure Custom Vision API offre de nombreuses possibilités pour former son propre classificateur en utilisant seulement quelques images. Grâce au Transfer Learning, il est possible de supprimer la couche finale, qui est responsable de la prédiction du modèle original, et de la remplacer par une nouvelle couche qui prédira les classes de la nouvelle tâche.

D’après Albert Einstein : Je n’ai pas de talent spécial, je suis juste passionné et curieux. Pour satisfaire cette curiosité, nous allons voir la structure interne du mystère des Custom Vision. Dans cet article, nous allons visualiser un modèle prédictif généré grâce à Azure Custom Vision API pour avoir un bref aperçu des nœuds d’entrée ou sortie du modèle.

Comme le dit la page d’accueil de Custom Vision : Personnalisez facilement vos propres modèles de Computer Vision dernier cri pour vos cas d’usage uniques. Il suffit juste de télécharger quelques images labellisées et laisser Custom Vision Service faire le travail. En un clic, vous pouvez exporter vos modèles entraînés pour les faire fonctionner sur un appareil ou sur un conteneur Docker.

 

Génial, n’est-ce pas ? Et si nous voulions aller plus loin qu’un simple usage and creuser un peu plus comme inspecter un modèle ? Heureusement, c’est réalisable en utilisant TensorBoard.

 

Juste une dernière citation avant de commencer : Les calculs pour lesquels vous utiliserez TensorFlow, comme entraînement du réseau de neurones massif peuvent rapidement devenir complexes et déroutants. Pour les rendre plus faciles à comprendre, à débugger et pour optimiser les programmes TensorFlow, nous avons inclus une suite d’outils de visualisation appelée TensorBoard. Vous pouvez utiliser TensorBoard pour visualiser vos graphiques TensorFlow, tracer des métriques quantitatives d’exécution de vos graphes et montrer des données additionnelles comme des images.

 

L’idée est simple :

  • Entraîner votre classificateur d’images (Note importante : utilisez un modèle compact pour permettre l’exportation vers votre machine)
  • Générer votre modèle TensorFlow
  • Utiliser le TensorBoard

 

Former son classificateur d’images

A ce stade, il ne devrait pas y avoir de problème. Il suffit de télécharger vos images, de les tagguer et de lancer l’entrainement. Attention, avant de commencer votre projet, vérifiez qu’il est exportable en sélectionnant ‘Compact Option’.

projet-exportable-compact-option

 

Générer votre modèle TensorFlow

Une fois l’entrainement terminé (cela ne prend généralement que quelques secondes), allez dans la ‘Performance tab’ et cliquez sur le bouton ‘Export’. Dans la boîte de dialogue, choisissez TensorFlow (Android) et téléchargez-le.

tensorflow-android

 

Cela va télécharger deux fichiers sur votre ordinateur : model.pb qui est le modèle entraîné et labels.txt qui est la liste de vos classes.

 

Utiliser TensorBoard

Il est temps de coder ! Pour commencer, créez un script Python et ajoutez-y le code suivant :

# coding: utf-8
import cv2
import os
import tensorflow as tf
import numpy as np
from PIL import Image

def resize_to_227_square(image):
    return cv2.resize(image, (227, 227), interpolation = cv2.INTER_LINEAR)

# graph of operations to upload trained model
graph_def = tf.GraphDef()
# list of classes
labels = []
# N.B. Azure Custom vision allows export trained model in the form of 2 files
# model.pb: a tensor flow graph and labels.txt: a list of classes
# import tensor flow graph, r+b mode is open the binary file in read or write mode
with tf.gfile.FastGFile(name=’model.pb’, mode=’rb’) as f:
    graph_def.ParseFromString(f.read())
    tf.import_graph_def(graph_def=graph_def, name= »)
# read labels, add to labels array and create a folder for each class
# it refers to the text mode. There is no difference between r and rt or w and wt since text mode is the default.
with open(file=’labels.txt’, mode=’rt’) as labels_file:
    for label in labels_file:
        label = label.strip()
        # append to the labels array (trimmed)
        labels.append(label)
# These names are part of the model and cannot be changed.
output_layer = ‘loss:0’
input_node = ‘Placeholder:0’
# read test image
image = cv2.imread(‘1.png’)
# get the largest center square
#  The compact models have a network size of 227×227, the model requires this size.
augmented_image = resize_to_227_square(image)
predicted_tag = ‘Predicted Tag’
with tf.Session() as sess:
    # difine a directory where the FileWriter serialized its data
    writer = tf.summary.FileWriter(‘log’)
    writer.add_graph(sess.graph)
    prob_tensor = sess.graph.get_tensor_by_name(output_layer)
    predictions = sess.run(prob_tensor, {input_node: [augmented_image]})
    # get the highest probability label
    highest_probability_index = np.argmax(predictions)
    predicted_tag = labels[highest_probability_index]
    print(predicted_tag)
    writer.close()

 

Il est crucial d’utiliser File Writer Object, selon la citation provenant de la page de TensorBoard qui dit : La classe FileWriter fournit un mécanisme pour créer un fichier événement dans une direction donnée et y ajoute les résumés et événements. La classe met à jour le contenu des fichiers de manière asynchrone. Cela permet au programme d’appeler des méthodes pour ajouter les données au fichier directement depuis la boucle d’entraînement, sans ralentir l’entraînement.

 

Une fois qu’il a été construit avec les paramètres tf Session, le FileWriter forme une couche de comptabilité sur le résumé de votre graphe (tf.contrib.summary) pour faciliter l’utilisation d’un nouveau résumé avec un code déjà existant.

Nous obtenons alors notre graphique d’informations sess.graph en plusieurs séries avec l’aide de FileWriter. Il est alors sauvegardé dans le nouveau ‘log’. Maintenant, la partie la plus importante de la manipulation, la visualisation des graphiques. Si vous avez installé TensorFlow en utilisant pip cela signifie que TensorBoard est déjà installé sur votre machine. Si ce n’est pas le cas, il suffit de lancer pip install TensorBoard. Une fois TensorBoard installé, allez dans le répertoire où se trouve le script Python, ouvrez les commandes et lancez la commande suivante :

tensorboard –logdir=log

 

Où log = le nom du répertoire log (suite à un manque d’inspiration, nous l’avons nommé log). Si tout se passe bien, vous verrez le message suivant apparaître : TensorBoard 1.11.0 at http://LAP-20171221A:6006 (Press CTRL+C to quit). Vous devez donc ouvrir votre navigateur et aller sur localhost :6006 et…

tensorboard1

tensorboard2

 

Voilà ! Vous avez votre visualisation graphique. Vous pouvez désormais naviguer et analyser tous les nœuds de votre modèle. Vous pouvez même télécharger votre graphique au format .png pour le partager avec vos collègues.

 

Traduit de l’anglais, consultez la version originale ainsi que les références utilisées dans cet article ici.

Ecrit par Alibek Jakupov.

Contactez-nous Postuler Nos offres d'emploi