Zum Inhalt springen

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

Flask-Webseite mit Übersicht über semantische Suchergebnisse

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:

  1. 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.

  2. 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.

    OpenAI Clip Bildabruf-Workflow

  3. 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.

  4. 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.

    Meta FAISS Workflow zum Erstellen von Embedding-Vektoren

  5. 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.

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.



📅 Erstellt vor 2 Monaten ✏️ Aktualisiert vor 1 Monat

Kommentare