Vai al contenuto

Ricerca semantica di immagini con OpenAI CLIP e Meta FAISS

Introduzione

Questa guida vi guida nella costruzione di un motore di ricerca semantico per immagini utilizzando OpenAI CLIP, Meta FAISS e Flask. Combinando le potenti incorporazioni linguistico-visive di CLIP con l'efficiente ricerca nearest-neighbor di FAISS, è possibile creare un'interfaccia web completamente funzionale in cui è possibile recuperare immagini rilevanti utilizzando query in linguaggio naturale.

Ricerca semantica delle immagini Anteprima visiva

Pagina web di Flask con una panoramica dei risultati della ricerca semantica

Come funziona

  • CLIP utilizza un codificatore di visione (ad esempio, ResNet o ViT) per le immagini e un codificatore di testo (basato su Transformer) per il linguaggio, per proiettare entrambi nello stesso spazio di incorporazione multimodale. Ciò consente un confronto diretto tra testo e immagini utilizzando la similarità del coseno.
  • FAISS (Facebook AI Similarity Search) costruisce un indice delle incorporazioni delle immagini e consente di recuperare in modo rapido e scalabile i vettori più vicini a una determinata query.
  • Flask fornisce una semplice interfaccia web per inviare query in linguaggio naturale e visualizzare immagini semanticamente corrispondenti dall'indice.

Questa architettura supporta la ricerca a colpo zero, il che significa che non sono necessarie etichette o categorie, ma solo i dati dell'immagine e un buon prompt.

Ricerca semantica di immagini con il pacchetto Ultralytics diPython

Avviso sul percorso dell'immagine

Se si utilizzano le proprie immagini, assicurarsi di fornire un percorso assoluto alla directory delle immagini. In caso contrario, le immagini potrebbero non apparire nella pagina web a causa delle limitazioni di Flask sul servizio dei file.

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 classe

Questa classe esegue tutte le operazioni di backend:

  • Carica o costruisce un indice FAISS dalle immagini locali.
  • Estrae le incorporazioni di immagini e testo utilizzando CLIP.
  • Esegue la ricerca della somiglianza utilizzando la somiglianza del coseno.

Ricerca di immagini simili

Avviso sul percorso dell'immagine

Se si utilizzano le proprie immagini, assicurarsi di fornire un percorso assoluto alla directory delle immagini. In caso contrario, le immagini potrebbero non apparire nella pagina web a causa delle limitazioni di Flask sul servizio dei file.

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 Parametri

La tabella seguente illustra i parametri disponibili per VisualAISearch:

Argomento Tipo Predefinito Descrizione
data str images Percorso della directory delle immagini utilizzata per la ricerca delle somiglianze.
Argomento Tipo Predefinito Descrizione
device str None Specifica il dispositivo per l'inferenza (ad es, cpu, cuda:0 o 0). Consente agli utenti di scegliere tra CPU, uno specifico GPU o altri dispositivi di calcolo per l'esecuzione del modello.

Vantaggi della ricerca semantica di immagini con CLIP e FAISS

Costruire il proprio sistema di ricerca semantica di immagini con CLIP e FAISS offre diversi vantaggi interessanti:

  1. Funzionalità Zero-Shot: Non è necessario addestrare il modello su un set di dati specifico. L'apprendimento zero shot di CLIP consente di eseguire query di ricerca su qualsiasi dataset di immagini utilizzando un linguaggio naturale libero, risparmiando tempo e risorse.

  2. Comprensione simile a quella umana: A differenza dei motori di ricerca basati su parole chiave, CLIP comprende il contesto semantico. Può recuperare immagini basate su query astratte, emotive o relazionali come "un bambino felice nella natura" o "lo skyline di una città futuristica di notte".

    OpenAI Flusso di lavoro per il recupero di immagini clip

  3. Non servono etichette o metadati: I sistemi di ricerca di immagini tradizionali richiedono dati accuratamente etichettati. Questo approccio ha bisogno solo di immagini grezze. CLIP genera incorporazioni senza bisogno di annotazioni manuali.

  4. Ricerca flessibile e scalabile: FAISS consente una rapida ricerca dei vicini anche con insiemi di dati di grandi dimensioni. È ottimizzato per la velocità e la memoria, consentendo una risposta in tempo reale anche con migliaia (o milioni) di incorporazioni.

    Flusso di lavoro per la costruzione di vettori di incorporazione Meta FAISS

  5. Applicazioni trasversali: Che si tratti di un archivio fotografico personale, di uno strumento di ispirazione creativa, di un motore di ricerca di prodotti o di un sistema di raccomandazione artistica, questo stack si adatta a diversi domini con modifiche minime.

FAQ

Come fa CLIP a capire sia le immagini che il testo?

CLIP (Contrastive Language Image Pretraining) è un modello sviluppato da OpenAI che impara a collegare informazioni visive e linguistiche. Viene addestrato su un enorme set di immagini abbinate a didascalie in linguaggio naturale. Questo addestramento gli consente di mappare sia le immagini che il testo in uno spazio di incorporazione condiviso, in modo da poterli confrontare direttamente utilizzando la similarità vettoriale.

Perché il CLIP è considerato così potente per le attività di IA?

Ciò che distingue CLIP è la sua capacità di generalizzare. Invece di essere addestrato solo per etichette o compiti specifici, apprende dal linguaggio naturale stesso. Questo gli permette di gestire query flessibili come "un uomo che guida una moto d'acqua" o "un paesaggio onirico surreale", rendendolo utile per tutto, dalla classificazione alla ricerca semantica creativa, senza bisogno di riqualificarsi.

FAISS (Facebook AI Similarity Search) è un kit di strumenti che aiuta a cercare tra i vettori ad alta dimensionalità in modo molto efficiente. Una volta che CLIP ha trasformato le immagini in embeddings, FAISS consente di trovare in modo semplice e veloce le corrispondenze più vicine a una query di testo, perfetto per il recupero di immagini in tempo reale.

Perché utilizzare il sistema Ultralytics Python se CLIP e FAISS sono di OpenAI e Meta?

Mentre CLIP e FAISS sono stati sviluppati rispettivamente da OpenAI e Meta, il pacchettoUltralytics Python ne semplifica l'integrazione in una pipeline completa di ricerca semantica di immagini in un flusso di lavoro a due linee che funziona:

Ricerca di immagini simili

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

Questa implementazione di alto livello gestisce:

  • Generazione di immagini e testi incorporati basata su CLIP.
  • Creazione e gestione dell'indice FAISS.
  • Ricerca semantica efficiente con la similarità del coseno.
  • Caricamento e visualizzazione di immagini basate su directory.

Posso personalizzare il frontend di questa applicazione?

Sì, è assolutamente possibile. La configurazione attuale utilizza Flask con un frontend HTML di base, ma siete liberi di inserire il vostro HTML o di costruire qualcosa di più dinamico con React, Vue o un altro framework di frontend. Flask può facilmente fungere da API di backend per la vostra interfaccia personalizzata.

È possibile effettuare una ricerca attraverso i video anziché le immagini statiche?

Non direttamente, ma c'è una semplice soluzione. È possibile estrarre singoli fotogrammi dai video (ad esempio, uno al secondo), trattarli come immagini a sé stanti e inserirli nel sistema. In questo modo, il motore di ricerca può indicizzare semanticamente i momenti visivi dei video.



📅 Creato 25 giorni fa ✏️ Aggiornato 23 giorni fa

Commenti