Stage chez Mars Digital Technologies. Comment nous avons appliqué le deep learning chez M&M's



Bonjour à tous!

Chaque année, environ 200 étudiants et diplômés rejoignent Mars en Russie en tant que stagiaires ou participants au programme de leadership. Dmitry Korzhimanov, a effectué un stage au hub informatique de Mars cet été. Dans notre blog, Dmitry parle d'un projet sur lequel il a travaillé lors d'un stage.


Un grand nombre d'entreprises proposent des stages pour les étudiants à partir de la troisième année. Alors, comme beaucoup de mes camarades de classe diplômés de la troisième année, je me suis mis à la recherche d'un stage pour l'été. Au mechmath de l'Université d'État de Moscou, les étudiants préfèrent l'informatique et la banque, ce qui n'est pas surprenant, compte tenu de la présence d'une quantité décente de problèmes mathématiques là et là. J'ai envisagé des stages dans différentes entreprises et choisi Mars, car j'étais intéressé par l'opportunité de travailler sur des projets informatiques en production réelle. De plus, Mars est une entreprise internationale, ce qui signifie que le travail était en avance dans une équipe du monde entier.

Après avoir réussi des tests techniques et verbaux, ainsi qu'un entretien avec un futur mentor, une offre m'a été envoyée et, voilà, je suis devenu stagiaire de l'équipe Next Generation Technologies. Ce département est composé de 5 personnes du monde entier et est principalement engagé dans l'introduction des technologies d'apprentissage automatique dans les différents cycles de production et de vente de l'entreprise.

