Gli incorporatori di immagini consentono di incorporare immagini in un vettore delle caratteristiche ad alta dimensionalità che rappresenta il significato semantico di un'immagine, che può poi essere confrontato con il vettore delle caratteristiche di altre immagini per valutarne la somiglianza semantica.
A differenza della ricerca di immagini, l'incorporatore di immagini consente di calcolare la somiglianza tra le immagini al volo anziché eseguire ricerche in un indice predefinito creato da un corpus di immagini.
Utilizza l'API Task Library ImageEmbedder per implementare l'incorporatore di immagini personalizzato
nelle tue app mobile.
Funzionalità chiave dell'API ImageEmbedder
Elaborazione dell'immagine di input, inclusi rotazione, ridimensionamento e conversione dello spazio colore.
Regione di interesse dell'immagine di input.
Funzione di utilità integrata per calcolare la similarità del coseno tra i vettori delle caratteristiche.
Modelli di incorporamento di immagini supportati
I seguenti modelli sono garantiti per essere compatibili con l'API ImageEmbedder.
Modelli di vettori di caratteristiche della raccolta di moduli di Google Image su Kaggle Models.
Modelli personalizzati che soddisfano i requisiti di compatibilità dei modelli.
Esegui l'inferenza in C++
// Initialization
ImageEmbedderOptions options:
options.mutable_model_file_with_metadata()->set_file_name(model_path);
options.set_l2_normalize(true);
std::unique_ptr<ImageEmbedder> image_embedder = ImageEmbedder::CreateFromOptions(options).value();
// Create input frame_buffer_1 and frame_buffer_2 from your inputs `image_data1`, `image_data2`, `image_dimension1` and `image_dimension2`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer_1 = CreateFromRgbRawBuffer(
image_data1, image_dimension1);
std::unique_ptr<FrameBuffer> frame_buffer_2 = CreateFromRgbRawBuffer(
image_data2, image_dimension2);
// Run inference on two images.
const EmbeddingResult result_1 = image_embedder->Embed(*frame_buffer_1);
const EmbeddingResult result_2 = image_embedder->Embed(*frame_buffer_2);
// Compute cosine similarity.
double similarity = ImageEmbedder::CosineSimilarity(
result_1.embeddings[0].feature_vector(),
result_2.embeddings[0].feature_vector());
Consulta il codice
sorgente
per altre opzioni di configurazione di ImageEmbedder.
Esegui l'inferenza in Python
Passaggio 1: installa il pacchetto Pypi di TensorFlow Lite Support.
Puoi installare il pacchetto Pypi di TensorFlow Lite Support utilizzando il seguente comando:
pip install tflite-support
Passaggio 2: utilizza il modello
from tflite_support.task import vision
# Initialization.
image_embedder = vision.ImageEmbedder.create_from_file(model_path)
# Run inference on two images.
image_1 = vision.TensorImage.create_from_file('/path/to/image1.jpg')
result_1 = image_embedder.embed(image_1)
image_2 = vision.TensorImage.create_from_file('/path/to/image2.jpg')
result_2 = image_embedder.embed(image_2)
# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = image_embedder.cosine_similarity(
result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)
Consulta il codice
sorgente
per altre opzioni di configurazione di ImageEmbedder.
Risultati di esempio
La similarità del coseno tra i vettori delle caratteristiche normalizzati restituisce un punteggio compreso tra -1 e 1. Più è alto, meglio è. Ad esempio, una similarità del coseno pari a 1 significa che i due vettori sono identici.
Cosine similarity: 0.954312
Prova il semplice strumento demo CLI per ImageEmbedder con il tuo modello e i tuoi dati di test.
Requisiti di compatibilità del modello
L'API ImageEmbedder prevede un modello TFLite con metadati del modello TFLite facoltativi, ma fortemente consigliati.
I modelli di incorporamento di immagini compatibili devono soddisfare i seguenti requisiti:
Un tensore di immagini di input (kTfLiteUInt8/kTfLiteFloat32)
- input immagine di dimensioni
[batch x height x width x channels]. - L'inferenza batch non è supportata (
batchdeve essere 1). - sono supportati solo gli input RGB (
channelsdeve essere 3). - Se il tipo è kTfLiteFloat32, è necessario allegare NormalizzazioneOptions ai metadati per la normalizzazione dell'input.
- input immagine di dimensioni
Almeno un tensore di output (kTfLiteUInt8/kTfLiteFloat32)
- con
Ncomponenti corrispondenti alleNdimensioni del vettore delle caratteristiche restituito per questo livello di output. - Due o quattro dimensioni, ovvero
[1 x N]o[1 x 1 x 1 x N].
- con