
ACTUALITÉS / SCIENCE DES DONNÉES
Imaginez que vous êtes le directeur d'une nouvelle start-up de haute technologie, qui cherche à vendre un tout nouveau produit (un nouveau dispositif IoT, disons) sur le marché. Vous avez participé à de nombreuses conférences, expositions et 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.
Imaginez que vous êtes le directeur d'une nouvelle start-up de haute technologie, qui cherche à vendre un tout nouveau produit (un nouveau dispositif IoT, disons) sur le marché. Vous avez participé à de nombreuses conférences, expositions et 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.
Un problème se pose : vous n'avez aucun moyen d'anticiper et d'estimer la demande pour votre produit.
Une donnée simple que vous pourriez vérifier est le nombre de personnes qui parlent de votre produit sur internet. Vous pouvez jeter un coup d'œil aux principaux réseaux sociaux (Facebook, Twitter, Instagram...) et quantifier le nombre de messages mentionnant votre produit. Cela vous donnerait une idée de l'ampleur des ventes que vous pouvez espérer.
Vous avez deux possibilités pour reconnaître un produit dans un message social. Vous pouvez soit analyser son texte en effectuant du Text Mining, soit effectuer de la reconnaissance d'image sur l'image du post. L'analyse du texte pose toutefois un problème : lorsqu'un produit est commercialisé, il y a peu de chances 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 privilégiée. Pour reconnaître un produit sur des images (si vous avez plusieurs produits à reconnaître), vous devez effectuer les opérations suivantes Détection d'objets et c'est là que Tensorflow intervient.
Qu'est-ce que Tensorflow ?
Tensorflow est un open-source bibliothèque mathématique, fournissant des API stables en Python et en C, utilisée pour plusieurs tâches de manipulation de data. Elle est très connue et utilisée pour les applications d'apprentissage automatique et d'apprentissage profond 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 de la parole en texte.
Notre cas d'utilisation spécifique est le suivant Détection d'objets. Vous pouvez utiliser Tensorflow à différents niveaux :
- Niveau 1: Utilisez un modèle pré-entraîné disponible sur le marché et appliquez-le directement à votre data 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înez un modèle sur votre propre data, afin que le modèle puisse apprendre et connaître la gamme de vos produits avec précision. Ce niveau nécessite l'entraînement d'un modèle sur le data que vous avez étiqueté 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. À ce niveau, vous ne vous contentez pas de former un modèle, vous le construisez depuis le début. Il peut s'agir d'ajuster les paramètres d'un modèle existant ou de développer une nouvelle architecture de réseau neuronal. Ce niveau est davantage destiné à la recherche, car il s'agit d'une approche qui prend beaucoup de temps.
Nous décrivons ci-après chaque niveau d'utilisation de Tensorflow de manière plus détaillée.
Niveau 1 - Utiliser un modèle pré-entraîné
La première utilisation de base consiste à utiliser un modèle qui a déjà été entraîné sur un ensemble data étiqueté. Cette option doit être choisie lorsque la data à laquelle vous souhaitez appliquer le modèle est très similaire à la data d'entraînement. Par exemple, lorsque vous souhaitez reconnaître des objets génériques tels que des chaussures, des smartphones, des sacs, etc. Cette approche ne convient donc pas si vous souhaitez reconnaître une marque et un modèle précis de votre gamme de produits.
En général, ces modèles sont entraînés sur des ensembles data standard, comme le Coco dataset (lien github ici) ou ImageNet dataset (lien ici). Ces ensembles data sont composés de vastes collections d'images déjà étiquetées et prêtes à être utilisées pour l'entraînement des modèles. Ils sont largement utilisés pour entraîner les modèles de classification d'images et de détection d'objets, qui peuvent être utilisés comme modèles pré-entraînés pour la reconnaissance générique de produits.
Maintenant que nous en savons plus sur le data, passons rapidement en revue le 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 ensembles standard data. ImageNet pour ces cas. Le flux de travail est alors simple, vous chargez le modèle, et l'appliquez directement à vos images afin d'en extraire les caractéristiques. Par exemple, vous pouvez directement classifier lesquelles de vos images contiennent des montres, des écouteurs, des casques... Il existe un autre exemple plus spécifique au cas d'utilisation de la détection d'objets et qui a été développé par l'équipe Tensorflow de Google. Ils ont construit une série de modèles pré-entraînés (l'un d'entre eux est basé sur le Coco dataset), à utiliser directement sur de nouvelles images pour la détection d'objets (lien github ici). Ces modèles peuvent également servir de modèles pour le réentraînement de votre propre data, que nous aborderons au niveau 2.
Niveau 2 - Formez un modèle par vous-même data
Lorsque vous travaillez avec un dataset assez différent du dataset original utilisé pour l'entraînement du modèle, le simple fait de l'appliquer ne fonctionnera pas. Vous devrez construire votre propre dataset d'entraînement et entraîner à nouveau le modèle sur celui-ci.
La plupart des problèmes de reconnaissance d'images nécessitent l'utilisation de réseaux neuronaux convolutifs (CNN). Les premières couches (couches convolutives) extraient des motifs et des caractéristiques de l'image. Ces caractéristiques sont ensuite transmises aux dernières couches (couches entièrement connectées) pour la prédiction. Il existe deux approches pour ré-entraîner un modèle sur votre propre data : Apprentissage par transfert et Mise au point.
Apprentissage par transfert consiste à utiliser les couches convolutives pré-entraînées du modèle original et à entraîner les couches entièrement connectées sur les caractéristiques extraites de notre ensemble d'images. L'idée est ici d'utiliser les connaissances acquises lors de l'entraînement du modèle sur l'ensemble data original et de les utiliser pour notre problème. Cette technique est efficace lorsque les deux ensembles data sont similaires. Par exemple, un modèle entraîné à reconnaître des voitures peut être réentraîné à reconnaître des camions. La raison en 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 ce processus :
Si votre dataset est très différent du dataset d'origine, vous devrez effectuer les opérations suivantes Mise au point. Contrairement à l'apprentissage par transfert, l'ensemble du réseau (ou du moins la plupart des couches convolutives) est entraîné à nouveau. Ainsi, les couches convolutives sont entraînées sur vos images et peuvent extraire des caractéristiques totalement adaptées à vos images. L'avantage du réglage fin est que le modèle est entièrement entraîné sur l'ensemble dataset et qu'il est susceptible d'avoir de meilleures performances, mais il prend également plus de temps et est plus coûteux en termes de calcul. La figure ci-dessous illustre le processus :
Pour construire un dataset pour la détection d'objets, vous devez collecter un grand nombre d'images d'entraînement. Certains disent des centaines, d'autres des milliers ou même des centaines de milliers, mais il n'y a pas de vérité de base. 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 étiqueter. Le processus d'étiquetage 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 est généralement réalisée manuellement, mais elle peut être semi-automatisée par du code. Plusieurs outils open-source ont été développés pour faciliter l'étiquetage manuel, et l'un d'entre eux est le logiciel BBox-Label-Tool sur Github. L'outil consiste en une interface utilisateur, chargeant toutes les images et permettant à l'utilisateur d'étiqueter 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 dessine un rectangle autour de l'image et enregistre les coordonnées dans un fichier. Le temps d'étiquetage (hormis l'ajout de la classe de l'objet) est ainsi ramené à 3 secondes. Le fichier JSON final, après l'ajout de la classe de l'objet, devrait ressembler à ceci :
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 dataset, vous pouvez commencer à entraîner votre modèle, mais vous devez d'abord trouver un modèle pré-entraîné ! Les recherches récentes sur l'apprentissage profond ont conduit au développement de plusieurs modèles basés sur des réseaux neuronaux pour la détection d'objets. Une architecture célèbre est le R-CNN plus rapide basé sur les réseaux de proposition de régions (RPN). Faster R-CNN comporte deux réseaux : un RPN pour générer des propositions de régions 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 d'apprentissage profond afin qu'ils soient facilement utilisables par les scientifiques de data, et l'un d'entre eux est un modèle de détection d'objets basé sur Faster R-CNN. Le modèle est fourni sur le site de Tensorflow Github avec un tutoriel. La page tutoriel montre les étapes pour ré-entraîner le modèle (avec l'apprentissage par transfert) et le déployer sur Google ML Engine.
Niveau 3 - Créez votre propre modèle à partir de zéro
Si vous avez l'âme d'un chercheur ou si vous avez un problème de vision par ordinateur très spécifique, vous pouvez créer votre propre modèle à partir de rien. Dans ce cas, trois options s'offrent à vous :
- Construire un modèle de classification d'images avec des CNN
La solution la plus simple pour la reconnaissance des produits est la classification des images à l'aide d'une architecture de réseau neuronal convolutif. Ces modèles prennent une image en entrée et produisent une étiquette indiquant l'objet. Ils ne doivent donc être utilisés que lorsque vos images ne contiennent qu'un seul objet à détecter. Toutefois, l'utilisation d'un modèle de classification d'images pour la détection d'objets risque d'être peu performante, simplement en raison du bruit autour de l'objet dans l'image. Les modèles de classification d'images sont conçus pour extraire des caractéristiques de l'ensemble de l'image et classer l'image dans son ensemble. Le problème 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 recherché, peuvent avoir la même étiquette. Cela rend la tâche de classification difficile. Voici quelques exemples deux tutoriels sur la façon de construire des CNN à partir de zéro.
- Construire un modèle de détection d'objets
Comme nous l'avons déjà dit, les modèles de détection d'objets sont apparus récemment grâce à la recherche sur l'apprentissage profond. L'architecture Faster R-CNN a été introduite fin 2015 en tant qu'itération de l'architecture plus ancienne Fast R-CNN. Elle produit :
a) une liste de boîtes de délimitation
b) une étiquette attribuée à chaque boîte de délimitation
c) une probabilité pour chaque étiquette et chaque boîte englobante
Un CNN pré-entraîné est d'abord appliqué à l'image, créant ainsi une carte de caractéristiques. Ces caractéristiques sont ensuite transmises à un RPN pour trouver des régions candidates (boîtes englobantes) qui contiennent des objets pertinents. La dernière étape consiste à utiliser les caractéristiques calculées par le CNN et les boîtes englobantes pour classer le contenu des boîtes englobantes et ajuster leurs coordonnées (afin qu'elles correspondent mieux à l'objet). Cette opération est réalisée par le module RCNN. La figure ci-dessous illustre l'architecture :
Vous trouverez plus de détails dans le présent document. tutoriel, et des travaux en code source libre sur le sujet sont disponibles ici.
- Construire un modèle hybride utilisant des architectures de détection d'objets et des CNNs
Si vous souhaitez améliorer vos performances, vous pouvez envisager l'approche hybride. Il est possible qu'une approche de détection d'objets aboutisse à une mauvaise classification (l'objet est bien détecté mais la mauvaise étiquette est prédite). Dans ce cas, vous pouvez d'abord entraîner un modèle de détection d'objets sur votre ensemble dataset, avec une seule étiquette ("objet" par exemple), puis recadrer vos images sur la base des coordonnées des boîtes englobantes. Vous obtiendrez ainsi un ensemble d'images contenant uniquement l'objet pertinent détecté dans les images d'origine. Vous pouvez ensuite utiliser cet ensemble comme ensemble d'entraînement pour la classification d'images par CNN.
Extension - Apprentissage automatique de la machine
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 n'ayant pas de connaissances techniques. L'objectif est qu'au lieu d'utiliser des modèles prêts à l'emploi (comme le niveau 1), vous puissiez former votre propre modèle sans avoir besoin de posséder les connaissances sous-jacentes.
Comment cela fonctionne-t-il ?
La solution consiste à automatiser la création du modèle de classification des images ou du modèle de détection des objets. Il vous suffit de fournir un ensemble data étiqueté avec vos images, puis de les envoyer à la solution. Ce data sera ingéré afin d'entraîner un modèle de vision par ordinateur (niveau 2 ou niveau 3). Il en résultera un modèle entraîné, parfois même une API, que vous pourrez utiliser pour prédire les étiquettes et localiser les objets sur de nouvelles images. Le modèle s'optimise 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 interviennent dans ce domaine et ont mis au point des outils qui sont encore en version bêta à l'heure actuelle.
- Tout d'abord, nous avons Google et son composant Google Cloud AutoML de sa suite de plateformes Cloud (lien ici). Cloud AutoML n'est pas seulement conçu pour les problèmes de vision par ordinateur, mais il peut également être utile pour toutes les applications d'apprentissage automatique, ainsi que pour le traitement du langage naturel et la traduction.
- Deuxièmement, nous avons l'initiative open source AutoKeras (lien ici). Il est basé sur Keras, et repose sur la recherche automatique de l'architecture et des hyperparamètres des modèles d'apprentissage profond.
Article co-écrit par Matthieu Montaigu et Kasra Mansouri, scientifiques du Data au Artefact.
Vous souhaitez en savoir plus sur la prévision des ventes grâce à des modèles de reconnaissance de produits sur mesure ? Nos experts sont à votre disposition pour répondre à vos questions !

BLOG









