1

Kerasアプリケーションに含まれるVGG16モデルの下位レベルの機能を引き出しています。これらの機能は、アドオンクラシファイア用に事前に訓練された入力データの個別の出力としてエクスポートされます。概念的なアイデアはMulti-scale recognition with DAG-CNNsKeras VGG16下位機能の抽出

から借用されました。最高レベルのフィーチャは、ブロック_5引き上げレイヤーからFlatten()block_05 = Flatten(name='block_05')(block5_pool)を使用して抽出されました。これにより、寸法8192の出力ベクトルが得られますが、寸法が大きくなり過ぎると(メモリの問題)、低い引き上げ層では機能しません。代わりに、低い引っ張り層(または任意の他の層)は、GlobalAveragePooling2D()block_04 = GlobalAveragePooling2D(name='block_04')(block4_pool)を使用して抽出することができる。しかし、この手法の問題は、特徴ベクトルの次元が、ブロック_4(512)、ブロック_3(256)、ブロック_2(128)、ブロック_1(64)のように、

ディープレイヤーからさらに多くのフィーチャデータを保持するのに適したレイヤーまたは設定は何でしょうか?

情報の場合、モデルの出力はこのようになり、アドオン分類子には対応する入力数があります。

# Create model, output data in reverse order from top to bottom 
model = Model(input=img_input, output=[block_05, # ch_00, layer 17, dim 8192 
             block_04, # ch_01, layer 13, dim 512 
             block_03, # ch_02, layer 9, dim 256 
             block_02, # ch_03, layer 5, dim 128 
             block_01]) # ch_04, layer 2, dim 64 
+0

この興味深いアプローチです。この下位層の機能をどのように使いたいのかをもっと詳しく説明できますか? –

+0

出版物を参照してポストを更新しました。出力のマージは別の分類器で(入力として)行われます。これは、プリプロセスされた入力に対して最適化を実行して、どのフィーチャレイヤが最もモデルに追加されているかを確認できるからです。 – jdelange

答えて

2

あなたが言及したメモリエラーは、ユニットの数が非常に大きくなる巨大なアレイを平坦化することに起因します。実際に行う必要があるのは、入力をスマートな方法でダウンサンプリングすることです。

  1. MaxPooling:私はあなたにこれを行う方法のいくつかの方法を紹介しますプーリングの簡単な使用によって - あなたはそれらを最初にあなたの特徴マップをダウンサンプリングして、Flattenことができます。このアプローチの主な利点は、その単純さと付加的なパラメータの必要性がないことです。主な欠点:これは本当に大まかな方法​​かもしれません。
  2. インテリジェントダウンサンプリング:ここでは、巨大なサブサンプリング(たとえば、フィルタサイズが(4, 4)、サブサンプルが(4, 4)Convolutional2D)を追加できます。これはインテリジェントなプーリングと考えられます。この方法の主な欠点は、このアプローチに必要な追加パラメータがあることです。
+0

私は事前に訓練されたモデルのネットワークウェイト(トランスファーラーニング)を使用しているため、畳み込みレイヤを追加すると他の課題が発生します。私は、機能ベクトルを減らすために積極的なプール層を追加することで何が達成できるかを確認します。 – jdelange

関連する問題