Skip to content

Recherche sémantique d'images avec OpenAI CLIP et Meta FAISS

Introduction

Ce guide vous accompagne dans la construction d'un moteur de recherche sémantique d'images en utilisant OpenAI CLIP, Meta FAISS et Flask. En combinant les puissants embeddings de langage visuel de CLIP avec la recherche efficace des plus proches voisins de FAISS, vous pouvez créer une interface web entièrement fonctionnelle où vous pouvez récupérer des images pertinentes à l'aide de requêtes en langage naturel.

Recherche sémantique d'images Aperçu visuel

Page web Flask avec aperçu des résultats de la recherche sémantique

Comment ça marche

  • CLIP utilise un codeur de vision (par exemple, ResNet ou ViT) pour les images et un codeur de texte (basé sur Transformer) pour le langage afin de les projeter dans le même espace d'intégration multimodale. Cela permet une comparaison directe entre le texte et les images à l'aide de la similarité cosinusoïdale.
  • FAISS (Facebook AI Similarity Search) construit un index des images intégrées et permet une récupération rapide et évolutive des vecteurs les plus proches d'une requête donnée.
  • Flask fournit une interface web simple pour soumettre des requêtes en langage naturel et afficher les images sémantiquement correspondantes de l'index.

Cette architecture prend en charge la recherche à partir de zéro, ce qui signifie que vous n'avez pas besoin d'étiquettes ou de catégories, mais seulement de données d'images et d'une bonne invite.

Recherche sémantique d'images à l'aide du paquetagePython Ultralytics

Avertissement concernant le chemin d'accès à l'image

Si vous utilisez vos propres images, assurez-vous de fournir un chemin absolu vers le répertoire d'images. Sinon, les images risquent de ne pas apparaître sur la page web en raison des limitations de Flask en matière de service de fichiers.

from ultralytics import solutions

