Reconnaitre une image avec Keras

de | 2018-02-05

Aujourd’hui je vais brièvement présenter comment reconnaitre une image avec Keras. L’objectif est de montrer à quel point il est facile de faire de la reconnaissance d’image avec un minimum de connaissances a priori.

Keras est une API (interface de programmation) haut niveau de réseaux de neurones artificiels en Python. Elle permet de développer rapidement et simplement pour expérimenter en un minimum de temps. J’ajouterai que comparé aux autres bibliothèques de réseaux de neurones que j’ai eu l’occasion de tester, Keras est l’une des plus simple d’utilisation.

Tout le code présenté par la suite est disponible sur [github]. Pour exécuter le code sans avoir à installer Keras, vous pouvez utiliser ce conteneur Docker [lien].

Pour commencer, on va importer tous les modules python dont on va avoir besoin.

Pour cette démonstration j’ai choisi d’utiliser MobileNet qui est un réseau de neurones convolutifs (CNN). Il a pour avantage de présenter un bon compromis entre le temps d’évaluation et les performances reconnaissance. D’autres modèles sont nativement présents dans le module keras.application.

On va charger le réseau de neurones déjà entrainé sur la base d’images ImageNet. Cette base contient 1000 classes d’images différentes, c’est-à-dire des photos de 1000 types objets différents. On peut évidemment changer les paramètres du constructeur de MobileNet. On peut aussi entrainer le réseau de neurones sur d’autres images soit « from scratch » c’està-dire en partant de zéro; soit grâce au fine tuning, c’est-à-dire en apprenant à partir du réseau de neurones déjà paramétré.

A présent on va charger notre image à reconnaitre, puis la redimensionner pour qu’elle ait le format adapté à notre réseau de neurones.

Image de lion (auteur: Robertgreene674, licence CC0).

On évalue à présent l’image avec notre réseau de neurones :

preds contient les prédiction (probabilités) pour les 1000 classes d’ImageNet. On va récupérer et afficher les 5 plus probables sous forme de tableau :

On obtient :

Lion est reconnu avec une probabilité de 99.9% ! Les classes les plus probables après Lion sont des singes, mais avec une probabilité <0.1%. A mon avis, c’est possiblement à grâces aux traits du visage et la texture de la fourrure que les singes sont les classes les plus probables après le lion.

On a donc reconnu une image de lion en seulement 14 lignes de code (dont 7 d’import).  Dans ce cas tout fonctionne très bien mais vous pouvez avoir des images plus durs à reconnaitre ou des images qui n’ont pas d’exemples de la même classe dans la base. Évidement il est possible de remédier à ces problèmes mais ça sera pour une autre fois.

 

8 réflexions au sujet de « Reconnaitre une image avec Keras »

  1. Megrahi Firas

    Hello,

    thank you for you tutorial,

    i tryed to run your code but it shows me an error in preds = model.predict(x)
    AbortedError: Operation received an exception:Status: 3, message: could not create a dilated convolution forward descriptor, in file tensorflow/core/kernels/mkl_conv_ops.cc:1111
    [[{{node conv1/convolution}}]]

    Thank you in advance

    Répondre
    1. Alexandre Auteur de l’article

      Hello Firas,

      I saw this comment last, so I add here the english version of my previous answer.

      Without any further information about your setup it’s hard to tell why you have this error.
      I can only advice you to update keras / tensorflow to the latest version.

      Good luck!

      Répondre
  2. Megrahi Firas

    Bonjour Alexandre,

    Merci pour votre tutorial,

    quand j’essaye de tourner la ligne « preds = model.predict(X) », j’ai cet erreur :
    AbortedError: Operation received an exception:Status: 3, message: could not create a dilated convolution forward descriptor, in file tensorflow/core/kernels/mkl_conv_ops.cc:1111
    [[{{node conv1_1/convolution}}]]

    Firas

    Répondre
    1. Alexandre Auteur de l’article

      Bonjour Firas,

      Sans connaitre ton environnement de travail c’est compliqué de répondre.
      Sans plus d’informations, je peux juste te conseille de faire les dernières mise à jour.

      J’espère que ça résoudra ton problème.
      Alexandre

      Répondre
    2. Douglas

      Ca fait plusieurs mois depuis votre message, mais est-ce que vous avez pu trouver une solution ? Re recois le meme message

      Répondre
        1. Patrick

          J’ai pu faire fonctionner cette reconnaissance en utilisant le modèle VGG16 au lieu de MobileNet.

          Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.