Honnêtement, je ne suis pas un maître des algorithmes d'apprentissage automatique, et au moment du stage, je n'avais pas une compréhension complète de ce que je ferais et comment je mettrais en œuvre des projets. Oui, j'avais une bonne formation en mathématiques et je savais même ce qu'était Random Forest, mais c'est là que ma connaissance s'est terminée. Entre autres choses, sur Mars, il existe un grand nombre de tâches liées à la vision par ordinateur, et notre équipe les résout avec succès. Il s'est avéré que pendant les 2 premières semaines du stage, j'ai compris comment les réseaux de neurones sont organisés, ce qu'est OpenCV, quelles métriques existent, comment travailler avec PyTorch et TensorFlow, et bien d'autres choses encore. Ma tête battait son plein à la fin de chaque journée, car les informations devaient être absorbées en grande quantité, et les idées de certains algorithmes étaient assez banales. Heureusement, il existe actuellement de nombreuses ressources vraiment utiles telles que Neurohive, Medium et le même Habr (j'exprime ma profonde gratitude à tous ceux qui écrivent des articles sur le sujet de l'apprentissage automatique ici, sans vous, l'immersion dans le sujet serait une tâche beaucoup plus difficile). Grâce à ces ressources, vous pouvez étudier un sujet particulier à une vitesse assez élevée. Coursera, sur lequel je continue de regarder des conférences, ne fait pas exception.

Après avoir exploré certaines des bases fondamentales de l'apprentissage en profondeur et maîtrisé un peu, on m'a proposé de participer au projet. Nous avons dû mettre en œuvre un programme qui mesure les objets sur une photo. Bien sûr, la question se pose: pourquoi la société FMCG en a-t-elle besoin? Cependant, la réponse est assez simple: maintenir des statistiques sur la taille des matières premières et des produits dans l'usine. Par exemple, Mars produit des M&M, et je pense que beaucoup ont essayé des M&M avec des arachides. Cependant, pour que chaque bonbon ne soit ni trop grand ni trop petit, les arachides doivent également être d'une certaine taille.

Comme vous le savez, dans le monde il n'y a rien d'idéal et les fêtes arrivent dans l'usine de qualité complètement différente. Par conséquent, une personne spéciale doit manuellement (!) Faire une sélection à partir d'un lot de noix et compiler des statistiques à leur sujet. Naturellement, à un moment donné, l'entreprise a réalisé que le processus était plutôt inefficace et qu'il serait bien de l'automatiser. En fait, la tâche est assez simple et tout ce qui est nécessaire est d'apprendre au modèle à trouver des écrous ou d'autres objets, par exemple, sur une feuille A4, et également un point de repère de taille connue imprimé dessus, par lequel les pixels iront en unités réelles. Cela semble assez banal, mais en fait, des difficultés commencent généralement à apparaître. J'ai été chargé de m'engager dans la mise en œuvre de la partie relative à la reconnaissance de ce repère et à la traduction des pixels en millimètres.

Les grandes entreprises prêtent une grande attention au maintien de leur identité d'entreprise, qui a joué un rôle dans mon projet. Comme point de référence ou point de référence, qui sera imprimé sur papier dans les usines du monde entier, un cercle a été choisi avec la lettre «M» caractéristique de l'entreprise.

Pour résoudre mon problème, j'ai immédiatement commencé à chercher de bons exemples de mise en œuvre de réseaux de neurones convolutifs qui peuvent trouver rapidement et clairement des objets sur la photo. Après avoir examiné les différentes options, j'ai sélectionné l'une des implémentations R-CNN plus rapides et étudié ses capacités et son architecture. L'étape suivante a été de former le modèle; pour cela, une centaine de photographies ont été générées avec une localisation aléatoire d'un point de référence et, par conséquent, un carré qui le décrit. À ce stade, le package reportlab m'a beaucoup aidé. Il s'agit d'un ensemble d'outils conçus spécifiquement pour générer des documents avec une disposition personnalisée d'objets sur eux.

Pour l'augmentation, le paquet albumentations a été choisi, dont les capacités sont assez impressionnantes. Sur Github, vous pouvez en savoir plus à ce sujet, y compris une comparaison avec d'autres bibliothèques. J'ai essayé de rendre les transformations aussi diverses que possible afin qu'il n'y ait plus de soi-disant «boîtes noires». Virages, zoom, changement de contraste, ajout de bruit et autres techniques standard. Malheureusement, il y avait un problème avec l'outil Rotation, qui était nécessaire pour moi, car personne ne garantissait l'orientation correcte de la lettre M sur la photo, et le modèle devrait pouvoir reconnaître différentes options pour sa position.

Peu importe comment j'essaie de trouver l'erreur, la fonction du paquet albumentations a obstinément continué à effectuer des conversions de boîte de délimitation incorrectes, la déplaçant dans la mauvaise clé. En conséquence, j'ai décidé d'utiliser le package imgaug classique, avec lequel je n'ai eu aucun problème.

Ayant formé le réseau en plusieurs époques, je me suis intéressé au résultat que le modèle produira sur des exemples réels. Après avoir imprimé une feuille de papier avec un point de référence dessus et pris des photos, j'ai commencé à tester le réseau neuronal. Et oui, elle a vraiment appris à trouver ce dont elle avait besoin, mais elle l'a fait loin d'être parfait. Ces limites que le réseau a montré étaient trop imprécises pour une mesure d'objets de haute qualité, et c'est là que le processus plutôt désagréable d'ajustement des paramètres à la recherche de la configuration idéale a commencé. J'ai changé l'étape de formation, j'ai essayé de changer l'architecture du réseau, de la terminer, de modifier les paramètres d'augmentation, mais l'IoU moyen n'a pas dépassé 0,85.

Le résultat du Faster R-CNN



Hélas, mon inexpérience m'a joué un tour. N'étant pas préoccupé par la recherche d'outils plus simples, j'étais trop désireux d'expérimenter avec le réseau neuronal, mais peu importe comment j'essayais, cela ne donnait pas un résultat acceptable. Ce faisant, il s'est avéré que la production n'utilisait tout simplement pas d'imprimantes couleur et tous mes efforts semblaient vains. Mais alors, mon collègue m'a dit que vous pouvez utiliser le cercle noir habituel et la transformation de Hough du package OpenCV pour le détecter. Je pourrais utiliser la même solution simple pour la version initiale, cependant, je n'ai pas prêté l'attention voulue aux outils classiques de la vision par ordinateur. Ayant un peu joué avec les paramètres, j'ai finalement obtenu ce que je voulais et le problème a été résolu. L'étape suivante consiste à créer une API à l'aide du package Flask et à publier le programme sur le serveur Azure, mais c'est une tout autre histoire.

Résultat final avec transformation de Hough



En plus des tâches de vision par ordinateur, l'entreprise a des problèmes dans d'autres domaines de l'apprentissage automatique - du traitement des tweets pour surveiller la perception d'un produit, au développement de programmes qui aident les vétérinaires à traiter les animaux plus efficacement. Ce qui a été une agréable surprise pour moi, c'est la partie recherche du travail. Souvent, les tâches semblent très simples, mais on ne sait pas comment trouver leur solution de haute qualité. Pour ce faire, vous devez étudier des articles et des méthodes actuelles dans le domaine du Machine Learning. Par exemple, j'ai dû comprendre les méthodes bayésiennes d'apprentissage automatique, qui sont très populaires pour résoudre des problèmes médicaux. Grâce à cela, j'ai pu étudier des articles médicaux décrivant l'application de ces méthodes et aider l'équipe à choisir le bon vecteur de développement.

En ce moment, je termine mon stage. Depuis la rentrée, en septembre, je suis passé au travail à temps partiel, ce qui n'est pas un problème. De plus, l'entreprise a la possibilité de travailler à domicile et, comme il s'est avéré, cette pratique est assez courante ici. Maintenant, notre équipe termine le projet que j'ai décrit dans l'article et passe à un nouveau lié à la vision par ordinateur. Il y a vraiment beaucoup de tâches, et elles sont toutes complètement différentes, donc vous ne vous ennuierez pas.

Un stage chez Mars est maintenant ouvert, vous pouvez en savoir plus et postuler sur: site .

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


All Articles