Средства встраивания изображений позволяют встраивать изображения в многомерный вектор признаков, представляющий семантическое значение изображения, который затем можно сравнить с вектором признаков других изображений, чтобы оценить их семантическое сходство.
В отличие от поиска изображений , средство для встраивания изображений позволяет вычислять сходство между изображениями на лету вместо поиска по предопределенному индексу, созданному на основе набора изображений.
Используйте API ImageEmbedder
библиотеки задач, чтобы развернуть собственное средство внедрения изображений в мобильные приложения.
Ключевые особенности API ImageEmbedder
Обработка входного изображения, включая вращение, изменение размера и преобразование цветового пространства.
Область интереса входного изображения.
Встроенная служебная функция для вычисления косинусного сходства между векторами признаков.
Поддерживаемые модели для внедрения изображений
Следующие модели гарантированно совместимы с API ImageEmbedder
.
Векторные модели функций из коллекции Google Image Modules на Kaggle Models .
Пользовательские модели, соответствующие требованиям совместимости моделей .
Запустить вывод на 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());
Дополнительные параметры настройки ImageEmbedder
см. в исходном коде .
Запустить вывод в Python
Шаг 1. Установите пакет поддержки Pypi TensorFlow Lite.
Вы можете установить пакет поддержки Pypi TensorFlow Lite, используя следующую команду:
pip install tflite-support
Шаг 2: Использование модели
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)
Дополнительные параметры настройки ImageEmbedder
см. в исходном коде .
Примеры результатов
Косинусное сходство между нормализованными векторами признаков возвращает оценку от -1 до 1. Чем выше, тем лучше, т. е. косинусное сходство, равное 1, означает, что два вектора идентичны.
Cosine similarity: 0.954312
Попробуйте простой демонстрационный инструмент CLI для ImageEmbedder с собственной моделью и тестовыми данными.
Требования совместимости модели
API ImageEmbedder
ожидает модель TFLite с необязательными, но настоятельно рекомендуемыми метаданными модели TFLite .
Совместимые модели устройств для внедрения изображений должны соответствовать следующим требованиям:
Тензор входного изображения (kTfLiteUInt8/kTfLiteFloat32)
- Ввод изображения размера
[batch x height x width x channels]
. - Пакетный вывод не поддерживается (
batch
должен быть равен 1). - поддерживаются только входы RGB (
channels
должно быть 3). - если тип — kTfLiteFloat32, параметры NormalizationOptions необходимо прикрепить к метаданным для нормализации ввода.
- Ввод изображения размера
Хотя бы один выходной тензор (kTfLiteUInt8/kTfLiteFloat32)
- с
N
компонентами, соответствующимиN
измерениям возвращенного вектора признаков для этого выходного слоя. - Либо 2, либо 4 измерения, т.е.
[1 x N]
или[1 x 1 x 1 x N]
.
- с