crm客户管理系统界面,湛江关键词优化平台,wordpress如何增加导航栏,苏州快速建设网站公司深度学习时代的视频理解综述
本文为b站bryanyzhu老师四期视频理解相关论文解读的汇总图文笔记。
我们先精读深度学习时代视频理解领域最为重要的两篇论文#xff1a;双流网络和 I3D。它们分别是领域内两大类方法双流#xff08;利用光流#xff09;网络和 3D CNN 网络的代…深度学习时代的视频理解综述
本文为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×2w\times h\times 2w×h×2 的张量这里的 222 分别表示水平方向和竖直方向的变化。如下图所示d, e 分别就是两个方向上光流变化的可视化结果。 为了利用更长时间的动作信息文章中这里用的是当前帧及其之后 11 帧、10 张光流图这个超参数 10 后面也有对比实验的光流特征。怎么样聚合这些特征是一个问题。在这里作者也尝试了两种聚合方式optical flow stacking 和 trajectory stacking即直接的光流堆叠和轨迹堆叠。其实意图分别由下图左右部分所示。 第一种方式就是简单直接地将得到的光流图堆叠在一起每次叠加的都是同样位置的光流特征。第二种则是根据光流的轨迹在轨迹上进行数值的叠加。比如得到第一帧到第二帧的光流图之后我们就已经知道第一帧中的某个像素在第二帧中变化到哪个位置了那我们就去找其对应位置轨迹的值进行叠加然后第二帧到第三帧位置又变了我们再去找变化之后的位置叠加。
听起来明显是第二种方法更合理但是本文的实验结果却显示两种方式性能差不多甚至是第一种简单粗暴的方式性能稍优这也令作者感到费解并表示这时未来可能的优化方向。
另外作者还尝试了双向光流bi-directional的方式。即同时计算前向光流和后向光流相当于视频倒放得到了更好地性能。实际上像 Multi-scaleCasacadeBi-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。它的贡献从标题中就能看出一是提出了一个新的模型双流 I3DTwo Stream Inflated 3D ConvNet二是提出了一个新的数据集 Kinetics。
I3D 模型使得我们把一个 2D 卷积模型扩张为一个 3D 模型这样我们就可以在视频领域直接借用图像领域的 backbone 网络如 VGG、ResNet 等甚至可以把 2D 网络的预训练参数也利用起来作为 3D 网络的初始化。这样我们就不用再视频领域重新设计网络比如选 kernel_sizenum_of_block 等工作而是可以借鉴 2D 图像领域已经有的很好的网络结构这些结构的合理性都是在图像领域经过了验证的。而视频无非是多帧时序图像的堆叠因此能够借鉴图像的网络结构并扩张到 3D 直接处理视频自然是极好的。
Kinetics 大规模数据集提出之后在其上进行预训练的模型再在 UCF-101 上再进行微调性能已经能够达到 98%基本宣告了 UCF-101 数据集的终结。在之后视频理解相关的工作中Kinetics 成为了新的主流数据集。这一结果还证明了 “预训练迁移学习” 的范式在视频领域同样适用。在此之前视频领域并没有一个足够大的足够好用的数据集进行预训练没有一个视频数据集能够做到像 ImageNet 之于图像领域那样为大多数其他图像任务提供一个好用的预训练模型。“Kinetics预训练UCF101微调” 的实验结果显示Kinetics 数据集做到了这一点。但是一些研究表明即使拿出 Kinetics 数据集中的某一帧直接去做图像的动作识别效果已经很好了。研究视频理解当然是希望模型能够对视频帧之间的时序关系进行建模然后根据这些时序信息做出预测。从这一有些令人尴尬的结论可以看出视频理解的研究还有很长的路要走。
方法
在分析了目前视频理解领域没有足够大规模的数据集的现状之后文章提出了 Kinetics 400 后又扩展到 500、600数据集。有了新的大规模数据集之后作者先对比了之前视频理解领域常见的三类方法
ConvNetLSTM用卷积提取二维图像特征用 LSTM 建模时序信息3D ConvNets用 3D 卷积网络直接处理视频数据Two Stream Networks双流网络使用光流法预先提取动作信息。 图 a 表示的是第一类方法对视频中的每一帧图像分别用 CNN 去提取它的特征然后将时间序列上多帧的特征送到一个 LSTM 中对时序进行建模然后将最后一层 LSTM 输出的结果接到全连接层完成分类。这种方式非常自然CNN 提取图像信息然后用 LSTM 对时序特征进行建模。但是实在是效果不佳现在已经几乎没有人再用这种方法。主流的方法是剩下的两大类3D 卷积和双流网络。
图 b 表示是第二类方法3D 卷积非常直接暴力。视频数据相比于图像数据无非就是多了一个维度3D 卷积中的卷积、池化等操作都是三维的。直接将视频数据送到 3D 卷积中即可提取视频的特征然后也是经过全连接层进行分类。
图 c 表示的是第三种方法就是上面介绍过的双流网络。一支卷积网络处理原图提取图像的 2D 空间特征另一支网络处理相邻视频帧抽取的光流图得到时序运动信息。最终两个支路的 logits 结果进行 late fusion 合并完成分类。
图 d 表示的是将 bc 进行结合的一类方法。在网络一开始与双流网络一样分空间流和时序流两支分别去提取 2D 图像特征和时序动作信息。但是并不是继续两支网络分别得到结果再合并而是将两支网络的中间特征拿出来之后在用一个 3D CNN 进一步处理得到最终特征完成分类。我们之前提到过这种方式称为 early fusion。
以上全都是前人工作提出的方法本文作者在提出 Kinetics 数据集之后将这几类方法都在自己新提出的 Kinetics 数据集上跑了一下。在分析各类方法的结果之后提出了自己的双流 I3D 网络。即图 e。
作者认为之前的 3D CNN 网络效果不够好的一个原因是 3D CNN 自身参数量较大需要足够大的视频数据集支持。那现在有了大型数据集自然可以更好地发挥 3D CNN 的威力。并且作者发现即使是 3D CNN 网络也需要光流特征来获取时序动作信息使用双流网络架构的 3D CNN 网络效果提升显著。因此作者最终提出了双流 I3DTwo Stream Inflated 3D ConvNet。
下面我们着重讲一下双流 I3D 网络的实现细节原文中作者分了四个小节来介绍
Inflating 2D ConvNets into 3D如何将 2D CNN 膨胀为 3D CNNBootstrapping 3D filters from 2D Filters如何用预训练好的 3D CNN 参数来初始化膨胀后的 3D CNNPacing 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×53\times 3/5\times 53×3/5×5 等直接把它们变成立方的即可比如 3×3×3/5×5×53\times 3\times 3/5\times 5\times 53×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 。作者的想法是同一个网络在接收同样的输入时输出应该是一样的。将一张图片复制 NNN 次就得到一个 NNN 帧的 “无聊的视频”将这个 “视频” 送入到 3D CNN 网络中为了保持输出的一致除了 2D 参数复制 NNN 次之外我们还要将参数除以 NNN 。这样同一个网络在接受同样的输入图片/“视频”时输出就是一样的了。这就比较合理地完成了用 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 网络中提取特征并完成分类相当于就是一个图片的分类任务可以视作是一个 baselineLate Fusion从视频帧中选两帧分别用两个 CNN 网络此处的两个 CNN 是共享权重的提取特征并输出 logitslate fusion 指的是对两个分支网络得到的 logits 进行合并Early Fusionearly fusion 指的是在 logits 之前输入或特征图就进行特征融合然后经过一个 CNN 网络得到一个 logits 结果再得到最终的分类结果。此处是在输入时就进行通道维度上的融合比如图中输入 5 帧 RGB 图那就是 3×5153\times 5153×515 个输入通道Slow Fusionslow 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 的思想非常简单。先将长视频分为 KKK 段如图中就是分为 3 段然后再每一段中随机抽取一帧作为 RGB 原图再取其之后几帧抽取光流特征送入到双流网络的两个分支中。这样就能得到 KKK 个空间流 logits 和 KKK 个时间流 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×10202\times 10202×1020 。这样第一层卷积的输入通道数不对应无法直接进行参数初始化。本文认为只需要简单的将三通道的权重取平均然后直接复制 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×33\times 3\times33×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 — ResNet3DCVPR-2018ResNext — MFNetECCV-2018SENet — STCNetCVPR-2019。
Non-local 论文Non-local Neural Networks 发表于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,VQ,K,VQ,K,V 前两者相乘并 softmax 得到注意力矩阵再与 ggg 相乘。一个区别在于本文是针对视频任务因此有 T、H、WT、H、WT、H、W 三个维度。 在实验部分可以重点关注的是本文详尽的消融实验。分别探索了(a)用什么形式计算non-local(b)non-local用在哪一层©用几层non-local(d)时间、空间和时空都做non-local等。non-local 的一大优势就是它能对长距离的时序关系进行建模。因此还有一个值得注意的是实验 (g)该实验探索了 non-local 在长视频128帧上的性能可以看到提升也是很显著的。 总结
自注意力机制是近几年甚至直到今天的一个重点研究问题。它在 NLP 领域大放异彩后Non-local 这篇工作探索了自注意力机制在视觉领域的表现。并且针对 视频领域还引入了时空spacetime的自注意力。
R(21)D 论文A Closer Look at Spatiotemporal Convolutions for Action Recognition 发表于CVPR-2018 导言
本文详尽地实验了在视频数据上2D/3D 的卷积结构到底怎样设计更好。最终的结论是将 3D 卷积拆分成空间和时间两部分来做效果最好。在得到最优的结构之后作者构建了一个新型的时空卷积网络称为 R(21)D在各个视频数据集上取得了更好的性能。类似的对 2D/3D 混合结构进行探索的工作还有 P3DS3Deco 等。
方法
作者尝试了以下五种 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(21)D将 3D 拆分为空间维度的 2D 卷积和时间维度的 1D 卷积 这里的 R(21)D 的具体结构如下图所示。就是将一个 t×d×dt\times d\times dt×d×d 的 3D 卷积拆分为一个 2D 的空间维度上的 1×d×d1\times d\times d1×d×d 的卷积和一个 1D 的时间维度上的 t×1×1t\times 1\times 1t×1×1 的卷积。中间进行了一次投射 MiM_iMi 可以保持与纯 3D 卷积的参数量相当偏于公平的对比。 对于偏实验性质的工作我们直接来看对比实验的结果下表。2D 卷积比 3D 卷积的参数量要小。纯 2D 或 纯 3D 卷积的性能表现都不怎么样而是 3D2D 或者 2D3D 的结果要更好一点。最好的当然是作者提出的 R(21)D 的结构。 R(21)D 取得最优效果作者给出了两点解释
将 3D 网络拆分为 R(21)D 网络经过了更多的非线性激活函数整体模型的非线性增强从而表达能力更强R(21)D 网络将一整个 3D 网络拆分开整个模型更容易训练。如下图明显看到 R(21)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(21)D 那篇工作。本文也是一篇实验性质的论文探索怎样把 ViT 从图像领域迁移到视频领域。
方法
本文主要是探索了 ViT 用于视频领域的几个结构主要区别就是时空维度自注意力的计算方式
Space Attention即只在当前帧的空间维度计算自注意力相当于只用 ViT 处理当前帧Joint Space-Time Attention在时间所有帧和空间所有像素计算自注意力无疑一旦帧数或者分辨率高了显存是不够的Divided Space-Time Attention现在时间维度计算自注意力再在空间维度计算自注意力类似 R(21)D 的设计Sparse Local Global Attention时间上在所有帧计算自注意力但是在每一帧中只计算一个局部小窗口的元素然后再扩大窗口范围再计算自注意力而非直接计算全部像素的自注意力类似 Swin TransformerAxial 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 用于视频理解的第一篇工作探索了自注意力在时空维度上的最优结构。类似的探索工作还有 ViViTVidTrMViT 等。
由于视频包含了多种模态的信息如图像、字幕、音频、光流因此视频本身就是丰富的信号来源可能设计出各种各样的自监督信号。并且 Transformer 在各个领域表现俱佳在多模态任务上也颇有建树。综上Video Transformer 在未来还有着无比广阔的探索空间。
深度学习视频理解网络图 Two-Stream Convolutional Networks for Action Recognition in VideosQuo Vadis, Action Recognition? A New Model and the Kinetics DatasetLarge-Scale Video Classification with Convolutional Neural NetworksA Comprehensive Study of Deep Video Action RecognitionBeyond Short Snippets: Deep Networks for Video ClassificationConvolutional Two-Stream Network Fusion for Video Action RecognitionTemporal Segment Networks: Towards Good Practices for Deep Action RecognitionLearning Spatiotemporal Features with 3D Convolutional NetworksA Closer Look at Spatiotemporal Convolutions for Action RecognitionSlowFast Networks for Video RecognitionNon-local Neural NetworksIs Space-Time Attention All You Need for Video Understanding?双流网络论文逐段精读【论文精读】I3D 论文精读【论文精读】视频理解论文串讲上【论文精读】视频理解论文串讲下【论文精读】