Comment et pourquoi avons-nous fait une reconnaissance historique dans Mail.ru Cloud



Avec l'avènement des appareils photo de haute qualité dans les téléphones mobiles, nous photographions de plus en plus souvent, filmant des vidéos des moments forts et importants de notre vie. Beaucoup d'entre nous ont des archives photographiques datant de dizaines d'années et des milliers de photographies, dans lesquelles il devient de plus en plus difficile de naviguer. Rappelez-vous combien de temps il a fallu souvent pour trouver la bonne photo il y a plusieurs années.

L'un des objectifs de Mail.ru Cloud est de fournir l'accès et la recherche les plus pratiques dans vos archives photo et vidéo. Pour ce faire, nous, l'équipe de vision industrielle de Mail.ru, avons créé et mis en œuvre des systèmes intelligents de traitement de photos: recherche par objets, scènes, visages, etc. Une autre technologie aussi frappante est la reconnaissance des vues. Et aujourd'hui, je vais vous expliquer comment nous avons résolu ce problème avec l'aide du Deep Learning.

Imaginez la situation: vous êtes parti en vacances et avez apporté un tas de photos. Et dans une conversation avec des amis, ils vous ont demandé de montrer comment vous avez visité un palais, un château, une pyramide, un temple, un lac, une cascade, une montagne, etc. Vous commencez à parcourir frénétiquement le dossier avec des photos, en essayant de trouver le bon. Très probablement, vous ne le trouvez pas parmi des centaines d'images, et dites que vous le montrerez plus tard.

Nous résolvons ce problème en regroupant les photos personnalisées dans des albums. Cela vous permet de trouver facilement les bonnes images en quelques clics. Nous avons maintenant des albums sur les visages, sur les objets et les scènes, ainsi que sur les attractions.

Les photos avec des points de repère sont importantes car elles affichent souvent des moments importants de notre vie (par exemple, les voyages). Il peut s'agir de photographies en arrière-plan d'une structure architecturale ou d'un coin de la nature vierge de l'homme. Par conséquent, nous devons trouver ces photos et donner aux utilisateurs un accès facile et rapide à elles.

Reconnaissance des fonctionnalités


Mais il y a une nuance: vous ne pouvez pas simplement prendre et former un modèle pour reconnaître les sites, il y a beaucoup de difficultés.

  • Premièrement, nous ne pouvons pas décrire clairement ce qu'est un «point de repère». Nous ne pouvons pas dire pourquoi un bâtiment est un point de repère, et se tenir à côté de lui ne l'est pas. Ce n'est pas un concept formalisé, ce qui complique la formulation du problème de reconnaissance.
  • Deuxièmement, les sites sont extrêmement divers. Il peut s'agir de bâtiments historiques ou culturels - temples, palais, châteaux. Ce peuvent être les monuments les plus divers. Il peut s'agir d'objets naturels - lacs, canyons, cascades. Et un modèle doit pouvoir trouver toutes ces attractions.
  • Troisièmement, il y a très peu d'images avec des vues, selon nos calculs, elles ne se trouvent que dans 1 à 3% des photos des utilisateurs. Par conséquent, nous ne pouvons pas nous permettre des erreurs de reconnaissance, car si nous montrons à une personne une photo sans point d'intérêt, elle sera immédiatement perceptible et provoquera la confusion et des réactions négatives. Ou, au contraire, nous avons montré à la personne une photo avec un point de repère à New York, et il n'était jamais allé en Amérique. Le modèle de reconnaissance doit donc avoir un FPR faible (taux de faux positifs).
  • Quatrièmement, environ 50% des utilisateurs, voire plus, désactivent le stockage des informations géographiques lors de la photographie. Nous devons en tenir compte et déterminer la place uniquement à partir de l'image. La plupart des services qui parviennent aujourd'hui à travailler avec des lieux d'intérêt le font grâce aux géodonnées. Nos exigences initiales étaient plus strictes.

Je vais montrer maintenant avec des exemples.

