Contact
France
Contact us
Replay

Comment construire un modèle de reconnaissance de produits sur mesure avec Tensorflow ?

News and insights
#Data science

Imaginez que vous êtes le directeur d’une nouvelle start-up high-tech, cherchant à vendre un tout nouveau produit sur le marché (un nouvel appareil IoT, par exemple). Vous avez participé à de nombreuses conférences, expositions, démonstrations, afin de communiquer à l’avance sur votre produit et de le faire connaître. L’impact direct que vous attendez est que les ventes de votre produit, une fois lancé, soient suffisamment élevées pour atteindre vos objectifs.

Mais voici le problème , vous n’avez aucun moyen d’anticiper et d’estimer la demande pour votre produit.

Un fait simple que vous pourriez vérifier est combien de personnes parlent de votre produit sur Internet. Vous pourriez jeter un coup d’oeil aux principaux réseaux sociaux (Facebook, Twitter, Instagram…) et quantifier combien de messages mentionnent votre produit. Cela vous donnera une idée de l’ampleur des ventes auxquelles vous pouvez vous attendre.

Vous avez deux options pour reconnaître un produit dans un post sur les réseaux sociaux, vous pouvez soit analyser son texte en effectuant du Text Mining, soit effectuer une reconnaissance d’image sur l’image du post. Mais il y a un problème avec l’analyse du texte : lorsqu’un produit est lancé, il y a peu de chance que tout le monde connaisse son nom et le mentionne immédiatement après la date de sortie, la reconnaissance d’images est donc la solution préférée. Afin de reconnaître un produit sur les images (si vous avez plusieurs produits à reconnaître), vous devrez effectuer une détection d’objet et c’est là que Tensorflow intervient.

Qu’est-ce que Tensorflow ?

Tensorflow est une bibliothèque mathématique open-source, fournissant des API Python et C stables, utilisées pour plusieurs tâches de manipulation de données. Elle est très connue et utilisée pour le machine learning et les applications de deep learning telles que les réseaux neuronaux. Les cas d’utilisation pour lesquels Tensorflow est le plus connu sont la reconnaissance d’images, le traitement du langage naturel et l’analyse speech-to-text.

Notre cas d’utilisation spécifique est la détection d’objets. Vous pouvez donc utiliser Tensorflow à différents niveaux :

  • Niveau 1 : Utilisez un modèle pré-entraîné off the shelf et appliquez-le directement sur vos données pour reconnaître les produits. Cette méthode est la moins complexe et la plus rapide car vous n’avez pas besoin de construire ou d’entraîner un modèle.
  • Niveau 2 : Entraîner un modèle sur vos propres données, afin que le modèle puisse apprendre et connaître précisément la gamme de vos produits. Ce niveau nécessite d’entraîner un modèle sur les données que vous avez labellisées au préalable. Cela prend plus de temps mais apporte des résultats plus pertinents car le modèle reconnaîtra les références exactes du produit.
  • Niveau 3 : Créez votre propre modèle à partir de zéro. Dans ce niveau, vous n’entraînez pas seulement un modèle, vous le construisez dès le début. Il peut s’agir de l’ajustement de paramètres sur un modèle existant, ainsi que du développement d’une nouvelle architecture de réseau neuronaux. Ce niveau est plus dédié à la recherche, car il s’agit d’une approche qui prend beaucoup de temps.

Ci-après, nous décrivons plus en détail chaque niveau d’utilisation de Tensorflow.

Niveau 1 – Utilisez un modèle pré-entrainé

La première utilisation de base consiste à utiliser un modèle qui a déjà été entraîné sur un jeu de données labellisées. Cette option doit être choisie lorsque les données sur lesquelles vous voulez appliquer le modèle sont très similaires aux données d’entraînement. Par exemple, lorsque vous voulez reconnaître des objets génériques comme des chaussures, des smartphones, des sacs, etc. Cette approche ne conviendra donc pas si vous vous attendez à reconnaître une marque et un modèle précis de votre gamme de produits.

