جاسازیکنندههای تصویر امکان جاسازی تصاویر را در یک بردار ویژگی با ابعاد بالا که نمایانگر معنای معنایی یک تصویر است، فراهم میکنند که سپس میتوان آن را با بردار ویژگی تصاویر دیگر مقایسه کرد تا شباهت معنایی آنها ارزیابی شود.
برخلاف جستجوی تصویر ، ابزار جاسازی تصویر به شما امکان میدهد به جای جستجو از طریق یک فهرست از پیش تعریف شده که از مجموعهای از تصاویر ساخته شده است، شباهت بین تصاویر را در لحظه محاسبه کنید.
از API مربوط به Task Library ImageEmbedder برای پیادهسازی ابزار جاسازی تصویر سفارشی خود در برنامههای تلفن همراه استفاده کنید.
ویژگیهای کلیدی API مربوط به ImageEmbedder
پردازش تصویر ورودی، شامل چرخش، تغییر اندازه و تبدیل فضای رنگ.
ناحیه مورد نظر تصویر ورودی.
تابع سودمندی داخلی برای محاسبه شباهت کسینوسی بین بردارهای ویژگی.
مدلهای پشتیبانیشده برای جاسازی تصویر
مدلهای زیر تضمین میکنند که با API ImageEmbedder سازگار باشند.
مدلهای بردار ویژگی از مجموعه ماژولهای تصویر گوگل در Kaggle Models .
مدلهای سفارشی که الزامات سازگاری مدل را برآورده میکنند.
اجرای استنتاج در ++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());
برای گزینههای بیشتر برای پیکربندی ImageEmbedder به کد منبع مراجعه کنید.
اجرای استنتاج در پایتون
مرحله 1: بسته TensorFlow Lite Support Pypi را نصب کنید.
شما میتوانید بسته TensorFlow Lite Support Pypi را با استفاده از دستور زیر نصب کنید:
pip install tflite-support
مرحله ۲: استفاده از مدل
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)
برای گزینههای بیشتر برای پیکربندی ImageEmbedder به کد منبع مراجعه کنید.
نتایج مثال
شباهت کسینوسی بین بردارهای ویژگی نرمالشده، امتیازی بین -۱ و ۱ برمیگرداند. هرچه این امتیاز بالاتر باشد، بهتر است، یعنی شباهت کسینوسی ۱ به این معنی است که دو بردار یکسان هستند.
Cosine similarity: 0.954312
ابزار آزمایشی سادهی CLI برای ImageEmbedder را با مدل و دادههای آزمایشی خودتان امتحان کنید.
الزامات سازگاری مدل
رابط برنامهنویسی کاربردی ImageEmbedder انتظار یک مدل TFLite با فراداده مدل TFLite را دارد که اختیاری است، اما اکیداً توصیه میشود.
مدلهای سازگار با جاسازی تصویر باید الزامات زیر را برآورده کنند:
یک تانسور تصویر ورودی (kTfLiteUInt8/kTfLiteFloat32)
- ورودی تصویر با اندازه
[batch x height x width x channels]. - استنتاج دستهای پشتیبانی نمیشود (
batchباید ۱ باشد). - فقط ورودیهای RGB پشتیبانی میشوند (
channelsباید ۳ باشد). - اگر نوع kTfLiteFloat32 باشد، برای نرمالسازی ورودی، لازم است NormalizationOptions به فرادادهها متصل شود.
- ورودی تصویر با اندازه
حداقل یک تانسور خروجی (kTfLiteUInt8/kTfLiteFloat32)
- با
Nمؤلفه مربوط بهNبُعد بردار ویژگی بازگشتی برای این لایه خروجی. - یا ۲ یا ۴ بُعد، یعنی
[1 x N]یا[1 x 1 x 1 x N].
- با