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
この興味深いアプローチです。この下位層の機能をどのように使いたいのかをもっと詳しく説明できますか? –
出版物を参照してポストを更新しました。出力のマージは別の分類器で(入力として)行われます。これは、プリプロセスされた入力に対して最適化を実行して、どのフィーチャレイヤが最もモデルに追加されているかを確認できるからです。 – jdelange