Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

        看完这篇文献已经好多天了,重新梳理一下双流Conv网络的读书笔记。仅个人见解,望大家指正交流。

        行为识别是计算机视觉中一个非常重要的方向,无论是科学研究领域还是工业控制领域,都有极高的实用价值,对交通服务以及社交领域都有着极大的推动作用,在学习行为识别的过程当中,遇到了一系列的问题,比如如何在静态的图像和动态的过程之间捕获一种连接性的信息,让两者可以很好地联系起来。这篇文献对这个问题提出了一个很好的见解,介绍了一种双流卷积网络,来实现视频中的行为识别。

Characteristics:

  1. It creatively proposes a two-stream Convnet architecture which incorporates spatial and temporal networks.
  2. It also demonstrates that a Convnet trained on multiframe dense optical flow is able to achieve very good performance in spite of limited training data.
  3. It shows that multi-task learning,applied to two different action classification datasets (UCF-101 and HMDB-51),can be used to increase the amount of training data and improve the performance on both.

      过去通常处理行为识别时,把焦点放在空间信息的处理上,所谓空间信息,也就是独立于帧的表面信息,也就是视频中物体和场景等信息。而时间信息,是帧间的光流,会携带帧帧之间的运动信息。这篇文献针对这个问题提出了一个空间网络与时间网络并存的双流卷积网络结构,利用空间网络去处理静态信息,利用时间网络去处理动态信息,两者相结合可以大大提升行为识别准确率。

       另外,这篇文献提供了另外一个不错的结论,在以多帧密集光流所训练的卷积网络之间,即使训练数据有限,也能实现不错的效果,多帧密集光流是时间网络的载体,是表现时序信息的。在时间网络当中,是通过对光流的处理,来对动态的过程进行表达。

      接下来,还介绍了一个多任务学习的概念,多任务学习是将不同种类的分类数据集进行融合训练,(采用UCF-101 和HMDB-51两个数据集进行融合训练),多任务学习一方面可以提高训练数据量,另一方面,也能改善训练效果降低过拟合。

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

双流卷积结构

        首先对输入的视频进行分流,分为空间流卷积和时间流卷积,在空间流卷积中,输入是单个帧,而在时间流卷积,输入是多帧光流,这两个网络的结构具有极大的相似性,首先都是对各自的输入进行卷积操作,因为卷积具有局部连接和全局共享的特点,所以能够大大降低训练的时间,能够有效的提取图像的信息。经过卷积过后,后面连接一个归一化层,归一化就是将这些数据调整到同一个数量级,来加快梯度下降求最优解的速度。归一化过后连接一个池化层,池化方法是最大池化法(可以便宜地代替卷积层,而且具有平移不变性),也就是对这个区域中最主要的信息进行提取,既可以减少输出的大小,也可以降低过拟合。在经历5个卷积层过后,连接两个全连接层。全连接层主要是对前面的输出进行伸展、扁平化。第一个全连接层是将大小不同的信息运算到更大的空间,来增加这个模型的泛化能力;第二个全连接层是为了更好地匹配这个网络的输出尺度,为维度变换做准备,得到我们想要的输出形式。在这两个网络的最后一层,都会连接一个softmax层,主要是对输出进行分类,最终对他们分类的分数进行融合,来得到最终的结果。分数的融合有两种方法:一种是平均法,也就是对这两者的分数进行平均得到最后结果。另外一种是非常经典的分类方法,SVM(支持向量机)方法进行分数的融合。以上就是这个双流卷积网络的基本结构。

      接下来,对空间网络的一些信息进行介绍,因为空间网络是对单个视频帧进行操作,是从静态的动作当中进行动作识别,静态的外观本身也是一种非常有用的线索,因为一些动作和一些特定的对象本身有一种很强的联系,并且在空间卷积网络当中,这个网络本身就是一个图像分类结构,所以可以利用大规模的图像识别的方法,并且在大型的图像数据分类集上对这个网络进行预训练来提高训练效果。

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

       介绍时间网络的相关信息,光流是时间网络的载体,图(a)、图(b)表示是一对连续的视频帧,用矩形框割划出了这个人准备拿东西这个动作,图(c)是这个矩形框中的轮廓进行表征,可以看到许多矢量,这些矢量所组成的区域叫做密集光流,也可以叫做光流位移场,光流位移场分为水平分量和垂直分量,图(d)表示这个光流位移场的水平分量,图(e)表示这个光流位移场的垂直分量。我们所说的时间网络实际上就是对多个连续视频帧的光流位移场形成的。

光流估计

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

     下面介绍时间网络输入的配置,因为光流是这个时间网络的载体,所以以下介绍四种光流估计的方法。

1.Optical flow stacking(光流堆叠)

        将多个视频帧的光流通道堆叠在一起,在不同帧的相同位置有三个光流,表示多个帧的相同位置的光流穴流动,就表示光流堆叠。(图上左)

2.Trajectory stacking(轨迹堆叠)

       表示光流的运动轨迹,沿着运动轨迹采样的光流就是轨迹堆叠。(图上右)