Voici des objets similaires, trois cathédrales gothiques françaises. La gauche est la cathédrale d'Amiens, au milieu de la cathédrale de Reims, à droite est Notre Dame de Paris.



Même une personne a besoin d'un certain temps pour les regarder et comprendre qu'il s'agit de cathédrales différentes, et la machine doit également être en mesure d'y faire face, et plus rapidement qu'une personne.

Et voici un exemple d'une autre difficulté: les trois photos sur la diapositive sont Notre Dame de Paris, prises sous des angles différents. Les photos se sont avérées très différentes, mais elles doivent toutes être reconnues et trouvées.



Les objets naturels sont complètement différents de ceux architecturaux. À gauche, Césarée en Israël, à droite, le parc anglais de Munich.



Dans ces photographies, il y a très peu de détails caractéristiques pour lesquels le modèle peut «s'accrocher».

Notre méthode


Notre méthode est entièrement basée sur des réseaux neuronaux convolutionnels profonds. En tant qu'approche de l'apprentissage, ils ont choisi ce que l'on appelle l'apprentissage curriculaire - l'apprentissage en plusieurs étapes. Afin de travailler plus efficacement à la fois en présence et en l'absence de géodonnées, nous avons fait une déduction spéciale (conclusion). Je vais vous parler plus en détail de chacune des étapes.

Datacet


Le carburant de l'apprentissage automatique est la donnée. Et tout d'abord, nous devions collecter un ensemble de données pour la formation des modèles.

Nous avons divisé le monde en 4 régions, chacune étant utilisée à différents stades de formation. Ensuite, des pays ont été pris dans chaque région, pour chaque pays une liste de villes a été compilée et une base de données de photographies de leurs attractions a été compilée. Des exemples de données sont présentés ci-dessous.



Tout d'abord, nous avons essayé de former notre modèle sur la base résultante. Les résultats étaient mauvais. Ils ont commencé à analyser, et il s'est avéré que les données sont très "sales". Chaque attraction avait une grande quantité de déchets. Que faire L'examen manuel de l'énorme quantité de données est coûteux, morne et peu intelligent. Par conséquent, nous avons effectué un nettoyage automatique de la base, au cours duquel le traitement manuel n'est utilisé qu'en une seule étape: pour chaque attraction, nous avons sélectionné manuellement 3-5 photographies de référence qui contiennent avec précision l'attraction souhaitée dans une perspective plus ou moins correcte. Cela se révèle assez rapidement, car le volume de ces données de référence est faible par rapport à l'ensemble de la base de données. Ensuite, un nettoyage automatique basé sur des réseaux de neurones convolutionnels profonds est déjà effectué.

De plus, j'utiliserai le terme «intégration», par lequel je comprendrai ce qui suit. Nous avons un réseau de neurones convolutionnels, nous l'avons formé pour la classification, coupé la dernière couche de classification, pris quelques images, traversé le réseau et reçu un vecteur numérique à la sortie. Je l'appellerai intégration.

Comme je l'ai dit, notre formation s'est déroulée en plusieurs étapes, correspondant à des parties de notre base de données. Par conséquent, nous prenons d'abord soit un réseau de neurones de l'étape précédente, soit un réseau d'initialisation.

Nous allons diffuser les photos des sites touristiques sur le réseau et obtenir plusieurs intégrations. Vous pouvez maintenant nettoyer la base. Nous prenons toutes les photos de l'ensemble de données pour cette attraction, et nous conduisons également chaque photo à travers le réseau. Nous obtenons un tas de plongements et pour chacun d'eux, nous considérons les distances par rapport à l'intégration des normes. Ensuite, nous calculons la distance moyenne, et si elle est supérieure à un certain seuil, qui est le paramètre de l'algorithme, nous considérons que ce n'est pas une attraction touristique. Si la distance moyenne est inférieure au seuil, alors nous laissons cette photo.



En conséquence, nous avons obtenu une base de données qui contient plus de 11 mille attractions de plus de 500 villes dans 70 pays du monde - plus de 2,3 millions de photos. Il est maintenant temps de se rappeler que la plupart des photos ne contiennent aucune attraction. Ces informations doivent être partagées d'une manière ou d'une autre avec nos modèles. Par conséquent, nous avons ajouté 900 000 photos sans vues à notre base de données et formé notre modèle sur l'ensemble de données résultant.

