Google I / Oが5月18〜20日に戻ってきます。スペースを予約してスケジュールを作成する今すぐ登録する

画像の一般的な署名

このページでは、画像関連のタスクのためにTF1ハブ形式のモジュールによって実装される必要がある一般的な署名について説明します。 ( TF2 SavedModel形式については、類似のSavedModel APIを参照してください。)

一部のモジュールは複数のタスクに使用できます(たとえば、画像分類モジュールは途中で特徴抽出を行う傾向があります)。したがって、各モジュールは、(1)発行者が予期するすべてのタスクに名前付き署名を提供し、(2)指定されたプライマリタスクにデフォルトの署名output = m(images)提供します。

画像特徴ベクトル

使用方法の概要

画像特徴ベクトルは、通常は消費者モデルによる分類のために、画像全体を表す高密度の1次元テンソルです。 (CNNの中間アクティベーションとは異なり、空間的な内訳は提供されません。画像分類とは異なり、パブリッシャーモデルによって学習された分類は破棄されます。)

画像特徴抽出用のモジュールには、画像のバッチを特徴ベクトルのバッチにマップするデフォルトの署名があります。それは次のように使用できます:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

また、対応する名前付き署名も定義します。

署名仕様

画像特徴ベクトルを抽出するための名前付き署名は、次のように呼び出されます。

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

入力は、画像の入力に関する一般的な規則に従います

出力ディクショナリには、 float32とshape [batch_size, num_features] "default"出力が含まれてい"default"batch_sizeは入力と同じですが、グラフの作成時にはbatch_sizeません。 num_featuresは、入力サイズに依存しない既知のモジュール固有の定数です。

これらの特徴ベクトルは、単純なフィードフォワード分類器を使用した分類に使用できるようになっています(画像分類用の一般的なCNNの最上位の畳み込み層からプールされた特徴など)。

ドロップアウトの出力機能への適用(または適用しない)は、モジュールコンシューマーに任せる必要があります。モジュール自体は、実際の出力でドロップアウトを実行しないでください(他の場所で内部的にドロップアウトを使用している場合でも)。

出力ディクショナリは、たとえば、モジュール内の隠れ層のアクティブ化など、さらに出力を提供する場合があります。それらのキーと値はモジュールに依存します。アーキテクチャに依存するキーの前にアーキテクチャ名を付けることをお勧めします(たとえば、中間層"InceptionV3/Mixed_5c"と最上位の畳み込み層"InceptionV2/Mixed_5c"混同しないようにするため)。

画像分類

使用方法の概要

画像分類、モジュール発行者によって選択された分類法のクラスのメンバーシップについて、画像のピクセルを線形スコア(ロジット)にマップします。これにより、消費者は、基礎となる特徴だけでなく、パブリッシャーモジュールによって学習された特定の分類から結論を引き出すことができます(画像特徴ベクトルを参照)。

画像特徴抽出用のモジュールには、画像のバッチをロジットのバッチにマップするデフォルトの署名があります。それは次のように使用できます:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

また、対応する名前付き署名も定義します。

署名仕様

画像特徴ベクトルを抽出するための名前付き署名は、次のように呼び出されます。

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

入力は、画像の入力に関する一般的な規則に従います

出力ディクショナリには、 float32とshape [batch_size, num_classes] "default"出力が含まれてい"default"batch_sizeは入力と同じですが、グラフの作成時にはbatch_sizeません。 num_classesは分類内のクラスの数であり、入力サイズに依存しない既知の定数です。

output outputs["default"][i, c]を評価すると、インデックスcクラスの例iのメンバーシップを予測するスコアが得られc

これらのスコアがsoftmax(相互に排他的なクラスの場合)、sigmoid(直交クラスの場合)、またはその他の何かで使用されることを意図しているかどうかは、基礎となる分類によって異なります。モジュールのドキュメントでは、これについて説明し、クラスインデックスの定義を参照する必要があります。

出力ディクショナリは、たとえば、モジュール内の非表示レイヤーのアクティブ化など、さらに出力を提供する場合があります。それらのキーと値はモジュールに依存します。アーキテクチャに依存するキーの前にアーキテクチャ名を付けることをお勧めします(たとえば、中間層"InceptionV3/Mixed_5c"と最上位の畳み込み層"InceptionV2/Mixed_5c"混同しないようにするため)。

画像入力

これは、すべてのタイプの画像モジュールと画像署名に共通です。

画像のバッチを入力として受け取るシグニチャは、画像をdtype float32および形状[batch_size, height, width, 3]密な4Dテンソルとして受け入れます[batch_size, height, width, 3]その要素は、範囲[0、1]に正規化されたピクセルのRGBカラー値です。 。これは、 tf.image.decode_*()後にtf.image.convert_image_dtype(..., tf.float32)続くことから得られるものです。

画像の入力が1つ(またはプリンシパル)だけのモジュールでは、この入力に"images"という名前が使用されます。

モジュールは任意のbatch_size受け入れ、それに応じてTensorInfo.tensor_shapeの最初の次元を「不明」に設定します。最後の次元は、RGBチャネルの数3に固定されています。 heightwidth寸法は、入力画像の予想サイズに固定されています。 (将来の作業により、完全畳み込みモジュールに対するその制限が削除される可能性があります。)

モジュールの利用者は、形状を直接検査するのではなく、モジュールまたはモジュールの仕様でhub.get_expected_image_size()を呼び出してサイズ情報を取得し、それに応じて入力画像のサイズを変更する必要があります(通常はバッチ処理前/バッチ処理中)。

簡単にするために、TF-HubモジュールはNHWCchannels_last (またはNHWC )レイアウトを使用し、必要に応じてそれをTensorFlowのグラフオプティマイザーに任せてchannels_first (またはNCHW )に書き換えます。 TensorFlowバージョン1.7以降、デフォルトでこれを行っています。