Habituellement, ces modèles sont entraînés sur des jeux de données standards, comme le jeu de données Coco (lien github ici) ou ImageNet (lien ici). Ces dernières sont composées de gigantesques collections d’images qui sont déjà labellisées et prêtes à l’emploi pour l’entraînement de modèles. Ils sont particulièrement utilisés pour entraîner des modèles de classification d’images et de détection d’objets, qui peuvent être utilisés comme modèles pre-entraînés pour la reconnaissance générique de produits.

Maintenant que nous en savons plus sur les données, voici un bref aperçu du modèle pré-entraîné que vous pourriez utiliser. L’une des ressources les plus courantes pour trouver des modèles pré-entraînés est Keras. Il dispose d’un module dans lequel vous pouvez trouver différents types de modèles de classification d’images (VGG16, ResNet50, IncetopnV3…), qui ont été entraînés sur des jeux de données standards, ImageNet pour ces cas. Le processus est alors simple, vous chargez le modèle, et vous l’appliquez directement sur vos images afin d’en extraire les « features » (variables et/ou caractéristiques discriminantes). Par exemple, vous pouvez classer directement les images qui contiennent des montres, des écouteurs, des casques…. Il existe un autre exemple plus spécifique au cas d’utilisation de la détection d’objet, développé par l’équipe Tensorflow de Google. Ils ont construit une série de modèles pré-entraînés (l’un d’eux est basé sur le jeu de données Coco), à utiliser directement sur de nouvelles images pour la détection d’objets (lien github ici). Ces modèles peuvent aussi servir d’exemples pour s’entraîner de nouveau sur ses propres données, comme nous le ferons au niveau 2.

Niveau 2 – Entraînez un modèle sur ses propres données

Lorsque vous travaillez avec un jeu de données plutôt différent du jeu de données original utilisé pour l’entraînement du modèle, simplement l’appliquer ne fonctionnera pas. Vous devrez construire votre propre jeu de données d’entraînement  et ré-entraîner le modèle sur celui-ci.

La plupart des problèmes de reconnaissance d’image nécessitent l’utilisation de réseaux neuronaux convolutionnels (CNN), les premières couches (couches convolutionnelles) extrayant les motifs et les caractéristiques de l’image. Ces caractéristiques sont ensuite transmises aux dernières couches (couches entièrement connectées) pour la phase de prédiction. Il existe deux approches pour ré-entraîner un modèle sur ses propres données : le Transfer learning et le Fine Tuning.

Le Transfer Learning consiste à utiliser les couches convolutives pré-entraînées du modèle original et à entraîner les couches entièrement connectées sur les features extraites de notre ensemble d’images. L’idée ici est d’utiliser les connaissances acquises lors de l’entraînement du modèle sur le jeu de données original et de les utiliser pour notre problème. Cette technique est efficace dans les cas où les deux jeux de données sont semblables ; par exemple, un modèle entraîné pour reconnaître les voitures pourrait être entraîné de nouveau pour reconnaître les camions. La raison est que les images de voitures sont similaires aux images de camions et que les motifs extraits par les couches convolutives de ces images sont susceptibles d’être similaires. La figure ci-dessous illustre le processus :

Si votre jeu de données est très différent de celui original, vous devrez effectuer du Fine Tuning. Contrairement au Transfer Learning, ici, l’ensemble du réseau (ou du moins la plupart des couches convolutives) est ré-entraîné. Ainsi les couches convolutives sont entraînées sur vos images et peuvent extraire les caractéristiques totalement adaptées à vos images. L’avantage du Fine Tuning est que le modèle est complètement entraîné sur le jeu de données et qu’il est susceptible d’avoir de meilleures performances, mais il prend aussi plus de temps et coûte plus cher sur le plan informatique. La figure ci-dessous illustre le processus :

