Passer au contenu

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

Introduction

Ce guide vous explique comment créer un moteur de recherche d'images sémantique à l'aide de OpenAI CLIP, Meta FAISS et Flask. En combinant les puissantes intégrations visuelles-linguistiques de CLIP avec la recherche efficace du plus proche voisin 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.



Regarder : Comment fonctionne la recherche de similarité | Recherche visuelle utilisant OpenAI CLIP, META FAISS et le package Ultralytics 🎉

Aperçu visuel de la recherche sémantique d'images

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

Comment ça marche

  • CLIP utilise un encodeur de vision (par exemple, ResNet ou ViT) pour les images et un encodeur de texte (basé sur Transformer) pour le langage afin de projeter les deux dans le même espace d'intégration multimodal. Cela permet une comparaison directe entre le texte et les images en utilisant la similarité cosinus.
  • FAISS (Facebook AI Similarity Search) construit un index des embeddings d'images et permet une récupération rapide et scalable 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 à partir de l'index.

Cette architecture prend en charge la recherche zero-shot, ce qui signifie que vous n'avez pas besoin d'étiquettes ou de catégories, juste des données d'image et une bonne invite.

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

Avertissement concernant le chemin d'accès aux images

Si vous utilisez vos propres images, assurez-vous de fournir un chemin d'accès absolu au répertoire des 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 mais si vous préférez travailler directement avec les fonctions, consultez les sous-sections suivantes pour savoir comment les importer indépendamment.

Cette classe effectue toutes les opérations backend :

  • Charge ou construit un index FAISS à partir d'images locales.
  • Extrait les incorporations d'images et de texte à l'aide de CLIP.
  • Effectue une recherche de similarité à l’aide de la similarité cosinus.

Recherche d'images similaires

Avertissement concernant le chemin d'accès aux images

Si vous utilisez vos propres images, assurez-vous de fournir un chemin d'accès absolu au répertoire des 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 Par défaut Description
data str 'images' Chemin d'accès au répertoire d'images utilisé pour la recherche de similarité.
Argument Type Par défaut Description
device str None Spécifie le périphérique pour l'inférence (par exemple, cpu, cuda:0 ou 0). Permet aux utilisateurs de choisir entre le CPU, un GPU spécifique ou d'autres périphériques de calcul pour l'exécution du modèle.

Avantages de la recherche d’images sémantiques avec CLIP et FAISS

La construction de votre propre système de recherche d'images sémantique avec CLIP et FAISS offre plusieurs avantages intéressants :

  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 zero-shot de CLIP vous permet d'effectuer des requêtes de recherche sur n'importe quel ensemble de données d'images en utilisant le langage naturel de forme libre, ce qui permet d'économiser du temps et des ressources.

  2. Compréhension de type humain : Contrairement aux moteurs de recherche basés sur des mots-clés, CLIP comprend le contexte sémantique. Il peut récupérer des images basées sur des requêtes abstraites, émotionnelles ou relationnelles comme "un enfant heureux dans la nature" ou "une ligne d'horizon futuriste de la ville la nuit".

    Flux de travail de récupération d'images OpenAI Clip

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

  4. Recherche flexible et scalable : 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, permettant une réponse en temps réel même avec des milliers (ou des millions) d'embeddings.

    Workflow de construction de vecteurs d'embedding Meta FAISS

  5. Applications interdomaines : Que vous construisiez une archive de photos personnelles, un outil d'inspiration créative, un moteur de recherche de produits ou même un système de recommandation d'art, cette pile s'adapte à divers domaines avec un minimum de modifications.

FAQ

Comment CLIP comprend-il à la fois les images et le texte ?

CLIP (Contrastive Language Image Pretraining) est un modèle développé par OpenAI qui apprend à connecter les informations visuelles et linguistiques. Il est entraîné sur un ensemble de données massif d'images associées à des légendes en langage naturel. Cet entraînement lui permet de mapper à la fois les images et le texte dans un espace d'intégration partagé, 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 ?

Ce qui distingue CLIP, c'est sa capacité à généraliser. 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 faisant du jet ski » ou « un paysage de rêve surréaliste », ce qui le rend utile pour tout, de la classification à la recherche sémantique créative, sans réentraînement.

FAISS (Facebook AI Similarity Search) est une boîte à outils qui vous aide à effectuer des recherches très efficaces dans des vecteurs de haute dimension. Une fois que CLIP transforme 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 le package Python Ultralytics si CLIP et FAISS proviennent d'OpenAI et Meta ?

Bien que CLIP et FAISS soient développés par OpenAI et Meta respectivement, le package Ultralytics python simplifie leur intégration dans un pipeline complet de recherche d'images sémantique dans un flux de travail en 2 lignes qui fonctionne 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 implémentation de haut niveau gère :

  • Génération d'incorporation d'images et de texte basée sur CLIP.
  • Création et gestion d'index FAISS.
  • Recherche sémantique efficace avec similarité cosinus.
  • Chargement d'images basé sur le répertoire et visualisation.

Puis-je personnaliser l'interface de cette application ?

Oui, vous le pouvez absolument. La configuration actuelle utilise Flask avec une interface HTML de base, mais vous êtes libre d'intégrer votre propre HTML ou même de créer quelque chose de plus dynamique avec React, Vue ou un autre framework frontal. Flask peut facilement servir d'API backend pour votre interface personnalisée.

Est-il possible d’effectuer des recherches dans des vidéos au lieu d’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 intégrer au système. De cette façon, le moteur de recherche peut indexer sémantiquement les moments visuels de vos vidéos.



📅 Créé il y a 3 mois ✏️ Mis à jour il y a 2 mois

Commentaires