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ơ đặc trưng chiều cao biểu thị ý nghĩa ngữ nghĩa của hình ảnh, sau đó có thể so sánh với vectơ đặc trưng của các hình ảnh khác để đánh giá độ tương tự về ngữ nghĩa của chúng.

Ngược lại với tìm kiếm hình ảnh , trình 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 một chỉ mục được xác định trước được xây dựng từ một kho 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 tùy chỉnh vào ứng dụng di động của bạn.

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

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

  • Vùng 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 tự cosin giữa các vectơ đặc trưng.

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

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

Chạy suy luậ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 để biết thêm tùy chọn 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 Pypi hỗ trợ TensorFlow Lite 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)

Xem mã nguồn để biết thêm tùy chọn cấu hình ImageEmbedder .

Kết quả ví dụ

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

Cosine similarity: 0.954312

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

Yêu cầu tương thích mô hình

API ImageEmbedder yêu cầu một mô hình TFLite với Siêu dữ liệu mô hình TFLite tùy chọn nhưng được khuyến khích mạnh mẽ.

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

  • Tenxơ 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] .
    • suy luận hàng loạt không được hỗ trợ ( batch buộc phải là 1).
    • chỉ hỗ trợ đầu vào RGB ( channels bắt buộc phải là 3).
    • nếu loại là kTfLiteFloat32 thì bắt buộc phải đính kèm NormalizationOptions vào siêu dữ liệu để chuẩn hóa đầu vào.
  • Ít nhất một tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)

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