Las incorporaciones de imágenes permiten incorporar imágenes en un vector de atributos de alta dimensión que representan el significado semántico de una imagen, que luego se puede comparar con el vector de atributos de otras imágenes para evaluar su similitud semántica.
A diferencia de búsqueda con imágenes, la incorporación de imágenes permite calcular la similitud entre imágenes sobre la marcha en lugar de buscar en un índice predefinido creado a partir de un corpus de imágenes.
Usa la API de ImageEmbedder
de la Biblioteca de tareas para implementar tu incorporación de imágenes personalizada
en tus aplicaciones móviles.
Funciones clave de la API de ImageEmbedder
Procesamiento de imágenes de entrada, incluidos la rotación, el cambio de tamaño y el espacio de color conversión.
Región de interés de la imagen de entrada.
Es una función de utilidad incorporada para calcular similitud coseno entre vectores de atributos.
Modelos de incorporaciones de imágenes compatibles
Se garantiza la compatibilidad de los siguientes modelos con ImageEmbedder
en la API de Cloud.
Modelos de vectores de atributos Colección de módulos de imagen de Google en modelos de Kaggle.
Los modelos personalizados que cumplen con los requisitos de compatibilidad del modelo.
Ejecuta inferencias en 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 la
código fuente
si quieres obtener más opciones para configurar ImageEmbedder
.
Ejecuta la inferencia en Python
Paso 1: Instala el paquete Pypi de asistencia de TensorFlow Lite
Puedes instalar el paquete de compatibilidad con Pypi de TensorFlow Lite con el siguiente comando: :
pip install tflite-support
Paso 2: Usa el 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)
Consulta la
código fuente
si quieres obtener más opciones para configurar ImageEmbedder
.
Resultados de ejemplo
La similitud coseno entre los vectores de atributos normalizados devuelve una puntuación entre -1 y 1. Cuanto mayor sea mejor, es decir, una similitud coseno de 1 significa que los dos vectores son idénticos.
Cosine similarity: 0.954312
Prueba lo sencillo Herramienta de demostración de la CLI para ImageEmbedder con tu propio modelo y datos de prueba.
Requisitos de compatibilidad del modelo
La API de ImageEmbedder
espera un modelo de TFLite con un modelo opcional, pero
recomendado
Metadatos del modelo de TFLite.
Los modelos de incorporaciones de imágenes compatibles deben cumplir con los siguientes requisitos:
Un tensor de imagen de entrada (kTfLiteUInt8/kTfLiteFloat32)
- entrada de imagen de tamaño
[batch x height x width x channels]
. - no se admite la inferencia por lotes (se requiere que
batch
sea 1). - Solo se admiten entradas RGB (se requiere que
channels
sea 3). - si el tipo es kTfLiteFloat32, NormalizationOptions debe se adjuntan a los metadatos para la normalización de entrada.
- entrada de imagen de tamaño
Al menos un tensor de salida (kTfLiteUInt8/kTfLiteFloat32)
- con componentes
N
correspondientes a las dimensionesN
del elemento que se muestra vector de atributos para esta capa de salida. - 2 o 4 dimensiones, p. ej.,
[1 x N]
o[1 x 1 x 1 x N]
- con componentes