Comment nous avons créé un service de recommandation pour la sĂ©lection de vĂȘtements sur les rĂ©seaux de neurones

image

Dans cet article, je veux parler de la façon dont nous avons créé un systĂšme de recherche de vĂȘtements similaires (plus prĂ©cisĂ©ment des vĂȘtements, des chaussures et des sacs) Ă  partir de photographies. Il s'agit, en termes commerciaux, d'un service de recommandation basĂ© sur des rĂ©seaux de neurones.

Comme la plupart des solutions informatiques modernes, nous pouvons comparer le dĂ©veloppement de notre systĂšme avec l'ensemble constructeur Lego, lorsque nous prenons beaucoup de petits dĂ©tails, des instructions et crĂ©ons un modĂšle prĂȘt Ă  l'emploi Ă  partir de cela. Voici une telle instruction: quels dĂ©tails prendre et comment les appliquer pour que votre GPU puisse sĂ©lectionner des produits similaires sur une photo, vous trouverez dans cet article.

De quelles parties est construit notre systĂšme:

  • dĂ©tecteur et classificateur de vĂȘtements, chaussures et sacs sur images;
  • robot, indexeur ou module pour travailler avec des catalogues Ă©lectroniques de magasins;
  • module de recherche d'images similaires;
  • API JSON pour une interaction pratique avec n'importe quel appareil et service;
  • interface Web ou application mobile pour afficher les rĂ©sultats.

À la fin de l'article, nous dĂ©crirons tous les «rĂąteaux» sur lesquels nous avons marchĂ© pendant le dĂ©veloppement et des recommandations sur la façon de les neutraliser.

ÉnoncĂ© du problĂšme et crĂ©ation de la rubrique


La tĂąche et le principal cas d'utilisation du systĂšme semblent assez simples et clairs:

  • l'utilisateur soumet Ă  l'entrĂ©e (par exemple via une application mobile) une photographie dans laquelle se trouvent des vĂȘtements et / ou des sacs et / ou des chaussures;
  • le systĂšme dĂ©termine (dĂ©tecte) tous ces objets;
  • trouve Ă  chacun d'eux les produits les plus similaires (pertinents) dans de vĂ©ritables boutiques en ligne;
  • donne aux produits utilisateur la possibilitĂ© d'accĂ©der Ă  une page de produit spĂ©cifique pour achat.

En termes simples, l'objectif de notre systĂšme est de rĂ©pondre Ă  la fameuse question: "Et vous n'avez pas la mĂȘme chose, uniquement avec des boutons en nacre?"

Avant de vous prĂ©cipiter dans le pool de codage, de balisage et de formation des rĂ©seaux de neurones, vous devez dĂ©terminer assez clairement les catĂ©gories qui seront Ă  l'intĂ©rieur de votre systĂšme, c'est-Ă -dire les catĂ©gories que le rĂ©seau de neurones dĂ©tectera. Il est important de comprendre que plus la liste des catĂ©gories est large et dĂ©taillĂ©e, plus elle est universelle, car un grand nombre de petites catĂ©gories Ă©troites telles que la mini-robe, la robe midi, la maxi-robe peuvent toujours ĂȘtre combinĂ©es avec une seule touche dans une catĂ©gorie de type robe MAIS PAS vice versa. En d'autres termes, le rubricator doit ĂȘtre bien pensĂ© et compilĂ© au tout dĂ©but du projet, afin de ne pas refaire le mĂȘme travail 3 fois plus tard. Nous avons compilĂ© le rubricator, en prenant comme base plusieurs grands magasins, tels que Lamoda.ru, Amazon.com, et avons essayĂ© de le rendre aussi large que possible d'une part, et aussi polyvalent que possible, d'autre part, de sorte qu'il serait plus facile d'associer des catĂ©gories de dĂ©tecteurs Ă  diffĂ©rentes catĂ©gories Ă  l'avenir boutiques en ligne (je vais vous en dire plus sur la façon de crĂ©er ce groupe dans la section des robots et des indexeurs). Voici un exemple de ce qui s'est passĂ©.

image
Exemples de catégories

Dans notre catalogue, il n'y a actuellement que 205 catĂ©gories: vĂȘtements pour femmes, vĂȘtements pour hommes, chaussures pour femmes, chaussures pour hommes, sacs, vĂȘtements pour nouveau-nĂ©s. La version complĂšte de notre classificateur est disponible sur le lien .

