	{"id":745,"date":"2018-10-26T13:17:33","date_gmt":"2018-10-26T12:17:33","guid":{"rendered":"https:\/\/www.artefact.com\/?post_type=news&#038;p=745"},"modified":"2024-09-20T17:45:00","modified_gmt":"2024-09-20T16:45:00","slug":"tensorflow-and-open-source-made-product-recognition-model","status":"publish","type":"blog","link":"https:\/\/www.artefact.com\/fr\/blog\/tensorflow-and-open-source-made-product-recognition-model\/","title":{"rendered":"Comment utiliser Tensorflow et ses contributions open source pour construire un mod\u00e8le de reconnaissance de produits sur mesure ?"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-margin-bottom:40px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_2 1_2 fusion-flex-column avada-news-bloc-image\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element\" style=\"text-align:left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"1057\" height=\"591\" title=\"data-driven\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271057%27%20height%3D%27591%27%20viewBox%3D%270%200%201057%20591%27%3E%3Crect%20width%3D%271057%27%20height%3D%27591%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/wp-content\/uploads\/2019\/10\/image00.0.0.jpg\" alt class=\"lazyload img-responsive wp-image-30246\"\/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-padding-top:10px;--awb-padding-right:10px;--awb-padding-bottom:10px;--awb-padding-left:10px;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p>ACTUALIT\u00c9S \/ SCIENCE DES DONN\u00c9ES<\/p>\n<\/div><div class=\"fusion-text fusion-text-2\"><p>Imaginez que vous \u00eates le directeur d'une nouvelle start-up de haute technologie, qui cherche \u00e0 vendre un tout nouveau produit (un nouveau dispositif IoT, disons) sur le march\u00e9. Vous avez particip\u00e9 \u00e0 de nombreuses conf\u00e9rences, expositions et d\u00e9monstrations afin de communiquer \u00e0 l'avance sur votre produit et de le faire conna\u00eetre. L'impact direct que vous attendez est que les ventes de votre produit, une fois lanc\u00e9, soient suffisamment \u00e9lev\u00e9es pour atteindre vos objectifs.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-3\" style=\"--awb-text-color:#000000;\"><p><span style=\"font-weight: 400;\">Imaginez que vous \u00eates le directeur d'une nouvelle start-up de haute technologie, qui cherche \u00e0 vendre un tout nouveau produit (un nouveau dispositif IoT, disons) sur le march\u00e9. Vous avez particip\u00e9 \u00e0 de nombreuses conf\u00e9rences, expositions et d\u00e9monstrations afin de communiquer \u00e0 l'avance sur votre produit et de le faire conna\u00eetre. L'impact direct que vous attendez est que les ventes de votre produit, une fois lanc\u00e9, soient suffisamment \u00e9lev\u00e9es pour atteindre vos objectifs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Un probl\u00e8me se pose : vous n'avez aucun moyen d'anticiper et d'estimer la demande pour votre produit.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Une donn\u00e9e simple que vous pourriez v\u00e9rifier est le nombre de personnes qui parlent de votre produit sur internet. Vous pouvez jeter un coup d'\u0153il aux principaux r\u00e9seaux sociaux (Facebook, Twitter, Instagram...) et quantifier le nombre de messages mentionnant votre produit. Cela vous donnerait une id\u00e9e de l'ampleur des ventes que vous pouvez esp\u00e9rer.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Vous avez deux possibilit\u00e9s pour reconna\u00eetre 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\u00e8me : lorsqu'un produit est commercialis\u00e9, il y a peu de chances que tout le monde connaisse son nom et le mentionne imm\u00e9diatement apr\u00e8s la date de sortie. La reconnaissance d'images est donc la solution privil\u00e9gi\u00e9e. Pour reconna\u00eetre un produit sur des images (si vous avez plusieurs produits \u00e0 reconna\u00eetre), vous devez effectuer les op\u00e9rations suivantes <\/span><b>D\u00e9tection d'objets<\/b><span style=\"font-weight: 400;\"> et c'est l\u00e0 que Tensorflow intervient.<\/span><\/p>\n<h3><strong><span style=\"color: #ff0066;\">Qu'est-ce que Tensorflow ?<\/span><\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Tensorflow est un <strong>open-source<\/strong> biblioth\u00e8que math\u00e9matique, fournissant des API stables en Python et en C, utilis\u00e9e pour plusieurs t\u00e2ches de manipulation de data. Elle est tr\u00e8s connue et utilis\u00e9e pour les applications d'apprentissage automatique et d'apprentissage profond telles que les r\u00e9seaux 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.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Notre cas d'utilisation sp\u00e9cifique est le suivant <strong>D\u00e9tection d'objets<\/strong>. Vous pouvez utiliser Tensorflow \u00e0 diff\u00e9rents niveaux :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><strong>Niveau 1<\/strong><span style=\"font-weight: 400;\"><strong>:<\/strong> Utilisez un mod\u00e8le pr\u00e9-entra\u00een\u00e9 disponible sur le march\u00e9 et appliquez-le directement \u00e0 votre data pour reconna\u00eetre les produits. Cette m\u00e9thode est la moins complexe et la plus rapide car vous n'avez pas besoin de construire ou d'entra\u00eener un mod\u00e8le.<\/span><\/li>\n<li style=\"font-weight: 400;\"><strong>Niveau 2<\/strong><span style=\"font-weight: 400;\"><strong>:<\/strong> Entra\u00eenez un mod\u00e8le sur votre propre data, afin que le mod\u00e8le puisse apprendre et conna\u00eetre la gamme de vos produits avec pr\u00e9cision. Ce niveau n\u00e9cessite l'entra\u00eenement d'un mod\u00e8le sur le data que vous avez \u00e9tiquet\u00e9 au pr\u00e9alable. Cela prend plus de temps mais apporte des r\u00e9sultats plus pertinents car le mod\u00e8le reconna\u00eetra les r\u00e9f\u00e9rences exactes du produit.<\/span><\/li>\n<li style=\"font-weight: 400;\"><strong>Niveau 3<\/strong><span style=\"font-weight: 400;\"><strong>:<\/strong> Cr\u00e9ez votre propre mod\u00e8le \u00e0 partir de z\u00e9ro. \u00c0 ce niveau, vous ne vous contentez pas de former un mod\u00e8le, vous le construisez depuis le d\u00e9but. Il peut s'agir d'ajuster les param\u00e8tres d'un mod\u00e8le existant ou de d\u00e9velopper une nouvelle architecture de r\u00e9seau neuronal. Ce niveau est davantage destin\u00e9 \u00e0 la recherche, car il s'agit d'une approche qui prend beaucoup de temps.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Nous d\u00e9crivons ci-apr\u00e8s chaque niveau d'utilisation de Tensorflow de mani\u00e8re plus d\u00e9taill\u00e9e.<\/span><\/p>\n<h3><strong><span style=\"color: #ff0066;\">Niveau 1 - Utiliser un mod\u00e8le pr\u00e9-entra\u00een\u00e9<\/span><\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">La premi\u00e8re utilisation de base consiste \u00e0 utiliser un mod\u00e8le qui a d\u00e9j\u00e0 \u00e9t\u00e9 entra\u00een\u00e9 sur un ensemble data \u00e9tiquet\u00e9. Cette option doit \u00eatre choisie lorsque la data \u00e0 laquelle vous souhaitez appliquer le mod\u00e8le est tr\u00e8s similaire \u00e0 la data d'entra\u00eenement. Par exemple, lorsque vous souhaitez reconna\u00eetre des objets g\u00e9n\u00e9riques tels que des chaussures, des smartphones, des sacs, etc. Cette approche ne convient donc pas si vous souhaitez reconna\u00eetre une marque et un mod\u00e8le pr\u00e9cis de votre gamme de produits.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">En g\u00e9n\u00e9ral, ces mod\u00e8les sont entra\u00een\u00e9s sur des ensembles data standard, comme le <\/span><strong>Coco dataset<\/strong><span style=\"font-weight: 400;\"> (<\/span><a href=\"https:\/\/github.com\/cocodataset\/cocoapi\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">lien github ici<\/span><\/a><span style=\"font-weight: 400;\">) ou <\/span><strong>ImageNet dataset<\/strong><span style=\"font-weight: 400;\"> (<\/span><a href=\"http:\/\/image-net.org\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">lien ici<\/span><\/a><span style=\"font-weight: 400;\">). Ces ensembles data sont compos\u00e9s de vastes collections d'images d\u00e9j\u00e0 \u00e9tiquet\u00e9es et pr\u00eates \u00e0 \u00eatre utilis\u00e9es pour l'entra\u00eenement des mod\u00e8les. Ils sont largement utilis\u00e9s pour entra\u00eener les mod\u00e8les de classification d'images et de d\u00e9tection d'objets, qui peuvent \u00eatre utilis\u00e9s comme mod\u00e8les pr\u00e9-entra\u00een\u00e9s pour la reconnaissance g\u00e9n\u00e9rique de produits.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Maintenant que nous en savons plus sur le data, passons rapidement en revue le mod\u00e8le pr\u00e9-entra\u00een\u00e9 que vous pourriez utiliser. L'une des ressources les plus courantes pour trouver des mod\u00e8les pr\u00e9-entra\u00een\u00e9s est <\/span><strong>Keras<\/strong><span style=\"font-weight: 400;\">. Il dispose d'un module dans lequel vous pouvez trouver diff\u00e9rents types de mod\u00e8les de classification d'images (VGG16, ResNet50, IncetopnV3...), qui ont \u00e9t\u00e9 entra\u00een\u00e9s sur des ensembles standard data. ImageNet pour ces cas. Le flux de travail est alors simple, vous chargez le mod\u00e8le, et l'appliquez directement \u00e0 vos images afin d'en extraire les caract\u00e9ristiques. Par exemple, vous pouvez directement classifier lesquelles de vos images contiennent des montres, des \u00e9couteurs, des casques... Il existe un autre exemple plus sp\u00e9cifique au cas d'utilisation de la d\u00e9tection d'objets et qui a \u00e9t\u00e9 d\u00e9velopp\u00e9 par l'\u00e9quipe Tensorflow de Google. Ils ont construit une s\u00e9rie de mod\u00e8les pr\u00e9-entra\u00een\u00e9s (l'un d'entre eux est bas\u00e9 sur le Coco dataset), \u00e0 utiliser directement sur de nouvelles images pour la d\u00e9tection d'objets (<\/span><a href=\"https:\/\/github.com\/tensorflow\/models\/tree\/master\/research\/object_detection\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">lien github ici<\/span><\/a><span style=\"font-weight: 400;\">). Ces mod\u00e8les peuvent \u00e9galement servir de mod\u00e8les pour le r\u00e9entra\u00eenement de votre propre data, que nous aborderons au niveau 2.<\/span><\/p>\n<h3><strong><span style=\"color: #ff0066;\">Niveau 2 - Formez un mod\u00e8le par vous-m\u00eame data<\/span><\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Lorsque vous travaillez avec un dataset assez diff\u00e9rent du dataset original utilis\u00e9 pour l'entra\u00eenement du mod\u00e8le, le simple fait de l'appliquer ne fonctionnera pas. Vous devrez construire votre propre dataset d'entra\u00eenement et entra\u00eener \u00e0 nouveau le mod\u00e8le sur celui-ci. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">La plupart des probl\u00e8mes de reconnaissance d'images n\u00e9cessitent l'utilisation de r\u00e9seaux neuronaux convolutifs (CNN). Les premi\u00e8res couches (couches convolutives) extraient des motifs et des caract\u00e9ristiques de l'image. Ces caract\u00e9ristiques sont ensuite transmises aux derni\u00e8res couches (couches enti\u00e8rement connect\u00e9es) pour la pr\u00e9diction. Il existe deux approches pour r\u00e9-entra\u00eener un mod\u00e8le sur votre propre data : <\/span><strong>Apprentissage par transfert<\/strong><span style=\"font-weight: 400;\"> et <\/span><strong>Mise au point<\/strong><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Apprentissage par transfert<\/strong> consiste \u00e0 utiliser les couches convolutives pr\u00e9-entra\u00een\u00e9es du mod\u00e8le original et \u00e0 entra\u00eener les couches enti\u00e8rement connect\u00e9es sur les caract\u00e9ristiques extraites de notre ensemble d'images. L'id\u00e9e est ici d'utiliser les connaissances acquises lors de l'entra\u00eenement du mod\u00e8le sur l'ensemble data original et de les utiliser pour notre probl\u00e8me. Cette technique est efficace lorsque les deux ensembles data sont similaires. Par exemple, un mod\u00e8le entra\u00een\u00e9 \u00e0 reconna\u00eetre des voitures peut \u00eatre r\u00e9entra\u00een\u00e9 \u00e0 reconna\u00eetre 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'\u00eatre similaires. La figure ci-dessous illustre ce processus :<\/span><\/p>\n<p><img decoding=\"async\" class=\"lazyload wp-image-747 aligncenter\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27694%27%20height%3D%27243%27%20viewBox%3D%270%200%20694%20243%27%3E%3Crect%20width%3D%27694%27%20height%3D%27243%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"http:\/\/briqahg.cluster028.hosting.ovh.net\/wp\/wp-content\/uploads\/2019\/10\/Training-last-layer-300x105.png\" alt=\"\" width=\"694\" height=\"243\" \/><\/p>\n<div class=\"articleblock text\">\n<div class=\"content\">\n<p>Si votre dataset est tr\u00e8s diff\u00e9rent du dataset d'origine, vous devrez effectuer les op\u00e9rations suivantes\u00a0<strong>Mise au point<\/strong>. Contrairement \u00e0 l'apprentissage par transfert, l'ensemble du r\u00e9seau (ou du moins la plupart des couches convolutives) est entra\u00een\u00e9 \u00e0 nouveau. Ainsi, les couches convolutives sont entra\u00een\u00e9es sur vos images et peuvent extraire des caract\u00e9ristiques totalement adapt\u00e9es \u00e0 vos images. L'avantage du r\u00e9glage fin est que le mod\u00e8le est enti\u00e8rement entra\u00een\u00e9 sur l'ensemble dataset et qu'il est susceptible d'avoir de meilleures performances, mais il prend \u00e9galement plus de temps et est plus co\u00fbteux en termes de calcul. La figure ci-dessous illustre le processus :<\/p>\n<\/div>\n<\/div>\n<p><img decoding=\"async\" class=\"lazyload wp-image-748 aligncenter\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27697%27%20height%3D%27223%27%20viewBox%3D%270%200%20697%20223%27%3E%3Crect%20width%3D%27697%27%20height%3D%27223%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"http:\/\/briqahg.cluster028.hosting.ovh.net\/wp\/wp-content\/uploads\/2019\/10\/original-labels-300x96.png\" alt=\"\" width=\"697\" height=\"223\" \/><\/p>\n<p>Pour construire un dataset pour la d\u00e9tection d'objets, vous devez collecter un grand nombre d'images d'entra\u00eenement. Certains disent des centaines, d'autres des milliers ou m\u00eame des centaines de milliers, mais il n'y a pas de v\u00e9rit\u00e9 de base. Cependant, il est recommand\u00e9 d'avoir plus d'une centaine d'images pour chaque classe que vous voulez que votre mod\u00e8le reconnaisse.<\/p>\n<p>Une fois que vous avez rassembl\u00e9 vos images, vous devez les \u00e9tiqueter.\u00a0<strong>Le processus d'\u00e9tiquetage consiste \u00e0 cr\u00e9er des fichiers JSON contenant les coordonn\u00e9es et la classe de l'objet que le mod\u00e8le doit d\u00e9tecter et reconna\u00eetre sur chaque image.<\/strong>. Cette partie est g\u00e9n\u00e9ralement r\u00e9alis\u00e9e manuellement, mais elle peut \u00eatre semi-automatis\u00e9e par du code. Plusieurs outils open-source ont \u00e9t\u00e9 d\u00e9velopp\u00e9s pour faciliter l'\u00e9tiquetage manuel, et l'un d'entre eux est le logiciel<a href=\"https:\/\/github.com\/puzzledqs\/BBox-Label-Tool\" target=\"_blank\" rel=\"noopener\">\u00a0BBox-Label-Tool<\/a>\u00a0sur Github. L'outil consiste en une interface utilisateur, chargeant toutes les images et permettant \u00e0 l'utilisateur d'\u00e9tiqueter une image en 2 clics :<\/p>\n<p><img decoding=\"async\" class=\"lazyload wp-image-749 aligncenter\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27912%27%20height%3D%27511%27%20viewBox%3D%270%200%20912%20511%27%3E%3Crect%20width%3D%27912%27%20height%3D%27511%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"http:\/\/briqahg.cluster028.hosting.ovh.net\/wp\/wp-content\/uploads\/2019\/10\/img-wear-300x168.png\" alt=\"\" width=\"912\" height=\"511\" \/><\/p>\n<p>L'utilisateur n'a qu'\u00e0 cliquer sur le coin sup\u00e9rieur gauche et le coin inf\u00e9rieur droit de l'objet, puis l'outil dessine un rectangle autour de l'image et enregistre les coordonn\u00e9es dans un fichier. Le temps d'\u00e9tiquetage (hormis l'ajout de la classe de l'objet) est ainsi ramen\u00e9 \u00e0 3 secondes. Le fichier JSON final, apr\u00e8s l'ajout de la classe de l'objet, devrait ressembler \u00e0 ceci : <\/p>\n<p>L'\u00e9tape finale consiste \u00e0 convertir les fichiers en un seul fichier, sp\u00e9cialement format\u00e9 pour Tensorflow. Un tutoriel simple est donn\u00e9<a href=\"https:\/\/medium.com\/@WuStangDan\/step-by-step-tensorflow-object-detection-api-tutorial-part-2-converting-dataset-to-tfrecord-47f24be9248d\" target=\"_blank\" rel=\"noopener\">\u00a0ici<\/a>.<\/p>\n<p>Une fois que vous avez cr\u00e9\u00e9 votre dataset, vous pouvez commencer \u00e0 entra\u00eener votre mod\u00e8le, mais vous devez d'abord trouver un mod\u00e8le pr\u00e9-entra\u00een\u00e9 ! Les recherches r\u00e9centes sur l'apprentissage profond ont conduit au d\u00e9veloppement de plusieurs mod\u00e8les bas\u00e9s sur des r\u00e9seaux neuronaux pour la d\u00e9tection d'objets. Une architecture c\u00e9l\u00e8bre est le R-CNN plus rapide bas\u00e9 sur les r\u00e9seaux de proposition de r\u00e9gions (RPN). Faster R-CNN comporte deux r\u00e9seaux : un RPN pour g\u00e9n\u00e9rer des propositions de r\u00e9gions et un r\u00e9seau utilisant ces propositions pour d\u00e9tecter des objets. L'\u00e9quipe Tensorflow de Google a d\u00e9velopp\u00e9 une s\u00e9rie de mod\u00e8les d'apprentissage profond afin qu'ils soient facilement utilisables par les scientifiques de data, et l'un d'entre eux est un mod\u00e8le de d\u00e9tection d'objets bas\u00e9 sur Faster R-CNN. Le mod\u00e8le est fourni sur le site de Tensorflow<a href=\"https:\/\/github.com\/tensorflow\/models\/tree\/master\/research\/object_detection\" target=\"_blank\" rel=\"noopener\">\u00a0Github<\/a>\u00a0avec un tutoriel. La page<a href=\"https:\/\/github.com\/tensorflow\/models\/blob\/master\/research\/object_detection\/g3doc\/running_pets.md\" target=\"_blank\" rel=\"noopener\">\u00a0tutoriel<\/a>\u00a0montre les \u00e9tapes pour r\u00e9-entra\u00eener le mod\u00e8le (avec l'apprentissage par transfert) et le d\u00e9ployer sur Google ML Engine.<\/p>\n<h3><strong><span style=\"color: #ff0066;\">Niveau 3 - Cr\u00e9ez votre propre mod\u00e8le \u00e0 partir de z\u00e9ro<\/span><\/strong><\/h3>\n<p>Si vous avez l'\u00e2me d'un chercheur ou si vous avez un probl\u00e8me de vision par ordinateur tr\u00e8s sp\u00e9cifique, vous pouvez cr\u00e9er votre propre mod\u00e8le \u00e0 partir de rien. Dans ce cas, trois options s'offrent \u00e0 vous :<\/p>\n<ul>\n<li><strong>Construire un mod\u00e8le de classification d'images avec des CNN<\/strong><\/li>\n<\/ul>\n<p>La solution la plus simple pour la reconnaissance des produits est la classification des images \u00e0 l'aide d'une architecture de r\u00e9seau neuronal convolutif. Ces mod\u00e8les prennent une image en entr\u00e9e et produisent une \u00e9tiquette indiquant l'objet. Ils ne doivent donc \u00eatre utilis\u00e9s que lorsque vos images ne contiennent qu'un seul objet \u00e0 d\u00e9tecter. Toutefois, l'utilisation d'un mod\u00e8le de classification d'images pour la d\u00e9tection d'objets risque d'\u00eatre peu performante, simplement en raison du bruit autour de l'objet dans l'image. Les mod\u00e8les de classification d'images sont con\u00e7us pour extraire des caract\u00e9ristiques de l'ensemble de l'image et classer l'image dans son ensemble. Le probl\u00e8me est que deux images diff\u00e9rentes, par exemple une image d'une pi\u00e8ce et une image d'une rue, contenant toutes deux l'objet recherch\u00e9, peuvent avoir la m\u00eame \u00e9tiquette. Cela rend la t\u00e2che de classification difficile. Voici quelques exemples<a href=\"https:\/\/www.tensorflow.org\/tutorials\/estimators\/cnn\" target=\"_blank\" rel=\"noopener\">\u00a0deux<\/a><a href=\"https:\/\/medium.com\/@mroman09\/building-a-convolutional-neural-network-to-classify-images-in-fashion-mnist-57589b94898e\" target=\"_blank\" rel=\"noopener\">\u00a0tutoriels<\/a>\u00a0sur la fa\u00e7on de construire des CNN \u00e0 partir de z\u00e9ro.<\/p>\n<ul>\n<li><strong>Construire un mod\u00e8le de d\u00e9tection d'objets<\/strong><\/li>\n<\/ul>\n<p>Comme nous l'avons d\u00e9j\u00e0 dit, les mod\u00e8les de d\u00e9tection d'objets sont apparus r\u00e9cemment gr\u00e2ce \u00e0 la recherche sur l'apprentissage profond. L'architecture Faster R-CNN a \u00e9t\u00e9 introduite fin 2015 en tant qu'it\u00e9ration de l'architecture plus ancienne Fast R-CNN. Elle produit :<\/p>\n<p>a) une liste de bo\u00eetes de d\u00e9limitation<\/p>\n<p>b) une \u00e9tiquette attribu\u00e9e \u00e0 chaque bo\u00eete de d\u00e9limitation<\/p>\n<p>c) une probabilit\u00e9 pour chaque \u00e9tiquette et chaque bo\u00eete englobante<\/p>\n<p>Un CNN pr\u00e9-entra\u00een\u00e9 est d'abord appliqu\u00e9 \u00e0 l'image, cr\u00e9ant ainsi une carte de caract\u00e9ristiques. Ces caract\u00e9ristiques sont ensuite transmises \u00e0 un RPN pour trouver des r\u00e9gions candidates (bo\u00eetes englobantes) qui contiennent des objets pertinents. La derni\u00e8re \u00e9tape consiste \u00e0 utiliser les caract\u00e9ristiques calcul\u00e9es par le CNN et les bo\u00eetes englobantes pour classer le contenu des bo\u00eetes englobantes et ajuster leurs coordonn\u00e9es (afin qu'elles correspondent mieux \u00e0 l'objet). Cette op\u00e9ration est r\u00e9alis\u00e9e par le module RCNN. La figure ci-dessous illustre l'architecture :<\/p>\n<p><img decoding=\"async\" class=\"lazyload wp-image-750 aligncenter\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27752%27%20height%3D%27178%27%20viewBox%3D%270%200%20752%20178%27%3E%3Crect%20width%3D%27752%27%20height%3D%27178%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"http:\/\/briqahg.cluster028.hosting.ovh.net\/wp\/wp-content\/uploads\/2019\/10\/RPN-300x71.png\" alt=\"\" width=\"752\" height=\"178\" \/><\/p>\n<p>Vous trouverez plus de d\u00e9tails dans le pr\u00e9sent document.<a href=\"https:\/\/tryolabs.com\/blog\/2018\/01\/18\/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection\/\" target=\"_blank\" rel=\"noopener\">\u00a0tutoriel<\/a>, et des travaux en code source libre sur le sujet sont disponibles<a href=\"https:\/\/github.com\/tryolabs\/luminoth\/tree\/master\/luminoth\/models\/fasterrcnn\" target=\"_blank\" rel=\"noopener\">\u00a0ici<\/a>.<\/p>\n<ul>\n<li><strong>Construire un mod\u00e8le hybride utilisant des architectures de d\u00e9tection d'objets et des CNNs<\/strong><\/li>\n<\/ul>\n<p>Si vous souhaitez am\u00e9liorer vos performances, vous pouvez envisager l'approche hybride. Il est possible qu'une approche de d\u00e9tection d'objets aboutisse \u00e0 une mauvaise classification (l'objet est bien d\u00e9tect\u00e9 mais la mauvaise \u00e9tiquette est pr\u00e9dite). Dans ce cas, vous pouvez d'abord entra\u00eener un mod\u00e8le de d\u00e9tection d'objets sur votre ensemble dataset, avec une seule \u00e9tiquette (\"objet\" par exemple), puis recadrer vos images sur la base des coordonn\u00e9es des bo\u00eetes englobantes. Vous obtiendrez ainsi un ensemble d'images contenant uniquement l'objet pertinent d\u00e9tect\u00e9 dans les images d'origine. Vous pouvez ensuite utiliser cet ensemble comme ensemble d'entra\u00eenement pour la classification d'images par CNN.<\/p>\n<h3><strong><span style=\"color: #ff0066;\">Extension - Apprentissage automatique de la machine<\/span><\/strong><\/h3>\n<p>Aujourd'hui, nous pouvons observer le d\u00e9veloppement de nouvelles initiatives visant \u00e0 rendre le processus de cr\u00e9ation et de personnalisation de votre propre mod\u00e8le accessible \u00e0 tous, m\u00eame aux personnes n'ayant pas de connaissances techniques. L'objectif est qu'au lieu d'utiliser des mod\u00e8les pr\u00eats \u00e0 l'emploi (comme le niveau 1), vous puissiez former votre propre mod\u00e8le sans avoir besoin de poss\u00e9der les connaissances sous-jacentes.<\/p>\n<p><strong>Comment cela fonctionne-t-il ?<\/strong><\/p>\n<p>La solution consiste \u00e0 automatiser la cr\u00e9ation du mod\u00e8le de classification des images ou du mod\u00e8le de d\u00e9tection des objets. Il vous suffit de fournir un ensemble data \u00e9tiquet\u00e9 avec vos images, puis de les envoyer \u00e0 la solution. Ce data sera ing\u00e9r\u00e9 afin d'entra\u00eener un mod\u00e8le de vision par ordinateur (niveau 2 ou niveau 3). Il en r\u00e9sultera un mod\u00e8le entra\u00een\u00e9, parfois m\u00eame une API, que vous pourrez utiliser pour pr\u00e9dire les \u00e9tiquettes et localiser les objets sur de nouvelles images. Le mod\u00e8le s'optimise de lui-m\u00eame, vous n'avez donc pas besoin de savoir comment l'impl\u00e9menter et comment le param\u00e9trer.<\/p>\n<p><strong>Quelles sont les solutions ?<\/strong><\/p>\n<p>Deux acteurs principaux interviennent dans ce domaine et ont mis au point des outils qui sont encore en version b\u00eata \u00e0 l'heure actuelle.<\/p>\n<ul>\n<li>Tout d'abord, nous avons Google et son composant Google Cloud AutoML de sa suite de plateformes Cloud (<a href=\"https:\/\/cloud.google.com\/automl\/\" target=\"_blank\" rel=\"noopener\">lien ici<\/a>). Cloud AutoML n'est pas seulement con\u00e7u pour les probl\u00e8mes de vision par ordinateur, mais il peut \u00e9galement \u00eatre utile pour toutes les applications d'apprentissage automatique, ainsi que pour le traitement du langage naturel et la traduction.<\/li>\n<li>Deuxi\u00e8mement, nous avons l'initiative open source AutoKeras (<a href=\"https:\/\/autokeras.com\/start\/\" target=\"_blank\" rel=\"noopener\">lien ici<\/a>). Il est bas\u00e9 sur Keras, et repose sur la recherche automatique de l'architecture et des hyperparam\u00e8tres des mod\u00e8les d'apprentissage profond.<\/li>\n<\/ul>\n<p><em>Article co-\u00e9crit par Matthieu Montaigu et Kasra Mansouri, scientifiques du Data au Artefact.<\/em><\/p>\n<p><strong>Vous souhaitez en savoir plus sur la pr\u00e9vision des ventes gr\u00e2ce \u00e0 des mod\u00e8les de reconnaissance de produits sur mesure ? Nos experts sont \u00e0 votre disposition pour r\u00e9pondre \u00e0 vos questions !\u00a0<\/strong><\/p>\n<\/div><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"<p>Imaginez que vous \u00eates le directeur d'une nouvelle start-up de haute technologie, qui cherche \u00e0 vendre un tout nouveau produit (un nouveau dispositif IoT, disons) sur le march\u00e9. Vous avez particip\u00e9 \u00e0 de nombreuses conf\u00e9rences, expositions et d\u00e9monstrations afin de communiquer \u00e0 l'avance sur votre produit et de le faire conna\u00eetre. L'impact direct que vous attendez est que les ventes de votre produit, une fois lanc\u00e9, soient suffisamment \u00e9lev\u00e9es pour atteindre vos objectifs.<\/p>","protected":false},"featured_media":746,"parent":0,"template":"","meta":{"_acf_changed":false,"ep_exclude_from_search":false},"blog-category":[22035],"blog-language":[2991],"class_list":["post-745","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-data-ai-consulting","blog-language-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog\/745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/media\/746"}],"wp:attachment":[{"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/media?parent=745"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog-category?post=745"},{"taxonomy":"blog-language","embeddable":true,"href":"https:\/\/www.artefact.com\/fr\/wp-json\/wp\/v2\/blog-language?post=745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}