画像埋め込みツールを統合する

画像埋め込みを使用すると、高次元の特徴ベクトルに画像を埋め込むことが可能 画像の意味的な意味を表すもので、画像とラベルの 他の画像の特徴ベクトルを使用して、意味的類似性を評価します。

従来の 画像検索 画像エンべディングを使用すると、画像間の類似度をその場で計算できます。 イメージのコーパスから構築された事前定義されたインデックスを使って検索する代わりに、

タスク ライブラリの 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 サポート Pypi パッケージをインストールする

以下を使用して、TensorFlow Lite サポート Pypi パッケージをインストールできます。 command:

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 にする必要があります)。
    • 型が kTfLiteFloat32 の場合、NormalizationOptions は必須です。 メタデータにアタッチされるデータです。
  • 1 つ以上の出力テンソル(kTfLiteUInt8/kTfLiteFloat32)

    • 返された N ディメンションに対応する N コンポーネントを含む この出力レイヤの特徴ベクトルを指定します。
    • 2 つまたは 4 つのディメンション(例: [1 x N][1 x 1 x 1 x N])。