日付を保存! Google I / Oが5月18日から20日に戻ってきます今すぐ登録
このページは Cloud Translation API によって翻訳されました。
Switch to English

画像タスク用の一般的なSavedModelAPI

このページでは、方法について説明しTF2 SavedModels画像関連のタスクのために実装する必要があり再利用可能なSavedModelのAPIを。 (これは、現在非推奨のTF1ハブ形式の画像共通署名に置き換わるものです。)

画像特徴ベクトル

使用方法の概要

画像特徴ベクトルは、画像全体を表す高密度の1次元テンソルであり、通常、消費者モデルの単純なフィードフォワード分類器で使用されます。 (従来のCNNの場合、これは、空間範囲がプールまたはフラット化された後、分類が行われる前のボトルネック値です。これについては、以下の画像分類を参照してください。)

画像特徴抽出用の再利用可能なSavedModelには、画像のバッチを特徴ベクトルのバッチにマップするルートオブジェクトの__call__メソッドがあります。それは次のように使用できます:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
features = obj(images)   # A batch with shape [batch_size, num_features].

Kerasでは、同等のものは

features = hub.KerasLayer("path/to/model")(images)

入力は、画像の入力に関する一般的な規則に従います。モデルのドキュメントには、入力のheightwidth許容範囲が指定されています。

出力は、 float32とshape [batch_size, num_features] float32テンソルです。 batch_sizeは、入力と同じです。 num_featuresは、入力サイズに依存しないモジュール固有の定数です。

APIの詳細

Reusable SavedModel APIは、 obj.variablesリストも提供します(たとえば、熱心にロードされていない場合の初期化用)。

微調整をサポートするモデルは、 obj.trainable_variablesリストを提供します。トレーニングモードで実行するには、training training=Trueに合格する必要がある場合があります(ドロップアウトなど)。一部のモデルでは、オプションの引数でハイパーパラメータをオーバーライドできます(たとえば、ドロップアウト率。モデルのドキュメントで説明されています)。モデルは、 obj.regularization_lossesリストを提供する場合もあります。詳細については、 Reusable SavedModelAPIを参照してください。

hub.KerasLayerでは、これはhub.KerasLayerによってhub.KerasLayerされhub.KerasLayer :微調整を有効にするためにhub.KerasLayer trainable=True初期化し、(まれにhparamオーバーライドが適用される場合は) arguments=dict(some_hparam=some_value, ...))

ノート

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

画像特徴ベクトルの再利用可能なSavedModelsは、

画像分類

使用方法の概要

画像分類、モジュール発行者によって選択された分類法のクラスのメンバーシップについて、画像のピクセルを線形スコア(ロジット)にマップします。これにより、モデルコンシューマーは、パブリッシャーモジュールによって学習された特定の分類から結論を引き出すことができます。 (新しいクラスのセットを使用した画像分類の場合、代わりに新しい分類器を使用して画像特徴ベクトルモデルを再利用するのが一般的です。)

画像分類用の再利用可能なSavedModelには、画像のバッチをロジットのバッチにマップするルートオブジェクトの__call__メソッドがあります。それは次のように使用できます:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images)   # A batch with shape [batch_size, num_classes].

Kerasでは、同等のものは

logits = hub.KerasLayer("path/to/model")(images)

入力は、画像の入力に関する一般的な規則に従います。モデルのドキュメントには、入力のheightwidth許容範囲が指定されています。

出力logitsは、 float32とshape [batch_size, num_classes] float32テンソルです。 batch_sizeは、入力と同じです。 num_classesは、分類内のクラスの数であり、モデル固有の定数です。

logits[i, c]は、インデックスc持つクラスの例iのメンバーシップを予測するスコアです。

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

APIの詳細

Reusable SavedModel APIは、 obj.variablesリストも提供します(たとえば、熱心にロードされていない場合の初期化用)。

微調整をサポートするモデルは、 obj.trainable_variablesリストを提供します。トレーニングモードで実行するには、training training=Trueに合格する必要がある場合があります(ドロップアウトなど)。一部のモデルでは、オプションの引数でハイパーパラメータをオーバーライドできます(たとえば、ドロップアウト率。モデルのドキュメントで説明されています)。モデルは、 obj.regularization_lossesリストを提供する場合もあります。詳細については、 Reusable SavedModelAPIを参照してください。

hub.KerasLayerでは、これはhub.KerasLayerによってhub.KerasLayerされhub.KerasLayer :微調整を有効にするためにhub.KerasLayer trainable=True初期化し、(まれにhparamオーバーライドが適用される場合は) arguments=dict(some_hparam=some_value, ...))

画像入力

これは、すべてのタイプの画像モデルに共通です。

画像のバッチを入力として受け取るモデルは、画像を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)続くことから得られるものです。

モデルは任意のbatch_size受け入れます。モデルのドキュメントには、 heightwidth許容範囲が指定されています。最後の次元は3つのRGBチャネルに固定されています。

モデルは全体を通してNHWCchannels_last (またはNHWC )レイアウトを使用し、必要に応じてそれをTensorFlowのグラフオプティマイザーに任せてchannels_first (またはNCHW )に書き換えることをお勧めします。