画像エンベッダーを統合する

画像エンベッダーを使用すると、画像の意味論的な意味を表す高次元の特徴ベクトルに画像を埋め込むことができ、他の画像の特徴ベクトルと比較して意味論的な類似性を評価できます。

画像検索とは対照的に、画像エンベッダーを使用すると、画像のコーパスから構築された事前定義されたインデックスを検索する代わりに、画像間の類似性をオンザフライで計算できます。

タスク ライブラリ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 は 2 つのベクトルが同一であることを意味します。

Cosine similarity: 0.954312

独自のモデルとテスト データを使用して、ImageEmbedder のシンプルな CLI デモ ツールを試してください。

モデルの互換性要件

ImageEmbedder API は、オプションですが強く推奨されるTFLite モデル メタデータを備えた TFLite モデルを想定しています。

互換性のある画像エンベッダー モデルは、次の要件を満たす必要があります。

  • 入力画像テンソル (kTfLiteUInt8/kTfLiteFloat32)

    • サイズ[batch x height x width x channels]の画像入力。
    • バッチ推論はサポートされていません ( batch 1 である必要があります)。
    • RGB 入力のみがサポートされています ( channels 3 である必要があります)。
    • type が kTfLiteFloat32 の場合、入力正規化のために NormalizationOptions をメタデータに付加する必要があります。
  • 少なくとも 1 つの出力テンソル (kTfLiteUInt8/kTfLiteFloat32)

    • N個のコンポーネントは、この出力層に対して返された特徴ベクトルのN次元に対応します。
    • 2 次元または 4 次元、つまり[1 x N]または[1 x 1 x 1 x N]