Pour construire un jeu de données pour la détection d’objets, il faut donc réunir beaucoup d’images d’entraînement, mais « Combien exactement ? » me demanderez-vous. Certains disent des centaines, d’autres des milliers, voire des centaines de milliers, il n’existe pas une seule réponse véridique. Cependant, il est recommandé d’avoir plus d’une centaine d’images pour chaque classe que vous voulez que votre modèle reconnaisse.

Une fois que vous avez rassemblé vos images, vous devez les labellisées. Le processus consiste à créer des fichiers JSON contenant les coordonnées et la classe de l’objet que le modèle doit détecter et reconnaître sur chaque image. Cette partie se fait généralement manuellement mais elle peut être semi-automatisée par code. Plusieurs outils open-source ont été développés pour accélerer le processus manuel, l’un d’eux est le BBox-Label-Tool sur Github. L’outil se compose d’une interface utilisateur, chargeant toutes les images et permettant à l’utilisateur de labelliser une image en 2 clics :

L’utilisateur n’a qu’à cliquer sur le coin supérieur gauche et le coin inférieur droit de l’objet, puis l’outil trace un rectangle autour de l’image et enregistre les coordonnées dans un fichier. Ceci réduit le temps de labellisation (en dehors de l’ajout de la classe de l’objet) à 3 secondes. Le fichier JSON final, après avoir ajouté la classe de l’objet, devrait ressembler à ceci :

{« ymax »: 702.0, « xmax »: 543.0, « xmin »: 289.0, « ymin »: 387.0, « classtxt »: « pink bag », « class »: 4}

L’étape finale consiste à convertir les fichiers en un seul fichier, spécialement formaté pour Tensorflow. Un tutoriel simple est donné ici.

Une fois que vous avez créé votre jeu de données, vous pouvez commencer à entraîner votre modèle, mais vous devez d’abord trouver un modèle pré-entraîné ! Des recherches récentes dans le domaine du deep learning ont conduit au développement de plusieurs modèles de détection d’objets basés sur des réseaux neuronaux. Une architecture célèbre est le faster R-CNN basé sur les réseaux de proposition de région (RPN). Faster R-CNN dispose de deux réseaux : un RPN pour générer des propositions de région et un réseau utilisant ces propositions pour détecter des objets. L’équipe Tensorflow de Google a développé une série de modèles de deep learning pour être facilement utilisables par les scientifiques et l’un d’eux est un modèle de détection d’objets basé sur Faster R-CNN. Le modèle est fourni sur la page Github de tensorflow avec un tutoriel. Le tutoriel montre les étapes pour ré-entraîner le modèle (avec Transfer Learning) et le déployer sur Google ML Engine.

Niveau 3 – Créez votre propre modèle

Si vous avez l’âme d’un chercheur ou si vous avez un problème de computer vision très spécifique, vous pouvez créer votre propre modèle à partir de zéro. Dans ce cas, vous avez trois options :

  • Construire un modèle de classification d’images avec CNNs

La solution la plus simple pour la reconnaissance de produits est la classification d’images avec l’architecture de réseaux neuronaux convolutionnels (CNNs). Ces modèles prennent une image en entrée et sortent un label indiquant l’objet, donc ils ne doivent être utilisés que lorsque vos images ne contiennent qu’un seul objet que vous voulez détecter. Cependant, l’utilisation d’un modèle de classification d’image pour la détection d’objets est susceptible d’avoir de mauvaises performances simplement à cause du bruit autour de l’objet dans l’image. Les modèles de classification d’image sont conçus pour extraire des caractéristiques de l’image entière et classer l’image dans son ensemble. Le problème ici est que deux images différentes, par exemple une image d’une pièce et une image d’une rue, contenant toutes deux l’objet souhaité, peuvent avoir le même label. Cela rend la tâche de classification difficile. Voici deux tutoriels sur la façon de construire des CNNs à partir de zéro.

  • Construire un modèle de détection d’objets

