Zum Inhalt springen

Semantische Bildsuche mit OpenAI CLIP und Meta FAISS

Einführung

Diese Anleitung 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 Weboberfläche erstellen, über die Sie relevante Bilder mit natürlichsprachlichen Abfragen abrufen können.

Semantische Bildsuche Visuelle Vorschau

Flask-Webseite mit Übersicht der semantischen Suchergebnisse

Wie es funktioniert

  • CLIP verwendet einen Bild-Encoder (z. B. ResNet oder ViT) für Bilder und einen Text-Encoder (auf Transformer-Basis) für Sprache, um beide in denselben multimodalen Einbettungsraum zu projizieren. Dies ermöglicht einen direkten Vergleich zwischen Text und Bild anhand der Kosinusähnlichkeit.
  • FAISS (Facebook AI Similarity Search) baut einen Index der Bildeinbettungen auf und ermöglicht eine schnelle, skalierbare Suche nach den Vektoren, die einer bestimmten Anfrage am nächsten kommen.
  • Flask bietet eine einfache Webschnittstelle, um Abfragen in natürlicher Sprache zu stellen und semantisch passende Bilder aus dem Index anzuzeigen.

Diese Architektur unterstützt die Zero-Shot-Suche, d. h. Sie benötigen keine Beschriftungen oder Kategorien, sondern nur Bilddaten und eine gute Eingabeaufforderung.

Semantische Bildsuche mit demPython Ultralytics

Bildpfad-Warnung

Wenn du deine eigenen Bilder verwendest, stelle sicher, dass du einen absoluten Pfad zu dem Bildverzeichnis angibst. Andernfalls kann es sein, dass die Bilder aufgrund der Beschränkungen von Flask bei der Dateibereitstellung nicht auf der Webseite erscheinen.

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 Texteinbettungen mit CLIP.
  • Führt eine Ähnlichkeitssuche unter Verwendung der Kosinusähnlichkeit durch.

Ähnliche Bilder suchen

Bildpfad-Warnung

Wenn du deine eigenen Bilder verwendest, stelle sicher, dass du einen absoluten Pfad zu dem Bildverzeichnis angibst. Andernfalls kann es sein, dass die Bilder aufgrund der Beschränkungen von Flask bei der Dateibereitstellung nicht auf der Webseite erscheinen.

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 zeigt 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

Der Aufbau 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. Mit dem Zero-Shot-Learning von CLIP können Sie Suchanfragen für jeden beliebigen Bilddatensatz in freier natürlicher Sprache durchführen und so Zeit und Ressourcen sparen.

  2. Menschenähnliches Verstehen: Im Gegensatz zu stichwortbasierten Suchmaschinen versteht CLIP den semantischen Kontext. Es kann Bilder auf der Grundlage von abstrakten, emotionalen oder relationalen Suchanfragen wie "ein glückliches Kind in der Natur" oder "eine futuristische Stadtsilhouette bei Nacht" abrufen.

    OpenAI Clip Bildabfrage-Workflow

  3. Keine Notwendigkeit für Etiketten oder Metadaten: Herkömmliche Bildsuchsysteme erfordern sorgfältig etikettierte Daten. Dieser Ansatz benötigt nur Rohbilder. CLIP erzeugt Einbettungen, ohne dass eine manuelle Beschriftung erforderlich ist.

  4. Flexible und skalierbare Suche: FAISS ermöglicht eine schnelle Suche nach den nächsten Nachbarn auch bei großen Datensätzen. Es ist für Geschwindigkeit und Speicher optimiert und ermöglicht Echtzeit-Reaktionen selbst bei Tausenden (oder Millionen) von Einbettungen.

    Meta FAISS Vektoren einbetten Arbeitsablauf erstellen

  5. Domänenübergreifende Anwendungen: Ganz gleich, ob Sie ein persönliches Fotoarchiv, ein Tool zur kreativen Inspiration, eine Produktsuchmaschine oder sogar ein System zur Empfehlung von Kunstwerken erstellen möchten, dieser Stack passt sich mit minimalen Anpassungen an verschiedene Domänen an.

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 gepaart sind. Durch dieses Training kann es sowohl Bilder als auch Text in einem gemeinsamen Einbettungsraum abbilden, so dass Sie sie anhand der Vektorähnlichkeit direkt vergleichen können.

Warum gilt CLIP als so leistungsfähig für KI-Aufgaben?

Was CLIP auszeichnet, ist seine Fähigkeit zur Verallgemeinerung. Anstatt nur für bestimmte Bezeichnungen oder Aufgaben trainiert zu werden, lernt es von der natürlichen Sprache selbst. Dadurch kann es flexible Abfragen wie "ein Mann auf einem Jetski" oder "eine surreale Traumlandschaft" verarbeiten und ist somit für alles von der Klassifizierung bis zur kreativen semantischen Suche nützlich, ohne dass es neu trainiert werden muss.

FAISS (Facebook AI Similarity Search) ist ein Toolkit, mit dem Sie hochdimensionale Vektoren sehr effizient durchsuchen können. Sobald CLIP Ihre Bilder in Einbettungen umgewandelt hat, können Sie mit FAISS schnell und einfach die nächstgelegenen Übereinstimmungen mit einer Textabfrage finden - perfekt für die Bildsuche in Echtzeit.

Warum sollte man die Ultralytics Python , wenn CLIP und FAISS von OpenAI und Meta stammen?

Während CLIP und FAISS von OpenAI bzw. Meta entwickelt werden, vereinfacht das Ultralytics Python ihre Integration in eine komplette semantische Bildsuchpipeline in einem 2-Zeilen-Workflow, der einfach funktioniert:

Ähnliche Bilder suchen

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 Erzeugung von Bild- und Texteinbettungen.
  • Erstellung und Verwaltung von FAISS-Indizes.
  • Effiziente semantische Suche mit Kosinusähnlichkeit.
  • Verzeichnisbasiertes Laden und Visualisieren von Bildern.

Kann ich das Frontend dieser Anwendung anpassen?

Ja, das können Sie auf jeden Fall. Das aktuelle Setup verwendet Flask mit einem einfachen HTML-Frontend, aber es steht Ihnen frei, Ihr eigenes HTML einzubauen oder sogar etwas Dynamischeres mit React, Vue oder einem anderen Frontend-Framework zu erstellen. Flask kann problemlos als Backend-API für Ihre benutzerdefinierte Schnittstelle dienen.

Ist es möglich, anstelle von statischen Bildern auch Videos zu durchsuchen?

Nicht direkt, aber es gibt eine einfache Umgehung. Sie können einzelne Bilder aus Ihren Videos extrahieren (z. B. ein Bild pro Sekunde), sie als eigenständige Bilder behandeln und diese in das System einspeisen. Auf diese Weise kann die Suchmaschine visuelle Momente aus Ihren Videos semantisch indizieren.



📅 Erstellt vor 25 Tagen ✏️ Aktualisiert vor 23 Tagen

Kommentare

OSZAR »