Gli incorporatori di immagini consentono di incorporare immagini in un vettore di funzionalità ad alta dimensione che rappresenta il significato semantico di un'immagine, che può quindi essere confrontato con il vettore di funzionalità 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 invece di cercare attraverso un indice predefinito costruito da un corpus di immagini.
Usa l'API ImageEmbedder
della libreria delle attività per distribuire l'incorporamento di immagini personalizzato nelle tue app mobili.
Caratteristiche principali dell'API ImageEmbedder
Elaborazione dell'immagine di input, inclusa rotazione, ridimensionamento e conversione dello spazio colore.
Regione di interesse dell'immagine di input.
Funzione di utilità incorporata per calcolare la somiglianza 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
.
Presenta modelli vettoriali dalla raccolta di Google Image Modules su TensorFlow Hub .
Modelli personalizzati che soddisfano i requisiti di compatibilità del modello .
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());
Vedere il codice sorgente per ulteriori opzioni per configurare ImageEmbedder
.
Esegui l'inferenza in Python
Passaggio 1: installare il pacchetto Pypi di supporto TensorFlow Lite.
È possibile installare il pacchetto TensorFlow Lite Support Pypi utilizzando il comando seguente:
pip install tflite-support
Passaggio 2: utilizzo del 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)
Vedere il codice sorgente per ulteriori opzioni per configurare ImageEmbedder
.
Risultati di esempio
La somiglianza del coseno tra i vettori delle caratteristiche normalizzate restituisce un punteggio compreso tra -1 e 1. Più alto è meglio, ovvero una somiglianza del coseno di 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 prova.
Requisiti di compatibilità del modello
L'API ImageEmbedder
prevede un modello TFLite con metadati del modello TFLite opzionali, ma fortemente consigliati.
I modelli di incorporamento di immagini compatibili devono soddisfare i seguenti requisiti:
Un tensore dell'immagine di ingresso (kTfLiteUInt8/kTfLiteFloat32)
- input dell'immagine della dimensione
[batch x height x width x channels]
. - l'inferenza batch non è supportata (
batch
deve essere 1). - sono supportati solo gli ingressi RGB (i
channels
devono essere 3). - se il tipo è kTfLiteFloat32, NormalizationOptions deve essere allegato ai metadati per la normalizzazione dell'input.
- input dell'immagine della dimensione
Almeno un tensore di uscita (kTfLiteUInt8/kTfLiteFloat32)
- con
N
componenti corrispondenti alleN
dimensioni del vettore di feature restituito per questo livello di output. - 2 o 4 dimensioni, cioè
[1 x N]
o[1 x 1 x 1 x N]
.
- con