Une application de recherche d'images qui utilise l'API Vision et Cloud AutoML Vision

Cet article explique comment tirer parti de l'API Vision et d'AutoML Vision pour optimiser votre application de recherche et de classification d'images. Lorsqu'ils sont associés à d'autres services Google Cloud Platform (GCP), ces produits vous permettent de réaliser les opérations suivantes :

  • Rechercher des objets et des scènes détectés au sein d'images.
  • Classer les images en différentes catégories en fonction des thèmes d'image détectés
  • Utiliser des thèmes et des catégories d'image en tant qu'attributs de recherche

L'API Vision repose sur les modèles de deep learning de Google et propose des fonctionnalités avancées de vision par ordinateur, dont les suivantes :

  • Détection de thèmes
  • Reconnaissance faciale et détection de points de repère
  • Reconnaissance optique des caractères (OCR)
  • Détection de contenu explicite

Grâce à AutoML Vision, vous pouvez entraîner des modèles de haute qualité pour qu'ils effectuent une détection de thèmes personnalisés à l'aide de la technologie NAS (Neural Architecture Search) et de l'apprentissage par transfert avancé de Google. Ces technologies vous permettent d'exploiter vos données d'entraînement pour créer votre propre modèle de reconnaissance visuelle, avec un minimum de compétences nécessaires en machine learning.

Vous pouvez intégrer ces fonctionnalités à des applications nouvelles et existantes via une API REST.

Pour découvrir comment créer l'application décrite dans cet article, consultez la page Créer une application de recherche d'images à l'aide de l'API Vision et de Cloud AutoML Vision.

Autoriser la recherche d'images à l'aide de la détection de thèmes

La détection de thèmes est une fonctionnalité d'annotation d'image de l'API Vision et d'AutoML Vision. Elle permet de prédire les thèmes les plus appropriés pour décrire une image. Cette fonctionnalité identifie de vastes ensembles d'objets dans des milliers de catégories d'objets différentes, puis renvoie une annotation de thème ou les thèmes détectés au sein d'une image. Elle renvoie également les éléments suivants :

  • Identifiant du thème : ID d'entité opaque pour le thème, tel que "/m/0bt9lr".
  • Description du thème : description textuelle du thème, telle que "chien".
  • Score de confiance : nombre associé à chaque annotation de thème renvoyée, représentant l'évaluation faite par l'API Vision quant à la précision du thème. Le score de confiance varie de 0 (aucune confiance) à 1 (confiance très élevée).

Dans AutoML Vision, vous fournissez des ensembles de données avec thèmes afin d'entraîner des modèles qui détectent les thèmes personnalisés à partir des vôtres. En associant la détection de thèmes à un index de recherche, vous pouvez autoriser la recherche au sein d'images à l'aide de nouvelles méthodes. Le schéma suivant illustre cette approche :

détection de thèmes et index de recherche

L'architecture de cette solution implique les opérations suivantes :

  1. Un utilisateur importe une image d'une application cliente vers un bucket Cloud Storage.
  2. Lorsque le bucket reçoit une nouvelle image, Cloud Pub/Sub envoie une notification.
  3. La notification Cloud Pub/Sub contient les informations du nouveau fichier image. Le sujet Cloud Pub/Sub utilisé pour les notifications est configuré pour effectuer une distribution push au point de terminaison App Engine.
  4. Le backend App Engine est maintenant informé de l'existence du nouveau fichier. App Engine appelle l'API Vision depuis l'image importée pour la traiter et y ajouter des thèmes. Ces derniers sont également ajoutés à l'index de recherche.
  5. (Facultatif) App Engine ajoute les thèmes personnalisés détectés via AutoML Vision à l'index de recherche.
  6. (Facultatif) App Engine appelle AI Platform pour classer les images en catégories définies par l'utilisateur à l'aide des thèmes détectés. La catégorie est également ajoutée à l'index de recherche.
  7. Une recherche des thèmes d'images détectés via l'API Search d'App Engine est lancée. Cette API propose diverses fonctionnalités de recherche, telles que la recherche par mot clé et par attribut.

Effectuer une recherche par attribut à l'aide de thèmes

