繁体   English   中英

C3D + LSTM 用于视频分类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM