3D 卷积神经网络 视频动作识别

转自:http://blog.csdn.net/AUTO1993/article/details/70948249

https://zhuanlan.zhihu.com/p/25912625

http://blog.csdn.net/zouxy09/article/details/9002508


3D CNN框架结构各层详细计算过程

这篇博客主要详细介绍3D CNN框架结构的计算过程,我们都知道3D CNN 在视频分类,动作识别等领域发挥着巨大的优势,前两个星期看了这篇文章:3D Convolutional Neural Networks for Human Action Recognition,打算用这个框架应用于动态表情识别,当时对这篇文章的3 D CNN各层maps的计算不怎么清楚,所以自己另外对3D CNN结构层数maps等等重新计算了一下,下面是主要的计算过程。在介绍计算过程之前,先介绍一下 2D CNN和3D CNN的区别

采用2D CNN对视频进行操作的方式,一般都是对视频的每一帧图像分别利用CNN来进行识别,这种方式的识别没有考虑到时间维度的帧间运动信息。下面是传统的2DCNN对图像进行采用2D卷积核进行卷积操作:


使用3D CNN能更好的捕获视频中的时间和空间的特征信息,以下是3D CNN对图像序列(视频)采用3D卷积核进行卷积操作:

上面进行卷积操作的时间维度为3,即对连续的三帧图像进行卷积操作,上面的  3D卷积是通过堆叠多个连续的帧组成一个立方体,然后在立方体中运用3D卷积核。在这个结构中,卷积层中每一个特征map都会与上一层中多个邻近的连续帧相连,因此捕捉运动信息。例如上面左图,一个卷积map的某一位置的值是通过卷积上一层的三个连续的帧的同一个位置的局部感受野得到的。

需要注意的是:3D卷积核只能从cube中提取一种类型的特征,因为在整个cube中卷积核的权值都是一样的,也就是共享权值,都是同一个卷积核(图中同一个颜色的连接线表示相同的权值)。我们可以采用多种卷积核,以提取多种特征。

3D CNN架构


输入层(input):连续的大小为60*40的视频帧图像作为输入。.

硬线层(hardwiredH1):每帧提取5个通道信息(灰度gray,横坐标梯度(gradient-x),纵坐标梯度(gradient-y),x光流(optflow-x),y光流(optflow-y))。前面三个通道的信息可以直接对每帧分别操作获取,后面的光流(x,y)则需要利用两帧的信息才能提取,因此

H1层的特征maps数量:(7+7+7+6+6=33),特征maps的大小依然是60* 40;

