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?
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?
Réponses:
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:
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:
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:
la source
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:
Convertir une image en niveaux de gris
Faites que votre image soit nulle
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:
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.
Une requête d'image, par exemple, me trouver des images similaires à l'image de requête, est alors résolue comme suit:
la source
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
la source