如何将图像序列输入LSTM网络以进行视频分类

时间:2019-06-09 21:02:31

标签: python keras generator lstm feature-extraction

我正在使用LSTM对视频进行分类。我正在使用Keras python库创建长期短期记忆LSTM网络。我知道LSTM采用数据的输入形状(样本,时间戳,功能)。我有三节视频,每节有10个视频文件。这意味着我有10 * 3 = 30个样本。 我为这些视频文件中的每个视频创建了帧序列。这些序列中的每个序列都包含32帧视频文件。我使用训练有素的模型提取特征,因此我将这些帧中的每一个输入VGG16预训练模型中,该模型为单个帧生成512个特征。因此,一个视频文件应具有(32,512)个尺寸的数组。然后,我将所有30个样本的每个数组附加到一个数组中,并将其另存为numpy数组。数组的最终尺寸为(960,512)。 现在我的问题是我应该如何将此数组重塑为(sample,timestamp,features)=(20,32,512)。这是我使用的代码段:请注意,x_generator有640,512,我希望将其转换为(30,32,512)。 我很乐意解决我的问题。

 x_generator=None
 if x_generator is None:
    imgx = image.img_to_array(img)
    imgx = np.expand_dims(imgx, axis=0)
    imgx = preprocess_input(imgx)
    x_generator = base_model.predict(imgx)
 else
    imgx = image.img_to_array(img)
    imgx = np.expand_dims(imgx, axis=0)
    imgx = preprocess_input(imgx)
    x_generator = np.append(x_generator,base_model.predict(imgx),axis=0)

1 个答案:

答案 0 :(得分:1)

如果通过附加30个维度(32、512)样本获得960个值,则只需使用np.reshape即可将数组调整为期望的尺寸。

x_generator = np.reshape(x_generator, [30, 32, 512])