Comme nous l’avons vu précédemment, des modèles de détection d’objets sont apparus récemment avec les recherches menées dans le domaine du deep learning. L’architecture faster R-CNN a été introduite fin 2015 comme une itération de l’ancienne architecture Fast R-CNN. Il génère :

          a) une liste des encadrés de délimitation

          b) un label assigné à chaque case de délimitation

          c) une probabilité pour chaque label et boîte de délimitation

Tout d’abord, un CNN pré-entraîné est appliqué à l’image, créant ainsi une carte de features. Celles ci sont ensuite transmises à un RPN pour trouver des régions candidates (zones de délimitation) pour contenir les objets pertinents. La dernière étape consiste à utiliser les features calculées par le CNN et les cases de délimitation pour classer le contenu de la case de délimitation et ajuster ses coordonnées (pour qu’elle corresponde mieux à l’objet), cela se fait via le module RCNN. La figure ci-dessous illustre l’architecture :

Plus de détails sont donnés dans ce tutoriel, un travail open-source sur le sujet est disponible ici.

  • Construire un modèle hybride utilisant les architectures de détection d’objets et les CNNs

Si vous voulez booster vos performances, vous pouvez envisager l’approche hybride. Il est possible qu’une approche de détection d’objet entraîne une mauvaise classification (l’objet est bien détecté mais la mauvais label est prédit). Dans ce cas, vous pouvez d’abord entraîner un modèle de détection d’objet sur votre jeu de données, avec un seul label (« objet » par exemple) et ensuite rogner vos images en fonction des coordonnées des cases. Ceci créera un ensemble d’images ne contenant que l’objet pertinent détecté dans les images originales, vous pouvez alors utiliser cet ensemble comme un ensemble d’apprentissage pour la classification des images CNN.

Extension – Machine Learning automatisé

Aujourd’hui, nous pouvons observer le développement de nouvelles initiatives visant à rendre le processus de création et de personnalisation de votre propre modèle accessible à tous, même aux personnes sans formation technique. Le but est qu’au lieu d’utiliser des modèles off the shelf (comme le niveau 1), vous puissiez former votre propre modèle sans avoir besoin d’avoir les connaissances sous-jacentes.

  • Comment cela fonctionne t-il ?

La solution consiste à automatiser la création du modèle de classification d’image ou du modèle de détection d’objet. Il vous suffirait de fournir un jeu de données étiquetées avec vos images, puis de les envoyer à la solution. Ces données seront ingérées afin d’entraîner un modèle de computer vision (niveau 2 ou niveau 3). Il produira un modèle entraîné, parfois même une API, que vous pourrez utiliser pour prédire les labels et localiser les objets sur les nouvelles images. Le modèle s’améliore et se perfectionne de lui-même, vous n’avez donc pas besoin de savoir comment l’implémenter et comment le paramétrer.

  • Quelles sont les solutions?

Deux acteurs principaux sont apparus dans ce domaine, et ont publié des outils qui sont encore en phase bêta pour le moment.

  • Tout d’abord, nous avons Google et son outil Google Cloud AutoML à partir de sa suite de plate-forme Cloud (lien ici). Non seulement Cloud AutoML est conçu pour les problèmes de computer vision, mais il peut également être utile pour toutes les applications d’apprentissage automatique, ainsi que pour le traitement et la traduction du langage naturel.
  • Deuxièmement, nous avons l’initiative open source AutoKeras (lien ici). Il est basé sur Keras, et s’appuie sur la recherche automatique d’architecture et d’hyperparamètres de modèles de deep learning.

 

Article co-écrit par Matthieu Montaigu et Kasra Mansouri, Data scientists chez Artefact. 

 

Vous souhaitez en savoir plus sur la prédiction de ventes grâce aux modèles de reconnaissance d’images sur mesure ? Nos experts sont à votre disposition pour répondre à toutes vos questions !

 

Contactez-nous

publié par
Matthieu Montaigu, Senior Data Scientist

matthieu.montaigu@artefact.com