Quel algorithme Google utilise-t-il pour son site "Recherche par image"?


45

Quelle est votre meilleure estimation du fonctionnement de Google Recherche d'images? Je peux télécharger une photo et rechercher des images similaires. Quel algorithme utilise-t-il pour identifier des images similaires?


Ils pourraient stocker l'histogramme de l'image. Cela fonctionne pour différentes échelles de la même image et de petites différences dues aux artefacts de compression ou autres.
Hélium

1
Les histogrammes ne capturent pas d'informations spatiales; vous obtiendrez de fausses correspondances.
Emre

Réponses:


29

Je ne sais pas quel algorithme Google utilise. Mais, comme vous voulez bien deviner, laissez-moi vous donner quelques idées sur la façon de construire un système similaire .

L'ensemble du champ traitant de la base de données de recherche par image est appelé CBIR (Content Based Image Retrieval) . L'idée est, d'une manière ou d'une autre, de construire une représentation d'image (pas nécessairement compréhensible par les humains) contenant les informations sur le contenu de l'image .

Deux approches de base existent:

  • récupération à l'aide de caractéristiques de bas niveau (locales): couleur, texture, forme à des parties spécifiques d'images (une image est une collection de descripteurs de caractéristiques locales )
  • approches sémantiques où une image est en quelque sorte représentée comme une collection d'objets et leurs relations

L’approche locale de bas niveau est très bien documentée. La meilleure approche actuelle extrait les caractéristiques locales (il existe un choix d'algorithme d'extraction de caractéristiques impliqué ici) et utilise leurs descripteurs locaux (encore une fois, le choix des descripteurs) pour comparer les images.

Dans les travaux plus récents, les descripteurs locaux sont d'abord regroupés, puis les groupes sont traités comme des mots visuels . La technique est alors très similaire à la recherche de documents Google, mais utilise des mots visuels au lieu de lettres.

Vous pouvez considérer les mots visuels comme des équivalents des racines de mots dans la langue: par exemple, les mots: travail, travail, travail appartiennent à la même racine de mots.

L'un des inconvénients de ce type de méthodes est qu'elles ne sont généralement pas performantes sur les images à faible texture.

J'ai déjà donné et vu beaucoup de réponses détaillant ces approches, je vais donc vous fournir des liens vers ces réponses:

  • CBIR: 1 , 2
  • extraction de caractéristiques / description: 1 , 2 , 3 , 4

Les approches sémantiques reposent généralement sur des représentations hiérarchiques de l’ensemble de l’image. Ces approches n'ont pas encore été perfectionnées, en particulier pour les types d'image généraux. L’application de ce type de techniques à des domaines spécifiques de l’image présente un certain succès.

Comme je suis actuellement au milieu de la recherche de ces approches, je ne peux tirer aucune conclusion. Cela dit, j’ai expliqué une idée générale derrière ces techniques dans cette réponse .

Encore une fois, brièvement: l’idée générale est de représenter une image avec une structure en forme d’arbre, où les feuilles contiennent les détails de l’image et des objets peuvent être trouvés dans les nœuds situés plus près de la racine de ces arbres. Ensuite, vous comparez les sous-arbres pour identifier les objets contenus dans différentes images.

Voici quelques références pour différentes représentations d'arbres. Je ne les ai pas tous lus, et certains utilisent ce type de représentation pour la segmentation au lieu de CBIR, mais les voici:


22

En plus de la réponse de Penelope, il existe deux approches: le hachage perceptuel et le modèle de sac de mots dont les fonctionnalités de base sont faciles à mettre en œuvre et sont donc agréables à jouer et à apprendre avant de s’aventurer sur des terres plus avancées.

Hachage perceptuel

Les algorithmes de hachage perceptuels visent à construire un hachage qui, contrairement à un hachage cryptographique, donnera des valeurs de hachage similaires ou presque similaires pour des images identiques légèrement déformées, par exemple par la mise à l'échelle ou la compression JPEG. Ils servent à la détection des doublons dans une collection d’images.

Dans sa forme la plus élémentaire, vous pouvez implémenter ceci comme suit:

  1. Convertir une image en niveaux de gris

  2. Faites que votre image soit nulle

  3. Réduisez votre image à la taille de la vignette, disons [32x32]
  4. Exécuter la transformation bidimensionnelle en cosinus discret
  5. Conservez la partie supérieure gauche [8 x 8], les composants les plus importants des basses fréquences
  6. Binarize le bloc, basé sur le signe des composants

Le résultat est un hachage résilient de 64 bits, car il est basé sur les composants basse fréquence de l'image. Une variante de ce thème consisterait à diviser chaque image en 64 sous-blocs et à comparer la moyenne globale de l'image à la moyenne locale du sous-bloc et à écrire un 1 ou un 0 en conséquence.

