阅读 3120

一文看懂如何将深度学习应用于视频动作识别

作者 | Rohit Ghosh
编译 | 张健欣
编辑 | Debra
AI 前线导读:在本文中,作者会总结视频动作识别相关的文献,依次介绍动作识别是什么、它为什么这么难、解决方案概览以及相关论文总结。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

MRI、CT(三维图像)之类的医疗图像和视频非常类似——它们都是在第三个维度上对二维空间信息进行编码。与从三维图像中进行异常诊断很像,从视频中进行动作识别需要从整个视频中捕捉上下文信息而不只是从每一帧中捕捉信息。


图 1: 左图:头部 CT 扫描示例。右图:来自动作识别数据集的示例视频。CT 容积图中的 Z 维和视频中的时间维度类同。

在本文中,我会总结视频动作识别相关的文献。这篇博文分为三个章节——

  • 动作识别是什么以及它为什么很难

  • 解决方案概览

  • 论文总结

什么是动作识别?

动作识别任务涉及从视频剪辑(一串二维帧序列)中识别不同的动作,其中的动作可能贯穿整个视频,也可能不会。这有点儿像图像分类任务的一种自然扩展,即在多帧视频中进行图像识别,然后从每一个帧中聚集预测结果。尽管深度学习框架在图像分类(ImageNet)领域取得了成功,但是视频分类和表示学习领域的架构进展缓慢。

为什么动作识别这么难?

1. 巨大的计算成本 一个简单的 101 分类的二维卷积网络只有大约 5M 参数,而相同架构扩展到一个三维结构就会增长为大约 33M 参数。在 UCF101 上训练一个三维卷积网络(3DConvNet)需要 3 到 4 天时间,而在 Sports-1M 上需要大约 2 个月时间,这使得外延框架探索变得困难而且可能过度拟合 [1]。

2. 捕捉长期的上下文 动作识别涉及捕捉跨帧的时空上下文。另外,捕捉的空间信息必须针对摄像头移动进行补偿。即使有很强的空间对象检测能力也不能满足需要,因为运动信息还携带更详细的细节。为了稳健的预测,需要在捕捉局部上下文 w.r.t 的同时捕捉全局的 w.r.t 运动信息上下文。以图 2 所演示的视频为例。一个强大的图像分类器能够识别两个视频中的人类、水体,但是识别不出自由泳与蛙泳的时间周期性的动作特征的区别。





图 2: 上图为自由泳。下图为蛙泳。捕捉时间性运动是区分这两种看起来很相似的情况的关键。另外,还需要注意,相机角度在自由泳视频中段如何突然改变。

3. 设计分类架构 设计能够捕捉时空信息的架构涉及评估多个不同寻常且代价很大的选项。例如,一些可选的策略有:

  • 一个同时捕捉时空信息的网络 vs 两个网络,一个捕捉时间信息,一个捕捉空间信息。

  • 跨多个剪辑的融合预测

  • 端到端训练 vs 分别进行特征提取和分类

4. 没有标准的基准 长期以来,UCF101 和 Sports1M 都是最流行的基准数据集。探索基于 Sports1M 的合理架构代价非常大。对于 UCF101,尽管帧数与 ImageNet 相当,但是视频之间的空间高关联性让训练中的实际多样性小得多。此外,考虑到相似的主题(运动)在数据集、基准框架向其它任务的推广方面仍然是一个问题。这点最近已经随着 Kinetics 数据集的引入而被解决 [2]。


