[英]C3D + LSTM for video classification
我想使用 C3D 模型,然后使用 lstm 来训练 UCF101 使用 keras 进行视频分类。 我将视频改造成 [None, 16, 112, 112,3]。 我已经在 C3D 中使用了时间分布式 keras 函数,但我仍然没有得到这个模型的输入形状、输出形状和时间步数。 任何人都可以帮助我解决这个问题。 谢谢
model = Sequential()
model.add(TimeDistributed(Conv3D(64, 3, activation='relu', padding='same', name='conv1', input_shape=shape)))
model.add(TimeDistributed(MaxPooling3D(pool_size=(1,2,2), strides=(1,2,2), padding='same', name='pool1')))
model.add(TimeDistributed(Conv3D(128, 3, activation='relu', padding='same', name='conv2')))
model.add(TimeDistributed(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool2')))
model.add(TimeDistributed(Conv3D(256, 3, activation='relu', padding='same', name='conv3a')))
model.add(TimeDistributed(Conv3D(256, 3, activation='relu', padding='same', name='conv3b')))
model.add(TimeDistributed(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool3')))
model.add(TimeDistributed(Conv3D(512, 3, activation='relu', padding='same', name='conv4a')))
model.add(TimeDistributed(Conv3D(512, 3, activation='relu', padding='same', name='conv4b')))
model.add(TimeDistributed(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool4')))
model.add(TimeDistributed(Conv3D(512, 3, activation='relu', padding='same', name='conv5a')))
model.add(TimeDistributed(Conv3D(512, 3, activation='relu', padding='same', name='conv5b')))
model.add(TimeDistributed(ZeroPadding3D(padding=(0,1,1))))
model.add(TimeDistributed(MaxPooling3D(pool_size=(2,2,2), strides=(2,2,2), padding='valid', name='pool5')))
model.add(TimeDistributed(Flatten()))
model.add(TimeDistributed(Dense(4096, activation='relu', name='fc6')))
model.add(TimeDistributed(Dropout(0.5)))
model.add(TimeDistributed(Dense(4096, activation='relu', name='fc7')))
model.add(TimeDistributed(Dropout(0.5)))
model.add(TimeDistributed(Dense(487, activation='softmax', name='fc8')))
model.add(Dropout(0.5))
model.add(LSTM(256, return_sequences=True, dropout = 0.5, input_shape = (time_step_nbr, 487)))
model.add(TimeDistributed(Dense(101, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
3d CNN 处理视频、MRI 和扫描数据集。 如果您必须将输入(视频)提供给建议的 3d CNN 网络,并训练它的权重,因为 3d CNN 需要 5 维输入;
[batch size, channels, depth, height, weight]
让我们假设; 如果您有 10 个不同课程的 10 个视频。 每个视频的持续时间为 6 秒,每秒提取 2 帧,每个视频大约为 12 帧。
RGB 视频的大小为 112x112 --> 高度 = 112,宽度 = 112,通道数 = 3
如果您保持批次大小等于 2
1 个视频 --> 6 秒 --> 12 帧(1 秒 == 2 帧)[每帧 (3,112,112)]
10 个视频(10 个类)--> 60 秒--> 120 帧
所以这 5 个维度将是这样的; [2, 3, 12, 112, 112]
2 --> 每个批次大小将处理两个视频。
3 --> RGB 通道
12 --> 每个视频包含 12 帧
112 --> 每个视频的高度
112 --> 每个视频的宽度
通过这种方式,您可以向 3d CNN 提供输入,也可能有许多其他方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.