C3D的视频分类

本文介绍了C3D模型在视频分类中的应用,详细阐述了3D卷积操作,包括卷积核的选择、网络结构以及损失函数。训练过程中涉及视频切帧、正则化策略和指数滑动平均。模型使用Xavier初始化,并通过Adam优化器进行特征提取和分类的分别优化。建议更新模型结构,如引入BN层和ResNet结构,或将光流信息融入模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久之前做了C3D的视频分类,现在详细把整个项目的细节描述一下。
首先介绍一下C3D:对于一段视频来说,它是连续的帧图像叠加起来的,所以可以考虑在生成通道图像的时候,把多帧图像叠加的特性讨论进去。

一个视频段输入,其大小为 c∗l∗h∗w ,其中c为图像通道(一般为3),l为视频序列的长度,h和w分别为视频的宽与高。进行一次kernel size为3∗3∗3,stride为1,padding=True,滤波器个数为K的3D 卷积后,输出的大小为K∗l∗h∗w。池化同理。

作者对卷积核做了研究,发现3*3的卷积核最有效。基于3D卷积操作,共有8次卷积操作,4次池化操作。其中卷积核的大小均为3∗3∗3,步长为1∗1∗1。池化核的大小为2∗2∗2,步长为2∗2∗2,但第一层池化除外,其大小和步长均为1∗2∗2。这是为了不过早缩减时序上的长度。最终网络在经过两次全连接层和softmax层后就得到了最终的输出结果。网络的输入尺寸为3∗16∗112∗112,即一次输入16帧图像。
github地址:https://github.com/hx173149/C3D-tensorflow
训练过程:首先按照train.list,test.list将文件分类。然后使用ffmpeg,将视频分割,这里每5帧取一张图片。
模型代码:

def conv3d(name, l_input, w, b):  	
  return tf.nn.bias_add(            
            tf.nn.conv3d(l_input, w, strides=[1, 1, 1, 1, 1], padding='SAME'),          b          )
            
def max_pool(name, l_input, k):   
return tf.nn.max_pool3d(l_input, ksize=[1, k, 2, 2, 1], strides=[1, k, 2, 2, 1], padding='
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值