我正在迈出学习深度学习的第一步。我正在尝试从视频的图像序列(帧)中进行活动识别。结果,我面临着训练程序的问题。
首先,我需要确定我的图像文件夹的架构:
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..
Run Code Online (Sandbox Code Playgroud)
所以问题是每个文件夹可以有不同数量的帧,所以我对模型的输入形状和我应该使用的时间步长感到困惑。我正在创建一个模型(如下所示),其中包含时间分布的 CNN(预训练的 VGG16)和 LSTM,该模型将所有类别的所有帧与相应的标签作为输入(在上面的示例中,制作食物将是 p1_rgb_frame1 的相应标签)等)和的最终形状x_train是(9000,200,200,3)其中9000coresponds从所有类的所有帧,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)) …Run Code Online (Sandbox Code Playgroud)