app = solutions.SearchApp(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing i.e "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

VisualAISearch classe

Cette classe effectue toutes les opérations de backend :

  • Charge ou construit un index FAISS à partir d'images locales.
  • Extraction d'images et de textes intégrés à l'aide de CLIP.
  • Effectue une recherche de similarité en utilisant la similarité cosinusoïdale.

Recherche d'images similaires

Avertissement concernant le chemin d'accès à l'image

Si vous utilisez vos propres images, assurez-vous de fournir un chemin absolu vers le répertoire d'images. Sinon, les images risquent de ne pas apparaître sur la page web en raison des limitations de Flask en matière de service de fichiers.

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cuda"  # configure the device for processing i.e "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

VisualAISearch Paramètres

Le tableau ci-dessous présente les paramètres disponibles pour VisualAISearch:

Argument Type Défaut Description
data str images Chemin d'accès au répertoire d'images utilisé pour la recherche de similitudes.
Argument Type Défaut Description
device str None Spécifie le dispositif d'inférence (par ex, cpu, cuda:0 ou 0). Permet aux utilisateurs de choisir entre CPU, un GPU spécifique ou d'autres dispositifs de calcul pour l'exécution du modèle.

Avantages de la recherche sémantique d'images avec CLIP et FAISS

Construire son propre système de recherche sémantique d'images avec CLIP et FAISS présente plusieurs avantages indéniables :

  1. Capacités "Zero-Shot": Vous n'avez pas besoin d'entraîner le modèle sur votre ensemble de données spécifique. L'apprentissage à partir de zéro de CLIP vous permet d'effectuer des recherches sur n'importe quel ensemble de données d'images en utilisant un langage naturel de forme libre, ce qui vous fait gagner du temps et des ressources.

  2. Compréhension à l'échelle humaine: Contrairement aux moteurs de recherche basés sur des mots-clés, CLIP comprend le contexte sémantique. Il peut extraire des images sur la base de requêtes abstraites, émotionnelles ou relationnelles telles que "un enfant heureux dans la nature" ou "l'horizon d'une ville futuriste la nuit".

    Flux de travail pour la recherche d'images OpenAI Clip

  3. Pas besoin d'étiquettes ou de métadonnées: Les systèmes traditionnels de recherche d'images nécessitent des données soigneusement étiquetées. Cette approche ne nécessite que des images brutes. CLIP génère des encastrements sans nécessiter d'annotation manuelle.

  4. Recherche flexible et évolutive: FAISS permet une recherche rapide des plus proches voisins, même avec des ensembles de données à grande échelle. Il est optimisé pour la vitesse et la mémoire, ce qui permet une réponse en temps réel même avec des milliers (ou des millions) d'encastrements.

    Processus de construction des vecteurs d'intégration de Meta FAISS

  5. Applications multi-domaines: Qu'il s'agisse de créer des archives de photos personnelles, un outil d'inspiration créative, un moteur de recherche de produits ou même un système de recommandation d'œuvres d'art, cette pile s'adapte à divers domaines avec un minimum d'ajustements.

FAQ

Comment CLIP comprend-il les images et le texte ?

CLIP (Contrastive Language Image Pretraining) est un modèle développé par OpenAI qui apprend à relier les informations visuelles et linguistiques. Il est entraîné sur un ensemble massif de données d'images associées à des légendes en langage naturel. Cet entraînement lui permet de placer les images et le texte dans un espace d'intégration commun, de sorte que vous pouvez les comparer directement en utilisant la similarité vectorielle.

Pourquoi CLIP est-il considéré comme si puissant pour les tâches d'IA ?

CLIP se distingue par sa capacité de généralisation. Au lieu d'être formé uniquement pour des étiquettes ou des tâches spécifiques, il apprend à partir du langage naturel lui-même. Cela lui permet de traiter des requêtes flexibles telles que "un homme sur un jet ski" ou "un paysage de rêve surréaliste", ce qui le rend utile pour tout ce qui concerne la classification et la recherche sémantique créative, sans avoir à se recycler.

FAISS (Facebook AI Similarity Search) est une boîte à outils qui vous aide à effectuer des recherches très efficaces dans des vecteurs à haute dimension. Une fois que CLIP a transformé vos images en embeddings, FAISS permet de trouver rapidement et facilement les correspondances les plus proches d'une requête textuelle, ce qui est parfait pour la recherche d'images en temps réel.

Pourquoi utiliser Ultralytics si CLIP et FAISS proviennent d'OpenAI et de Meta ?

Alors que CLIP et FAISS sont développés respectivement par OpenAI et Meta, le packagePython Ultralytics simplifie leur intégration dans un pipeline complet de recherche sémantique d'images dans un flux de travail en deux lignes qui fonctionne tout simplement :

Recherche d'images similaires

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cuda"  # configure the device for processing i.e "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

Cette mise en œuvre de haut niveau permet de gérer :

  • Génération d'images et de textes intégrés basée sur CLIP.
  • Création et gestion de l'index FAISS.
  • Recherche sémantique efficace avec la similarité cosinus.
  • Chargement et visualisation d'images à partir d'un répertoire.

Puis-je personnaliser l'interface de cette application ?

Oui, c'est tout à fait possible. La configuration actuelle utilise Flask avec un frontend HTML de base, mais vous êtes libre d'échanger votre propre HTML ou même de construire quelque chose de plus dynamique avec React, Vue, ou un autre framework frontend. Flask peut facilement servir d'API pour votre interface personnalisée.

Est-il possible d'effectuer des recherches dans des vidéos plutôt que dans des images statiques ?

Pas directement, mais il existe une solution simple. Vous pouvez extraire des images individuelles de vos vidéos (par exemple, une par seconde), les traiter comme des images autonomes et les introduire dans le système. De cette manière, le moteur de recherche peut indexer sémantiquement les moments visuels de vos vidéos.



📅 Créé il y a 25 jours ✏️ Mis à jour il y a 23 jours

Commentaires