卷积层(convolution C2以硬线层的输出作为该层的输入,对输入5个通道信息分别使用大小为7* 7 * 3的3D卷积核进行卷积操作(7*  7表示空间维度,3表示时间维度,也就是每次操作3帧图像),同时,为了增加特征maps的个数,在这一层采用了两种不同的3D卷积核,因此C2层的特征maps数量为:

(((7-3)+1)*  3+((6-3)+1)*  2)*  2=23*  2

这里右乘的2表示两种卷积核。

特征maps的大小为:((60-7)+1)*  ((40-7)+1)=54 * 34

降采样层(sub-sampling S3):在该层采用max pooling操作,降采样之后的特征maps数量保持不变,因此S3层的特征maps数量为:23 *2

特征maps的大小为:((54 / 2) *  (34 /2)=27  *17

卷积层(convolution C4对两组特征maps分别采用7 6 3的卷积核进行操作,同样为了增加特征maps的数量,文中采用了三种不同的卷积核分别对两组特征map进行卷积操作。这里的特征maps的数量计算有点复杂,请仔细看清楚了

我们知道,从输入的7帧图像获得了5个通道的信息,因此结合总图S3的上面一组特征maps的数量为((7-3)+1) * 3+((6-3)+1) * 2=23,可以获得各个通道在S3层的数量分布:

前面的乘3表示gray通道maps数量= gradient-x通道maps数量= gradient-y通道maps数量=(7-3)+1)=5;

后面的乘2表示optflow-x通道maps数量=optflow-y通道maps数量=(6-3)+1=4;

假设对总图S3的上面一组特征maps采用一种7 6 3的3D卷积核进行卷积就可以获得:

((5-3)+1)* 3+((4-3)+1)* 2=9+4=13;

三种不同的3D卷积核就可获得13* 3个特征maps,同理对总图S3的下面一组特征maps采用三种不同的卷积核进行卷积操作也可以获得13*3个特征maps,

因此C4层的特征maps数量:13* 3* 2=13* 6

C4层的特征maps的大小为:((27-7)+1)* ((17-6)+1)=21*12

降采样层(sub-sampling S5):对每个特征maps采用3 3的核进行降采样操作,此时每个maps的大小:7* 4

在这个阶段,每个通道的特征maps已经很小,通道maps数量分布情况如下:

gray通道maps数量= gradient-x通道maps数量= gradient-y通道maps数量=3

optflow-x通道maps数量=optflow-y通道maps数量=2

卷积层(convolution C6此时对每个特征maps采用7* 4的2D卷积核进行卷积操作,此时每个特征maps的大小为:1*1,至于数量为128是咋来的,就不咋清楚了,估计是经验值。

对于CNNs,有一个通用的设计规则就是:在后面的层(离输出层近的)特征map的个数应该增加,这样就可以从低级的特征maps组合产生更多类型的特征。

通过多层的卷积和降采样,每连续7帧图像就可以获得128维的特征向量。输出层的单元数与视频动作数是相同的,输出层的每个单元与这128维的特征向量采用全连接。在后面一般采用线性分类器对128维的特征向量进行分类,实现行为识别,3DCNN模型中所有可训练的参数都是随机初始化的,然后通过在线BP算法进行训练。

下面是3DCNN各通道数量变化情况以及特征maps大小变化情况


本文为极市平台原创编译,首发于C3D network: 用于视频特征提取的3维卷积网络

卷积神经网络(CNN)近年被广泛应用于计算机视觉中,包括分类、检测、分割等任务。这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而对于基于视频分析的问题,2D convolution不能很好得捕获时序上的信息。因此3D convolution就被提出来了。3D convolution 最早应该是在[1]中被提出并用于行为识别的,本篇文章则主要介绍下面这篇文章 C3D[2],C3D network是作为一个通用的网络提出的,文章中将其用于行为识别,场景识别,视频相似度分析等领域。

可以访问C3D network的项目主页(C3D: Generic Features for Video Analysis)或是github(facebook/C3D)获得其项目代码及模型,项目基于caffe实现。最近作者还更新了残差网络结构的新C3D模型,但是还没有放出对应的论文,暂时不做讨论。

2D 与 3D 卷积操作

首先简要介绍一下2D与3D卷积之间的区别。a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。

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

3D 卷积核参数的选择


作者还对卷积核的尺寸进行了实验研究,结果表面$333$大小的卷积核效果最好。

C3D network 结构

基于3D卷积操作,作者设计了如上图所示的C3D network结构。共有8次卷积操作,4次池化操作。其中卷积核的大小均为$333$,步长为$111$。池化核的大小为$222$,步长为$222$,但第一层池化除外,其大小和步长均为$1*22$。这是为了不过早缩减时序上的长度。最终网络在经过两次全连接层和softmax层后就得到了最终的输出结果。网络的输入尺寸为$316112112$,即一次输入16帧图像。

实验结果


接下来介绍一下C3D的实验结果,作者将C3D在行为识别、动作相似度标注、场景与物体识别这三个方向的数据库上进行了测试,均取得了不错的效果。注意以下结果均为当时情况下的比较(2015年),从那时候到现在这些数据库不知道又被刷了多少遍了。

  • 行为识别-Action Recognition

行为识别用的数据库是UCF101,C3D+SVM的结果达到了85.2%。UCF101这个数据库目前为止(2017年3月)看到最高的结果已经达到了96%左右。


  • 动作相似度标注-Action Similarity Labeling

动作相似度标注问题的任务是判断给出的两段视频是否属于相同的动作。文章中使用的数据库为ASLAN。C3D的效果超过了当时的state of the art 不少。


  • 场景识别-Scene Recognition

场景识别问题主要使用了Maryland和YUPENN,也都达到了不错的效果。


  • 运行时间分析

下表中是C3D与其他一些算法的速度比较。其中iDT是行为识别领域的非深度学习方法中效果最好的方法,可以见我之前的博文iDT算法介绍(行为识别笔记:improved dense trajectories算法(iDT算法))。Brox指Brox提出的光流计算方法[3].

这几部分我都跑过相关的实验,其中光流计算(GPU版本)现在的速度可以达到20-25fps,我使用的光流计算代码的github地址为feichtenhofer/gpu_flow。表中C3D的速度应该是在视频帧无重叠的情况下获得的。将一段16帧的视频作为一个输入,则C3D一秒可以处理约42个输入(显卡为1080, batch size选为50),换算成无重叠情况下的fps为672。可见C3D的速度还是非常快的。

总结

C3D使用3D CNN构造了一个效果不错的网络结构,对于基于视频的问题均可以用来提取特征。可以将其全连接层去掉,将前面的卷积层放入自己的模型中,就像使用预训练好的VGG模型一样。

参考文献

[1] Ji S, Xu W, Yang M, et al. 3D convolutional neural networks for human action recognition[J]. IEEE transactions on pattern analysis and machine intelligence, 2013, 35(1): 221-231.

[2] Tran D, Bourdev L, Fergus R, et al. Learning spatiotemporal features with 3d convolutional networks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2015: 4489-4497.

[3] Brox T, Malik J. Large displacement optical flow: descriptor matching in variational motion estimation[J]. IEEE transactions on pattern analysis and machine intelligence, 2011, 33(3): 500-513.

欢迎关注微信公众号极市平台(微信id:extrememart)获取更多计算机视觉行业内的资讯及信息。

PS.目前极市拥有上千名视觉算法开发者,分别来自腾讯,华为,百度,网易,联想,努比亚等名企,以及北大,清华,北航,中科院,交大等名校,更邀请了李开复老师入驻微信群,欢迎从业者加入极市专业CV开发者微信群(分享干货资讯,行业内人交流),请填写极市算法开发者调研问卷申请入群~




  • 16
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
行为识别是指通过分析人体姿态和动作来了解和识别人的行为方式和意图。而3D卷积视频分析是指利用3D卷积神经网络视频进行分析和处理。 行为识别是计算机视觉和模式识别领域的研究热点之一,具有广泛的应用前景。通过采集传感器数据或者视频流,利用机器学习算法和模型,对人的行为进行识别和分析,可以应用于智能家居、智能安防、智能健康等领域。 而3D卷积视频分析是一种针对视频数据的分析方法。与传统的2D图像分析不同,3D卷积网络可以更好地捕捉视频中的时间信息和动态变化。3D卷积网络通过一系列的卷积、池化和全连接等操作,能够从视频数据中提取出特征,并进行分类或回归等任务。 在行为识别中,可以利用3D卷积视频分析方法对连续的视频序列进行处理,从而更好地捕捉行为的动态特征。通过将视频分解为一系列帧,利用3D卷积网络对每一帧进行特征提取和分析,可以获得更具表达力和判别性的特征表示。在训练阶段,可以使用已标注的视频数据进行监督学习,从而训练出能够准确分类不同行为的模型。 总结来说,行为识别和3D卷积视频分析是互相关联的两个概念。行为识别借助于3D卷积视频分析的技术手段,能够更好地分析和理解视频数据中的行为特征,进而实现对不同行为的识别和分类。这一领域的研究和应用前景广阔,有望在智能化的各个领域中发挥重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值