3

現在、Keras (オートエンコーダー) を使用して CNN モデルを開発しています。このタイプの入力は shape(47,47,3)です。つまり、3 (RGB) レイヤーの 47x47 画像です。

過去にいくつかの CNN を使用したことがありますが、今回の入力次元は素数 (47 ピクセル) です。MaxPooling2Dこれは、特にモデルを使用している場合に、実装に問題を引き起こしていると思いますUpSampling2Dmax pooling してから up sampling すると、いくつかの次元が失われることに気付きました。

を使用すると、入力を aおよび MaxPooling にカーネルmodel.summary()で渡した後(つまり、24 個のフィルターと形状の半分) の出力形状が得られることがわかります。(47,47,3)Conv2D(24)(2,2)(24, 24, 24)

ここで、カーネルを使用して UpSampling (2,2)(形状を 2 倍にする) し、再度畳み込むことによってそれを逆にしようとすると、(48,48,3)整形された出力が得られます。これは、必要以上に 1 行と 1 列余分です。

これに対して、「問題ありません。アップサンプリング時に目的の 47 ピクセルが得られるカーネル サイズを選択してください」と考えましたが、47 が素数であることを考えると、それを実行できるカーネル サイズはないように思えます。

入力次元を非素数に変更することを伴わないこの問題を回避する方法はありますか? たぶん、私のアプローチに何かが欠けているか、Keras には無視できる機能があり、ここで役立つ可能性があります。

4

1 に答える 1

6

ZeroPadding2DCropping2Dを使用することをお勧めします。s を使用して画像を非対称にパディングし、0サイズを変更せずに均一なサイズの画像を取得できます。これにより、アップサンプリングの問題が解決されるはずです。padding=sameさらに、すべての畳み込み層の設定について覚えておいてください。

編集:

そのような操作を実行する方法についての戦略の例を示します。

  1. プールする前のネットワークのサイズが奇数の場合は、ゼロで埋めて偶数にします。
  2. 対応するアップサンプル操作の後、クロッピングを使用して、特徴マップを元の奇妙なサイズに戻します。
于 2017-10-25T20:30:43.413 に答える