Indexeur ou module pour travailler avec des catalogues électroniques de magasins


Afin de rechercher des produits similaires à l'avenir, nous devons créer une base étendue de ce que nous recherchons. D'aprÚs notre expérience, la qualité de la recherche d'images similaires dépend directement de la taille de la base de recherche, qui doit dépasser au moins 100 000 images, et de préférence 1 million d'images. Si vous ajoutez 1-2 petites boutiques en ligne à la base de données, vous n'obtiendrez probablement pas de résultats impressionnants simplement parce que dans 80% des cas, il n'y a rien de vraiment similaire à l'article souhaité dans votre catalogue.

Donc, pour créer une grande base de données d'images dont vous avez besoin pour traiter les catalogues de diverses boutiques en ligne, voici ce que ce processus comprend:

  • Vous devez d'abord trouver les flux XML des magasins en ligne, vous pouvez gĂ©nĂ©ralement les trouver soit librement disponibles sur Internet, soit en faisant la demande auprĂšs du magasin lui-mĂȘme, ou dans divers agrĂ©gateurs tels que Admitad;
  • le flux est traitĂ© (analysĂ©) par un programme spĂ©cial - un robot, qui tĂ©lĂ©charge toutes les images du flux, les place sur le disque dur (plus prĂ©cisĂ©ment, sur le stockage rĂ©seau auquel votre serveur est connectĂ©), Ă©crit toutes les mĂ©ta-informations sur les marchandises dans la base de donnĂ©es;
  • puis un autre processus est lancĂ© - l'indexeur, qui calcule des vecteurs binaires Ă  128 dimensions pour chaque image. Vous pouvez combiner le robot et l'indexeur en un seul module ou programme, mais nous avons historiquement dĂ©veloppĂ© qu'il s'agissait de processus diffĂ©rents. Cela est principalement dĂ» au fait qu'au dĂ©part, nous avons calculĂ© des descripteurs (hachages) pour chaque image distribuĂ©e sur un grand parc de machines, car il s'agissait d'un processus trĂšs gourmand en ressources. Si vous ne travaillez qu'avec des rĂ©seaux de neurones, alors la 1Ăšre machine avec un GPU vous suffit;
  • les vecteurs binaires sont Ă©crits dans la base de donnĂ©es, tous les processus sont terminĂ©s et le tour est jouĂ© - votre base de donnĂ©es de produits est prĂȘte pour une recherche ultĂ©rieure;
  • mais une petite astuce demeure: puisque tous les magasins ont des catalogues diffĂ©rents avec des catĂ©gories diffĂ©rentes Ă  l'intĂ©rieur, alors vous devez comparer les catĂ©gories de tous les flux contenus dans votre base de donnĂ©es avec les catĂ©gories du dĂ©tecteur (plus prĂ©cisĂ©ment, le classificateur) de marchandises, nous appelons cela le processus de cartographie. Il s'agit d'une routine manuelle, mais trĂšs utile, au cours de laquelle l'opĂ©rateur, Ă©ditant manuellement un fichier XML rĂ©gulier, compare les catĂ©gories de flux dans la base de donnĂ©es avec les catĂ©gories du dĂ©tecteur. Voici le rĂ©sultat:

image
Exemple de fichier de mappage de catégorie: catalog-classifier

Détection et classification


Afin de trouver quelque chose de similaire Ă  ce que notre Ɠil a trouvĂ© sur la photo, nous devons d'abord dĂ©tecter ce «quelque chose» (c'est-Ă -dire localiser et sĂ©lectionner l'objet). Nous avons parcouru un long chemin dans la crĂ©ation d'un dĂ©tecteur, Ă  partir de la formation de cascades OpenCV qui ne fonctionnaient pas du tout sur cette tĂąche, et se terminant par une technologie moderne pour dĂ©tecter et classifier R-FCN et le classificateur basĂ© sur le rĂ©seau neuronal ResNet .

En tant que données utilisées pour la formation et les tests (les soi-disant échantillons de formation et de test), nous avons pris toutes sortes d'images sur Internet:

  • recherche sur les images Google / Yandex;
  • ensembles de donnĂ©es balisĂ©s par des tiers;
  • rĂ©seaux sociaux;
  • sites de magazines de mode;
  • Boutiques Internet de vĂȘtements, chaussures, sacs.

