web-dev-qa-db-ja.com

Kerasは異なるサイズの入力画像を処理できますか?

Kerasは異なるサイズの入力画像を処理できますか?たとえば、完全な畳み込みニューラルネットワークでは、入力イメージのサイズは任意です。ただし、Kerasでネットワークを作成するときに入力形状を指定する必要があります。したがって、入力画像のサイズを同じサイズに変更せずに、Kerasを使用して異なる入力サイズを処理するにはどうすればよいですか?助けてくれてありがとう。

28
Hooben

はい。入力形状をshape =(n_channels、NoneNoneに変更するだけです)。ここで、n_channelsは入力画像のチャンネル数です。

私はTheanoバックエンドを使用していますので、テンソルフローを使用している場合は、(None、None、n_channels)に変更する必要があります

以下を使用する必要があります。

input_shape =(1、None、None)

形状のどれも可変寸法を示しません。一部のレイヤーは形状情報(フラット化など)を必要とするため、すべてのレイヤーがこのような可変寸法で機能するとは限りません。 https://github.com/fchollet/keras/issues/192

たとえば、kerasの機能APIを使用すると、入力レイヤーは次のようになります。

RGBデータセットの場合

inp = Input(shape=(3,None,None))

グレーデータセットの場合

inp = Input(shape=(1,None,None))
29
maz

同じ計算カーネルで任意のサイズの入力配列を実装すると、多くの課題が生じる可能性があります。 GPUでは、どのくらいの大きさのバッファーを予約するか、ループを展開する量をもっと弱くする必要があります。これが、Kerasが一定の入力形状を必要とする主な理由です。

これは、NLPの文のような可変長シーケンスを処理する場合によく発生します。一般的なアプローチは、サイズの上限の確立(およびより長いシーケンスのトリミング)、そしてパッドこのサイズまでゼロのシーケンスです。

(Kerasの畳み込みレイヤーがマスクされた入力をまだサポートしていない可能性があることを除いて、ゼロ値のマスキングを含めて、パディングされた領域の計算をスキップすることもできます...)

3Dデータ構造の場合、パディングのオーバーヘッドがそれほど大きくないかどうかはわかりません。メモリエラーが発生し始めたら、最も簡単な回避策はバッチサイズを小さくすることです。このトリックを画像に適用した経験をお聞かせください!

13
Petr Baudis