我正在学习深度学习的第一步。我试图从视频的图像序列(帧)中进行活动识别。结果我在训练过程中遇到了问题。
首先,我需要确定我的图像文件夹的架构:
Making Food -> p1 -> rgb_frame1.png,rgb_frame2.png ... rgb_frame200.png
Making Food -> p2 -> rgb_frame1.png,rgb_frame2.png ... rgb_frame280.png
...
...
...
Taking Medicine -> p1 -> rgb_frame1.png,rgb_frame2.png...rgbframe500.png
etc..
问题在于每个文件夹中的帧数可能不同,因此我会对模型的输入形状和应该使用的时间步长感到困惑。
我正在创建一个模型(如下所示),其中包含经过预训练的VGG16的时序分布CNN和LSTM,该模型以所有类的所有帧及其相应的标签(在上面的示例中,“制作食物”将是与p1_rgb_frame1等相应的标签)作为输入,并且最终的x_train
的形状为(9000,200,200,3)
,其中9000
对应于来自所有类别的所有帧,200
是图像的高度和宽度,3
是通道数。我正在将此数据重塑为(9000,1,200,200,3)
,以便用作模型的输入。
我担心没有传递正确的时间步长,导致错误的训练结果。虽然val_acc约为98%,但在使用不同数据集进行测试时,准确率要低得多。您能否提出更有效的解决方案?
x = base_model.output
x = Flatten()(x)
features = Dense(64, activation='relu')(x)
conv_model = Model(inputs=base_model.input, outputs=features)
for layer in base_model.layers:
layer.trainable = False
model = Sequential()
model.add(TimeDistributed(conv_model, input_shape=(None,200,200,3)))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(16))