Pour mesurer la qualité de la formation, nous avons introduit un test hors ligne. Sur la base du fait que les vues ne se trouvent que dans environ 1 à 3% des photographies, nous avons compilé manuellement un ensemble de 290 photographies qui montrent des vues. Ce sont des photographies différentes et assez complexes avec un grand nombre d'objets pris sous des angles différents, de sorte que le test est aussi difficile que possible pour le modèle. Par le même principe, nous avons sélectionné 11 000 photographies sans vues, qui sont également assez complexes, et nous avons essayé de trouver des objets très similaires aux vues disponibles dans notre base de données.

Pour évaluer la qualité de la formation, nous mesurons la précision de notre modèle à partir de photographies avec et sans viseurs. Ce sont nos deux principales mesures.

Approches existantes


Il existe relativement peu d'informations sur la reconnaissance de la vue dans la littérature scientifique. La plupart des solutions sont basées sur des fonctionnalités locales. L'idée est que nous avons une certaine image de demande et une image de la base de données. Dans ces images, nous trouvons des panneaux locaux - des points clés et les comparons. Si le nombre de correspondances est suffisamment important, nous pensons avoir trouvé un point d'intérêt.

À ce jour, la meilleure méthode est la méthode proposée par Google, DELF (fonctionnalités locales approfondies), dans laquelle une comparaison des fonctionnalités locales est combinée avec un apprentissage en profondeur. En exécutant l'image d'entrée via le réseau de convolution, nous obtenons des signes DELF.



Comment est la reconnaissance des attractions? Nous avons une base de données de photos et une image d'entrée, et nous voulons comprendre s'il y a une attraction touristique ou non. Nous exécutons toutes les images via DELF, nous obtenons les signes correspondants pour la base et pour l'image d'entrée. Ensuite, nous effectuons une recherche en utilisant la méthode des voisins les plus proches et en sortie, nous obtenons des images candidates avec des signes. Nous comparons ces signes à l'aide d'une vérification géométrique: s'ils réussissent, nous pensons qu'il y a un point d'intérêt dans l'image.

Réseau de neurones convolutifs


Pour le Deep Learning, la pré-formation est cruciale. Par conséquent, nous avons pris la base des scènes et nous avons pré-formé notre réseau de neurones. Pourquoi Une scène est un objet complexe qui comprend un grand nombre d'autres objets. Et l'attraction est un cas particulier de la scène. Un modèle de pré-formation sur une telle base, nous pouvons donner au modèle une idée de certaines fonctionnalités de bas niveau qui peuvent ensuite être généralisées pour la reconnaissance réussie des attractions.

Comme modèle, nous avons utilisé un réseau de neurones de la famille des réseaux résiduels. Leur principale caractéristique est qu'ils utilisent un bloc résiduel, qui comprend une connexion de saut, qui permet au signal de passer librement sans entrer dans des couches avec des poids. Avec cette architecture, vous pouvez entraîner qualitativement des réseaux profonds et gérer l'effet du flou de dégradé, ce qui est très important lors de l'apprentissage.

Notre modèle est Wide ResNet 50-2, une modification de ResNet 50, dans laquelle le nombre de convolutions dans le bloc de goulot d'étranglement interne est doublé.



Le réseau est très efficace. Nous avons effectué des tests sur notre base de données de scènes et voici ce que nous avons obtenu:

Modèle
Top 1 err
Top 5 des erreurs
ResNet-50
46,1%
15,7%
ResNet-200
42,6%
12,9%
SE-ResNext-101
42%
12,1%
WRN-50-2 (rapide!)
41,8%
11,8%

Wide ResNet s'est avéré être presque deux fois plus rapide que le réseau ResNet 200, assez grand. Et la vitesse de fonctionnement est très importante pour le fonctionnement. Sur la base de la totalité de ces circonstances, nous avons pris Wide ResNet 50-2 comme notre principal réseau de neurones.

