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.
Giới thiệu mô hình vectơ từ Bộ sưu tập Mô-đun hình ảnh của Google trên các Mô hình Kaggle.
Mô hình tuỳ chỉnh đáp ứng yêu cầu về khả năng tương thích với mô hình.
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.
- hình ảnh đầu vào có kích thước
Í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ướcN
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]
.
- với các thành phần