web-dev-qa-db-ja.com

Keras-3チャネル画像をLSTMに入力

画像のシーケンスを、_(7338, 225, 1024, 3)_がサンプルサイズ、_7338_がタイムステップ、1024 (32x32)がフラット化された画像ピクセルである形状__225_のある派手な配列に読み込みました、_3_チャネル(RGB)。

LSTMレイヤーのあるシーケンシャルモデルがあります。

_model = Sequential()
model.add(LSTM(128, input_shape=(225, 1024, 3))
_

しかし、これはエラーになります:

_Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
_

documentation は、LSTMレイヤーの入力テンソルは3D tensor with shape (batch_size, timesteps, input_dim)である必要があると述べていますが、私の場合、_input_dim_は2Dです。

KerasのLSTMレイヤーに3チャンネル画像を入力するための推奨される方法は何ですか?

11
shubhamsingh

画像の数をシーケンスにしたい場合(フレームのある映画のように)、ピクセルとチャンネルをフィーチャーとして配置する必要があります。

_input_shape = (225,3072)  #a 3D input where the batch size 7338 wasn't informed
_

3072フィーチャーをLSTMに投入する前にさらに処理が必要な場合は、2D畳み込みとLSTMを組み合わせたり、インターリーブしたりして、より洗練されたモデルを作成できます(ただし、必ずしも優れているわけではありませんが、各アプリケーションには特定の動作があります)。

新しい ConvLSTM2D を使用して、5次元の入力を取得することもできます。

_input_shape=(225,32,32,3) #a 5D input where the batch size 7338 wasn't informed
_

TimeDistributed(Conv2D(...))を追加し、最後にTimeDistributed(MaxPooling2D(...))を追加する前に、いくつかのTimeDistributed(Flatten())LSTM()を使用してたたみ込みネットを作成します。これにより、画像の理解とLSTMのパフォーマンスの両方が向上するでしょう。

9
Daniel Möller