Integra gli incorporatori di immagini

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.

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 (batch deve essere 1).
    • sono supportati solo gli input RGB (channels deve essere 3).
    • Se il tipo è kTfLiteFloat32, è necessario allegare NormalizzazioneOptions ai metadati per la normalizzazione dell'input.
  • Almeno un tensore di output (kTfLiteUInt8/kTfLiteFloat32)

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