Le hachage perceptuel est implémenté par exemple par phash

Modèle de sac de mots

Le modèle de sac de mots vise à identifier sémantiquement une image, par exemple toutes les images contenant des chiens. Pour ce faire, il utilise certaines zones d’image dans le même esprit que celui qui permettrait de classer un document texte en fonction de l’occurrence de certains mots. On pourrait classer les mots, par exemple, "chien" et "chiens" et les stocker comme identifiant dans un fichier inversé où la catégorie "chien" désigne désormais tous les documents contenant "chien" ou "chiens".

Dans sa forme la plus simple, on peut le faire avec des images comme suit:

  1. Déployez les fonctionnalités dites SIFT, en utilisant par exemple l'excellente bibliothèque vlfeat , qui détectera les points de fonctionnalité SIFT et un descripteur SIFT par point. Ce descripteur est fondamentalement un modèle intelligemment construit du patch d’image entourant ce point caractéristique. Ces descripteurs sont vos mots bruts.
  2. Rassembler les descripteurs SIFT pour toutes les images pertinentes

Vous avez maintenant une énorme collection de descripteurs SIFT. Le problème, c’est que même à partir d’images presque identiques, il y aura un décalage entre les descripteurs. Vous souhaitez regrouper les éléments identiques plus ou moins comme traiter certains mots, comme "chien" et "chiens" comme identiques et vous devez compenser les erreurs. C'est là que le clustering entre en jeu.

  1. Prenez tous les descripteurs SIFT et regroupez-les, par exemple avec un algorithme tel que k-means. Cela trouvera un nombre prédéterminé de grappes avec des centroïdes dans vos données de descripteur. Ces centroïdes sont vos nouveaux mots visuels.
  2. Maintenant, par image et ses descripteurs trouvés originaux, vous pouvez regarder les grappes auxquelles ces descripteurs ont été assignés. A partir de là, vous savez quels centroïdes ou mots visuels "appartiennent" à votre image. Ces centroïdes ou mots visuels deviennent le nouveau descripteur sémantique de votre image pouvant être stocké dans un fichier inversé.

Une requête d'image, par exemple, me trouver des images similaires à l'image de requête, est alors résolue comme suit:

  1. Trouver les points SIFT et leurs descripteurs dans l'image de la requête
  2. Affectez les descripteurs de la requête aux centroïdes que vous avez précédemment trouvés lors de la phase d'inscription. Vous avez maintenant un ensemble de centroïdes ou de mots visuels se rapportant à votre image de requête.
  3. Faites correspondre les mots visuels de la requête aux mots visuels de votre fichier inversé et renvoyez les images correspondantes

1
Votre approche par sac de mots est fondamentalement à quoi mènent mes liens pour "l'approche locale" :) Bien que ce ne soit pas vraiment de nature sémantique: vous ne représenteriez jamais un seul chien avec une caractéristique, ni aussi facile à identifier différentes épices de chien comme des chiens. Mais le hachage perceptuel est agréable, je ne le savais pas. Les explications sont sympas. Qu'est-ce qui m'a fait réfléchir ... auriez-vous des suggestions quant à l'application de cette technique à une zone non rectangulaire? Ou peut-être donner quelques références à des articles, je pourrais en lire un peu et si la question a du sens, ouvrez-la en tant que question séparée.
Pénélope

1
@ Penelope J'ai lu dans un article, il y a des années, où les auteurs se séparaient en triangles arbitraires. Et il y a la transformation de trace qui a également été utilisée comme base pour un hachage perceptuel. Je reviendrai vers toi.
Maurits

Tout ce que je veux vous demander à ce sujet dépasse de loin le cadre de cette question, alors j’en ai ouvert une nouvelle . Plus d’informations / références sur la technique de base seraient également utiles, dans cette réponse ou celle-là. Dans l'attente :)
penelope

2

L'autre approche intéressante qui semble être négligée dans les réponses ci-dessus concerne les réseaux de neurones à convolution profonde. Il semble que Google l'utilise actuellement pour son moteur de recherche d'images et son service de traduction . Les CNN sont extrêmement puissants dans les tâches cognitives telles que la recherche de similarité. Il semble que CNN exécute une procédure similaire de Bag-of-worlds qui est intégrée dans ses couches de réseau. L’inconvénient de ces techniques est l’incapacité à désapprendre et l’obligation de disposer d’un vaste ensemble de données pour la formation et, bien sûr, des coûts de calcul élevés au stade de la formation.

Document suggéré à cet égard:

et implémentation de la récupération d’image pour l’apprentissage en profondeur open source (le dernier article): https://github.com/paucarre/tiefvision

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.