שילוב של מטמיעי תמונות

כלי הטמעה של תמונות מאפשרים הטמעת תמונות בווקטור מאפיין של ממדים גבוהים שמייצג את המשמעות הסמנטית של תמונה, ואז אפשר להשוות אותה את הווקטור המאפיין של תמונות אחרות כדי להעריך את הדמיון הסמנטי שלהן.

בניגוד ל- חיפוש תמונות, כלי הטמעת התמונות מאפשר לחשב את הדמיון בין תמונות בזמן אמת במקום לחפש באינדקס מוגדר מראש שנוצר מתוך אוסף של תמונות.

משתמשים ב-API של ספריית המשימות ImageEmbedder כדי לפרוס את כלי ההטמעה של תמונות בהתאמה אישית לאפליקציות שלכם לנייד.

תכונות מרכזיות של 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.

הרצת ההסקה ב-Python

שלב 1: מתקינים את חבילת התמיכה TensorFlow Lite מסוג Pypi.

אפשר להתקין את חבילת Pypi לתמיכה של TensorFlow Lite באמצעות הפקודה:

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 את המודל ונתוני הבדיקה שלכם.

דרישות התאימות של המודלים

ה-API ImageEmbedder מצפה למודל TFLite עם אפשרות, אבל חזקה מאוד מומלץ מטא-נתונים של מודל TFLite.

הדגמים התואמים של הטמעות התמונות צריכים לעמוד בדרישות הבאות:

  • טנזור תמונה של קלט (kTfLiteUInt8/kTfLiteFloat32)

    • קלט תמונה בגודל [batch x height x width x channels].
    • אין תמיכה בהֶקֵּשׁ מנתונים מרובים (הפונקציה batch חייבת להיות 1).
    • יש תמיכה רק בקלט RGB (הערך channels חייב להיות 3).
    • אם הסוג הוא kTfLiteFloat32, יש צורך ב-regularizationOptions מצורפים למטא-נתונים לצורך נירמול הקלט.
  • לפחות טינזור אחד של פלט (kTfLiteUInt8/kTfLiteFloat32)

    • עם N רכיבים שתואמים למידות N של המוחזר לשכבת הפלט הזו.
    • 2 או 4 מאפיינים, כלומר [1 x N] או [1 x 1 x 1 x N].