Интегрируйте программы для внедрения изображений

Средства встраивания изображений позволяют встраивать изображения в многомерный вектор признаков, представляющий семантическое значение изображения, который затем можно сравнить с вектором признаков других изображений, чтобы оценить их семантическое сходство.

В отличие от поиска изображений , средство для встраивания изображений позволяет вычислять сходство между изображениями на лету вместо поиска по предопределенному индексу, созданному на основе набора изображений.

Используйте API ImageEmbedder библиотеки задач, чтобы развернуть собственное средство внедрения изображений в мобильные приложения.

Ключевые особенности API ImageEmbedder

  • Обработка входного изображения, включая вращение, изменение размера и преобразование цветового пространства.

  • Область интереса входного изображения.

  • Встроенная служебная функция для вычисления косинусного сходства между векторами признаков.

Поддерживаемые модели для внедрения изображений

Следующие модели гарантированно совместимы с API ImageEmbedder .

Запустить вывод на 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] .