Le balisage a été effectué à l'aide d'un outil samopisny, le résultat du balisage a été des ensembles d'images et des fichiers * .seg, qui stockent les coordonnées des objets et les étiquettes de classe pour eux. En moyenne, de 100 à 200 images ont été étiquetées pour chaque catégorie, le nombre total d'images dans 205 classes était de 65 000.

Une fois que les Ă©chantillons de formation et de test sont prĂȘts, nous avons fait une double vĂ©rification du balisage, en donnant toutes les images Ă  un autre opĂ©rateur. Cela nous a permis de filtrer un grand nombre d'erreurs qui affectent fortement la qualitĂ© de la formation du rĂ©seau neuronal, c'est-Ă -dire le dĂ©tecteur et le classificateur. Ensuite, nous commençons Ă  former le rĂ©seau neuronal Ă  l'aide d'outils standard et «dĂ©collons» le prochain instantanĂ© du rĂ©seau neuronal «dans la chaleur du jour» dans quelques jours. En moyenne, le temps de formation du dĂ©tecteur et classificateur sur le volume de donnĂ©es de 65 000 images sur un GPU Titan X est d'environ 3 jours.

Un rĂ©seau neuronal prĂȘt Ă  l'emploi doit en quelque sorte ĂȘtre vĂ©rifiĂ© pour la qualitĂ©, c'est-Ă -dire pour Ă©valuer si la version actuelle du rĂ©seau est devenue meilleure que la prĂ©cĂ©dente et de combien. Comment nous l'avons fait:

  • l'Ă©chantillon de test comprenait 12 000 images et Ă©tait disposĂ© exactement de la mĂȘme maniĂšre que la formation;
  • nous avons Ă©crit un petit outil qui a exĂ©cutĂ© l'Ă©chantillon de test complet Ă  travers le dĂ©tecteur et compilĂ© un tableau de ce type (la version complĂšte du tableau est disponible ici );
  • ce tableau est ajoutĂ© Ă  Excel dans un nouvel onglet et comparĂ© au prĂ©cĂ©dent manuellement ou Ă  l'aide des formules Excel intĂ©grĂ©es;
  • Ă  la sortie, nous obtenons les indicateurs gĂ©nĂ©raux du dĂ©tecteur et classificateur TPR / FPR dans tout le systĂšme dans et pour chaque catĂ©gorie sĂ©parĂ©ment.

image
Exemple de tableau de rapport sur la qualité du détecteur et classificateur

Module de recherche d'images similaires


AprÚs avoir détecté des articles de garde-robe sur la photo, nous démarrons le moteur de recherche d'images similaires, voici comment cela fonctionne:

  • pour tous les fragments d'image dĂ©coupĂ©s (biens dĂ©tectĂ©s), les vecteurs de caractĂ©ristiques binaires du rĂ©seau neuronal 128 bits sont calculĂ©s en forme et en couleur (d'oĂč ils viennent, voir ci-dessous);
  • les mĂȘmes vecteurs calculĂ©s plus tĂŽt au stade de l'indexation pour toutes les images de marchandises stockĂ©es dans la base de donnĂ©es sont dĂ©jĂ  chargĂ©s dans la mĂ©moire RAM de l'ordinateur (car pour rechercher des similaires, il sera nĂ©cessaire de faire un grand nombre de recherches et de comparaisons par paires, nous avons chargĂ© la base de donnĂ©es entiĂšre immĂ©diatement en mĂ©moire, ce qui nous a permis d'augmenter la vitesse de recherche est des dizaines de fois, tandis que la base d'environ 100 000 produits ne tient pas plus de 2 Ă  3 Go de RAM);
  • les coefficients de recherche pour cette catĂ©gorie proviennent de l'interface ou de propriĂ©tĂ©s codĂ©es en dur, par exemple, dans la catĂ©gorie «robe», nous recherchons plus en couleur qu'en forme (par exemple, recherche de forme en 8 Ă  2 couleurs), et dans la catĂ©gorie «chaussures Ă  talons hauts» nous regardons 1-to-1 form-color puisque la forme et la couleur sont Ă©galement importantes ici;
  • En outre, les vecteurs pour le recadrage (fragments) de l'image d'entrĂ©e sont comparĂ©s par paires avec l'image de la base de donnĂ©es, en tenant compte des coefficients (la distance de Hamming entre les vecteurs est comparĂ©e);
  • en consĂ©quence, un tableau de produits similaires Ă  partir de la base de donnĂ©es est formĂ© pour chaque fragment de produit coupĂ©, et un poids est attribuĂ© Ă  chaque produit (selon une formule simple, en tenant compte de la normalisation, de sorte que tous les poids se situent dans la plage de 0 Ă  1) pour la possibilitĂ© de sortie vers l'interface, ainsi que pour d'autres tri;
  • un tableau de produits similaires est affichĂ© dans l'interface via le web-JSON-API.

