深度学习时代的视频理解综述
本文为b站@bryanyzhu老师四期视频理解相关论文解读的汇总图文笔记。
我们先精读深度学习时代视频理解领域最为重要的两篇论文:双流网络和 I3D。它们分别是领域内两大类方法双流(利用光流)网络和 3D CNN 网络的代表作。然后我们按照四个板块:从手工设计特征到深度神经网络、双流网络系列、3D CNN 系列、Video Transformer系列来串烧几篇有代表性的论文。以期能给读者描绘出整个深度学习时代视频理解领域至今为止的发展脉络和未来的发展方向。
双流网络
论文:Two-Stream Convolutional Networks for Action Recognition in Videos
发表于:NuerIPS-2014
导言
双流网络虽然不是第一篇用深度网络来做视频理解的工作,但是考虑到之前的深度视频理解模型甚至打不过传统方法,双流网络可以说是第一篇真正将深度网络在视频理解领域做work的工作。并且,直到最近,双流网络所使用的结合光流特征的方法仍是视频理解领域的重要一支(另外的重要一支是基于 3D 网络)。因此,将其称作为开山之作毫不为过。
在之前是用深度网络处理视频数据的工作中,都是直接将多个视频帧直接送入卷积网络进行特征提取。然而,CNN 虽然能提取 2D 空间图像特征,但是感知时序信息的能力较差,无法很好地提取视频的时序动作信息。本文提出了一个双流网络,一支用提取原图中的 2D 空间图像信息,而在用来提取时序动作信息的另一分支中,使用预先处理得到的光流图作为输入。然后将两分支的结果合并。最终性能提升明显。
方法
双流网络的模型结构图如下所示。顾名思义,双流网络自然是由两支网络组成的,分别称为空间流卷积网络和时序流卷积网络。最终的结果由这两支的结果 late fusion 平均得到。
early fusion:两支路在中间特征层进行聚合
late fusion:两支路在 logits 结果进行聚合
其中空间流卷积的作用就是很常规的 RGB 三通道图像的特征提取了,主要提取纹理、色彩等特征,相当于就是在做一个基础的图像分类。可能有人会好奇,本文不是要做动作识别吗,不应该主要关注动作吗,图片内容有什么用呢?实际上,图像的语义内容也是很重要的信息。比如像图中的例子,如果网络能识别到图中是一个人拿着一把弓,那其实很大概率就能识别到这个场景中的动作是射箭了。这部分 RGB 图像本身的语义内容信息就由空间流来提取。
而时序流卷积,是本文的核心。因为本文终归做的是视频理解中的语义识别任务,视频数据与图像数据的最核心的区别就是视频数据中有时序的动作信息(motion information)。这在动作识别任务中格外重要。在双流网络之前的深度动作识别模型,都是直接把视频帧 RGB 图像数据送到网络中,然后给标签,硬train一发,这样的最终效果并不好。因为传统的 2D CNN 网络是很难感知到时序的信息的。在这里,作者想到,你 CNN 没办法很好地提取时序动作特征,那我就直接把它提取好送给你,你只要学习这种特征到结果的映射就可以了。那我们怎么自己提取时序动作特征呢?作者采用了传统的视频理解的光流(optical flow)法来做。
光流法是对比前后两帧图像的变化,得到每个像素位置的变化,来获得视频的动作信息。每两帧图像之间会得到一张光流图(类似的,每三帧得到两张,每四帧得到三张,以此类推)它的具体形式就是一个 w × h × 2 w\times h\times 2 w×h×2 的张量,这里的 2 2 2 分别表示水平方向和竖直方向的变化。如下图所示,d, e 分别就是两个方向上光流变化的可视化结果。
为了利用更长时间的动作信息,文章中这里用的是当前帧及其之后 11 帧、10 张光流图(这个超参数 10 后面也有对比实验)的光流特征。怎么样聚合这些特征是一个问题。在这里,作者也尝试了两种聚合方式:optical flow stacking 和 trajectory stacking,即直接的光流堆叠和轨迹堆叠。其实意图分别由下图左右部分所示。
第一种方式就是简单直接地将得到的光流图堆叠在一起,每次叠加的都是同样位置的光流特征。第二种则是根据光流的轨迹,在轨迹上进行数值的叠加。比如得到第一帧到第二帧的光流图之后,我们就已经知道第一帧中的某个像素在第二帧中变化到哪个位置了,那我们就去找其对应位置(轨迹)的值进行叠加,然后第二帧到第三帧,位置又变了,我们再去找变化之后的位置叠加。
听起来明显是第二种方法更合理,但是本文的实验结果却显示两种方式性能差不多,甚至是第一种简单粗暴的方式性能稍优,这也令作者感到费解,并表示这时未来可能的优化方向。
另外,作者还尝试了双向光流(bi-directional)的方式。即同时计算前向光流和后向光流(相当于视频倒放),得到了更好地性能。实际上,像 Multi-scale,Casacade,Bi-directional 这种深度神经网络常见的设计范式已经经过了大量的研究的验证。基本是会涨点的,一般至少不会掉点。
总结
双流网络可以说是深度视频理解的开山之作。它利用了传统方法中的光流法来提取动作信息,再配合 CNN 直接处理原图得到的内容信息,将深度网络在动作识别上的性能达到了当时的 SOTA 水平。
双流网络带给我们的一个更高维度的启示是:当深度学习模型在某个新领域上,通过送数据、给标签,直接硬train一发的方式并不work,并且单纯魔改网络结构效果也不好时,可以回头借鉴一下本领域优秀的手工提取特征的方法。比如 2D 卷积网络确实对于视频中的时序动作信息(motion information)提取的不好,而传统方法中的光流特征能很好地表达这种动作信息。那我们不妨直接将处理后的光流特征送入 CNN,让 CNN 去学习这种特征到结果的映射(这是 CNN 所擅长的)。再配合另一路提取图像本身特征(这也是 CNN 擅长的)的 CNN 网络,就有了本文的双流网络模型,第一次将深度视频理解模型做到令人满意的结果。
双流I3D
论文:Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
发表于: CVPR-2017
导言
另一篇视频理解领域划划时代的论文是双流 I3D。它的贡献从标题中就能看出,一是提出了一个新的模型:双流 I3D(Two Stream Inflated 3D ConvNet),二是提出了一个新的数据集 Kinetics。
I3D 模型使得我们把一个 2D 卷积模型扩张为一个 3D 模型,这样我们就可以在视频领域直接借用图像领域的 backbone 网络(如 VGG、ResNet 等),甚至可以把 2D 网络的预训练参数也利用起来,作为 3D 网络的初始化。这样我们就不用再视频领域重新设计网络(比如选 kernel_size,num_of_block 等工作),而是可以借鉴 2D 图像领域已经有的很好的网络结构,这些结构的合理性都是在图像领域经过了验证的。而视频无非是多帧时序图像的堆叠,因此能够借鉴图像的网络结构并扩张到 3D 直接处理视频,自然是极好的。
Kinetics 大规模数据集提出之后,在其上进行预训练的模型,再在 UCF-101 上再进行微调,性能已经能够达到 98%,基本宣告了 UCF-101 数据集的终结。在之后视频理解相关的工作中,Kinetics 成为了新的主流数据集。这一结果还证明了 “预训练+迁移学习” 的范式在视频领域同样适用。在此之前,视频领域并没有一个足够大的,足够好用的数据集进行预训练,没有一个视频数据集能够做到像 ImageNet 之于图像领域那样,为大多数其他图像任务提供一个好用的预训练模型。“Kinetics预训练+UCF101微调” 的实验结果显示,Kinetics 数据集做到了这一点。但是,一些研究表明,即使拿出 Kinetics 数据集中的某一帧,直接去做图像的动作识别,效果已经很好了。研究视频理解,当然是希望模型能够对视频帧之间的时序关系进行建模,然后根据这些时序信息做出预测。从这一有些令人尴尬的结论可以看出,视频理解的研究还有很长的路要走。
方法
在分析了目前视频理解领域没有足够大规模的数据集的现状之后,文章提出了 Kinetics 400 (后又扩展到 500、600)数据集。有了新的大规模数据集之后,作者先对比了之前视频理解领域常见的三类方法:
- ConvNet+LSTM,用卷积提取二维图像特征,用 LSTM 建模时序信息;
- 3D ConvNets,用 3D 卷积网络直接处理视频数据;
- Two Stream Networks,双流网络,使用光流法预先提取动作信息。
图 a 表示的是第一类方法,对视频中的每一帧图像,分别用 CNN 去提取它的特征,然后将时间序列上多帧的特征送到一个 LSTM 中,对时序进行建模,然后将最后一层 LSTM 输出的结果接到全连接层,完成分类。这种方式非常自然,CNN 提取图像信息,然后用 LSTM 对时序特征进行建模。但是实在是效果不佳,现在已经几乎没有人再用这种方法。主流的方法是剩下的两大类:3D 卷积和双流网络。
图 b 表示是第二类方法:3D 卷积,非常直接暴力。视频数据相比于图像数据无非就是多了一个维度,3D 卷积中的卷积、池化等操作都是三维的。直接将视频数据送到 3D 卷积中即可提取视频的特征,然后也是经过全连接层,进行分类。
图 c 表示的是第三种方法,就是上面介绍过的双流网络。一支卷积网络处理原图,提取图像的 2D 空间特征,另一支网络处理相邻视频帧抽取的光流图,得到时序运动信息。最终两个支路的 logits 结果进行 late fusion 合并,完成分类。
图 d 表示的是将 b,c 进行结合的一类方法。在网络一开始,与双流网络一样,分空间流和时序流两支,分别去提取 2D 图像特征和时序动作信息。但是并不是继续两支网络分别得到结果再合并,而是将两支网络的中间特征拿出来之后,在用一个 3D CNN 进一步处理,得到最终特征,完成分类。我们之前提到过,这种方式称为 early fusion。
以上全都是前人工作提出的方法,本文作者在提出 Kinetics 数据集之后,将这几类方法都在自己新提出的 Kinetics 数据集上跑了一下。在分析各类方法的结果之后,提出了自己的双流 I3D 网络。即图 e。
作者认为,之前的 3D CNN 网络效果不够好的一个原因是 3D CNN 自身参数量较大,需要足够大的视频数据集支持。那现在有了大型数据集,自然可以更好地发挥 3D CNN 的威力。并且,作者发现即使是 3D CNN 网络,也需要光流特征来获取时序动作信息,使用双流网络架构的 3D CNN 网络,效果提升显著。因此,作者最终提出了双流 I3D(Two Stream Inflated 3D ConvNet)。
下面我们着重讲一下双流 I3D 网络的实现细节,原文中,作者分了四个小节来介绍:
- Inflating 2D ConvNets into 3D:如何将 2D CNN 膨胀为 3D CNN;
- Bootstrapping 3D filters from 2D Filters:如何用预训练好的 3D CNN 参数来初始化膨胀后的 3D CNN;
- Pacing receptive field growth in space, time and network depth:如何控制池化层参数,来控制感受野的大小;
- Two 3D Streams:如何得到双流的 3D CNN
我们一一来看:
Inflating 2D ConvNets into 3D
其实本文中将2D 卷积网络膨胀为 3D 卷积网络的方式非常简单直接。2D 网络中的卷积核尺寸和池化层一般都是平方的,比如 3 × 3 / 5 × 5 3\times 3/5\times 5 3×3/5×5 等,直接把它们变成立方的即可,比如 3 × 3 × 3 / 5 × 5 × 5 3\times 3\times 3/5\times 5\times 5 3×3×3/5×5×5 。
这种直接将 2D CNN 膨胀为 3D CNN 的好处前面已经提过。由于 3D 视频数据其实还是处理有时序关系的多帧 2D 图像数据。我们可以复用之前在图像领域已经得到验证过的成功的网络结构,如 VGG、ResNet 等,而不需要再重新调整各处细节的网络结构参数。而之后如果又有新的好用的 2D CNN 结构,也是直接膨胀到 3D 拿来处理视频数据即可。
Bootstrapping 3D filters from 2D Filters
如何用 2D CNN 的预训练权重来初始化一个 3D CNN 。作者的想法是同一个网络,在接收同样的输入时,输出应该是一样的。将一张图片复制 N N N 次,就得到一个 N N N 帧的 “(无聊的)视频”,将这个 “视频” 送入到 3D CNN 网络中,为了保持输出的一致,除了 2D 参数复制 N N N 次之外,我们还要将参数除以 N N N 。这样,同一个网络,在接受同样的输入(图片/“视频”)时,输出就是一样的了。这就比较合理地完成了用 2D CNN 参数初始化 3D CNN 的过程。
Pacing receptive field growth in space, time and network depth
与 2D 卷积的一个不同点是 3D 卷积的新增的维度(时间维度)和原来的两个维度(空间维度)的物理含义是不一样的,它们的数值通常也是不在一个范围内的(空间维度通常是几百,时间维度通常是几十)。这是由帧率和图像尺寸决定的。如果采用相同的池化参数,时间维度很快就减到很小了,这显然是不合理的。因此,在进行池化时,时间维度的池化参数与空间维度的池化参数不应该简单的相等。作者在实际实现 Inception-V1 的 I3D 膨胀网络时对于初始几层的时间维度的池化参数做了调整。
Two 3D Streams
总结
本文结论部分强调了迁移学习在视频领域的有效性得到了验证。但也同时指出,虽然做了不同数据集的迁移学习实验,但是本文做的实验还只是在动作识别这一个任务内进行的,如果能够在不同的视频任务(如视频目标检测、视频语义分割等)上来验证迁移学习的有效性当然是更好的。另外,在网络结构的设计上,作者也认为本文并没有进行全面的探索,像 action tubes、attention mechanism 这些结构都没有进行尝试。这些都是未来研究中不错的跟进方向。
本文的两个贡献非常清晰:I3D 模型(2D 模型膨胀为 3D 模型的方法)、Kinetics 数据集。之所以说本文称得上是视频理解领域划时代的论文,是因为它的两个贡献全面地解决了该领域接下来研究的问题。一是提出了一个高质量的大规模视频数据集。在以前,如果我们想设计一个全新的、针对视频领域的模型,有一个棘手的问题是视频领域没有足够大的数据集来进行预训练。不像其他已有的图像领域迁移过来的结构,可以使用 ImageNet 数据集上的预训练参数。本文提出了 Kinetics 数据集之后,视频领域大规模数据集的空缺得以填补。二是提出了从一个 2D CNN 膨胀为 3D CNN 的方法,并且也提出了将 2D CNN 的预训练参数迁移到 3D CNN 网络的方式。这样如果我们想就用已有的结构,去做一些新的任务,就可以直接借助图像领域的精心设计和训练的网络结构和预训练参数来做视频任务。自此,视频理解领域的后续研究工作就可以从更多角度展开了。
从手工设计特征到深度神经网络
在手工设计特征的时代,首先是从图像领域的 SIFT 特征延伸到视频领域的 STIP 特征。然后加入了光流特征和轨迹信息,有了 DT/IDT。除此之外,为了建模时序信息,一些手工特征的方法也会引入 LSTM 来处理时序视频帧。最后,为了处理长视频,手工特征时代也会把 IDT 特征和 Fisher Vector Encoding 进行融合,从而得到全局的视频特征。
自从 AlexNet 验证了深度 CNN 网络在图像领域的潜力之后,大部分进行视频领域的工作也从原来的手工设计特征转移到深度神经网络上来。
本部分仅介绍一片论文——DeepVideo,它是深度学习时代早期将 CNN 网络用于视频分类的经典论文。
DeepVideo
论文:Large-Scale Video Classification with Convolutional Neural Networks
发表于:CVPR-2014
导言
本文的贡献一是对集中将图像领域的 2D CNN 网络直接拿来处理视频数据,做了一些最基本的尝试,二是提出了一个巨大的 Sports 1M 数据集,含有一百万运动动作视频。
方法
视频与图像在数据格式上的区别就是多了一个时间维度,本文先尝试了几种将 2D 的 CNN 网络应用于视频任务的最直接的想法,如下图所示。
- Single Frame:从视频帧中选一帧直接送到 CNN 网络中提取特征并完成分类,相当于就是一个图片的分类任务,可以视作是一个 baseline;
- Late Fusion:从视频帧中选两帧,分别用两个 CNN 网络(此处的两个 CNN 是共享权重的)提取特征并输出 logits,late fusion 指的是对两个分支网络得到的 logits 进行合并;
- Early Fusion:early fusion 指的是在 logits 之前(输入或特征图)就进行特征融合,然后经过一个 CNN 网络得到一个 logits 结果,再得到最终的分类结果。此处是在输入时就进行通道维度上的融合,比如图中输入 5 帧 RGB 图,那就是 3 × 5 = 15 3\times 5=15 3×5=15 个输入通道;
- Slow Fusion:slow fusion 综合了前面两种融合方式。以图中结构为例,一开始有四支网络,分别接收融合过的 4 帧输入,四支网络经过一定的特征计算之后,融合为两支网络,再计算,在融合,最后输出分类结果。
另外,还有一个进一步优化的网络,也是将图像领域的一种设计——多分辨率结构,直接拿过来用的。一张原图分为两个输入送入两个网络,一个是裁切中间部分,送入 fovea stream;另一个就是原图,送入 context stream。这样做的依据是一张图像中中间部分总是含有比较关键的信息,而周边的部分可以认为是一些上下文信息。这也可以看做是早期一种 “生硬的” 注意力机制,即强行使模型关注图像的中间部分。
用图像领域的 2D CNN 处理多了一维的视频数据,以上几种方式是最直接的做法,本文都进行了尝试。但是效果并不尽如人意(如下图所示),甚至与手工设计特征的方式(IDT 87.9%)相差甚远。而且,以下结果还是在巨大的 Sports 1M 数据集上预训练,再在 UCF-101 上微调的结果。
总结
本文的主要贡献并不是在于任务性能的提升(实际也并没有提升),而是在于进行了深度 CNN 网络在视频理解领域的初步探索。在本文之后,大量的使用深度神经网络处理视频数据的工作涌现出来,视频理解领域正式进入深度学习时代。
双流网络系列
双流网络系列是使用深度神经网络完成视频理解任务的一个重要分支,其中开山之作的文章 “双流网络” 我们已经在上面详细介绍过了。本节将针对原始的双流网络的一些改进方向,各自介绍一篇有代表性的论文。
双流网络
论文:Two-Stream Convolutional Networks for Action Recognition in Videos
发表于:NuerIPS-2014
方法
我们首先简单回顾一下双流网络,并分析一下它存在的可以改进的几个方向,本节接下来介绍的几篇论文都是这几个方向中有代表性的论文。
以上面介绍的 DeepVideo 为代表的一些使用深度神经网络进行视频理解任务的早期探索工作证明了这样一个结论:CNN 虽然能提取 2D 空间图像特征,但是感知时序信息的能力较差,无法很好地提取视频的时序动作信息。基于此,作者想到,既然 2D CNN 确实不容易处理时序动作信息,那就用光流法先将多个连续视频帧中的时序动作信息提取出来,得到光流图,然后 CNN 直接学习从光流图到结果的映射。再配合另外一支 CNN 网络,提取原图中的 2D 空间图像信息。然后将两者的结果进行 late fusion,得到最终的结果。
未来方向总结
实验结果显示双流网络的性能极好,它不仅准确率高,而且训练简单、参数量小。但是,原始的双流网络本身还有许多可以改进的方向:
- 原始双流网络中的 late fusion 是对两支网络输出 logits 直接进行加权平均,这未免有点过于简单。如果能够设计一个合理的 early fusion 的结构,来增强两支网络特征之间的交互,无疑会比简单的 late fusion 效果更好;
- 原始双流网络中两个分支的具体结构就是 AlexNet,随着基础卷积结构的发展,各种更深、更优秀的 backbone 网络(如 VGG、Inception Net、ResNet等)涌现出来。能够利用这些新型的 backbone 网络应当也会提升性能。另外需要注意的是,当时的视频理解领域并没有大型的数据集。因此,更深的网络是否会产生严重的过拟合、如何缓解过拟合,也是有待研究的问题;
- 原始双流网络的两个分支都是用纯卷积来处理原图/光流图,然后直接根据得到的特征去进行分类。而我们知道,视频数据相比于图像数据增加的一维是时间维。如果能用擅长处理时间维的时序序列的 LSTM 来对 CNN 提取的时序的多帧图像特征进行处理,提取图像特征的 CNN 和处理时序序列的 LSTM 各司其职,看起来会是更合理的方法;
- 我们之前详解双流网络是提到过,原始双流网络中光流特征是通过原图之后连续 11 帧图像之间的光流图聚合得到的。现今,视频的帧率一般在 25、30,相当于时间维度的感受野是半秒都不到,而一个日常动作的持续时间一般要两三秒。因此,如何做更长时间的视频理解也是一个值得研究的方向。
以下,我们将针对上述几个方向,介绍几篇有代表性的论文。
Beyond Short Snippets
论文:Beyond Short Snippets: Deep Networks for Video Classification
发表于:CVPR-2015
导言
本文标题中的 short snippets 指的就是短的视频片段,那要 beyond,意思自然是本文处理的视频长度要更长。本文方法的网络结构如下所示。很明显的,该网络接收的原始视频帧的长度要更长(如图中的 30 - 120 秒)。为了更好地处理长视频帧序列,本文对特征聚合的方法从两个角度进行了探索,一是多帧图像特征的池化方式,二是通过 LSTM 来聚合时序序列的多帧特征。
方法
对池化方法方法的探索
对于通过池化进行特征聚合的方法,本文探索了多种不同的池化方式,如下图所示。图中砖红色的方块 C,就是网络提取到的单帧特征,而再其上堆叠的蓝色的、绿色的、橙色的、黄色的方块,则分别对应最大池化、空间域卷积、全连接层和 softmax 层。
从实验结果来看,其实不同的池化方式差的并不是特别多,但终归是卷积池化的方式取得了最好的性能。
对LSTM的探索
本文对 LSTM 的使用方式很直接,其结构如下图所示。其中砖红色的方块 C,还是表示网络提取到的单帧特征。然后在其上添加了五层 LSTM,最后经过 softmax 层,得到分类结果。
实验结果显示使用 LSTM 来进行时序序列的建模,提升并不显著。
Yi Zhu 认为,LSTM 网络使用处理非常高层的抽象语义信息,给 LSTM 的输入,必须要有一定的变化,而不能太过单一,LSTM 才能发挥它的能力,学习到时间序列上的变化。比如在自然语言处理中,一个句子中多个词的语义通常是变化很大的,在这种情况下 LSTM 就能工作得不错。但是对于几十几百帧(可能实际中就是三四秒)的视频来说,整个画面通常都是比较连续的,不同帧经过 CNN 提取的语义特征都变化不大。将这种特征送给 LSTM 来学习,其实学不到什么东西。如果是更长的视频或者是画面变化比较剧烈的视频中,LSTM 可能能带来更大的提升。
总结
Convolutional Two-Stream Network Fusion for Video Action Recognition
本文想要处理时间更长的视频。为此,对于多帧视频的特征聚合,本文分别探索了池化和 LSTM 两种方法,取得了一定的性能提升。
论文:Convolutional Two-Stream Network Fusion for Video Action Recognition
发表于:CVPR 2016
导言
本文聚焦于如何为双流网络设计一个更好的特征融合方式。作者从三个角度展开了研究:一是如何进行空间维度的特征融合,二是应该在哪一层进行特征融合,三是如何进行时间维度的特征融合。然后在通过大量实验得到最优的组合之后,作者提出了自己的网络结构。
方法
我们先分别看作者对上述三个角度进行的研究和得出的结论,然后引出作者提出的网络结构。
如何进行空间维度的特征融合
我们知道,双流网络的空间流(输入为原图)和时间流(输入为光流图)两个分支输入的空间尺寸是一样的,如何进行空间维度的特征融合,就是如何根据两个分支的特征图的对应位置的值得到融合结果。作者一共尝试了一下几种方式:
- Max fusion:取两个分支中对应位置中较大的值;
- Concatenation fusion:将两个分支中对应位置的值拼接起来;
- Conv fusion:将两个分支的值送入到一个卷积,得到结果;
- Bilinear fusion:在每个位置上计算两特征的矩阵外积。
前两种方式有些简单,最后一个又太复杂,并且计算量也更大,实验结果也显示,卷积融合的方式是最好的。
在哪一层进行融合
作者开展了大量的消融实验,来分析在哪一层进行特征融合效果最好。下图展示的是两种比较好的融合位置。
- 左侧图是在倒数第二层卷积进行空间流和事件流的特征融合,然后再过一层卷积,再送入全连接层,得到的分类结果,这就是传统的 early fusion,在某一层特征图上进行融合;
- 右侧图是在最后一层卷积之后进行特征融合。除此之外,还保留了空间流分支,继续进行计算,然后再在最后进行一次 late fusion。实验显示,右侧这一种取得了最好的效果。这种方式的思路是:将中间层的空间特征与时间流分支进行特征融合,但是空间流本身需要继续进行计算,提供最后的高层语义信息。
如何进行时间维度的特征融合
时间维度上的特征融合,即不同帧特征之间的融合。作者尝试了两种方式:
- 2D Pooling:忽略时间维度,仅在空间维度上对相邻像素上进行池化;
- 3D Pooling:对时空相邻元素进行池化;
- 3D Conv + 3D Pooling:在 3D Pooing 之前额外进行了一个 3D 卷积操作。
由于同时牵扯到时间流和空间流,而进行一个额外的 3D 卷积加强二者的特征交互,因此最后一种方式取得了最好的效果。
网络结构
在通过实验完成了对上述三个问题的研究,并得到了最优的组合之后,作者提出了自己的网络结构,如下图。整体上还是一个双流网络的结构,对每一帧输入图像,分别由空间流(蓝色)和时间流(绿色)去处理输入原图和光流图。然后,在特征交互部分,按照上面的三个最优方式进行操作,不再赘述。
值得一提的是,考虑到时间序列对于视频理解的重要性,本文的网络结构除了 Spatiotemporal 分支之外,还有一个单独的 Temporal 分支。在训练阶段,两个分支分别使用了两个 loss 引导优化,而在测试阶段,同样是取二者的加权平均。
实验结果部分。可以看到除了使用了新型的融合方式之外,作者还是用了当时更新、更深的骨干网络:VGG16。在实验结果中,仅仅是使用了新的网络结构,就取得了不小的提升。而本文涉及的新型融合方式,在相对较小的数据集 HMDB51 上取得了更显著的提升。这是因为新型 early fusion 的融合方式,在更早就对两支网络进行了特征融合,使得模型早期就能从时间流和空间流两支网络中互相学习、互相弥补,在一定程度上弥补了数据不足的问题。
总结
本文的意义和贡献主要体现在两个方面,一是进行了大量的消融实验,将双流网络的融合方式和模型结构进行了全面的研究,方便后续工作参考;二是本文对于 3D CNN 的使用,取得了不错的结果,在一定程度上推动了 3D CNN 的发展。在之后,又有大量的关于 3D CNN 进行视频理解的研究出现,甚至在之后几年出现了 3D CNN 霸占视频理解领域的局面。
TSN
论文:Temporal Segment Networks: Towards Good Practices for Deep Action Recognition
发表于:ECCV-2016
导言
TSN 对视频理解领域的贡献完全不逊色于我们单独介绍的双流网络和 I3D 网络。
本文研究重点是如何处理更长时间跨度的视频。在下面的方法介绍中可以看到,本文 Temporal Segment 的思想其实非常简单,但却十分有效。注意简单不代表没有新意。反而如果是一个简单却效果很好的方法,其实是最具有新意的。
除此之外,本文的突出贡献在于给出了很多视频领域非常好用的训练技巧(如数据增强、模型初始化、如何使用光流、如何选择网络、如何避免过拟合等),就是标题中所说的 “Towards Good Practices”。其中很多技巧沿用至今。
方法
Temporal Segment
我们之前提到过,单个双流网络,空间流输入就是一帧图像,时间流输入一般是 10 帧光流图,这样时间跨度不到半秒,对于一般在 2~3 秒的日常动作来说太短了。那怎么才能处理更长时间跨度的视频呢?
本文 Temporal Segment 的思想非常简单。先将长视频分为 K K K 段(如图中就是分为 3 段),然后再每一段中随机抽取一帧作为 RGB 原图,再取其之后几帧抽取光流特征,送入到双流网络的两个分支中。这样就能得到 K K K 个空间流 logits 和 K K K 个时间流 logits。Temporal Segment 出发点是:对同一段视频,虽然是从不同的片段中抽取的帧,每帧的画面不尽相同,但是它们经过特征提取的高层语义应该是一致的。因此,我们对不同段得到的空间流/时间流 logits 分别做 Segmental Consensus,其实就是做融合。当然这里可以尝试的融合方式有很多,乘法、加法、取最大、取平均,甚至 LSTM。最后将空间 Consensus 和时间 Consensus 做一个 late fusion ,得到最终的结果。
Good Practices
之前,我们提取到,除了 Temporal Segment 思想之外,本文另一个重要的贡献是给出了视频理解领域很多很实用的技巧。下面我们来介绍几个
-
Cross Modality Pre-training
本文将 RGB 原图和光流图视作是两个不同模态的输入。那么对于空间流分支,我们可以直接用 ImageNet 预训练参数进行初始化。但是对于时间流,但是并没有足够大的视频数据集进行光流图的预训练。本文指出,其实也用 ImageNet 预训练参数进行初始化就好了。但是这里有一个问题,ImageNet 预训练参数是处理 RGB 三通道输入的,我们之前介绍双流网络时提到,时间流分支输入通道的典型值是 2 × 10 = 20 2\times 10=20 2×10=20 。这样第一层卷积的输入通道数不对应,无法直接进行参数初始化。本文认为,只需要简单的将三通道的权重取平均,然后直接复制 20 份就好了。实验显示,这种简单的做法提点显著。
我们之前介绍过 I3D 文章中模型中用原 2D CNN 的预训练参数来初始化膨胀后的 3D CNN 的方式:Bootstrapping。这里已经有点那个影子了。目前这种方式仍在广泛使用。
-
Regularizaion Technique
在初期的视频理解领域,BN 的使用有一些问题。虽然 BN 能够带来训练速度的提升,但是,由于当时视频数据集都太小,因此会导致很严重的过拟合问题。在 ImageNet 上预训练得到的 BN 统计量如果在小型视频数据集上进行微调的话,很容易过拟合在小数据集上。所以其实最好不要调,就用大数据集上得到的统计量。但是,毕竟图像数据集和视频数据集还是有一定的差别,如果完全冻住不调的话,迁移学习的效果也不好。本文提出了 partial BN,即只打开第一层的 BN,后面的全都冻住不动。因为毕竟数据集变了,为了适应新的输入,第一层的 BN 还是要调整,但是再之后层的 BN 就固定不动了,来缓解过拟合的问题。
虽然现在视频数据集都很大了,基本不会用 partial BN 了。但是有时在微调时或者迁移到小数据集时,还是会采用 partial BN,一般效果都不错。
-
Data Augmentaion
数据增强是深度学习时代很重要的一项缓解过拟合的方法。在本文中,作者也给出了两个在视频任务上很实用的数据增强技巧:corner cropping 和 scale jittering。前者是为了避免 random cropping 随机出来的裁剪位置总是靠近图像中间,强制地去对边角处的图像进行裁剪;后者是随机组合图片的长和宽,来得到不同长宽比的图像。
这些数据增强方式时至今日也有一些工作在使用。
-
其他技巧详见论文原文。
本文方法的测试结果见下表。可以看到 TSN 模型的性能提升还是十分显著的。对于上面提到的许多使用技巧在论文中也都有消融实验,有兴趣自行查看即可。
总结
TSN 这篇文章用一个简单但有效的 Temporal Segment 的方法来处理长时间跨度的视频数据,取得了显著的性能提升。并且本文中提出的很多视频理解领域实用的训练技巧(重要到都写在了标题上)也为后续的工作提供了很大的帮助。
在 TSN 之后,又有一些关于双流网络的改进工作,如 DVOF、TLE。除了上面提到的几个改进方向之外,还有一些其他的对于原始双流网络的改进工作,比如解决如何在时间流分支中沿着轨迹去堆叠光流的 TDD 等。再之后,在 I3D 提出了简单实用的 3D CNN 和大型的 Kinetics 数据集,双流网络结构和 UCF-101、HMDB51 基本就淡出视频理解的历史舞台了。因此,TSN 也是双流网络系列乃至整个视频理解领域一篇必读的里程碑式的工作。
3D CNN系列
双流网络看起来是对视频数据一个很合理、很自然的处理方式:空间流处理原图输入,得到空间图像特征;时间流处理光流输入,得到时序动作特征。可为什么现在视频理解领域的主流方向都是在研究 3D 网络呢?
实际上使用光流特征有一个很致命的缺点:慢!如果使用未加优化的 TV-L1 算法去抽取光流,即使在 GPU 上,也需要 0.06 秒来抽取两帧图像的光流特征。对于一个大型的视频数据集(比如 Kinetics 400)来说,仅仅是抽光流,就需要单卡 50 天的时间。而在推理时,0.06 秒意味着一个视频模型的推理速度上限就在 15 FPS,这显然无法达到 25/30 FPS 的实时推理的要求。而很多视频的应用都要是要求实时的。
因此,研究者们还是尽量想用一个网络来处理视频,来得到更快的训练和推理速度。可惜的是,即使是 3D CNN 或 Video Transformer,目前大多数网络仍然无法达到实时的要求。而且,在 3D CNN 的基础上,再增加光流信息,仍能带来性能提升(如双流 I3D)。也就是说,光流特征仍然是一个很重要的视频特征,它不是没用,只是计算代价太高。
C3D
论文:Learning Spatiotemporal Features with 3D Convolutional Networks
发表于:ICCV-2015
导言
本文是早期探索 3D CNN 在视频理解领域的工作之一。做法非常简单,就是简单的搭了一个深度的 3D 卷积神经网络。与再之前的工作的差异在于使用了大型的数据集(Sports 1M),并使用了更深的网络结构。
方法
文章给出的模型结构图非常简单,就是几层卷积和池化的堆叠,只是其中卷积核是 3D 的: 3 × 3 × 3 3\times 3\times3 3×3×3 。值得一提的是,作者最终的做法是将 fc6 得到的 4096 维的特征直接用 SVM 来做分类,又快效果又好。本文被称为 C3D 也是指的这个 fc6 得到的 4096 维的特征,被称为 C3D 特征。
从实验结果(下表)来看,C3D 的性能并不突出(可以对比上面介绍的同期的双流网络系列工作)。
总结
之前提到,C3D 的性能在同期工作中并不突出,那为什么这篇工作有如此大的影响力呢?实际上,这篇工作的主要贡献有两点。一是实现深度 3D CNN 模型,并在大型数据集上进行训练,证明了在视频领域,3D CNN 比 2D CNN 再融合(DeepVideo)的效果要更好。二是作者指明并提供了抽特征(而非微调)的研究方式。在当时的年代,想要用大型的深度 3D CNN 模型跑大型的数据集不是每一个实验室都能做到的,作者提供了一个接口,上传视频,返回 4096 维的 C3D 特征。这就方便后续的研究者们根据大型 3D CNN 提取的特征,再进行下游任务的研究。这无疑极大地推动了当时视频领域的研究进程。因此,除了方法上有令人眼前一亮的新意之外,如果能够提供一些资源(如大数据集或大预训练模型),能够推动整个领域的研究进程,也是值得被铭记的工作。
双流I3D
论文:Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
发表于: CVPR-2017
总结
I3D 是 3D CNN 系列工作中里程碑式的工作。我们在上面已经详细介绍过,这里就再回顾一下这篇工作的贡献与意义。
本文的两个贡献非常清晰:一个将 2D CNN 模型的结构和参数转化为 3D CNN 的方法,和一个大型的数据集 Kinetics 400。在作者看来, C3D 网络之所以没有取得足够突出的性能,很大的一个原因是没有办法利用大型数据集进行训练。想要做到这一点,最好的方式就是能将图像领域的 2D CNN 的结构和参数转化为对应的 3D CNN,这就是 I3D 关键的 inflate 和 bootstraping 方法。这使得视频领域可以借鉴图像领域一些已经得到广泛验证的网络结构(如 VGG、ResNet 等),并且可以使用在图像领域大规模数据集上的预训练参数。而如果研究者真的想设计一个专门针对于视频领域的网络结构,本文也提供了一个大型视频数据集,可用于预训练。不必再受制于视频领域没有大型数据集,只能借助 2D CNN 预训练参数的情况。可以说,I3D 这篇工作的两个贡献极大地降低了视频领域训练的难度,推动整个领域的研究进程。
在 I3D 之后,有一系列的跟进工作,将图像领域一些经典的 2D CNN 的网络结构转化为 3D CNN,比如:
- ResNet —> ResNet3D,CVPR-2018;
- ResNext —> MFNet,ECCV-2018;
- SENet —> STCNet,CVPR-2019。
Non-local
发表于:CVPR-2017
导言
之前在双流网络系列,我们介绍过使用 LSTM 来建模时序信息。在 2017 年,NLP 领域发生了一件大事,Transformer 横空出世。我们知道,Transformer 的核心就是 self-attention 自注意力模块,它能够对长距离的序列信息进行建模。在之后,基于 Transformer 的模型几乎横扫了 NLP 领域和近两年的 CV 领域。这篇 2018 年的工作,就是将自注意力机制的 Non-local 算子,引入到了 CNN 模型中。并且为了适配视频任务,本文的 Non-local 算子是时空(spacetime)维度的。除了视频任务之外,本文也测试了 Non-local 算子在检测/分割等其他视觉任务上的性能。
方法
本文方法的核心结构图如下所示。熟悉 Transformer 结构的读者一眼就可看出,这其实就是自注意力机制,连示意图都长得很像。这里的 θ , ϕ , g \theta,\phi,g θ,ϕ,g 分别对应 Q , K , V Q,K,V Q,K,V ,前两者相乘并 softmax 得到注意力矩阵,再与 g g g 相乘。一个区别在于本文是针对视频任务,因此有 T 、 H 、 W T、H、W T、H、W 三个维度。
在实验部分可以重点关注的是本文详尽的消融实验。分别探索了(a)用什么形式计算non-local,(b)non-local用在哪一层,©用几层non-local,(d)时间、空间和时空都做non-local等。non-local 的一大优势就是它能对长距离的时序关系进行建模。因此,还有一个值得注意的是实验 (g),该实验探索了 non-local 在长视频(128帧)上的性能,可以看到提升也是很显著的。
总结
自注意力机制是近几年,甚至直到今天的一个重点研究问题。它在 NLP 领域大放异彩后,Non-local 这篇工作探索了自注意力机制在视觉领域的表现。并且,针对 视频领域,还引入了时空(spacetime)的自注意力。
R(2+1)D
论文:A Closer Look at Spatiotemporal Convolutions for Action Recognition
发表于:CVPR-2018
导言
本文详尽地实验了在视频数据上,2D/3D 的卷积结构到底怎样设计更好。最终的结论是,将 3D 卷积拆分成空间和时间两部分来做效果最好。在得到最优的结构之后,作者构建了一个新型的时空卷积网络,称为 R(2+1)D,在各个视频数据集上取得了更好的性能。类似的对 2D/3D 混合结构进行探索的工作还有 P3D,S3D,eco 等。
方法
作者尝试了以下五种 2D/3D 卷积结构,来处理视频数据:
- (a) R2D:纯 2D 卷积,对每一帧单独的提取图像特征;
- (b) MCx:先 3D 卷积处理视频输入,再用计算开销更小的 2D 卷积继续提取特征;
- (c) rMCx:先 2D 卷积处理各帧图像输入,再用 3D 卷积对时空特征进行建模;
- (d) R3D:纯 3D 卷积,与 C3D、I3D 类似,这里的 R3D 也是 CVPR-2018 的一篇工作,是将 2D 的 ResNet 转换到 3D;
- (f) R(2+1)D:将 3D 拆分为空间维度的 2D 卷积和时间维度的 1D 卷积
这里的 R(2+1)D 的具体结构如下图所示。就是将一个 t × d × d t\times d\times d t×d×d 的 3D 卷积,拆分为一个 2D 的空间维度上的 1 × d × d 1\times d\times d 1×d×d 的卷积,和一个 1D 的时间维度上的 t × 1 × 1 t\times 1\times 1 t×1×1 的卷积。中间进行了一次投射 M i M_i Mi ,可以保持与纯 3D 卷积的参数量相当,偏于公平的对比。
对于偏实验性质的工作,我们直接来看对比实验的结果(下表)。2D 卷积比 3D 卷积的参数量要小。纯 2D 或 纯 3D 卷积的性能表现都不怎么样,而是 3D+2D 或者 2D+3D 的结果要更好一点。最好的当然是作者提出的 R(2+1)D 的结构。
R(2+1)D 取得最优效果,作者给出了两点解释:
- 将 3D 网络拆分为 R(2+1)D ,网络经过了更多的非线性激活函数,整体模型的非线性增强,从而表达能力更强;
- R(2+1)D 网络将一整个 3D 网络拆分开,整个模型更容易训练。如下图,明显看到 R(2+1)D 网络收敛得更快更好。
总结
本文是一篇实验性质的论文,主要的贡献在于详尽的其消融实验,以及带给读者的各种观察和见解。从而帮助我们理解视频领域中不同 2D/3D 网络结构之间的区别和联系,使得我们进一步了解怎么去构建一个适合于视频理解的模型框架。
SlowFast
论文:SlowFast Networks for Video Recognition
发表于:ICCV-2019
导言
受启发于人眼中有 p 细胞和 m 细胞,分别处理静态图像的场景信息和动态图像的运动信息,它们各占总体的 80% 和 20%。作者提出了 SlowFast 网络,有 Slow Pathway 和 Fast Pathway 两支网络分别处理静态信息和动态信息。
方法
下图描绘了 SlowFast 网络的整体结构,下表是具体的结构参数。
蓝色部分是 Slow Pathway,它用来处理静态的场景信息,它的特点是输入小,模型大。假设我们有一共 64 帧视频,这里按照每隔 16 帧取一帧,可以得到 4 帧作为输入(见图),但是它的模型每一层的通道数是比较大的(见表),从而这一分支中模型整体参数量比较大,这也对应着人眼中处理静态场景信息的 p 细胞占比较大。
绿色部分是 Fast Pathway,他用来处理动态的运动信息,它的特点是输入大,模型小。同样 64 帧的视频,每隔 2 帧取一帧,共有 32 帧输入(见图),但是它每层的通道数比较小(见表),整体参数量较小,对应着 m 细胞占比较小。
作者在多个任务,多个数据集上进行了相近的实验,这里我们还是只看 Kinetics 400 上的结果。可以看到,SlowFast 在性能和计算量的权衡上全面领先于之前的方法。
总结
SlowFast 是视频理解领域 3D CNN 系列中性能和计算量都比较优秀的工作了。再之后,在 Vision Transformer 出现之后,视频理解领域学者们的研究兴趣又转移到 Video Transformer 上来了。
Video Transformer系列
在 Video Transformer 系列,我们就只介绍一篇最早的将 Transformer 应用到视频理解领域的 TimsFormer。
TimeSformer
论文:Is Space-Time Attention All You Need for Video Understanding?
发表于:ICML-2021
导言
本文作者团队很多来自于 R(2+1)D 那篇工作。本文也是一篇实验性质的论文,探索怎样把 ViT 从图像领域迁移到视频领域。
方法
本文主要是探索了 ViT 用于视频领域的几个结构,主要区别就是时空维度自注意力的计算方式:
- Space Attention:即只在当前帧的空间维度计算自注意力,相当于只用 ViT 处理当前帧;
- Joint Space-Time Attention:在时间所有帧和空间所有像素计算自注意力,无疑一旦帧数或者分辨率高了,显存是不够的;
- Divided Space-Time Attention:现在时间维度计算自注意力,再在空间维度计算自注意力,类似 R(2+1)D 的设计;
- Sparse Local Global Attention:时间上在所有帧计算自注意力,但是在每一帧中只计算一个局部小窗口的元素,然后再扩大窗口范围再计算自注意力,而非直接计算全部像素的自注意力,类似 Swin Transformer;
- Axial Attention:分别在时间、宽度、长度三个维度上计算自注意力
作者还画了一个非常直观的图来帮助我们理解这五种做法中,覆盖自注意力的元素范围。不同的颜色分别对应不同的步骤进行的自注意力。
作者经过对比实验(下表),发现第三种 Divided Space-Time Attention 效果是最好的,虽然 Joint Space-Time Attention 的效果也不错,但是显存开销太大,不能承受。
再确定了最优的结构之后,作者构建了自己的 TimeSformer 模型,并对比了之前的方法。可以看到,TimeSformer 的训练效率是明显由于之前的方法的。至于性能,虽然上表中对比的 TimeSfomer 超过了 SlowFast R50,但是我们知道 SlowFast-R101-NL 在 K400 上已经有 79.8 的准确率了。下表中,作者通过增加 TimeSformer 的参数量,最终得到了 K400 上 80.7 的最优性能。
总结
TimeSformer 是将 ViT 用于视频理解的第一篇工作,探索了自注意力在时空维度上的最优结构。类似的探索工作还有 ViViT,VidTr,MViT 等。
由于视频包含了多种模态的信息,如图像、字幕、音频、光流,因此视频本身就是丰富的信号来源,可能设计出各种各样的自监督信号。并且 Transformer 在各个领域表现俱佳,在多模态任务上也颇有建树。综上,Video Transformer 在未来还有着无比广阔的探索空间。
深度学习视频理解网络图
- Two-Stream Convolutional Networks for Action Recognition in Videos
- Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
- Large-Scale Video Classification with Convolutional Neural Networks
- A Comprehensive Study of Deep Video Action Recognition
- Beyond Short Snippets: Deep Networks for Video Classification
- Convolutional Two-Stream Network Fusion for Video Action Recognition
- Temporal Segment Networks: Towards Good Practices for Deep Action Recognition
- Learning Spatiotemporal Features with 3D Convolutional Networks
- A Closer Look at Spatiotemporal Convolutions for Action Recognition
- SlowFast Networks for Video Recognition
- Non-local Neural Networks
- Is Space-Time Attention All You Need for Video Understanding?
- 双流网络论文逐段精读【论文精读】
- I3D 论文精读【论文精读】
- 视频理解论文串讲(上)【论文精读】
- 视频理解论文串讲(下)【论文精读】