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 một vectơ đặc trưng có nhiều chiều, biểu thị ý nghĩa ngữ nghĩa của một hình ảnh. Sau đó, bạn có thể so sánh vectơ này với vectơ đặc trưng của các hình ảnh khác để đánh giá mức độ tương đồng về ngữ nghĩa.

Khác với tính năng tìm kiếm hình ảnh, trình nhúng hình ảnh cho phép tính toán mức độ tương đồng giữa các hình ảnh ngay lập tức thay vì tìm kiếm thông qua một chỉ mục được xác định trước được tạo từ một tập hợp hình ảnh.

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

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

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

  • Khu vực quan tâm của hình ảnh đầu vào.

  • Hàm tiện ích tích hợp để tính toán độ tương đồng cosine giữa các vectơ đối tượng.

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

Các mô hình sau đây chắc chắn sẽ tương thích với API ImageEmbedder.

Chạy suy luận bằng 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());

Hãy xem mã nguồn để biết thêm các 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 Pypi hỗ trợ TensorFlow Lite.

Bạn có thể cài đặt gói TensorFlow Lite Support Pypi bằng lệ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)

Hãy xem mã nguồn để biết thêm các lựa chọn định cấu hình ImageEmbedder.

Kết quả mẫu

Độ tương tự cosine giữa các vectơ đặc trưng được chuẩn hoá sẽ trả về điểm số từ -1 đến 1. Giá trị càng cao càng tốt, tức là độ tương đồng cosine bằng 1 có nghĩa là 2 vectơ giống hệt nhau.

Cosine similarity: 0.954312

Hãy dùng thử công cụ minh hoạ CLI đơn giản cho ImageEmbedder bằng mô hình và dữ liệu kiểm thử của riêng bạn.

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

API ImageEmbedder dự kiến sẽ có một mô hình TFLite với Siêu dữ liệu mô hình TFLite (không bắt buộc nhưng rất nên dùng).

Các mô hình trì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)

    • đầu vào hình ảnh 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 (channels phải là 3).
    • nếu loại là kTfLiteFloat32, bạn phải đính kèm NormalizationOptions vào siêu dữ liệu để chuẩn hoá dữ liệu đầ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 các phương diện N của vectơ đối tượng được trả về cho 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].