La recherche par attribut est un moyen d'exposer les thèmes de l'API Vision et d'AutoML Vision (appelés thèmes d'image dans cet article) dans une interface de recherche. Lorsque vous utilisez cette fonctionnalité, les thèmes d'image et leur nombre sont indiqués à côté des résultats de recherche en tant qu'attributs de recherche navigables. Après avoir effectué une recherche générale par mot clé en interrogeant divers champs d'index, les utilisateurs peuvent exploiter l'attribut de recherche pour affiner leurs résultats à l'aide d'images contenant des thèmes spécifiques.

L'interface de recherche détaille également le nombre de résultats contenus dans chaque thème affiné. La recherche par attribut est particulièrement efficace lorsque les résultats comprennent un grand nombre de thèmes courants.

Exemple de recherche par attribut

Lorsque vous recherchez des images à l'aide d'un mot clé simple, tel que "ville", les résultats de recherche contiennent des milliers d'images. Dans ce cas, vous devez ajouter des mots clés pour affiner vos résultats, mais vous ne savez peut-être pas lesquels utiliser. La recherche par attribut vous aide à les choisir en recueillant d'autres thèmes associés aux images trouvées à l'aide du mot clé "ville". Ces thèmes sont traités comme des attributs, et les attributs fréquents sont affichés dans une liste de candidats pour la sélection.

Par exemple, une recherche par attribut peut afficher la liste des dix thèmes principaux couramment associés aux images du résultat de la recherche. Cette liste vous permet de sélectionner des mots clés supplémentaires depuis la liste pré-remplie. La capture d'écran suivante décrit un exemple déployé.

recherche par attribut déployée

Cette capture d'écran vous montre comment les thèmes d'image sont affichés en tant qu'attributs de recherche. Lorsqu'un utilisateur effectue une recherche, les thèmes d'image détectés dans l'ensemble des documents correspondants sont indiqués à côté des résultats de recherche sous la forme d'un attribut de recherche cliquable. Dans cet exemple, l'attribut Image Label (Thème d'image) est affiché. Si vous sélectionnez un lien présent dans Image Label (Thème d'image), la requête de recherche est affinée et seules les images contenant le thème choisi, tel que "cityscape" (paysage urbain) ou "night" (nuit), sont renvoyées.

De plus, les thèmes d'image sont ajoutés à un champ d'index de document à l'aide de l'API Search d'App Engine. Cet exemple affiche également des catégories d'image prédéterminées sous forme de listes de mots clés supplémentaires. Il s'agit ici des attributs Mapped Category (Catégorie mappée) et Most Similar Category (Catégorie la plus similaire). La section suivante décrit comment mettre en œuvre cette fonctionnalité.

Classer les images à l'aide de thèmes

Vous souhaiterez peut-être parfois que votre application affiche directement les thèmes. Ou vous voudrez peut-être plutôt classer les images utilisées pour la détection de thèmes en catégories prédéterminées.

Par exemple, vous pouvez vouloir autoriser des utilisateurs à rechercher des images correspondant à des catégories prédéterminées telles que "nature" ou "paysage urbain", en plus de rechercher directement des thèmes d'image. Dans ce cas, vous pouvez exploiter les thèmes de diverses façons afin de déterminer la catégorie d'image la plus appropriée.

Pour activer ce scénario, vous pouvez utiliser l'API Vision et AutoML Vision :

  • La fonctionnalité de détection de thèmes de l'API Vision est idéale si l'API reconnaît déjà vos catégories et les renvoie sous forme de thèmes d'image. Elle est également utile si votre application traite des images qui abordent divers sujets pouvant bénéficier de la compréhension étendue de l'API Vision.

    Dans ces deux cas, vous pouvez utiliser les thèmes d'image renvoyés par l'API Vision afin de déterminer le contexte plus large d'une catégorie de différentes manières. Par exemple, des thèmes d'image tels que "pollution", "usine", "mise en décharge" et "iceberg" pourraient être utilisés pour déterminer une catégorie plus large, telle que "changement climatique". Pour en savoir plus, consultez la section Classer des images avec l'API Vision plus loin dans ce document.

  • AutoML Vision est idéal pour classer des images personnalisées comprenant des ensembles d'entraînement avec des thèmes fournis par l'utilisateur. La fonctionnalité de détection de thèmes personnalisés d'AutoML Vision renvoie les thèmes définis par l'utilisateur qui sont inclus dans l'ensemble d'entraînement. Ces thèmes vous permettent de créer des catégories d'image personnalisées.

    Si la fonctionnalité de détection de thèmes de l'API Vision renvoie les thèmes appropriés à votre tâche de catégorisation, nous vous recommandons d'entraîner un modèle d'image personnalisé à l'aide d'AutoML Vision. Pour en savoir plus, consultez la section Classer des images avec AutoML Vision ci-dessous.