3.Bi-directional optical flow(双向光流)

     在一个帧的前向区间和后向区间堆叠一定数量的光流,来达到双向传递的效果(2L长度的输入通道)。

4.Mean flow subtraction(平均流减法)

     对这个网络的输入进行0中心化,光的流动可以通过人为的操作进行调整,这篇文献是通过对每一个位移场减去一个平均向量来实现的。目的是为了更好地纠正这个模型非线性的问题。

实现细节

  1. ConvNets configuration
  2. Training
  3. Testing
  4. Pre-training on ImageNet ILSVRC-2012
  5. Optical flow
  6. Multi-GPU training
  1. 卷积网络配置。上面已经对这个网络的基本架构进行梳理。还需要注意两点。第一点就是这个网络中隐藏的所有权重层都是采用RELU**函数进行**的(使用RELU原因:(1)不需要像sigmoid等使用指数计算,整个节省计算量;(2)RELU使一部分神经元输出为0,造成网络稀疏性,并减少参数的相互依存关系,缓解过拟合)。第二点是虽然我们可以观察到这两个网络极其得相似,但是在时间网络的第二个卷积层并没有采用归一化。目的主要是为了减少内存的消耗来达到节约内存的目的。
  2. 训练过程。在训练过程当中,对于时空网络通常来讲是相同的,都是采用使用带有动量的小批量随机梯度下降来学习网络的权重。在每一次的迭代当中,是通过对256个训练视频进行采样,构建一个256个样本的小批量,之后从每一个小批量当中随机选择单个帧。在空间网络训练当中,是从所选的帧中随机采点出224*224的子图像,然后再经历随机的翻转和RGB抖动;在时间网络训练当中,选定了训练帧,计算光流体积。从这个体积中,去选择固定大小的输入,然后进行随机的裁剪和翻转。对于学习率来讲,最初设置为10-2.后续会根据固定的时间表进行降低,也就是说当我们从头训练这个卷积网络时,速率在50k过后就会变成10-3,在70k过后就会变成10-4,在80k过后就会停止训练。
  3. 测试过程。在测试过程当中,给定一个视频,采样固定数量的帧,在帧之间有相等的时间间隔。接着在每个帧之中,裁剪和翻转帧的四个角和中心,来获得10个卷积输入。最后通过对这些采样帧的分数进行平均,来获得整个视频的类别分数。
  4. 预训练。在这篇文献中,主要是在ImageNet ILSVRC-2012这个数据集上进行预训练,如果不进行预训练,很容易造成网络的过拟合或者网络的不收敛。
  5. 光流。光流主要是使用OpenCV这个工具箱里现有的图形处理器来实现的。
  6. 多GPU训练。主要通过公开的Caffe的工具箱进行实现的。包括在单个系统上安装的多个图形处理器的并行训练,用这个数据的并行性就可以将每个随机梯度下降批处理拆分到几个图形处理器当中,来提高训练速度,从而减少训练时长。

训练结果

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

         时间网络和空间网络在UCF-101数据集上的一些准确率,(a)空间网络:经过预训练和微调的准确度最高,从第三行可以表明,要选择合适的丢失率来让网络的准确度提高。(b)时间网络:当选择光流堆叠这个光流估计方法,准确度较高,达到了80%以上,所以一定要选择合适的光流估计方法。

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

      在最后一行,多任务学习训练准确度最高。表明要尽可能利用所有可用的数据进行训练,一方面可以提高他的泛化能力,另一方面还能提高训练准确度。

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

       相较于前两副图,发现这里是时间网络和空间网络相融合,在训练准确度上面大大提升。最后一行,当采用SVM融合方法进行训练,训练准确度达到87%,是最高的。所以基于SVM的softmax分数融合是优于用平均法进行融合的。在时间卷积网络当中,第一行采用双向光流估计方法,但并没有得到很好的准确度,所以光流估计一定要选择合适的方法。

Two-Stream Convolutional Networks for Action Recognition in Videos读书笔记

       主要是将双流卷积神经网络与其他各类网络进行对比分析,双流卷积神经网络在UCF-101和HMDB-51两个数据集上所训练的效果是最好的,再次印证了双流卷积神经网络的优越性。

结论和改进方向

        这篇文章提出了一个基于卷积网络的时间网络和空间网络的双流结构,并且发现在光流上训练一个时间的网络比在原始的堆叠帧训练要好得多。因为光流是使用基于恒定性和平滑性的方法进行计算的,所以尽管使用光流的输入,我们的时间模型并不需要大量的手工操作。但是与此同时,这个双流卷积网络具有一定的缺陷。比如在时间网络当中,考虑了光流的轨迹问题,但是在空间网络中并没有考虑是否轨迹也会影响训练的效果。除此之外,因为最终的融合只是基于分类的分数,并没有处理到时间特征和空间特征之间的像素对应关系。还有一点,这个双流神经网络时间尺度上是有限的。因为在空间网络中所训练的是单个帧,而在时间网络中,训练的是一段时间内的相邻光流帧。