Gli incorporatori di immagini consentono di incorporare immagini in un vettore di caratteristiche ad alta dimensionalità che rappresenta il significato semantico di un'immagine, che può quindi essere confrontato con il vettore di caratteristiche di altre immagini per valutare la loro somiglianza semantica.
A differenza della ricerca di immagini , l'incorporamento di immagini consente di calcolare al volo la somiglianza tra le immagini invece di cercare in un indice predefinito creato da un corpus di immagini.
Utilizza l'API ImageEmbedder
della libreria attività per distribuire l'incorporamento di immagini personalizzato nelle tue app mobili.
Funzionalità principali dell'API ImageEmbedder
Elaborazione delle immagini in ingresso, 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
È garantita la compatibilità dei seguenti modelli con l'API ImageEmbedder
.
Modelli vettoriali di funzionalità dalla raccolta 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());
Consulta 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 seguente comando:
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)
Consulta 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 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 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 immagine in input (kTfLiteUInt8/kTfLiteFloat32)
- input immagine di dimensioni
[batch x height x width x channels]
. - l'inferenza batch non è supportata (
batch
deve essere 1). - sono supportati solo gli ingressi RGB (
channels
devono essere 3). - se il tipo è kTfLiteFloat32, è necessario allegare NormalizationOptions ai metadati per la normalizzazione dell'input.
- input immagine di dimensioni
Almeno un tensore di uscita (kTfLiteUInt8/kTfLiteFloat32)
- con
N
componenti corrispondenti alleN
dimensioni del vettore di caratteristiche restituito per questo livello di output. - 2 o 4 dimensioni, ovvero
[1 x N]
o[1 x 1 x 1 x N]
.
- con