Classer des images avec l'API Vision

L'API Vision détecte des objets issus de plusieurs milliers de catégories différentes, qu'elles soient spécifiques ou abstraites. Cette compréhension étendue peut servir à classer des images en catégories prédéterminées utiles pour votre application.

Pour ce faire, vous devez mettre en œuvre une méthode permettant d'associer les thèmes d'image détectés par l'API Vision à des catégories spécifiques. Les sections suivantes décrivent deux approches possibles :

  • Mappage d'un thème détecté à une catégorie prédéterminée
  • Identification d'une catégorie similaire à l'aide de vecteurs de mots

Dans les deux cas, les thèmes d'image de l'API Vision fournissent un contexte approprié permettant de classer les images.

Mapper des thèmes détectés à des catégories prédéterminées

Supposons que vous développez un site Web vendant des banques d'images. Votre interface utilisateur peut permettre aux visiteurs de rechercher ou de parcourir les images à l'aide de catégories prédéfinies telles que faune, nature et paysage urbain. Lorsque l'API Vision renvoie les mots "girafe", "éléphants" ou "savane" sous forme de thèmes d'image, ces images doivent automatiquement être placées dans la catégorie faune.

La fonctionnalité de détection de thèmes de l'API Vision renvoie de larges ensembles de catégories parmi les images, et non pas des scores associés à des catégories prédéterminées spécifiques. Pour mapper des thèmes à des catégories, une méthode simple consiste à mapper les thèmes de l'API Vision à des catégories spécifiques, chacune étant associée à un ou plusieurs thèmes détectés par cette API. (Dans le reste de l'article, cette méthode sera appelée mappage thème/catégorie fixe.) Dans ce schéma, les thèmes renvoyés par l'API Vision sont comparés à la liste de mots qui définit chaque catégorie et à l'image associée à la catégorie la plus adaptée (celle-ci étant déterminée par les scores de confiance du thème).

L'API Vision renvoie un ou plusieurs thèmes par image. Pour chaque image, les thèmes détectés sont comparés aux mots qui définissent une catégorie donnée. Lorsqu'il existe une ou plusieurs correspondances directes, le score de confiance de l'API Vision pour chaque thème est additionné, créant ainsi un score de confiance de catégorie pour chaque catégorie. Ce score est une représentation numérique qui décrit dans quelle mesure les mots définissant une catégorie prédéterminée correspondent aux thèmes renvoyés par l'API Vision pour une image donnée. La catégorie qui présente la valeur de confiance la plus élevée est choisie comme catégorie d'image et est ajoutée à l'index de recherche. En cas d'égalité, vous pouvez ajouter l'image aux catégories concernées ou définir une heuristique supplémentaire pour mapper de manière unique l'image à une catégorie.

Le schéma suivant illustre cette approche pour un petit ensemble de catégories prédéterminées.

mappage avec des catégories prédéterminées

Il est très utile de mapper les thèmes détectés à des catégories lorsque vous êtes sûr de pouvoir anticiper les thèmes d'image spécifiques associés à chaque catégorie. En d'autres termes, l'ensemble de mots qui définit plusieurs catégories prédéterminées est susceptible de contenir un pourcentage élevé de thèmes renvoyés. Par exemple, si les thèmes "chien", "chat" ou "oiseau" sont souvent détectés dans des images, il est facile de définir une catégorie prédéterminée pour "animaux" à l'aide de ces thèmes exacts. Lorsqu'une grande variété de thèmes est renvoyée pour des images, il devient plus difficile de déterminer comment les mapper à des catégories spécifiques. Dans l'exemple précédent, si le thème "cheval" est détecté, mais pas "chien", "chat" ni "oiseau", l'image n'est pas classée correctement, car "cheval" ne fait pas partie de l'ensemble de mots qui définit la catégorie "animaux".

Autre limitation : les thèmes d'image détectés peuvent se rapporter à plusieurs catégories, ce qui complique encore davantage la mise en correspondance de l'image avec la catégorie présentant le meilleur score. Par exemple, si plusieurs catégories partagent des mappages thème/catégorie fixes semblables, elles reçoivent le même nombre de points pour le score de confiance de catégorie associé à ces thèmes d'image. Lorsque vous voulez placer des images dans des catégories uniques, vous devez rechercher des mappages de thèmes uniques pour chaque catégorie afin d'accroître la différenciation entre les scores de catégorie. Il peut toutefois s'avérer difficile d'identifier des thèmes uniques afin d'obtenir un mappage exact.

Identifier la catégorie la plus appropriée à l'aide de vecteurs de mots

Selon la variété des thèmes détectés par l'API Vision, vous pouvez avoir du mal à créer des mappages fixes entre les thèmes et les catégories. Dans ce cas, vous pouvez utiliser une autre approche qui mesure les similarités conceptuelles entre les thèmes plutôt que de comparer directement leurs valeurs.

Prenons un exemple dans lequel les thèmes "oiseau", "perroquet", "vertébré" et "faune" sont renvoyés. Ils peuvent être comparés à des thèmes représentatifs associés à l'ensemble de catégories prédéterminées suivant :

Catégorie Thème1 Thème2 Thème3 Thème4 Thème5 Semblable ?
Animal chat animal perruche canin cheval Oui
Véhicule automobile camion voiture tramway navire Non

Bien qu'aucun des thèmes de catégorie présents dans ce tableau ne corresponde précisément aux thèmes d'image renvoyés, la catégorie Animal est clairement la plus appropriée sur le plan conceptuel. En d'autres termes, les thèmes détectés sont plus proches des mots qui définissent la catégorie Animal que de ceux qui définissent la catégorie Véhicule. Vous voudrez que votre système reconnaisse cette similarité et classe correctement l'image dans la catégorie Animal.

Les techniques de traitement du langage naturel dépendent souvent de la transformation de mots individuels en représentations vectorielles. Vous pouvez exploiter ces vecteurs mathématiquement afin d'identifier les corrélations entre plusieurs mots. Des dictionnaires pré-entraînés de plongement lexical (tels que word2vec ou GloVe) ont déjà converti des termes courants en représentations vectorielles à nombres réels. Ces représentations vectorielles vous permettent de calculer des scores de similarité entre des thèmes d'image et des thèmes de catégorie. La catégorie avec le score de similarité le plus proche de l'image est associée à celle-ci.

Calculer des vecteurs d'image et de catégorie à l'aide de GloVe

Pour générer des vecteurs à nombres réels associés aux images, les thèmes détectés sont convertis en représentations vectorielles équivalentes à l'aide de GloVe, puis réduits à un vecteur combiné via l'addition des vecteurs de mots individuels. Dans l'exemple précédent, cette méthode convertirait les thèmes détectés au sein de l'image ("oiseau", "perroquet", "vertébré" et "faune") en vecteurs de mots individuels. Le vecteur de mot combiné pour l'image est créé par la combinaison linéaire des vecteurs de mot individuels associés à chaque score de thème. Ainsi, une image qui comprend plusieurs thèmes est transformée en un vecteur combiné représentant sa signification sémantique globale.

Un vecteur combiné est également calculé pour chaque catégorie à l'aide de la somme des vecteurs de mots qui la représentent le mieux. Ce vecteur combiné ne contient pas nécessairement tous les mots qui définissent la catégorie et constitue souvent un sous-ensemble pertinent. Pour que les mots associés aux images et aux catégories soient convertis en vecteurs, les thèmes d'image et les éléments de catégorie doivent exister dans les représentations vectorielles continues pré-entraînées de GloVe.

Le nombre de mots qui définissent chaque catégorie peut varier. Lorsque plusieurs mots sont utilisés pour une catégorie, la somme des vecteurs de mots correspond approximativement à une sémantique combinée pour tous les mots de la catégorie. Vous pouvez également n'utiliser qu'un seul mot pour une catégorie.

Lorsque vous sélectionnez des mots pour générer le vecteur combiné d'une catégorie, évitez de retenir des termes ayant un sens comparable dans plusieurs catégories. Cela peut en effet compliquer la distinction entre celles-ci. Choisissez plutôt des mots qui décrivent les catégories de manière unique. À titre d'exemple, les mots "béton" et "asphalte" sont probablement trop semblables pour qu'il soit possible de distinguer les catégories Bâtiments et Routes. En revanche, les mots "maison" et "rue" sont plus susceptibles de permettre la distinction.

Le nombre et la valeur des mots qui définissent diverses catégories sont différents dans chaque situation. Vous pouvez procéder à des tests et essayer plusieurs combinaisons afin de trouver le meilleur résultat.

Calculer la similarité entre des vecteurs d'image et de catégorie

Pour classer une image à l'aide d'une catégorie spécifique, vous pouvez calculer la similarité cosinus entre le vecteur combiné d'image et chaque vecteur combiné de catégorie. Plus la similarité est élevée, meilleure est la corrélation entre image et catégorie. Le schéma suivant illustre ce processus :

calculer la similarité entre des vecteurs d'image et de catégorie

Ici, les vecteurs de mots de GloVe permettent de calculer les vecteurs combinés d'image et de catégorie. La similarité cosinus entre les vecteurs combinés d'image et de catégorie sert à évaluer l'équivalence. Dans ce cas, les scores sémantiques sont relativement proches (0.75), ce qui indique que l'image picture.jpg peut être associée à la catégorie Animals (Animaux).

Pour mettre en œuvre cette approche, vous devez déployer un modèle TensorFlow simple sur AI Platform. Ce modèle accepte les thèmes détectés par l'API Vision, les convertit en représentation vectorielle combinée, puis calcule la similarité cosinus pour chaque vecteur combiné de catégorie. Le modèle TensorFlow exploite les représentations vectorielles continues de mots pré-entraînés pour vectoriser les thèmes d'image et de catégorie, sans qu'aucun entraînement supplémentaire ne soit requis.

Le diagramme suivant représente une architecture de solution mise à jour intégrant AI Platform :

architecture qui intègre ML

Déclencher le backend App Engine

Le déclenchement du backend App Engine est comparable à l'approche précédente, qui employait des mappages thème/catégorie fixes. Ici, une nouvelle image importée dans un bucket Cloud Storage déclenche le point de terminaison App Engine. Celui-ci demande la détection des thèmes d'image à l'aide de l'API Vision et appelle un modèle de prédiction dans AI Platform pour convertir ces thèmes d'image en représentation vectorielle. Le modèle de prédiction calcule ensuite un score de similarité cosinus pour le vecteur d'image et chaque vecteur de catégorie. La catégorie qui présente la plus grande similarité est appliquée à l'image et ajoutée à l'index de recherche.

Différences entre les méthodes

Les captures d'écran suivantes montrent la différence entre les catégories dérivées de mappages thème/catégorie fixes (capture d'écran de gauche) et les catégories dérivées à l'aide de vecteurs de mots (capture d'écran de droite).

