Tích hợp trình nhúng hình ảnh

Trình nhúng hình ảnh cho phép nhúng hình ảnh vào vectơ đối tượng nhiều chiều thể hiện ý nghĩa ngữ nghĩa của một hình ảnh, có thể được so sánh với vectơ đặc điểm của các hình ảnh khác để đánh giá sự tương đồng về mặt ngữ nghĩa của chúng.

Trái ngược với tìm kiếm hình ảnh, công cụ nhúng hình ảnh cho phép tính toán sự giống nhau giữa các hình ảnh một cách nhanh chóng thay vì tìm kiếm thông qua chỉ mục được xác định trước được xây dựng từ một tập hợp hình ảnh.

Sử dụng API ImageEmbedder của Thư viện tác vụ để triển khai trình nhúng hình ảnh tuỳ chỉnh vào ứng dụng dành cho thiết bị di động của bạn.

Các tính năng chính của API ImageEmbeddedder

  • Xử lý hình ảnh đầu vào, bao gồm xoay, đổi kích thước và hệ màu chuyển đổi.

  • Khu vực quan tâm của hình ảnh nhập vào.

  • Hàm hiệu dụng tích hợp sẵn để tính toán tính đồng dạng cosin giữa vectơ đặc trưng.

Các mô hình nhúng hình ảnh được hỗ trợ

Các mô hình sau đây được đảm bảo tương thích với ImageEmbedder API.

Chạy dự đoán trong 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());

Xem mã nguồn để có thêm lựa chọn để định cấu hình ImageEmbedder.

Chạy suy luận trong Python

Bước 1: Cài đặt gói TensorFlow Lite Support Pypi.

Bạn có thể cài đặt gói TensorFlow Lite Support Pypi bằng cách dùng như sau :

pip install tflite-support

Bước 2: Sử dụng mô hình

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)

Xem mã nguồn để có thêm lựa chọn để định cấu hình ImageEmbedder.

Kết quả mẫu

Sự tương đồng về cosin giữa các vectơ đặc trưng được chuẩn hoá trả về điểm trong khoảng -1 và 1. Càng cao càng tốt, tức là độ đồng dạng cosin bằng 1 có nghĩa là hai vectơ đó .

Cosine similarity: 0.954312

Thử mẹo đơn giản Công cụ minh hoạ CLI cho ImageNhúng thông qua mô hình và dữ liệu thử nghiệm của riêng bạn.

Yêu cầu về khả năng tương thích với mô hình

API ImageEmbedder mong đợi một mô hình TFLite với lựa chọn không bắt buộc, nhưng được đề xuất Siêu dữ liệu mô hình TFLite.

Các mô hình nhúng hình ảnh tương thích phải đáp ứng các yêu cầu sau:

  • Một tensor hình ảnh đầu vào (kTfLiteUInt8/kTfLiteFloat32)

    • hình ảnh đầu vào có kích thước [batch x height x width x channels].
    • không hỗ trợ suy luận theo lô (batch phải là 1).
    • chỉ hỗ trợ đầu vào RGB (bắt buộc phải có channels là 3).
    • nếu loại là kTfLiteFloat32, thì NormalizationOptions bắt buộc phải là được đính kèm với siêu dữ liệu để chuẩn hoá đầu vào.
  • Ít nhất một tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)

    • với các thành phần N tương ứng với kích thước N của giá trị được trả về vectơ đặc trưng của lớp đầu ra này.
    • 2 hoặc 4 phương diện, tức là [1 x N] hoặc [1 x 1 x 1 x N].