Los incorporadores de imágenes permiten incorporar imágenes en un vector de atributos de alta dimensión que representa 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 la búsqueda de imágenes, el modelo de incorporación de imágenes permite calcular la similitud entre imágenes de forma instantánea en lugar de buscar en un índice predefinido creado a partir de un corpus de imágenes.
Usa la API de la biblioteca de tareas ImageEmbedder para implementar tu modelo personalizado de incorporación de imágenes en tus apps para dispositivos móviles.
Funciones clave de la API de ImageEmbedder
Procesamiento de imágenes de entrada, incluida la rotación, el cambio de tamaño y la conversión del espacio de color
Región de interés de la imagen de entrada.
Función de utilidad integrada para calcular la similitud del coseno entre vectores de características.
Modelos de incorporación de imágenes compatibles
Se garantiza que los siguientes modelos son compatibles con la API de ImageEmbedder.
Modelos de vectores de atributos de la colección de módulos de imágenes de Google en Kaggle Models.
Modelos personalizados que cumplen con los requisitos de compatibilidad del modelo.
Ejecuta la inferencia 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 el código fuente para obtener más opciones para configurar ImageEmbedder.
Ejecuta la inferencia en Python
Paso 1: Instala el paquete Pypi de compatibilidad con TensorFlow Lite.
Puedes instalar el paquete de Pypi de TensorFlow Lite Support con el siguiente comando:
pip install tflite-support
Paso 2: Cómo usar 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 el código fuente para obtener más opciones para configurar ImageEmbedder.
Resultados de ejemplo
La similitud coseno entre los vectores de características normalizados devuelve una puntuación entre -1 y 1. Cuanto más alto sea el valor, mejor será el resultado. Es decir, una similitud coseno de 1 significa que los dos vectores son idénticos.
Cosine similarity: 0.954312
Prueba la sencilla 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 metadatos del modelo de TFLite opcionales, pero muy recomendados.
Los modelos de incorporación de imágenes compatibles deben cumplir con los siguientes requisitos:
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 (
batchdebe ser 1). - Solo se admiten entradas RGB (
channelsdebe ser 3). - Si el tipo es kTfLiteFloat32, se requiere que NormalizationOptions se adjunte a los metadatos para la normalización de la entrada.
- Entrada de imagen de tamaño
Al menos un tensor de salida (kTfLiteUInt8/kTfLiteFloat32)
- con componentes
Nque corresponden a las dimensionesNdel vector de características devuelto para esta capa de salida. - 2 o 4 dimensiones, es decir,
[1 x N]o[1 x 1 x 1 x N]
- con componentes