mappages thème/catégorie vecteurs de mots

Dans cet exemple, la catégorie Mapped Category: animals (Catégorie mappée : animaux) mappée à l'aide d'un mappage thème/catégorie fixe est définie par l'ensemble des termes suivants : "chien", "chat", "poisson", "cheval", "oiseau", "perroquet" et "perruche". Pour l'image cat.jpg, AutoML Vision a renvoyé les thèmes suivants : "faune", "biodiversité" et "zoo".

Lorsque la valeur de l'attribut Mapped Category: animals (Catégorie mappée : animaux) est sélectionnée dans la capture d'écran de gauche, il manque une image de chat. L'attribut Mapped Category: animals (Catégorie mappée : animaux) représente une approche thème/catégorie fixe. Étant donné qu'aucun thème AutoML Vision ne correspond aux éléments de la catégorie, l'image n'est pas associée à la catégorie des animaux, qui nécessite des correspondances exactes pour calculer les scores de similarité de catégorie. Dans ce cas, le score de similarité de catégorie entre l'image et la catégorie est de zéro. Il n'y a aucun chevauchement entre les éléments de thème et de catégorie.

La capture d'écran de droite, qui intègre des vecteurs de mots GloVe, inclut l'image de chat dans l'attribut Most Similar Category: animals (Catégorie la plus similaire : animaux). Grâce aux vecteurs de mots, les éléments qui définissent l'attribut Most Similar Category: animals (Catégorie la plus similaire : animaux) (c'est-à-dire, "animal", "créature", "espèce" et "animal de compagnie") sont transformés en un vecteur combiné de catégorie. De même, les thèmes d'image renvoyés par cat.jpg ("faune", "biodiversité" et "zoo") sont convertis en un vecteur combiné d'image. Comme la similarité cosinus entre les vecteurs combinés de catégorie et d'image est suffisamment élevée, ils présenteront une similarité sémantique légitime. En d'autres termes, les thèmes de l'image cat.jpg se rapprochent suffisamment des éléments de la catégorie "animaux" pour que le modèle TensorFlow place l'image du chat dans la bonne catégorie, même si le thème exact "chat" n'a pas été renvoyé.

Dans les deux captures d'écran, les compteurs indiqués à côté des valeurs d'attribut reflètent le nombre total d'occurrences d'un thème donné dans l'ensemble de résultats affiché. Cela explique pourquoi la capture d'écran de droite affiche animals (1) (animaux [1]) dans l'attribut Mapped Category (Catégorie mappée), tandis que la capture d'écran de gauche indique que l'image cat.jpg n'était pas directement mappée avec animals (animaux) à l'aide de mappages thème/catégorie fixes.

Classer des images avec AutoML Vision

Bien que la fonctionnalité de détection de thèmes de l'API Vision identifie de larges ensembles de catégories dans une image, vos exigences peuvent inclure des catégories non détectées par cette API. Celles-ci peuvent comprendre des thèmes hautement spécifiques à un domaine, tels que des thèmes destinés à des cas d'utilisation spécialisés (par exemple, la catégorisation de pièces de machines propriétaires). Dans ce cas, nous vous recommandons d'exploiter AutoML Vision pour entraîner un modèle d'images personnalisé avec un ensemble de données fourni par l'utilisateur.

Lorsque vous entraînez des modèles d'images personnalisés à l'aide d'AutoML Vision, assurez-vous que les images d'entraînement conviennent à ce service et sont représentatives des images utilisées dans la prédiction. Pour illustrer cette exigence, il est peu probable qu'un modèle d'images conçu pour détecter des animaux, mais uniquement entraîné à l'aide d'images de créatures à quatre pattes, identifie un oiseau en tant qu'animal. À titre de comparaison, la fonctionnalité de détection de thèmes de l'API Vision est suffisamment large pour tenir compte de cette différence, soit en renvoyant le thème spécifique "animal", soit en renvoyant des thèmes permettant de déterminer la catégorie appropriée. (Reportez-vous à la section Classer des images avec l'API Vision dans ce document.)

Le schéma suivant illustre l'architecture d'une solution qui intègre AutoML Vision à votre application de recherche d'images. Dans l'exemple ci-dessous, les thèmes définis par l'utilisateur dans votre ensemble de données d'entraînement sont utilisés directement en tant que catégories d'image.

architecture intégrant AutoML Vision

Comme c'est le cas lors de la classification à l'aide de l'API Vision, l'importation d'une nouvelle image dans un bucket Cloud Storage déclenche le point de terminaison App Engine. Celui-ci demande alors la détection des thèmes personnalisés de l'image à l'aide d'AutoML Vision. Le thème d'image qui présente le score de confiance le plus élevé est utilisé comme catégorie d'image et ajouté à l'index de recherche.

AutoML Vision peut être utilisé avec l'API Vision pour combiner des fonctionnalités. Par exemple, vous pouvez exploiter la détection de thèmes de l'API Vision pour effectuer une recherche par attribut sur de nombreux sujets, et AutoML Vision pour classer les images en fonction de thèmes personnalisés.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…