Meet YOLO26: next-gen vision AI.

Link to this sectionComment créer une recherche d'images sémantique avec OpenAI CLIP#

Ce guide t'accompagne dans la création d'un moteur de recherche d'images sémantique utilisant OpenAI CLIP et Flask. En combinant les embeddings visuels et textuels de CLIP avec une recherche par cosine similarity rapide propulsée par NumPy, tu peux construire une interface web qui récupère des images pertinentes à partir de requêtes en langage naturel, sans avoir besoin d'étiquettes ou de catégories.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

Aperçu de la page web Flask avec les résultats de recherche sémantique

Le package Python Ultralytics encapsule tout ce pipeline derrière deux classes, te permettant de lancer une application de recherche fonctionnelle ou d'exécuter des requêtes par programmation en quelques lignes. Ce guide couvre pourquoi la recherche sémantique est utile, comment elle fonctionne, comment lancer l'application web, comment effectuer des recherches par programmation et comment configurer les paramètres.

Link to this sectionPourquoi utiliser la recherche d'images sémantique ?#

Construire ton propre système de recherche d'images sémantique avec CLIP offre plusieurs avantages convaincants :

  • Capacités zero-shot : Tu n'as pas besoin d'entraîner ton modèle sur ton jeu de données. L'apprentissage zero-shot de CLIP te permet d'interroger n'importe quelle collection d'images avec du langage naturel libre, ce qui te fait gagner du temps et des ressources.
  • Compréhension humaine : Contrairement à la recherche par mots-clés, CLIP comprend le contexte sémantique et récupère des images à partir de requêtes abstraites, émotionnelles ou relationnelles comme "un enfant heureux dans la nature" ou "un paysage urbain futuriste de nuit".
  • Pas d'étiquettes ou de métadonnées : Cette approche ne nécessite que des images brutes. CLIP génère des embeddings sans aucune annotation manuelle.
  • Recherche légère et précise : Une seule multiplication matricielle normalisée dans NumPy classe chaque image par cosine similarity, donnant des résultats précis en temps réel sur des milliers d'embeddings, sans dépendance de recherche supplémentaire à installer ou à gérer.
  • Applications transdisciplinaires : Que tu construises une archive de photos personnelle, un outil d'inspiration créative, un moteur de recherche de produits ou un système de recommandation artistique, la même pile technologique s'adapte avec un minimum d'ajustements.

Link to this sectionComment fonctionne la recherche d'images sémantique#

Le pipeline combine trois composants, chacun gérant une étape de la conversion des images et du texte en résultats classés :

  • CLIP utilise un encodeur visuel (par ex., ResNet ou ViT) pour les images et un encodeur textuel (basé sur Transformer) pour le langage afin de les projeter tous deux dans le même espace d'embedding multimodal. Cela permet une comparaison directe entre texte et images en utilisant la similarité cosinus.
  • NumPy stocke les embeddings d'images sous forme d'un tableau unique et les classe par rapport à un embedding de requête avec une multiplication matricielle, renvoyant les vecteurs les plus proches par cosine similarity sans aucune dépendance d'indexation supplémentaire.
  • Flask fournit une interface web simple pour soumettre des requêtes en langage naturel et afficher les images correspondantes sémantiquement à partir de l'index.

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

Comme les images et le texte aboutissent dans le même espace vectoriel, la récupération est zero-shot : tu n'as pas besoin d'étiquettes ou de catégories, juste de données d'image et d'un bon prompt.

Link to this sectionExécuter l'application web de recherche sémantique#

La classe SearchApp lance l'interface Flask complète. Lors de la première exécution, elle télécharge un jeu d'images d'exemple, construit l'index d'embeddings et sert une page où tu peux taper une requête et visualiser les résultats classés.

Avertissement sur le chemin des images

Si tu utilises tes propres images, assure-toi de fournir un chemin absolu vers le répertoire d'images. Sinon, les images pourraient 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, e.g., "cpu" or "cuda"
)

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

Link to this sectionRechercher des images par programmation#

