Semantische Bildersuche mit OpenAI CLIP und Meta FAISS
Einführung
Dieser Leitfaden führt Sie durch den Aufbau einer semantischen Bildsuchmaschine mit OpenAI CLIP, Meta FAISS und Flask. Durch die Kombination der leistungsstarken visuell-sprachlichen Einbettungen von CLIP mit der effizienten Nearest-Neighbor-Suche von FAISS können Sie eine voll funktionsfähige Webschnittstelle erstellen, über die Sie relevante Bilder mithilfe von natürlichsprachlichen Abfragen abrufen können.
Beobachten: So funktioniert die Ähnlichkeitssuche | Visuelle Suche mit OpenAI CLIP, META FAISS und Ultralytics Package 🎉
Visuelle Vorschau der semantischen Bildersuche
Wie es funktioniert
- CLIP verwendet einen Vision Encoder (z. B. ResNet oder ViT) für Bilder und einen Text Encoder (Transformer-basiert) für Sprache, um beide in denselben multimodalen Einbettungsraum zu projizieren. Dies ermöglicht einen direkten Vergleich zwischen Text und Bildern mithilfe der Kosinusähnlichkeit.
- FAISS (Facebook AI Similarity Search) erstellt einen Index der Bild-Embeddings und ermöglicht einen schnellen, skalierbaren Abruf der nächsten Vektoren zu einer gegebenen Abfrage.
- Flask bietet eine einfache Weboberfläche, um Abfragen in natürlicher Sprache einzureichen und semantisch passende Bilder aus dem Index anzuzeigen.
Diese Architektur unterstützt die Zero-Shot-Suche, d. h. Sie benötigen keine Labels oder Kategorien, sondern lediglich Bilddaten und einen guten Prompt.
Semantische Bildersuche mit dem Ultralytics Python-Paket
Warnung zum Bildpfad
Wenn Sie Ihre eigenen Bilder verwenden, stellen Sie sicher, dass Sie einen absoluten Pfad zum Bildverzeichnis angeben. Andernfalls werden die Bilder aufgrund der Dateibereitstellungsbeschränkungen von Flask möglicherweise nicht auf der Webseite angezeigt.
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
Klasse
Diese Klasse führt alle Backend-Operationen aus:
- Lädt oder erstellt einen FAISS-Index aus lokalen Bildern.
- Extrahiert Bild- und Text-Einbettungen mit CLIP.
- Führt eine Ähnlichkeitssuche mithilfe der Kosinusähnlichkeit durch.
Suche nach ähnlichen Bildern
Warnung zum Bildpfad
Wenn Sie Ihre eigenen Bilder verwenden, stellen Sie sicher, dass Sie einen absoluten Pfad zum Bildverzeichnis angeben. Andernfalls werden die Bilder aufgrund der Dateibereitstellungsbeschränkungen von Flask möglicherweise nicht auf der Webseite angezeigt.
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
Parameter
Die folgende Tabelle umreisst die verfügbaren Parameter für VisualAISearch
:
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
data |
str |
'images' |
Pfad zum Bildverzeichnis, das für die Ähnlichkeitssuche verwendet wird. |
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
device |
str |
None |
Gibt das Gerät für die Inferenz an (z.B., cpu , cuda:0 oder 0 ). Ermöglicht dem Benutzer die Auswahl zwischen CPU, einem bestimmten GPU oder anderen Rechengeräten für die Modellausführung. |
Vorteile der semantischen Bildsuche mit CLIP und FAISS
Das Erstellen eines eigenen semantischen Bildsuchsystems mit CLIP und FAISS bietet mehrere überzeugende Vorteile:
-
Zero-Shot-Fähigkeiten: Sie müssen das Modell nicht auf Ihrem spezifischen Datensatz trainieren. Das Zero-Shot-Lernen von CLIP ermöglicht es Ihnen, Suchanfragen auf jedem Bilddatensatz mit freier natürlicher Sprache durchzuführen, wodurch Sie sowohl Zeit als auch Ressourcen sparen.
-
Menschenähnliches Verständnis: Im Gegensatz zu schlüsselwortbasierten Suchmaschinen versteht CLIP den semantischen Kontext. Es kann Bilder basierend auf abstrakten, emotionalen oder relationalen Abfragen wie "ein glückliches Kind in der Natur" oder "eine futuristische Skyline einer Stadt bei Nacht" abrufen.
-
Keine Notwendigkeit für Labels oder Metadaten: Traditionelle Bildsuchsysteme benötigen sorgfältig gelabelte Daten. Dieser Ansatz benötigt nur Rohbilder. CLIP generiert Embeddings, ohne dass eine manuelle Annotation erforderlich ist.
-
Flexible und skalierbare Suche: FAISS ermöglicht eine schnelle Nearest-Neighbor-Suche, selbst bei großen Datensätzen. Es ist auf Geschwindigkeit und Speicher optimiert und ermöglicht eine Echtzeitreaktion auch bei Tausenden (oder Millionen) von Einbettungen.
-
Cross-Domain-Anwendungen: Egal, ob Sie ein persönliches Fotoarchiv, ein Tool zur kreativen Inspiration, eine Produktsuchmaschine oder sogar ein System zur Kunstempfehlung entwickeln, dieser Stack lässt sich mit minimalen Anpassungen an verschiedene Bereiche anpassen.
FAQ
Wie versteht CLIP sowohl Bilder als auch Text?
CLIP (Contrastive Language Image Pretraining) ist ein von OpenAI entwickeltes Modell, das lernt, visuelle und sprachliche Informationen zu verbinden. Es wird auf einem riesigen Datensatz von Bildern trainiert, die mit natürlichsprachlichen Beschriftungen versehen sind. Dieses Training ermöglicht es, sowohl Bilder als auch Text in einen gemeinsamen Embedding-Raum abzubilden, so dass Sie sie direkt mit Hilfe der Vektorähnlichkeit vergleichen können.
Warum wird CLIP für KI-Aufgaben als so leistungsfähig angesehen?
Was CLIP auszeichnet, ist seine Fähigkeit zur Generalisierung. Anstatt nur für bestimmte Labels oder Aufgaben trainiert zu werden, lernt es aus der natürlichen Sprache selbst. Dies ermöglicht es, flexible Abfragen wie “einen Mann, der einen Jetski fährt“ oder “eine surreale Traumlandschaft“ zu verarbeiten, was es für alles von der Klassifizierung bis zur kreativen semantischen Suche nützlich macht, ohne ein erneutes Training.
Was genau macht FAISS in diesem Projekt (Semantic Search)?
FAISS (Facebook AI Similarity Search) ist ein Toolkit, das Ihnen hilft, sehr effizient in hochdimensionalen Vektoren zu suchen. Sobald CLIP Ihre Bilder in Einbettungen umwandelt, macht es FAISS schnell und einfach, die engsten Übereinstimmungen zu einer Textabfrage zu finden, perfekt für die Echtzeit-Bildabfrage.
Warum das Ultralytics Python-Paket verwenden, wenn CLIP und FAISS von OpenAI und Meta stammen?
Während CLIP und FAISS von OpenAI bzw. Meta entwickelt wurden, vereinfacht das Ultralytics Python-Paket ihre Integration in eine vollständige semantische Bildsuchpipeline in einem 2-Zeilen-Workflow, der einfach funktioniert:
Suche nach ähnlichen Bildern
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
Diese High-Level-Implementierung behandelt:
- CLIP-basierte Generierung von Bild- und Text-Embeddings.
- FAISS-Indexerstellung und -verwaltung.
- Effiziente semantische Suche mit Kosinusähnlichkeit.
- Verzeichnisbasiertes Laden und Visualisierung von Bildern.
Kann ich das Frontend dieser App anpassen?
Ja, das ist absolut möglich. Das aktuelle Setup verwendet Flask mit einem einfachen HTML-Frontend, aber es steht Ihnen frei, Ihr eigenes HTML einzubinden oder sogar etwas Dynamischeres mit React, Vue oder einem anderen Frontend-Framework zu entwickeln. Flask kann problemlos als Backend-API für Ihre benutzerdefinierte Schnittstelle dienen.
Ist es möglich, Videos anstelle von statischen Bildern zu durchsuchen?
Nicht direkt–aber es gibt eine einfache Problemumgehung. Sie können einzelne Frames aus Ihren Videos extrahieren (z. B. jede Sekunde einen), diese als eigenständige Bilder behandeln und in das System einspeisen. Auf diese Weise kann die Suchmaschine visuelle Momente aus Ihren Videos semantisch indizieren.