Grazie per esserti sintonizzato su Google I/O. Visualizza tutte le sessioni su richiesta Guarda su richiesta

Integra gli incorporatori di immagini, integra gli incorporatori di immagini, integra gli incorporatori di immagini

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 .

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.
  • Almeno un tensore di uscita (kTfLiteUInt8/kTfLiteFloat32)

    • con N componenti corrispondenti alle N 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] .