La formation


Pour former le réseau, nous avons besoin de perte (fonction de perte). Pour le sélectionner, nous avons décidé d'utiliser l'approche d'apprentissage métrique: un réseau de neurones est formé afin que les représentants de la même classe soient rassemblés dans un cluster. Dans le même temps, les clusters pour différentes classes doivent être aussi éloignés que possible. Pour les attractions, nous avons utilisé la perte centrale, qui rassemble des points de la même classe à un certain centre. Une caractéristique importante de cette approche est qu'elle ne nécessite pas d'échantillonnage négatif, ce qui dans les étapes ultérieures de la formation est une procédure assez difficile.



Permettez-moi de vous rappeler que nous avons n classes d'attractions et une autre classe de «pas d'attractions», la perte centrale n'est pas utilisée pour cela. Nous voulons dire qu'un point de repère est un seul et même objet, et qu'il y a une structure en lui, il est donc conseillé d'envisager un centre pour lui. Mais aucune attraction touristique ne peut être rien, et considérer le centre pour lui est déraisonnable.

Ensuite, nous avons tout rassemblé et obtenu un modèle de formation. Il se compose de trois parties principales:

  • Réseau de neurones convolutifs Wide ResNet 50-2, pré-formé sur la base de scènes;
  • Parties d’incorporation constituées d’une couche entièrement connectée et d’une couche normalisée par lots;
  • Un classificateur, qui est une couche entièrement connectée, suivi d'une paire de perte Softmax et de perte centrale.



Comme vous vous en souvenez, notre base est divisée en 4 parties par région du monde. Nous utilisons ces 4 parties dans le cadre du paradigme d'apprentissage du curriculum. À chaque étape, nous avons l'ensemble de données actuel, nous y ajoutons une autre partie du monde et nous obtenons un nouvel ensemble de données de formation.

Le modèle se compose de trois parties, et pour chacune d'elles, nous utilisons notre propre rythme d'apprentissage en formation. Cela est nécessaire pour que le réseau puisse non seulement apprendre les vues de la nouvelle partie de l'ensemble de données que nous avons ajouté, mais aussi qu'il n'oublie pas les données déjà apprises. Après de nombreuses expériences, cette approche s'est avérée la plus efficace.

Nous avons donc formé le modèle. Vous devez comprendre comment cela fonctionne. Utilisons la carte d'activation de classe pour voir quelle partie de l'image est la plus sensible à notre réseau neuronal. Dans l'image ci-dessous, dans la première ligne, les images d'entrée, et dans la seconde, elles sont superposées à la carte d'activation de classe de la grille, que nous avons formée à l'étape précédente.



La carte thermique montre à quelles parties de l'image le réseau accorde plus d'attention. De la carte d'activation de classe, on peut voir que notre réseau de neurones a réussi à apprendre le concept d'attraction.

Inférence


Maintenant, vous devez en quelque sorte utiliser ces connaissances pour obtenir le résultat. Puisque nous avons utilisé la perte de centre pour la formation, il semble tout à fait logique à l'inférence de calculer également le tserotoid pour les attractions.

Pour cela, nous prenons une partie des images du set d'entraînement pour une sorte d'attraction, par exemple pour le Bronze Horseman. Nous les exécutons à travers le réseau, obtenons des intégrations, une moyenne et obtenons un centroïde.



Mais la question se pose: combien de centroïdes pour une attraction est-il logique de calculer? Au début, la réponse semble claire et logique: un centroïde. Mais ce ne fut pas tout à fait le cas. Au début, nous avons également décidé de faire un centroïde et avons obtenu un assez bon résultat. Alors pourquoi avez-vous besoin de prendre quelques centroïdes?

Premièrement, nos données ne sont pas entièrement propres. Bien que nous ayons nettoyé l'ensemble de données, nous n'avons supprimé que les ordures. Et nous pourrions avoir des images qui ne pourraient pas être considérées comme des ordures, mais qui aggravent le résultat.

