מודלים להטמעת תמונות מאפשרים להטמיע תמונות בווקטור תכונות רב-ממדי שמייצג את המשמעות הסמנטית של התמונה. לאחר מכן אפשר להשוות את הווקטור הזה לווקטור התכונות של תמונות אחרות כדי להעריך את הדמיון הסמנטי שלהן.
בניגוד לחיפוש תמונות, כלי ההטמעה של תמונות מאפשר לחשב את הדמיון בין תמונות תוך כדי תנועה, במקום לחפש באינדקס מוגדר מראש שנבנה ממאגר של תמונות.
משתמשים ב-Task Library ImageEmbedder API כדי לפרוס את כלי ההטמעה של תמונות מותאמות אישית באפליקציות לנייד.
התכונות העיקריות של ImageEmbedder API
עיבוד תמונת הקלט, כולל סיבוב, שינוי גודל והמרה של מרחב הצבעים.
אזור העניין בתמונת הקלט.
פונקציית כלי מובנית לחישוב דמיון הקוסינוס בין וקטורים של תכונות.
מודלים נתמכים להטמעת תמונות
המודלים הבאים תואמים בוודאות ל-API של ImageEmbedder.
מודלים של וקטורים של מאפיינים מאוסף מודולי התמונות של Google ב-Kaggle מודלים.
מודלים בהתאמה אישית שעומדים בדרישות התאימות למודלים.
הרצת הסקה ב-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 עם מודל ונתוני בדיקה משלכם.
דרישות התאימות של המודל
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].
- עם