ادغام جاسازی کننده های تصویر

جاسازی‌کننده‌های تصویر اجازه می‌دهند تا تصاویر را در یک بردار ویژگی با ابعاد بالا تعبیه کنند که معنای معنایی یک تصویر را نشان می‌دهد، که سپس می‌تواند با بردار ویژگی سایر تصاویر مقایسه شود تا شباهت معنایی آنها ارزیابی شود.

برخلاف جستجوی تصویر ، جاسازی‌کننده تصویر به جای جستجو در فهرست از پیش تعریف‌شده‌ای که از مجموعه‌ای از تصاویر ساخته شده است، امکان محاسبه شباهت بین تصاویر را در لحظه فراهم می‌کند.

از Task Library ImageEmbedder API برای استقرار جاسازی کننده تصویر سفارشی خود در برنامه های تلفن همراه خود استفاده کنید.

ویژگی های کلیدی ImageEmbedder API

  • پردازش تصویر ورودی، از جمله چرخش، تغییر اندازه و تبدیل فضای رنگ.

  • منطقه مورد علاقه تصویر ورودی.

  • تابع ابزار داخلی برای محاسبه شباهت کسینوس بین بردارهای ویژگی.

مدل های جاسازی تصویر پشتیبانی شده

مدل های زیر تضمین شده است که با ImageEmbedder API سازگار هستند.

استنتاج را در 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

مرحله 2: استفاده از مدل

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 به کد منبع مراجعه کنید.

نتایج نمونه

شباهت کسینوس بین بردارهای ویژگی نرمال شده امتیازی بین -1 و 1 برمی‌گرداند. بالاتر بهتر است، یعنی شباهت کسینوس 1 به معنای یکسان بودن دو بردار است.

Cosine similarity: 0.954312

ابزار آزمایشی ساده CLI را برای ImageEmbedder با مدل و داده های آزمایشی خود امتحان کنید.

الزامات سازگاری مدل

ImageEmbedder API انتظار دارد یک مدل TFLite با فراداده مدل TFLite اختیاری، اما به شدت توصیه شده باشد.

مدل‌های جاسازی تصویر سازگار باید شرایط زیر را برآورده کنند:

  • یک تانسور تصویر ورودی (kTfLiteUInt8/kTfLiteFloat32)

    • اندازه ورودی تصویر [batch x height x width x channels] .
    • استنتاج دسته ای پشتیبانی نمی شود ( batch باید 1 باشد).
    • فقط ورودی های RGB پشتیبانی می شوند ( channels باید 3 باشند).
    • اگر نوع kTfLiteFloat32 باشد، برای عادی سازی ورودی، باید NormalizationOptions به ابرداده پیوست شود.
  • حداقل یک تانسور خروجی (kTfLiteUInt8/kTfLiteFloat32)

    • با N مولفه مربوط به ابعاد N بردار ویژگی بازگشتی برای این لایه خروجی.
    • یا 2 یا 4 بعد، یعنی [1 x N] یا [1 x 1 x 1 x N] .