Les réseaux de neurones pour la formation de vecteurs de réseau de neurones en forme et en couleur sont formés comme suit.

  1. Pour former le réseau neuronal en forme, nous prenons toutes les images étiquetées, découpons les fragments selon le balisage et les répartissons dans des dossiers selon la classe: c'est-à-dire tous les pulls dans un dossier, tous les T-shirts dans un autre et toutes les chaussures à talons hauts dans le troisiÚme, etc. d. Ensuite, nous formons un classificateur ordinaire basé sur cet échantillon. Ainsi, nous «expliquons» en quelque sorte au réseau neuronal notre compréhension de la forme de l'objet.
  2. Pour former le réseau neuronal en couleur, nous prenons toutes les images balisées, découpons les fragments selon le balisage et les répartissons dans des dossiers selon la couleur: c'est-à-dire que nous mettons tous les T-shirts, chaussures, sacs, etc. dans le dossier «vert». couleur verte (par conséquent, tous les objets de couleur verte s'accumulent généralement dans un dossier), dans le dossier «dépouillé», nous mettons toutes les choses dans une bande, et dans le dossier «rouge-blanc» toutes les choses rouge-blanc. Ensuite, nous formons un classifieur distinct pour ces classes, comme s'il «expliquait» au réseau neuronal sa compréhension de la couleur d'une chose.

image
Un exemple de marquage d'images par couleur pour obtenir des vecteurs de réseaux neuronaux de signes par couleur.

Fait intĂ©ressant, une telle technologie fonctionne bien mĂȘme sur des arriĂšre-plans complexes, c'est-Ă -dire lorsque des fragments de choses sont dĂ©coupĂ©s non pas clairement le long du contour (masque), mais le long d'un cadre rectangulaire, que le marqueur a dĂ©fini.

La recherche de similaires est basĂ©e sur l'extraction de vecteurs de caractĂ©ristiques binaires du rĂ©seau neuronal de cette maniĂšre: la sortie de l'avant-derniĂšre couche est prise, compressĂ©e, normalisĂ©e et binarisĂ©e. Dans notre travail, nous avons compressĂ© en un vecteur 128 bits. Vous pouvez le faire un peu diffĂ©remment, par exemple, comme dĂ©crit dans l'article de Yahoo « Deep Learning of Binary Hash Codes for Fast Image Retrieval », mais l'essence de tous les algorithmes est Ă  peu prĂšs la mĂȘme - des images similaires Ă  l'image sont recherchĂ©es en comparant les propriĂ©tĂ©s que le rĂ©seau neuronal opĂšre au sein des couches.

Initialement, en tant que technologie de recherche d'images similaires, nous avons utilisé des hachages ou des descripteurs d'images basés (calculés plus précisément) sur certains algorithmes mathématiques, tels que l'opérateur Sobel (ou hachage de contour), l'algorithme SIFT (ou points singuliers), le traçage d'un histogramme ou la comparaison du nombre d'angles dans une image . Cette technologie a fonctionné et a donné des résultats plus ou moins sains, mais les hachages ne sont en rien comparables à la technologie de recherche d'images similaires en fonction des propriétés attribuées par un réseau de neurones. Si vous essayez d'expliquer la différence en 2 mots, l'algorithme de comparaison d'images basé sur le hachage est une «calculatrice» qui est configurée pour comparer les images à l'aide d'une formule et qui fonctionne en continu. Une comparaison utilisant des fonctionnalités d'un réseau de neurones est «l'intelligence artificielle», formée par une personne pour résoudre un problÚme spécifique d'une certaine maniÚre. Vous pouvez donner un exemple aussi grossier: si vous recherchez des pulls en hash à rayures noires et blanches, vous trouverez probablement toutes les choses en noir et blanc comme des similaires. Et si vous recherchez en utilisant un réseau de neurones, alors:

  • dans les premiers endroits, vous trouverez tous les pulls Ă  rayures noires et blanches,
  • puis tous les pulls en noir et blanc
  • puis tous les pulls Ă  rayures.

