Un articolo dimostrativo che sfrutta Python, Pinecone, Hugging Face e il modello Open AI CLIP per creare un’applicazione di ricerca semantica per le tue foto sul cloud.
Vuoi trovare “quella foto” di diversi anni fa. Ricordi alcuni dettagli sull’ambientazione. Apple Foto non offre la ricerca semantica e Google Foto è limitato ad alcuni classificatori di elementi predeterminati. Nessuno dei due andrà bene con questo tipo di ricerca. Dimostrerò il problema con due query insolite del mio Google Foto: “torta di compleanno con ciambella” e “labbro rotto da una battaglia a palle di neve”. Quindi condividerò come creare la tua applicazione di ricerca semantica di immagini.
Esempio 1
Mi piacciono le torte di compleanno. Mi piacciono anche le ciambelle. L’anno scorso ho avuto la brillante idea di combinare le due cose con una pila di ciambelle come torta di compleanno. Proviamo a trovarlo.
Domanda di Google Foto: “torta di compleanno con ciambella”
Risultati: Sei foto di torte senza ciambelle seguite da quella che volevo.
Query dell’app di ricerca semantica: “torta di compleanno con ciambella”
Risultati: Due immagini e un video che erano esattamente quello che volevo.
Esempio n.2
Sono andato sulla neve con mio figlio adolescente e un grande gruppo di suoi amici. Sono saliti in cima a un tunnel ferroviario abbandonato. “Lancia le palle di neve tutte in una volta e farò un video al rallentatore!”, ho urlato. Non è stato il mio momento più bello perché non prevedevo l’ovvia conclusione che sarei diventato il bersaglio di venti ragazzi dalle braccia forti.
Domanda di Google Foto: “labbro rotto a causa di una battaglia a palle di neve”
Risultati:
L’attuale modello di classificazione delle immagini di Google è limitato alle parole su cui è stato addestrato.
Query dell’app di ricerca semantica: “labbro rotto a causa di una battaglia a palle di neve”
Risultati: L’immagine del labbro rotto (non mostrata) e il video che ha preceduto il labbro rotto erano i risultati uno e due.
CLIP consente al modello di imparare come associare i pixel dell’immagine al testo e gli dà la flessibilità di cercare cose come “torte a ciambella” e “labbra rotte” – cose che non penseresti mai di includere quando addestri un classificatore di immagini. Sta per Constastive Language-Image Pretraining. È un modello open source, multimodale e zero-shot. È stato addestrato su milioni di immagini con didascalie descrittive.
Data un’immagine e le descrizioni testuali, il modello può prevedere la descrizione testuale più pertinente dell’immagine, senza eseguire l’ottimizzazione per un’attività particolare.
L’architettura CLIP che trovi nella maggior parte dei tutorial online è sufficiente per un POC ma non è pronta per l’azienda. In questi tutorial, i processori CLIP e Hugging Face mantengono gli incorporamenti in memoria per fungere da archivio vettoriale per l’esecuzione di punteggi di somiglianza e il recupero.
Un database vettoriale come Pinecone è un componente chiave per scalare un’applicazione come questa. Fornisce funzionalità semplificate, robuste e pronte per l’azienda come l’elaborazione batch e stream di immagini, la gestione aziendale degli incorporamenti, il recupero a bassa latenza e il filtraggio dei metadati.
Il codice e i file di supporto per questa applicazione sono disponibili su GitHub all’indirizzo https://github.com/joshpoduska/llm-image-caption-semantic-search. Usali per creare un’applicazione di ricerca semantica per le tue foto cloud.
L’applicazione viene eseguita localmente su un laptop con memoria sufficiente. L’ho testato su un MacBook Pro.
Componenti necessari per creare l’app
- Pigna o database vettoriale simile per incorporare archiviazione e ricerca semantica (la versione gratuita di Pinecone è sufficiente per questo tutorial)
- Volto che abbraccia modelli e condutture
- OpenAI CLIP modello per la creazione di incorporamenti di immagini e testi di query (accessibile da Hugging Face)
- API di Google Foto per accedere alle tue Google Foto personali
Informazioni utili prima di iniziare
Accedi alle tue immagini
L’API di Google Foto ha diversi campi dati chiave degni di nota. Vedere il riferimento API per ulteriori dettagli.
- Id è immutabile
- baseUrl consente di accedere ai byte degli elementi multimediali. Hanno una validità di 60 minuti.
Una combinazione di librerie Panda, JSON e richieste può essere utilizzata direttamente per caricare un DataFrame di ID immagine, URL e date.
Genera incorporamenti di immagini
Con Hugging Face e il modello OpenAI CLIP, questo passaggio è il più semplice dell’intera applicazione.
from sentence_transformers import SentenceTransformer
img_model = SentenceTransformer('clip-ViT-B-32')
embeddings = img_model.encode(images)
Creazione di metadati
La ricerca semantica è spesso migliorata con filtri di metadati. In questa applicazione utilizzo la data della foto per estrarre l’anno, il mese e il giorno. Questi vengono memorizzati come dizionario in un campo DataFrame. Le query Pinecone possono utilizzare questo dizionario per filtrare le ricerche in base ai metadati nel dizionario.
Ecco la prima riga del mio DataFrame Panda con i campi immagine, i vettori e il campo del dizionario dei metadati.
Carica gli incorporamenti
Sono disponibili ottimizzazioni Pinecone per il caricamento asincrono e parallelo. La funzione di caricamento di base è semplice, come segue.
index.upsert(vectors=ids_vectors_chunk, async_req=True)
Incorporamenti di query
Per interrogare le immagini con il modello CLIP, dobbiamo passargli il testo della nostra query semantica. Ciò è facilitato caricando il modello di incorporamento del testo CLIP.
text_model = SentenceTransformer(‘sentence-transformers/clip-ViT-B-32-multilingual-v1’)
Ora possiamo creare un incorporamento per la nostra frase di ricerca e confrontarlo con gli incorporamenti delle immagini archiviate in Pinecone.
# create the query vector
xq = text_model.encode(query).tolist()# now query
xc = index.query(xq,
filter= {
"year": {"$in":years_filter},
"month": {"$in":months_filter}
},
top_k= top_k,
include_metadata=True)
Il modello CLIP è sorprendente. Si tratta di un modello di conoscenza generale, zero-shot, che ha imparato ad associare le immagini al testo in un modo che lo libera dai vincoli di addestrare un classificatore di immagini su classi predefinite. Combinando tutto questo con la potenza di un database vettoriale di livello aziendale come Pinecone, possiamo creare applicazioni di ricerca semantica di immagini con bassa latenza e alta fedeltà. Questa è solo una delle entusiasmanti applicazioni dell’intelligenza artificiale generativa che spuntano ogni giorno.
Fonte: towardsdatascience.com