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.
Mô hình vectơ đặc trưng trong Bộ sưu tập mô-đun hình ảnh của Google trên Kaggle Models.
Các mô hình tuỳ chỉnh đáp ứng yêu cầu về khả năng tương thích của mô hình.
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ô (
batchphải là 1). - chỉ hỗ trợ đầu vào RGB (
channelsphả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.
- đầu vào hình ảnh có kích thước
Ít nhất một tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)
- với các thành phần
Ntương ứng với các phương diệnNcủ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].
- với các thành phần