La classe VisualAISearch effectue toutes les opérations backend sans la couche web :

  • Charge ou construit un index d'embeddings à partir d'images locales.
  • Extrais les embeddings d'images et de texte en utilisant CLIP.
  • Effectue une recherche de similarité en utilisant la similarité cosinus.

Appelle le moteur de recherche avec une requête en langage naturel pour obtenir une liste des noms de fichiers d'images correspondants, classés par similarité :

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "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

Link to this sectionConfigurer les paramètres de VisualAISearch#

Le tableau ci-dessous décrit les paramètres disponibles pour VisualAISearch :

ArgumentTypeDéfautDescription
datastr'images'Chemin vers le répertoire d'images utilisé pour la recherche de similarité.
ArgumentTypeDéfautDescription
devicestrNoneSpécifie le périphérique pour l'inférence (par ex. cpu, cuda:0 ou 0). Permet aux utilisateurs de choisir entre le CPU, un GPU spécifique ou d'autres dispositifs de calcul pour l'exécution du modèle.
Gère tes données dans le cloud

Pour rechercher dans des collections d'images à une échelle de production sans gérer de fichiers locaux, tu peux organiser et versionner tes images dans l' Ultralytics Platform avant de les indexer avec CLIP.

Link to this sectionConclusion#

Avec CLIP et le package Python Ultralytics, tu peux mettre en place un moteur de recherche d'images sémantique zero-shot en quelques lignes seulement, soit comme une application web Flask, soit comme un backend de recherche programmatique. À partir de là, pointe data vers ton propre répertoire d'images pour l'indexer, puis explore d'autres Ultralytics Solutions pour construire sur tes workflows de vision par ordinateur.

Link to this sectionFAQ#

Link to this sectionComment 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 des informations visuelles et linguistiques. Il est entraîné sur un jeu 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'embedding partagé, te permettant de les comparer directement en utilisant la similarité vectorielle.

Link to this sectionPourquoi 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 entraîné uniquement pour des étiquettes ou des tâches spécifiques, il apprend du langage naturel lui-même. Cela lui permet de gérer des requêtes flexibles comme "un homme faisant du jet ski" ou "un paysage de rêve surréaliste", le rendant utile pour tout, de la classification à la recherche sémantique créative, sans réentraînement.

Link to this sectionComment les images sont-elles classées par rapport à une requête textuelle ?#

Une fois que CLIP transforme tes images en embeddings, le package Ultralytics les normalise L2 et les stocke dans un seul tableau NumPy. Une requête est classée avec une multiplication matricielle qui calcule la cosine similarity entre l'embedding de la requête et chaque embedding d'image, puis trie les scores. Cette recherche par force brute est précise et rapide pour des collections d'images classiques, sans aucune dépendance de base de données vectorielle à installer ou à gérer.

Link to this sectionPourquoi utiliser le Ultralytics Python package si CLIP provient d'OpenAI ?#

Bien que CLIP soit développé par OpenAI, le Ultralytics Python package enveloppe la génération d'embeddings, l'indexation et la recherche par cosine similarity dans un pipeline de recherche d'images sémantique complet derrière quelques lignes de code qui fonctionnent simplement :

from ultralytics import solutions

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

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

Cette implémentation de haut niveau gère :

  • La génération d'embeddings d'images et de texte basée sur CLIP.
  • Création et gestion de l'index d'embeddings.
  • La recherche sémantique efficace avec la similarité cosinus.
  • Le chargement d'images basé sur les répertoires et la visualisation.

Link to this sectionPuis-je personnaliser le frontend de cette application ?#

Oui. La configuration actuelle utilise Flask avec un frontend HTML basique, mais tu peux le remplacer par ton propre HTML ou construire une interface utilisateur plus dynamique avec React, Vue ou un autre framework frontend. Flask peut servir d'API backend pour ton interface personnalisée.

Link to this sectionEst-il possible de rechercher dans des vidéos au lieu d'images statiques ?#

Pas directement. Une astuce simple consiste à extraire des images individuelles de tes vidéos (par ex., une par seconde), les traiter comme des images autonomes et les intégrer dans le système. De cette façon, le moteur de recherche peut indexer sémantiquement les moments visuels de tes vidéos.

Commentaires