Görüntü yerleştiricileri entegre edin

Görüntü gömücüler, görüntülerin bir görüntünün anlamsal anlamını temsil eden yüksek boyutlu bir özellik vektörüne gömülmesine olanak tanır; bu daha sonra anlamsal benzerliklerini değerlendirmek için diğer görüntülerin özellik vektörüyle karşılaştırılabilir.

Görsel aramanın aksine, görsel yerleştirme, bir görseller topluluğundan oluşturulan önceden tanımlanmış bir dizinde arama yapmak yerine, görseller arasındaki benzerliğin anında hesaplanmasına olanak tanır.

Özel görüntü 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ş görüntüsünün ilgi alanı.

  • Özellik vektörleri arasındaki kosinüs benzerliğini hesaplamak için yerleşik yardımcı fonksiyon.

Desteklenen görüntü yerleştirme modelleri

Aşağıdaki modellerin ImageEmbedder API ile uyumlu olduğu garanti edilir.

Çıkarımı C++'da ç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ırmaya yönelik daha fazla seçenek için kaynak koduna bakın.

Python'da çıkarımı çalıştırma

Adım 1: TensorFlow Lite Support Pypi paketini yükleyin.

TensorFlow Lite Support Pypi paketini aşağıdaki komutu kullanarak yükleyebilirsiniz:

pip install tflite-support

Adım 2: Modelin kullanılması

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ırmaya yönelik daha fazla seçenek için kaynak koduna bakın.

Örnek sonuçlar

Normalleştirilmiş özellik vektörleri arasındaki kosinüs benzerliği, -1 ile 1 arasında bir puan döndürür. Ne kadar yüksek olursa o kadar iyidir, yani 1'lik bir kosinüs benzerliği, iki vektörün aynı olduğu anlamına gelir.

Cosine similarity: 0.954312

Kendi modeliniz ve test verilerinizle ImageEmbedder için basit CLI demo aracını deneyin.

Model uyumluluk gereksinimleri

ImageEmbedder API, isteğe bağlı ancak şiddetle tavsiye edilen TFLite Model Meta Verilerine sahip bir TFLite modeli bekler.

Uyumlu görüntü yerleştirme modelleri aşağıdaki gereksinimleri karşılamalıdır:

  • Bir giriş görüntüsü tensörü (kTfLiteUInt8/kTfLiteFloat32)

    • boyut görüntü girişi [batch x height x width x channels] .
    • toplu çıkarım desteklenmiyor ( batch 1 olması gerekiyor).
    • yalnızca RGB girişleri desteklenir ( channels 3 olması gerekir).
    • tür kTfLiteFloat32 ise, giriş normalleştirmesi için normalizationOptions'ın meta verilere eklenmesi gerekir.
  • En az bir çıkış tensörü (kTfLiteUInt8/kTfLiteFloat32)

    • bu çıktı katmanı için döndürülen özellik vektörünün N boyutuna karşılık gelen N bileşenle.
    • 2 veya 4 boyut, yani [1 x N] veya [1 x 1 x 1 x N] .