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

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

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

השתמש ב-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 .

הפעל מסקנות ב- Python

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

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

ה-API ImageEmbedder מצפה לדגם TFLite עם מטא נתונים אופציונליים, אך מומלצים מאוד.

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

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

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

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