UCF-101 插图示例。来源(http://www.thumos.info/)

这里必须一提的是,三维医疗图像异常检测并不涉及这里提到的所有挑战。动作识别与医疗图像的区别如下:

就医疗成像来说,时间上下文可能不如动作识别那样重要。例如,头部大出血 CT 扫描检测应该较少涉及跨片段的时间上下文。颅内大出血能够从单个片段中检测出来。与之相反的是,从胸部 CT 扫描中进行肺结节检测会涉及捕捉时间上下文,因为结节与支气管和血管在二维扫描中看起来都像圆形物体。只有捕捉三维上下文,球形物体的结节才能与圆柱形物体的血管区分开。

就动作识别来说,大部分研究理念都借助于使用预训练的二维卷积神经网络作为起点来获取更好的收敛结果。就医疗图像来说,没有这样可用的预训练网络。

解决方案概览

在深度学习之前,大部分用于动作识别的传统 CV(计算机视觉,computer vision)算法变体可以分为以下 3 个广义步骤:

  1. 描述视频区的局部高维可视化特征是提取自密集的 [3] 或者稀疏的特征点(intereset points)集 [4][5]。

  2. 提取的特征组成固定规格的视频级别描述。这个步骤的一个流行变体是将视觉词汇打包来在视频级别编码特征。

  3. 基于视觉词汇包对 SVM 或 RF 之类的分类器进行训练来得到最终预测。

在步骤 1 使用表面人工特征的这些算法中,使用密集采样轨迹特征的 iDT 算法(improved Dense Trajectories[6],改进型密集轨迹算法)是最先进的。同时,在 2013 年用于动作识别的三维卷积算法也没有带来多少帮助 [7]。2014 年之后不久,两篇突破性的研究论文先后发表,它们构成了我们在本文中将要讨论的所有论文的主干。它们的主要区别是围绕组合时空信息的设计选择。

方案 1:单流网络

在这篇论文【2014 年 6 月 https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/42455.pdf 】中,其作者——Karpathy et al.——探索了多种方法来使用预训练的二维卷积网络从连续帧中融合时间信息。[8]


图 3: 融合理念。来源

如图 3 所示,视频的连续帧是所有设置中的输入。Single frame 使用单个架构,在最后阶段融合来自所有帧的信息。Late fusion 使用共享参数的两个网络,间隔 15 帧,然后在最后组合预测。Early fusion 通过卷积 10 多帧在第一层进行组合。Slow fusion 涉及在多个阶段的融合,是 early fusion 与 late fusion 的一种平衡。为了最终预测,从整个视频中采样多个剪辑并在最后平均化它们的预测分数。

尽管进行了大量实验,作者发现,与现有的基于人工特征的算法相比,结果明显更差。造成这一失败的原因有很多:

学习的时空特征没有捕捉运动特征

数据集多样化相对较少,学习这种详细特征比较困难。

方案 2: 双流网络

在 Simmoyan 和 Zisserman 的这个开拓性论文【2014 年 6 月 https://arxiv.org/pdf/1406.2199.pdf】 中,作者吸取了先前 Karpathy et al. 的论文的失败教训。考虑到学习运动特征的深度框架的困难度,作者明确以堆积光流向量的形式建模运动特征。因此,这个框架有 2 个单独的网络——一个用于空间上下文(预训练的),一个用于运动上下文,而不是只有单个用于空间上下文的网络。空间网络的输入是视频中的一个单帧。作者对时间网络的输入进行了实验,发现跨 10 个连续帧堆积的双向光流表现最好。这两个流分别进行训练,然后使用 SVM 进行组合。最终预测和先前的论文一样,平均化多个采样帧的预测得分。


图 4: 双流架构。来源(https://arxiv.org/pdf/1406.2199.pdf)

尽管这种方法通过明显捕捉局部时间运动提升了单流方法的性能,但仍然存在一些缺点:

  1. 由于视频层级预测是通过平均采样剪辑的预测得分获得,因此在学习的特征中长期的时间信息仍然是丢失的。

  2. 由于训练的剪辑是从视频中均匀采样的,因此它们存在错误标签分配问题。每个剪辑都相同的基本假设与动作可能只发生在整个视频的很小一个时间段的基本情况不符。

  3. 这个方法涉及预计算光流向量并分别存储它们。另外,针对两个流的训练是分离的,意味着端到端训练落地还有很长的一段路要走。

总结

下列论文是基于这两篇论文(单流与双流)的某种方式的演化:

  1. LRCN

  2. C3D

  3. Conv3D & Attention

  4. TwoStreamFusion

  5. TSN

  6. ActionVlad

  7. HiddenTwoStream

  8. I3D

  9. T3D

这些论文中经常出现的主题可以归纳如下。所有论文都是基于这些基本理念的即兴创作。


论文中经常出现的主题。来源 https://arxiv.org/pdf/1705.07750.pdf

对于每一份论文,我列举出它们的主要贡献并进行解释。我还展示了它们在 UCF101-split1(http://crcv.ucf.edu/data/UCF101.php) 上的基准得分。

LRCN

用于视觉识别和描述的长期递归卷积网络(Long-term Recurrent Convolutional Networks)

Donahue et al.提交于 2014 年 11 月 17 日

Arxiv 链接:https://arxiv.org/abs/1411.4389

主要贡献:
  • 基于先前的工作构建,使用递归神经网络(RNN,recurrent neural network)而不是基于流的设计

  • 面向视频展示的编码 - 解码架构扩展

  • 提出用于动作识别的端到端可训练架构

解释:

在先前 Ng et al 的论文中 [9],作者已经探索了在分离训练的特征图上使用 LSTM 来看看它是否可以从剪辑中捕捉时间信息的想法。令人遗憾的是,他们得出结论,卷积特征的时间聚集(temporal pooling)证明比对训练的特征图进行 LSTM 堆积更有效。在这篇论文中,作者基于在卷积块(编码器)之后使用 LSTM 块(解码器)的相同想法,但是整个架构使用端到端训练。他们还对 RGB 和光流作为输入选项进行了比较,发现基于两种输入的加权预测得分是最好的。


图 5: 左边为面向动作识别的 LRCN。右边为面向所有任务的通用 LRCN 架构。来源(https://arxiv.org/pdf/1411.4389.pdf)

算法:

在训练期间,从视频中采样了 16 帧剪辑。这个架构用 RGB 或 16 帧剪辑的光流作为输入进行端到端训练。每个剪辑的最终预测是每个时间步长的预测平均值。视频级别的最终预测是每个剪辑的预测平均值。

基准(UCF101-split1):


点评:

尽管作者提出了端到端训练框架,但仍然有一些缺点:

  • 由于视频进行了剪辑而造成的错误标签分配

  • 不能捕捉长期时间信息

  • 使用光流意味着分别预计算流特征

Varol et al. 在他们的论文 [10] 中尝试通过使用更小的视频空间分辨率和更长的剪辑(60 帧)来补救有缺陷的时间范围问题,这明显提升了性能。

C3D


用三维卷积网络学习时空特征

Du Tran et al.

提交于 2014 年 12 月 02 日

Arxiv 链接:https://arxiv.org/pdf/1412.0767


主要贡献:
  • 将三维卷积网络用作特征提取器

  • 最佳三维卷积核心和架构的广泛探索

  • 使用反卷积层来解释建模决策

解释:

作者基于 Karpathy et al. 的论文(single stream)构建了这篇论文。然而,他们在视频音量上使用三维卷积算法,而不是跨帧使用二维卷积算法。其理念是在 Sports1M 上训练这些网络,然后使用它们(或者一套拥有不同时间深度的网络)作为其它数据集的特征提取器。他们的发现是一种类似 SVM 的基于全套提取特征的简单线性分类器,比现有最好的算法更有效。如果使用类似 iDT 的人工特征,这个模型会表现得更好。


C3D 论文和单流论文的区别。来源(https://arxiv.org/pdf/1412.0767)

这篇论文的另外一个有意思的部分是使用反卷积层(解释链接http://blog.qure.ai/notes/visualizing_deep_learning) 来解释决策。他们发现,网络在前几帧聚焦于空间外观,并在后续帧中跟踪运动。

算法:

在训练期间,假设已知动作在整个视频中的分布,则从每个视频随机提取 5 个 2 秒剪辑。在测试期间,随机采样 10 个剪辑,最终对他们的预测得分进行平均从而得到最终预测。


卷积应用在一个时空立方体上的三维卷积。

基准 (UCF101-split1):


点评:

长期时间建模仍然是一个问题。此外,训练如此巨大的网络在计算上是一个难题——特别是对于医疗成像来说,自然图像的预训练没有多大帮助。

备注:

几乎与此同时,Sun et al. [11] 提出了因式分解三维卷积网络(FSTCN)的理念,其中作者探索了将三维卷积分解成空间二维卷积和时间一维卷积。这个一维卷积放在二维卷积层后面,实现为一个在时间和信道维度上的二维卷积。因式分解三维卷积(FSTCN)在 UCF101 split 上的结果也很可观。


论文和三维因式分解。来源(https://arxiv.org/pdf/1510.00562.pdf)

Conv3D & Attention


利用时间结构来描述视频

Yao et al.

提交于 2015 年 4 月 25 日

Arxiv 链接:https://arxiv.org/abs/1502.08029


主要贡献:
  • 捕捉局部时空信息的新型 3D CNN-RNN 编码 - 解码架构

  • 使用 attention 机制和 CNN-RNN 编码 - 解码框架来捕捉全局上下文

解释:

尽管这篇论文与动作识别没有直接关联,但是这是一篇视频表示相关的具有重大意义的论文。在这篇论文中,作者使用了一种 3D CNN+LSTM 架构作为视频描述任务的基础架构。在这个基础之上,作者使用了一个预训练的 3D CNN 来改进结果。

算法:

其设置与在 LRCN 中描述的编码 - 解码架构几乎相同,只有 2 点不同:

  1. 剪辑的 3D CNN 特征图用同帧集的 2D 特征堆积图级联来丰富每一帧 i 的表达式{v1, v2, ..., vn},而不是将特征从 3D CNN 传给 LSTM。备注:使用的 2D & 3D CNN 是预训练的,而不是像 LRCN 那样的端到端训练。

  2. 使用加权平均来组合时间特征,而不是对所有帧的时间向量进行平均。其中 attention 权重基于每个时间步长的 LSTM 输出决定。


动作识别的 attention 机制。来源(https://arxiv.org/abs/1502.08029)

基准:


点评:

这是 2015 年的一篇具有重大意义的论文,首次提出了面向视频表示的 attention 机制。

TwoStreamFusion


面向视频动作识别的双流卷积网络融合

Feichtenhofer et al.

提交于 2016 年 4 月 22 日

Arxiv 链接:https://arxiv.org/abs/1604.06573


主要贡献:
  • 通过长期损失进行长期时间建模

  • 新型多级融合架构

解释:

在这篇论文中,作者使用基础的双流架构以及 2 种新型方案,在不显著增加参数规模的情况下提升了性能。作者探索了这两种想法的功效。

  1. 空间流和时间流的融合(如何融合、什么时候融合)——对于洗头和刷牙之间的任务识别,空间网络能够捕捉视频中的空间依赖(比如头发或牙齿),而时间网络能够捕捉视频中每个空间位置的周期性运行的存在。因此,将对应于特定面部区域的空间特征图映射到时间特征图的对应区域是非常重要的。为了实现同样目的,2 个网络需要在早期进行融合,使得在相同像素位置的响应被置于相应的位置,而不是(像在基础双流架构中那样)最后才融合。

  2. 跨时间帧来组合时间网络输出,从而对长期依赖也进行建模。

算法:与双流架构几乎保持一致,除了:

  1. 如下图所示,来自两个流的 conv_5 层输出通过 conv+pooling 融合。在最后一层还有另外一次融合。最终融合的输出用于时空损失评估。


用于融合空间流和时间流的可能策略。右边的策略表现更好。来源(https://arxiv.org/abs/1604.06573)

2. 对于时间融合来说,来自时间网络的输出,跨时间堆叠,然后通过 conv+pooling 的融合,是用于时间损失的。融合架构。



双流有两种路径,一种是第一步,另一种是第二步。来源(https://arxiv.org/abs/1604.06573)

基准(UCF101-split):


点评:

作者奠定了 TwoStreamFusion 方法的优越性,因为它的性能超越了 C3D 却没有 C3D 中使用的额外参数。

TSN


时间段网络:面向深度动作识别的良好实践

Wang et al.

提交于 2016 年 8 月 02 日

Arxiv 链接:https://arxiv.org/abs/1608.00859


主要贡献:

  • 面向长期时间建模的有效解决方案

将使用批量标准化(batch normalization)、dropout(译者注:dropout 是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃)和预训练建立为良好实践

解释:

在这篇论文中,作者对双流架构进行了优化,从而产生最好的结果。与原论文相比,有两个主要的区别:

  1. 他们建议从视频中稀疏地采样剪辑从而获取更好的长期时间信号建模,而不是在整个视频中随机采样。

  2. 针对视频等级的最终预测,作者探索了多种策略。最佳策略是:

    1. 通过平均每个片段,分别组合空间流和时间流(和其它流,如果涉及其它输入形式)的得分

    2. 对最终的空间得分和时间得分使用加权平均方法获得融合得分,在所有类上应用 softmax。

论文的另外一个重要部分是,建立了过度拟合问题(由于数据集规模较小)并演示了现在流行的批量标准化、dropout、预训练等技术。作者还评估了光流之外的两种新的输入形式——即扭曲光流(warped optical flow)和 RGB 差值。

算法:

在训练和预测过程中,一个视频被分割成 K 个时间段相同的片段。在那之后,从 K 个片段中随机取样一些片段。其余步骤与双流构架相似,除了上述的一些变化。


时间段网络构架。来源(https://arxiv.org/pdf/1608.00859.pdf)

基准(UCF101-split1):


点评:

这篇论文尝试处理动作识别领域的 2 个巨大挑战——由于数据集规模较小的过度拟合和长期时间建模,而且其结果非常不错。然而,预计算光流问题和相关的输入形式仍然是一个问题。

ActionVLAD


ActionVLAD: 面向动作分类的时空聚合学习

Girdhar et al.

提交于 2017 年 4 月 10 日

Arxiv 链接:https://arxiv.org/pdf/1704.02895.pdf


解主要贡献:

  • 可学习的视频级别特征聚合

  • 具有视频聚合特征的端到端可训练模型来捕捉长期依赖

解释:

在这篇论文中,作者最突出的贡献是,相对于使用 maxpool 后者 avgpool 的普通聚合来说,对可学习的特征聚合(VLAD)的使用。这个聚合技术类似于视觉词汇包。以多个学到的锚点(比如 c1, ...ck)为基础的词汇表示 k 个典型动作(或者子动作)相关的时空特征。在双流架构中的每个流的输出是用 k 个“动作词汇”相关特征编码的——针对任何给定的空间或时间位置,每个特征与对应锚点的输出都是不同的。


ActionVLAD——基于动作包的视觉“词汇”。来源(https://arxiv.org/pdf/1704.02895.pdf)

平均或最大池化(译者注:max-pooling,是指将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。)表示特征点的完整分布,因为单个描述符对于表示多个子动作组合而成的完整视频来说可能是次优的。相反地,论文中提出的视频聚合,通过将描述符空间分成 k 个单元并且在每个单元中聚合(pooling),从而将一个完整描述符的分布表示为多个子动作。


尽管最大池化或者平均池化对于相似的特征表现良好,但它们并没有充分地捕捉到完整的分布特征。ActionVLAD 聚集了外观和运动特征,并从最近的集群中心聚集其余特征。来源(https://arxiv.org/pdf/1704.02895.pdf)

算法:

除了 ActionVLAD 层的使用,一切与双流架构都几乎保持相似。作者尝试了多层架构,将 ActionVLAD 层和 late fusion 放在 conv 层之后作为最佳策略。

基准(UCF101-split1):


我的评论:

使用 VLAD 作为一种有效的聚集(pooling)方法已经被证明很久了。在 2017 年初,端到端框架中的相同扩展,使得这项技术对于大多数动作识别任务来说非常健壮和先进。

HiddenTwoStream


面向动作识别的隐双流卷积网络

Zhu et al.

提交于 2017 年 4 月 2 日

Arxiv 链接:https://arxiv.org/abs/1704.00389


主要贡献:
  • 利用隔离网络生成动态光流输入的新型架构

解释:

在双流架构中对光流的使用使得需要强制预计算每个采样帧之前的光流,从而对存储和速度产生不利影响。这篇论文提倡使用一种无监督架构来针对帧堆栈生成光流。

光流可以看作是一种图像重构问题。假定一组相邻的帧 I1 和 I2 作为输入,我们的卷积神经网络生成一个流场 V。然后使用预测的流场 V 和 I2,可以使用逆翘曲(inverse wraping)方法将 I1 重构为 I1',使得 I1 和它的重构体之间的差别最小化。

算法:

作者探索了多种策略和架构来生成具有最大 fps 和最少参数且尽可能不损伤准确度的光流。最终的架构与双流架构相同,但进行了如下改变:

  1. 时间流现在拥有堆叠在通用时间流架构上的光流生成网(MotionNet)。时间流的输入现在是自然帧而不是预处理过的光流。

  2. 对于 MotionNet 的无监督训练来说,具有额外的多级损失。作者展现了使用基于 TSN 的融合而不是针对双流方案的卷积架构在性能方面的提升。


HiddenTwoStream——MotionNet 生成动态光流。来源(https://arxiv.org/pdf/1704.00389.pdf)

基准(UCF101-split1):


点评:

这篇论文的主要贡献是改进了预测的速度和相关成本。随着流的自动生成,作者减轻了对较慢的传统生成光流方法的依赖。

I3D


动作识别将何去何从?一种新型模型和 Kinetics 数据集

Carreira et al.

提交于 2017 年 5 月 22 日

Arxiv 链接:https://arxiv.org/abs/1705.07750


主要贡献:
  • 利用预训练将三维模型组合到双流架构中

  • 面向未来基准和改进动作数据集多样性的 Kinetics 数据集

解释:

这篇论文基于 C3D。作者在双流架构中使用了 2 种不同的三维网络而不是单个三维网络。另外,为了利用预训练二维模型的优势,作者在第三维中重用了二维预训练权重。空间流输入现在包括时间维度堆积的帧而不是基础双流架构中的单种帧。

算法:

除了针对每个流的三维网络,和基础的双流架构相同。

基准(UCF101-split1):


点评:

这篇论文的主要贡献是展现了使用预训练二维卷积网络的好处的证据。论文中开源的 Kinetics 数据集也是这篇论文的另外一个重要贡献。

T3D


时间三维卷积网络(Temporal 3D ConvNets):视频分类的新架构和迁移学习算法

Diba et al.

提交于 2017 年 11 月 22 日

Arxiv 链接:https://arxiv.org/abs/1711.08200


主要贡献:
  • 可变深度的时间信息组合架构

  • 监督二维预训练网络到三维网络的迁移学习的新型训练架构和技术

解释:作者扩展了 I3D 上所做的工作,但建议使用基于单流 3D DesnseNet 的架构和在密集块之后堆积的多深度时间聚集层(Temporal Transition Layer)来捕捉不同的时间深度。这个多深度聚集(multi depth pooling)是通过变化的时间规模核心的聚集来实现的。


TTL 层和 DenseNet 架构的其余部分。来源(https://arxiv.org/abs/1711.08200)

除上述之外,作者还设计了一种新的介于预训练二维卷积网络和 T3D 之间的有监督迁移学习技术。其中的二维预训练网络和 T3D 都来自视频的帧和剪辑,而这些视频剪辑可能来自相同的视频,也可能不是。这个架构被训练,基于 T3D 网络反向传播的预测的正确和错误来预测 0/1,从而高效迁移知识。


有监督迁移学习。来源(https://arxiv.org/abs/1711.08200)

算法:

这个架构基本上是对 DenseNet[12] 的三维修改,新增了可变时间聚集(variable temporal pooling)。

基准(UCF101-split1):


点评:

尽管最终并没有提升 I3D 的结果,但这很大程度上可能归因于相对于 I3D 来说低得多的模型记录。这个论文的最新贡献是有监督迁移学习技术。

原文作者

Rohit Ghosh

查看英文原文:

http://blog.qure.ai/notes/deep-learning-for-videos-action-recognition-review

[1] ConvNet Architecture Search for Spatiotemporal Feature Learning by Du Tran et al.

[2] Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

[3] Action recognition by dense trajectories by Wang et. al.

[4] On space-time interest points by Laptev

[5] Behavior recognition via sparse spatio-temporal features by Dollar et al

[6] Action Recognition with Improved Trajectories by Wang et al.

[7] 3D Convolutional Neural Networks for Human Action Recognition by Ji et al.

[8] Large-scale Video Classification with Convolutional Neural Networks by Karpathy et al.

[9] Beyond Short Snippets: Deep Networks for Video Classification by Ng et al.

[10] Long-term Temporal Convolutions for Action Recognition by Varol et al.

[11] Human Action Recognition using Factorized Spatio-Temporal Convolutional Networks by Sun et al.

[12] Densely Connected Convolutional Networks by Huang et al.