Os embedders permitem a incorporação de imagens em um vetor de recurso de alta dimensão que representam o significado semântico de uma imagem, que pode ser comparado com o vetor de recurso de outras imagens para avaliar a semelhança semântica delas.
Em oposição a pesquisa de imagens, o embedder de imagens permite calcular a semelhança entre imagens em tempo real em vez de pesquisar em um índice predefinido criado a partir de um corpus de imagens.
Use a API Task Library ImageEmbedder
para implantar o incorporador de imagem personalizado
aos seus apps para dispositivos móveis.
Principais recursos da API ImageEmbedder
Processamento de imagens de entrada, incluindo rotação, redimensionamento e espaço de cores e conversão em massa.
Região de interesse da imagem de entrada.
Função de utilitário integrada para calcular o similaridade por cosseno entre vetores de atributo.
Modelos de embedder de imagem com suporte
Os modelos a seguir têm a garantia de compatibilidade com o ImageEmbedder
API.
Modelos de vetores de atributos da Coleção de módulos de imagem do Google nos modelos do Kaggle.
Modelos personalizados que atendem aos requisitos de compatibilidade do modelo.
Executar inferência em 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());
Consulte a
código-fonte
para mais opções de configuração do ImageEmbedder
.
Executar inferência em Python
Etapa 1: instalar o pacote Pypi de suporte do TensorFlow Lite
Instale o pacote TensorFlow Lite Support Pypi usando o seguinte: comando:
pip install tflite-support
Etapa 2: uso do modelo
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)
Consulte a
código-fonte
para mais opções de configuração do ImageEmbedder
.
Resultados de exemplo
A semelhança de cosseno entre vetores de atributo normalizados retorna uma pontuação entre -1 e 1. Quanto maior, melhor. Por exemplo, uma semelhança de cosseno de 1 significa que os dois vetores são idênticos.
Cosine similarity: 0.954312
Teste a funcionalidade Ferramenta de demonstração da CLI para ImageEmbedder com seu próprio modelo e dados de teste.
Requisitos de compatibilidade do modelo
A API ImageEmbedder
espera um modelo TFLite com opcionais, mas fortemente
recomendado
Metadados de modelo do TFLite.
Os modelos de embedder de imagem compatíveis precisam atender aos seguintes requisitos:
Um tensor de imagem de entrada (kTfLiteUInt8/kTfLiteFloat32).
- entrada de imagem de tamanho
[batch x height x width x channels]
. - A inferência em lote não é compatível (
batch
precisa ser 1). - somente entradas RGB são compatíveis (
channels
precisa ser 3). - se o tipo for kTfLiteFloat32, as NormalizationOptions devem ser anexada aos metadados para normalização de entrada.
- entrada de imagem de tamanho
Pelo menos um tensor de saída (kTfLiteUInt8/kTfLiteFloat32)
- com componentes
N
correspondentes às dimensõesN
do retornado vetor de recurso para essa camada final. - Duas ou quatro dimensões, por exemplo,
[1 x N]
ou[1 x 1 x 1 x N]
.
- com componentes