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
.
Các mô hình vectơ đặc trưng từ bộ sưu tập Mô-đun hình ảnh của Google trên TensorFlow Hub .
Các mô hình tùy chỉnh đáp ứng các yêu cầu về khả năng tương thích của mô hình .
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.
- hình ảnh đầu vào có kích thước
Ít nhất một tensor đầu ra (kTfLiteUInt8/kTfLiteFloat32)
- với
N
thành phần tương ứng vớiN
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]
.
- với