2014-NIPS-Two-Stream Convolutional Networks for Action Recognition in Videos
1. 摘要
这篇文章[1]主要研究了如何有效地将深度学习用在动作识别领域。作者提出,这个任务的主要挑战在于如何让神经网络同时捕获到两种信息:一种是 appearance 信息(比如物体的大小、形状等静态信息),另一种是 motion 信息(即物体的运动信息)。这篇文章的主要贡献有三点,第一是提出了一个基于 CNN 的双流网络,它同时结合了时空间信息;第二,作者展示了即使只有少量训练数据,基于 CNN 的神经网络在视频帧的光流信息上进行训练能取得很好的性能;最后,作者展示了双流网络在多任务学习上的潜力,作者在两个数据集上同时训练一个双流骨干网络,相比于使用单一数据集,训练后的网络在两个数据集上都有性能提升。作者在 UCF-101 和 HMDB-51 数据集上进行了实验,效果能和当时的 SOTA 方法(当时还是非深度的方法)性能相当,比之前使用神经网络的方法要好很多。
2. 引言
相比于单张的静态图片,视频数据提供了一种很好的数据增强,因为视频数据天生就包含了物体形变等各种信息。在这篇文章之前也有一篇基于神经网络做视频理解的网络,但其简单粗暴,直接抽取一些关键帧输入到 CNN 网络中,自然效果也不好,甚至比不上手工设计的特征。于是作者借鉴了传统的基于手工设计的特征方法,将光流信息也引入到神经网络中进行学习,最后取得了很好的效果。
作者在引言中还回顾了一下一些优秀的基于手工设计的特征,包括 SIFT(scale-invariant feature transform)、STIP(spatio-temporal interest points)、optical flow、IDT(improved dence trajectory)等。
3. 模型
作者提到,视频可以很自然地拆分成空间信息和时间信息。空间信息就是指单帧图片中物体的 apperance 信息,而时间信息则是指帧与帧之间的 motion 信息。整个双流网络的架构如下:
- Spatial stream ConvNet(空间流网络):类似于 AlexNet,和传统的 CNN 一样,以一系列的视频帧为输入,主要学习 apperance 信息;
- Temporal stream ConvNet(时间流网络):以一系列视频帧的光流特征作为输入,主要学习 motion 信息;
- class score fusion:加权平均,最后再过一个 Softmax,得到最终的类别预测输出。
4. 方法
4.1 空间流网络
作者先在 ImageNet 上对空间流网张进行预训练,再在 UCF-101 或 HMDB-51 上进行微调得到最终的空间流网络。
4.2 时间流网络
4.2.1 光流
给定前后两帧 (a) 和 (b),光流 © 描述的便是运动物体的运动方向,每个像素点都有一个运动方向,如果没有运动,则光流值为 。一般会将光流 © 分成水平方向分量 (d) 和垂直方向分量 (e),分别用一帧来表示。因此,给定 帧,计算得到的光流一共有 帧。
4.2.2 光流叠加
得到光流后,如何将光流输入到网络是一个问题。如果将每张光流看成是单张图片输入到时间流网络中进行分类,那就没有利用到时间上的运动信息。因此,作者提出应该将在一系列的光流叠加在一起,作为网络的输入。比如有 帧 的图片,则计算得到 帧 的光流图,将其叠加在一起得到 的输入,即在特征维度上进行拼接。但怎样拼接也有讲究:
-
简单的光流叠加:一种简单的拼接方式就是直接将光流图直接按照时间顺序拼接在一起,得到 的输入张量。如 Figure 3 所示,用数学公式描述如下:
其中, 表示拼接得到的 的输入张量, 表示第 帧和第 帧在 位置的光流向量, 和 分别表示其水平和垂直方向的分量。
-
轨迹叠加:另一种方式是按照每个点光流的轨迹来叠加光流,如 Figure 3 所示,用数学公式描述如下:
不过尬尴的是,作者在实验中发现第一种简单的叠加效果反而更好。但这并不能完全说明第二种方式就没用,因为后续有工作就是使用了第二种方式,将分数刷到了很高。
4.2.3 双向光流
作者还尝试使用双向光流,具体便是对于帧 ,一方在面计算其到 帧之间的连续两帧的前向光流,另一方面则计算其到 帧之间的连续两帧的后向光流,最后叠加在一起得到 的输入张量。
5. 实验
5.1 设置
- 帧数抽取:无论视频有多才,作者都是等间距地取 帧;
- 空间流测试输入:对于抽取的每一帧,先将其翻转增强到两帧,然后对每一帧进行 Crop(分别在四个角和中心),即得到 帧。也就是说,原来的 帧经过数据增强后变成 帧作为空间流的输入,即每个视频转化为输入的张量 ;
- 时间流测试输入:对于 帧中的每一帧,从其位置开始再在原视频中连续抽取 帧,对其计算光流后作为时间流的输入,即每个视频转化为输入的张量为 ;
- 光流计算:作者在这篇文章中计算光流的方式是参考文献[2],其可以使用 GPU 加速(大概 一张光流,但还是太慢了)。另一个问题是,存下所有光流图需要大量的存储空间,作者便将光流值 Rescale 到 的值,然后使用 JPEG 压缩存储光流图。
5.2 消融
作者首先在 UCF-101 数据集上分别单独测试空间流网络和时间流网络,如下表所示:
其中,Pre-trained + fine-tuning
表示整个网络进行微调,Pre-trained + last layer
表示固定网络其它部分,只微调最后的分类头。可以看到,对于空间流网络,如果没有在 ImageNet 上进行预测练而是直接在 UCF-101 上进行训练,效果很差;对于时间流网络,作者测试了使用不同大小的 的效果,以及使用双向光流的效果。
5.3 结果
作者在 UCF-101 和 HMDB-51 数据集上和以往的一些主要方法进行了对比,如下表所示:
其中,IDT 是传统手动设计特征中最好的方法。
6. 结论
作者提出了一个简单有效有双流网络,其同时结合了空间流网络和时间流网络,取得了和传统最好的手工设计特征方法相当的性能。对于未来的工作:
- 在这篇文章中作者展出了空间流网络预训练的有效性,那对于时间流网络在大数据集上预训练会不会也要更好呢,比如 sports one million 数据集。不过光流的抽取和存储是一大挑战。
- 为什么基于轨迹的光流叠加方式不如简单的拼接,基于轨迹应该更合理才对。这在后续的工作中已经被证实,王利民老师在 CVPR2015 上就使用了基于轨迹的叠加方式,将分数刷到了 以上。
- 视频拍摄过程中可能存在相机本身的移动,会影响光流的计算。作者提出是否可以借鉴一些传统处理相机移动的有效方法。
附录
Simonyan, K., & Zisserman, A. (2014). Two-stream convolutional networks for action recognition in videos. Advances in neural information processing systems, 27. ↩︎
T. Brox, A. Bruhn, N. Papenberg, and J. Weickert. High accuracy optical flow estimation based on a theory for warping. In Proc. ECCV, pages 25–36, 2004. ↩︎