Resim yerleştiriciler, resimlerin anlamsal anlamını temsil eden yüksek boyutlu bir özellik vektörüne resimlerin yerleştirilmesine olanak tanır. Bu özellik vektörü, anlamsal benzerliklerini değerlendirmek için diğer resimlerin özellik vektörüyle karşılaştırılabilir.
Görsel arama'nın aksine, görsel yerleştirici, bir görsel derlemesinden oluşturulan önceden tanımlanmış bir dizinde arama yapmak yerine, görseller arasındaki benzerliği anında hesaplamaya olanak tanır.
Özel resim yerleştiricinizi mobil uygulamalarınıza dağıtmak için Görev Kitaplığı ImageEmbedder API'sini kullanın.
ImageEmbedder API'nin temel özellikleri
Döndürme, yeniden boyutlandırma ve renk alanı dönüştürme dahil olmak üzere giriş görüntüsü işleme.
Giriş resminin ilgi alanı.
Özellik vektörleri arasındaki kosinüs benzerliğini hesaplamak için yerleşik yardımcı işlev.
Desteklenen görüntü yerleştirme modelleri
Aşağıdaki modellerin ImageEmbedder
API ile uyumlu olduğu garanti edilir.
Kaggle'daki Google Image Modules koleksiyonundan Modeller özellik vektörü modelleri.
Model uyumluluğu koşullarını karşılayan özel modeller.
C++'ta çıkarım çalıştırma
// 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 yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.
Python'da çıkarım çalıştırma
1. adım: TensorFlow Lite Support Pypi paketini yükleyin.
Aşağıdaki komutu kullanarak TensorFlow Lite Support Pypi paketini yükleyebilirsiniz:
pip install tflite-support
2. adım: Modeli kullanma
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 yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.
Örnek sonuçlar
Normallenmiş özellik vektörleri arasındaki kosinüs benzerliği, -1 ile 1 arasında bir puan döndürür. Değer ne kadar yüksek olursa o kadar iyidir. Örneğin, kosinüs benzerliğinin 1 olması iki vektörün aynı olduğu anlamına gelir.
Cosine similarity: 0.954312
ImageEmbedder için basit CLI demo aracını kendi modeliniz ve test verilerinizle deneyin.
Model uyumluluğu koşulları
ImageEmbedder API, isteğe bağlı ancak kesinlikle önerilen TFLite Model Meta Verileri içeren bir TFLite modeli bekler.
Uyumlu resim yerleştirme modelleri aşağıdaki koşulları karşılamalıdır:
Giriş resmi tensörü (kTfLiteUInt8/kTfLiteFloat32)
[batch x height x width x channels]boyutunda görüntü girişi.- Toplu çıkarım desteklenmez (
batch1 olmalıdır). - Yalnızca RGB girişleri desteklenir (
channels3 olmalıdır). - Tür kTfLiteFloat32 ise giriş normalleştirme için NormalizationOptions'ın meta verilere eklenmesi gerekir.
En az bir çıkış tensörü (kTfLiteUInt8/kTfLiteFloat32)
- Bu çıkış katmanı için döndürülen özellik vektörünün
Nboyutlarına karşılık gelenNbileşenle. - 2 veya 4 boyut, yani
[1 x N]veya[1 x 1 x 1 x N].
- Bu çıkış katmanı için döndürülen özellik vektörünün