这周一共读了4篇论文,算是理清了从最初的时间+空间双流神经网络,到今年CVPR的3D卷积+双流网络这一系列的演化。
第一篇Two-Stream Convolutional Networks for Action Recognition in Videos提出的是一个双流的CNN网络,分别捕捉空间和时间信息。
对于空间信息,文章用的是类似于另一篇论文的CNN结构,这个准备之后在阅读,对于时间信息,文章提出了一种基于光流的时间CNN,主要思路是,从相邻的L帧图片中,提取光流信息作为输入,然后以此来表示时间信息,具体如下:
首先用OpenCV获取对应的光流信息,所谓光流信息分几种,传统的是定义了一个displacement——dt(u,v),这个表示在t时刻对应帧上的一个点(u,v),要把它移动到t+1时刻相应地方的方向向量。至于这个点具体要怎么得出,可以用OpenCV直接处理视频的帧然后得到。此外还有其他几种表示光流的方法,具体可见论文。
有了对应的光流信息之后,对于某一帧,首先空间信息就是把原图(经过处理)输入到网络,然后空间信息就是从该帧开始接下来连续的L帧,每相邻两帧之间提取所有点的光流信息作为输入,分为X轴和Y轴方向,因此设每帧长宽为w*h个像素点,那么每帧对应的时间网络输入信息的维数就是w*h*2L
最后,空间和时间网络分别给出动作的分类结果,然后把结果融合,使用取平均值或者SVM的方法(实验中显示SVM准确率更高),得到最终结果。
这篇论文主要的收获是:了解到光流表示视频的方法,另外,论文的[3][15]两篇应用都值得阅读,[3]表示了时间网络的基本结构,[15]是空间网络的基础,也是训练方法的依据。
接下来一篇是对上述网络的改进,但其中牵涉到一个3D卷积的方法,这又牵扯出另外两篇论文:3D Convolutional Neural Networks for Human Action Recognition提出了一种方法,与传统的cnn的2D卷积相对应的,有一种新的3D卷积方法。传统的2D卷积方法是用一个2维的卷积层对特征图进行采样,从而得到下一层的特征图,形式如下:
那么3D就是额外增加了一个时间维度,即对一定数量帧的图片,用同一个3维的卷积层去采样,从而得到下一维的特征图,形式如下:
![双流神经网络及3D卷积系列论文阅读笔记 双流神经网络及3D卷积系列论文阅读笔记](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
多出来的那个Ri,即是3维卷积核在时间维度上的长度。
有了这个基础,论文Learning Spatiotemporal Features with 3D Convolutional Networks则是进一步探寻了这种3D时间卷积的实用性(其实感觉他们就是做了一堆实验,然后得出哪些最好,哪些效率最高,居然也能发CVPR。。。)。文中比较有用是,用实验证明,3*3*3的时空卷积核,是最适合于这种新型神经网络结构的卷积核。
有了这些基础,就可以看最后一篇论文Convolutional Two-Stream Network Fusion for Video Action Recognition,这篇论文是在原双流论文的基础上做的一个改进。在原双流论文中,时间和空间两个神经网络的融合是在最后一步,结果取平均值或者用线性SVM划分,而在本文中,则是把两个神经网络在某一层融合,如下图:
融合的前提要求是,在这一层,空间与时间网络的特征图长宽相等,且channel数一样(channel在很多论文都有提及,暂时的理解是,channel就代表对应的卷积层中,特征图的个数,因为对上一层输入的特征图,每用一个卷积核,就会产生一个新的特征图,所以需要一个channel来统计总共产生了多少特征图)。具体融合方法很多,详见论文即可。
在把两个网络的特征图融合后,还需要进行另一次卷积操作。假设在时间t,我们得到的特征图是xt,那么对于一大段时间t=1….T,我们要把这段时间内的所有特征图(x1,…,xT)综合起来,进行一次3D时间卷积,最后得到的,就是融合后的特征图输出。注意,此时输出的,仍然是一系列在时间上的特征图。然后再输入到更高层网络,继续训练学习。