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.
TensorFlow Hub'daki Google Görsel Modülleri koleksiyonundan özellik vektör modelleri.
Model uyumluluk gereksinimlerini karşılayan özel modeller.
Çı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.
- boyut görüntü girişi
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 gelenN
bileşenle. - 2 veya 4 boyut, yani
[1 x N]
veya[1 x 1 x 1 x N]
.
- bu çıktı katmanı için döndürülen özellik vektörünün