如何将视频功能从CNN传递到LSTM?

时间:2016-05-02 22:00:35

标签: video tensorflow lstm

通过convnet传递视频帧并获取输出要素图后,如何将该数据传递到LSTM?另外,如何通过CNN将多个帧传递给LSTM?
在其他作品中,我想用CNN处理视频帧以获得空间特征。然后我想将这些特征传递给LSTM以对空间特征进行时间处理。如何将LSTM连接到视频功能?例如,如果输入视频是56x56,然后当通过所有CNN层时,请说它是20:5x5。它们如何逐帧连接到LSTM?他们首先要通过一个完全连接的层吗? 谢谢,乔恩

2 个答案:

答案 0 :(得分:5)

基本上,您可以展平每个框架特征并将它们送入一个LSTM单元格。对于CNN,它是一样的。您可以将CNN的每个输出馈送到一个LSTM单元格中。

对于FC,它取决于你。

查看http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-180.pdf的网络结构。

enter image description here

答案 1 :(得分:3)

enter image description here

cnn + lstm模型的体系结构如下图所示 基本上你必须为CNN层创建时间分布式包装器,然后将CNN的输出传递给LSTM层

cnn_input= Input(shape=(3,200,100,1))   #Frames,height,width,channel of imafe
conv1 = TimeDistributed(Conv2D(32, kernel_size=(50,5),    activation='relu'))(cnn_input)
conv2 = TimeDistributed(Conv2D(32, kernel_size=(20,5), activation='relu'))(conv1)
pool1=TimeDistributed(MaxPooling2D(pool_size=(4,4)))(conv2)
flat=TimeDistributed(Flatten())(pool1)
cnn_op= TimeDistributed(Dense(100))(flat)

此后,您可以将CNN输出传递给LSTM

lstm = LSTM(128, return_sequences=True, activation='tanh')(merged)
op =TimeDistributed(Dense(100))(lstm)
fun_model = Model(inputs=[cnn_input], outputs=op)

请记住此次分发CNN的输入必须是(#frames,row_size,column_size,channels)

最后,您可以在最后一层应用softmax来获得一些预测