Par exemple, j'ai une classe emblématique du Palais d'hiver. Je veux lui compter un centroïde. Mais l'ensemble comprenait un certain nombre de photographies de la place du Palais et de l'arc du bâtiment de l'état-major. Si nous considérons le centroïde dans toutes les images, il se révélera pas trop stable. Il est nécessaire de regrouper en quelque sorte leurs plongements, qui sont obtenus à partir de la grille habituelle, de ne prendre que le centroïde responsable du Palais d'hiver et de calculer la moyenne en fonction de ces données.



Deuxièmement, les photographies peuvent être prises sous différents angles.

Je citerai le clocher de Belfort à Bruges comme illustration de ce comportement. Deux centroïdes sont comptés pour elle. Dans la rangée supérieure de l'image se trouvent les photos les plus proches du premier centroïde, et dans la deuxième rangée - celles qui sont plus proches du deuxième centroïde:



Le premier centroïde est responsable des photos rapprochées plus «intelligentes» prises depuis la place du marché de Bruges. Et le deuxième centroïde est responsable des photographies prises de loin, des rues adjacentes.

Il s'avère qu'en calculant plusieurs centroïdes par classe d'un point d'intérêt, nous pouvons afficher différents angles de ce point d'intérêt par déduction.

Alors, comment trouvons-nous ces ensembles pour calculer les centroïdes? Nous appliquons un regroupement hiérarchique aux ensembles de données pour chaque point d'intérêt - lien complet. Avec son aide, nous trouvons des clusters valides par lesquels nous calculerons les centroïdes. Par grappes valides, nous entendons celles qui, à la suite d'une grappe, contiennent au moins 50 photographies. Les clusters restants sont supprimés. En conséquence, il s'est avéré qu'environ 20% des vues ont plus d'un centroïde.

Maintenant inférence. Nous la calculons en deux étapes: d'abord, nous exécutons l'image d'entrée à travers notre réseau de neurones convolutionnels et obtenons l'intégration, puis en utilisant le produit scalaire, nous comparons l'intégration avec les centroïdes. Si les images contiennent des géodonnées, nous limitons la recherche aux centroïdes, qui se rapportent aux attractions situées dans un carré de 1 pour 1 km du lieu de prise de vue. Cela vous permet de rechercher plus précisément, de choisir un seuil inférieur pour une comparaison ultérieure. Si la distance obtenue est supérieure au seuil, qui est un paramètre de l'algorithme, alors on dit que sur la photo il y a un point d'intérêt avec la valeur maximale du produit scalaire. Si moins, ce n'est pas une attraction touristique.



Supposons que la photo contienne un point de repère. Si nous avons des géodonnées, nous les utilisons et affichons la réponse. S'il n'y a pas de géodonnées, nous effectuons une vérification supplémentaire. Lorsque nous avons nettoyé l'ensemble de données, nous avons créé un ensemble d'images de référence pour chaque classe d'attractions. Pour eux, nous pouvons compter les plongements, puis nous calculons la distance moyenne entre eux et l'incorporation de l'image de la demande. S'il dépasse un certain seuil, la vérification est réussie, nous incluons les métadonnées et affichons le résultat. Il est important de noter que nous pouvons faire une telle procédure pour plusieurs attractions qui ont été trouvées dans l'image.



Résultats des tests


Nous avons comparé notre modèle avec DELF, pour lequel nous avons pris les paramètres pour lesquels il a montré les meilleurs résultats sur notre test. Les résultats étaient presque les mêmes.

Modèle
Vues
Pas d'attractions
Notre
80%
99%
Delf
80,1%
99%

: ( 100 ), 87 % , . : 85,3 %. 46 %, — .

Tapez



85,3 %
87 %

46 %
13 %

/B- . 10 %, 3 %, 13 %.

DELF. GPU DELF 7 , 7 , 1 . CPU DELF . CPU 15 . , .

:


. .



, . «», «», «». , . , .



: , , . Instagram , , — .

Résumé


.

  1. . , . .
  2. deep metric learning, .
  3. curriculum learning — . . inference , .

, — . , , . - . !

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


All Articles