API JSON pour une interaction pratique avec n'importe quel appareil et service


Nous avons créé une API WEB-JSON simple et pratique pour communiquer notre systÚme avec tous les appareils et systÚmes, ce qui, bien sûr, n'est pas une innovation, mais plutÎt une bonne norme de développement solide.

Interface Web ou application mobile pour afficher les résultats


Pour vérifier visuellement les résultats, ainsi que pour démontrer le systÚme aux clients, nous avons développé des interfaces simples:


Erreurs commises dans le projet


  • Dans un premier temps, il est nĂ©cessaire de dĂ©finir plus clairement la tĂąche, et il s'agit, en fonction de la tĂąche, de sĂ©lectionner des photographies Ă  mettre en page. Si vous devez rechercher des photos UGC (User Generated Content) - il s'agit d'un cas et d'exemples de mise en page. Si vous avez besoin d'une recherche de photos Ă  partir de magazines sur papier glacĂ©, il s'agit d'un cas diffĂ©rent, et si vous avez besoin d'une recherche de photos oĂč un grand objet est situĂ© sur un fond blanc, il s'agit d'une histoire distincte et d'un Ă©chantillon complĂštement diffĂ©rent. Nous avons tout mĂ©langĂ© en un seul tas, ce qui a affectĂ© la qualitĂ© du dĂ©tecteur et du classificateur.
  • Sur les photos, vous devez toujours marquer TOUS les objets, au moins du fait que cela convient au moins Ă  votre tĂąche, par exemple, lorsque vous choisissez une sĂ©lection de garde-robe similaire, vous devez immĂ©diatement marquer tous les accessoires (perles, lunettes, bracelets, etc.), la tĂȘte chapeaux, etc. Parce que maintenant que nous avons un Ă©norme ensemble de formation, afin d'ajouter une autre catĂ©gorie, nous devons redistribuer TOUTES les photos, et c'est un travail trĂšs volumineux.
  • La dĂ©tection est probablement mieux effectuĂ©e avec un rĂ©seau de masques, la transition vers Mask-CNN et une solution moderne basĂ©e sur Detectron est l'un des domaines du dĂ©veloppement du systĂšme.
  • Ce serait bien de dĂ©cider immĂ©diatement comment vous allez dĂ©terminer la qualitĂ© de la sĂ©lection d'images similaires - il y a 2 mĂ©thodes: «à l'Ɠil» et c'est la mĂ©thode la plus simple et la moins chĂšre et la 2e - la mĂ©thode «scientifique», lorsque vous collectez des donnĂ©es auprĂšs d '«experts» (personnes, que je teste votre algorithme de recherche similaire) et sur la base de ces donnĂ©es, formez un Ă©chantillon de test et un catalogue spĂ©cifiquement pour la recherche d'images similaires. Cette mĂ©thode est bonne en thĂ©orie et semble assez convaincante (pour vous et pour les clients), mais en pratique, sa mise en Ɠuvre est difficile et assez coĂ»teuse.

Conclusion et plans de développement ultérieurs


Cette technologie est tout Ă  fait prĂȘte et utilisable, elle fonctionne maintenant chez l'un de nos clients dans la boutique en ligne en tant que service de recommandation. De plus, rĂ©cemment, nous avons commencĂ© Ă  dĂ©velopper un systĂšme similaire dans une autre industrie (c'est-Ă -dire que nous travaillons maintenant avec d'autres types de marchandises).

Des plans immédiats: le transfert du réseau à Mask-CNN, ainsi que le re-marquage et le re-marquage des images pour améliorer la qualité du détecteur et du classifieur.

En conclusion, je veux dire que selon nos sentiments, une technologie similaire et en gĂ©nĂ©ral les rĂ©seaux de neurones sont capables de rĂ©soudre jusqu'Ă  80% des tĂąches complexes et hautement intellectuelles que notre cerveau rencontre quotidiennement. La seule question est de savoir qui est le premier Ă  mettre en Ɠuvre une telle technologie et Ă  dĂ©charger une personne du travail de routine, lui laissant ainsi un espace de crĂ©ativitĂ© et de dĂ©veloppement, ce qui est, Ă  notre avis, le but le plus Ă©levĂ© de l'homme!

Les références


Source: https://habr.com/ru/post/fr438542/


All Articles