视频理解调研笔记 | 2021年前视频动作分类发展脉络

前言

参考资料

本文基于以下四个李沐 AI 论文精度视频,对视频理解领域做初步调研
双流网络论文逐段精读
I3D 论文精读
视频理解论文串讲(上)
视频理解论文串讲(下)

相关论文
02014CVPRDeep VideoPDF
12014NIPSTwo-Stream 双流网络PDF
1.12015CVPRBeyond Short SnippetsPDF
1.22016CVPRTwo-Stream FusionPDF
1.32016ECCVTSNPDF
22015ICCVC3DPDF
2.12017CVPRI3DPDF
2.22018CVPRNon-localPDF
2.32018CVPRR(2+1)DPDF
2.42019ICCVSlowFastPDF
32021ICMLTimeSformerPDF
2020综述包含 ViT 之前的大部分工作PDF

数据集简介

视频理解实际是做视频动作分类,类似图像分类,输入为视频(图像序列),输出为类别。

数据集类别数视频数平均时长链接
UCF-101101133207.21sPaper | Download
HMDB-515168492~5sPaper | Download
Sports-1M48711331585m36sPaper | Download
Kinetics-40040030624510sPaper | Download
Smth-Smth1742208474sPaper | Download
  • 关于动作的类别值得一提,动作的主体都是人,通常可以大致分为人体单独的动作、人和人的交互动作、人和物的交互动作。不同数据集的动作难度有所不同,这里不太好说明,个人将其分为活动动作和一般身体动作:
    • UCF-101 中的大多为活动动作,即动作属于一种活动,像运动(跳水、跳远)、乐器演奏(弹钢琴、拉小提琴)、日常活动(剃须、遛狗)等等;
    • HMDB-51 中就有些一般身体动作,例如行走、跑步、推等;
    • Sports-1M 都是运动相关的动作,主要是运动的种类比较细粒度,像6种不同的保龄球和7种不同的美式足球。这里的类别主要是运动类别的区分,基本不会对某个运动中的不同动作进行分类,例如篮球中的运球、抢断等,体操、滑冰中的不同技术动作。另外,表格中的 5m36s 指的是原视频的平均长度,在论文中说每个视频最多使用100个半秒的切片(we only use a random collection of up to 100 half-second clips from every video and our videos are 5 minutes and 36 seconds in length on average)。
    • Something-Something 的类别较为特殊,标签基于模板,例如 Dropping [something] into [something],论文中说每个类别平均620个视频,Holding [something] 视频数最多(986个),Poking a hole into [some substance] 视频数最少(77个)。
  • 表中,视频数指的不是数据源的视频数,而是切片(Clips)的数量,多个切片可以来源于同个视频。Kinetics 的一个特色就是每个切片都来源于不同视频。
  • UCF-101 和 HMDB-51 较小,是早期使用的数据集,在 I3D 将其刷爆后不再常用。
  • Kinetics-400 后续拓展到了 K-600、K-700,类别更多,数据量更大,并且在K-400时每个类别的切片就都超过400个。

发展脉络

  • Deep Video 最先把神经网络用到视频领域,但是效果不好,还不如手工特征 IDT。
  • Two-Stream 双流网络加入光流作为时序运动特征,得到了不错的效果,后续有许多方法对其改进;
    • Beyond Short Snippets 通过结合 LSTM 来获得更长的时序理解能力;
    • Two-Stream Fusion 对 Fusion 即融合方式做了深入的研究,提出了一种 Early Fusion 的方式;
    • TDD 改进了对光流的使用,利用了光流的轨迹;
    • TSN 提出了一种方法用于处理较长的视频,后续又有许多在 TSN 基础上的改进,如 DOVF 加入了全局编码,例如 Fisher Vector Encoding、VLAD;TLE 使用了 Bilinearing Encoding;Action VLAD 利用了 VLAD;2017年 I3D 出现后,双流网络逐渐退出历史舞台。
  • C3D 最先使用了 3D 卷积神经网络,但是效果不好;
    • I3D 主要在模型参数初始化方面做了改进,使模型的训练简单化,直接刷爆 UCF-101 和 HMDB-51,后续有了许多工作跟进;
    • R3D 为 3D 版 ResNet,MFNet 为 3D 版 ResNext,STC 为 3D 版 SENet;
    • 由于 2D 卷积便宜且有一定的效果,出现了将 2D 和 3D 结合使用的方法,如 S3D、R(2+1)D、ECO、P3D,基本都是将 3D 切分成 2D 和 1D,在保持准确度的同时提高计算效率和训练速度;
    • 为了处理更长的视频,出现了 LTC、T3D、Non-local、V4D;
    • CSN、SlowFast、X3D 注重高效率,X3D 通过 Auto ML 搜索得到的网络效果好且参数小,后续研究遇到了瓶颈,此时出现了 Vision Transformer。
  • 基于 Transformer 出现了 TimeSformer、VIVIT、VIDTR、MVIT

Deep Video

  Deep Video 的想法就是把 CNN 从图像分类迁移到视频分类并制作了 Sports-1M 数据集。由于多了时序上的信息,就想到了下图所示的一些方法进行尝试。
F1
(1)Single Frame 从视频中抽出一帧做图像分类,完全不利用时序信息;
(2)Late Fusion 在网络的输出层面做一些结合,例如从视频中随机抽取若干帧,每一帧通过 CNN 提取特征,合并特征后通过 FC 得到分类结果;
(3)Early Fusion 在这里非常 Early,在输入层面做融合,直接将多张图像在 RGB 通道维度拼接起来;
(4)Slow Fusion 结合了 Late 和 Early,在特征提取过程中逐步融合;

  直观上看 Slow Fusion 最合理,最终实验结果也是他的精度最高,但实际上这四种方法的差别都不大,Early 和 Late 甚至不如单帧图像分类的 Baseline。而且在 Sports-1M 这样的大数据集上做预训练后迁移到 UCF-101 上的效果远不如手工特征,作者得到最好的结果只有 65.4%,而当时最好的手工特征有 87%。

Sports-1M 测试结果

F2

Two-Stream

双流网络

方法

在这里插入图片描述
  双流网络认为 CNN 直接学习时序特征难度太高,于是计算光流作为时序特征喂给网络。整个结构具有空间流和时间流两个 CNN,空间流就是做单帧图像分类,时间流则是输入光流,也是做分类,最后把两个分类结果通过加权平均或 SVM 等 Late Fusion 的方式合并起来。

  • 光流
      假设视频帧的形状为 [ H , W , 3 ] [H,W,3] [H,W,3],前后帧两张图像可以计算得到光流的形状为 [ H , W , 2 ] [H,W,2] [H,W,2]。光流可以理解为像素在 x y xy xy 方向的移动量,假设 t t t 帧中某个像素的坐标为 ( x , y ) (x,y) (x,y),光流中该坐标位置的数值为 ( u , v ) (u,v) (u,v),那么 ( x + u , y + v ) (x+u,y+v) (x+u,y+v) 就是在 t + 1 t+1 t+1 帧中该像素的所在位置。因此,光流可以很好的描述运动信息。

在这里插入图片描述
  如上图,作者提出了两种使用光流的方式。左侧就是简单的把多帧光流拼接到一起;右侧是根据光流的轨迹做拼接,因为根据光流可以知道这个点在下一帧的位置,这样可以看作同一个点在不同时间的光流值。但是实验结果中左边的方法更优,作者也难以理解,后续 TDD 解决了这个问题。
  双流网络计算 L + 1 L+1 L+1 帧的光流得到 [ H , W , 2 L ] [H,W,2L] [H,W,2L] 作为时间流的输入,前半部分为 x x x 方向数值,后半部分为 y y y 方向数值。由于原始的光流数据所占空间太大,作者这里将它的数值变换到 0~255 保存为图片,于是可以用 JPEG 压缩,大幅度降低了光流文件的存储空间(1.5TB → 27GB)。

  • 测试阶段
      无论视频共有多少帧,会等间距抽取 25 帧做空间流预测,每一帧后面连续的 11 帧用来做时间流预测。

实验

在这里插入图片描述
  上图在 UCF-101 上分别对时间流和空间流做了消融实验。表 a 中测试了是否使用 ImageNet 预训练模型、整个网络微调和最后层微调、不同 Dropout 之间的差异。表 b 中前三行先测试了1、5、10帧光流长度的影响,后面分别测试了沿轨迹叠加光流和使用 Bi-directional optical flow 反向光流。

在这里插入图片描述
  双流网络基本可以和过去最好的手工特征打平。值得注意得是,仅使用光流做预测,也能得到相当高的精度。

研究方向

(1)目前是在两个网络 Softmax 后做 Late Fusion,可以对 Fusion 的方式进行研究,直观上在前期的特征中做空间与时间的交互会更好;
(2)目前的网络还是 AlexNet,尝试 ResNet 等更深的网络,研究如何在小数据集上训练大模型,如何控制过拟合;
(3)目前将 CNN 抽取的特征直接做分类,可以尝试在抽到的特征后面加上 RNN 或 LSTM 来提取时序信息;
(4)目前的时序很短,10帧也就0.5s左右,通常动作的持续时间会更长,研究如何处理长视频。

Beyond Short Snippets

方法

在这里插入图片描述 在这里插入图片描述

  Short Snippets 代表两三秒内的视频切片,按照双流网络的方法能够处理的视频帧很少。当有特别多的视频帧时,通常会用 CNN 抽取特征,问题在于如何对这些特征做 Pooling,文章探索了多种 Pooling 方式,也尝试了使用 LSTM。具体来说就是 CNN 抽取特征后不是连接 FC 做分类,而是接上 5 层 LSTM 做时序融合后再做 Softmax 分类。

实验

在这里插入图片描述
  在 Sports-1M 上,与单帧和 Deep Video 做了对比,使用的帧数大幅度提高,但效果的提升其实主要因为使用了光流,如果仅对比 Conv Pooling 和 LSTM 其实并没有什么区别。
在这里插入图片描述
  在 UCF-101 上,第一项为手工特征能达到 87.9%,Deep Video 只有 65.4%,双流网络+SVM 能达到 88% 与手工特征打平。这里可以看出 LSTM 在这里也没什么效果,朱老师这里分析认为 LSTM 更擅长处理 High Level 的语义特征,给 LSTM 的输入要具有一定的变化。UCF-101 的平均时长为 7s,在这样较短的视频上,多帧的语义信息可能没有什么变化,讲许多相似的特征传给 LSTM,它也学不到什么东西。在长视频或变化剧烈的视频上,LSTM 应该还是有用武之地的。

Two-Stream Fusion

方法

  双流网络用的是简单的 Late Fusion,于是这篇文章在 Fusion 上做研究。

(1)Spatial fusion 在空间维度如何融合特征

  • Sum fusion
  • Max fusion
  • Concatenation fusion
  • Conv fusion:Concat 后接一个 1 × 1 1\times 1 1×1 卷积,最终表现最好
  • Bilinear fusion:相同位置的特征做外积,然后对所有位置的特征求和 y bil  = ∑ i = 1 H ∑ j = 1 W x i , j a ⊤ x i , j b ∈ R D 2 \mathbf{y}^{\text {bil }} =\sum\limits_{i=1}^{H} \sum\limits_{j=1}^{W} \mathbf{x}_{i, j}^{a \top} \mathbf{x}_{i, j}^{b}\in \mathbb{R}^{D^{2}} ybil =i=1Hj=1Wxi,jaxi,jbRD2

(2)Where to fuse the networks 在网络的哪个部分做特征融合
在这里插入图片描述
  作者做了大量的消融实验后得到了两个较好的方法。左图为传统意义上的 Early Fusion,图像和光流分别经过各自的网络提取特征后合并,然后输入统一网络做预测。右图则是保留了空间流的信息,在 fc8 后再做一次融合,可以简单理解为在网络还没有学习到特别深层的语义特征前做一次融合来帮助时间流学习,而在 fc8 已经是深层语义特征时再做一次融合。

(3)Temporal fusion 多帧特征如何在时间维度融合
在这里插入图片描述
在这里插入图片描述

  在对上述细节进行研究后提出网络框架,最终设计了两个分支,左边融合了空间和时间的特征,右边单独保留了时间特征,最后再对两个分支的结果做 Late Fusion。

实验

在这里插入图片描述
  实验中,测试了将双流网络替换为 VGG-16,以此作为 Baseline 进行对比,在 HMDB-51 上有较大提升,可能是 Early Fusion 的方式可以让时间流和空间流在早期进行互相学习,在一定程上弥补了数据不足的问题。

TSN

方法

在这里插入图片描述
  文章提出了一个简单但有效地方法,对于一个视频可以切分成若干段,每段抽取图像和光流经过双流网络得到分类得分,这些分类得分通过 segmental consensus function 做融合,最后空间流和时间流做 Late Fusion 得到分类结果。
  这个思想还可以用到无监督学习中,以往会在一段视频中随机抽取两帧作为正样本,其他帧作为负样本,但对于较长的视频这两帧不一定是正样本。运用 Temporal Segment 可以先把视频分段,每段抽取一帧作为一个样本,再从每段抽取一帧作为第二个样本,这两个样本作为正样本对。

  作者还提供很多有用的技巧:

(1)Cross Modality Pre-training 预训练
  空间流可以使用 ImageNet 预训练的模型,而时间流以光流为输入没有在大数据集上的预训练模型。作者发现直接把 ImageNet 预训练的模型搬到时间流上也很好,但是一个输入是 RGB 3 通道,一个是 10 张光流图 20 通道,无法直接使用。作者的方法是将模型 3 通道的权重求平均变为单通道,然后再 20 通道的权重上复制 20 份,这种初始化方式对模型的提升非常显著。

(2)Regularization Techniques 正则化
  由于数据集较小,使用 BN 虽然能让模型训练加速,但也带来了严重的过拟合。作者提出了 partial BN 的做法,冻结除了第一层以外的 BN,由于原始的 BN 来源于图像,开放第一层 BN 可以学习一下新的视频输入,适应新的数据集。

(3)Data Augmentation 数据增强

  • corner cropping:常用的 random cropping 经常在图像的中间区域附近,很难覆盖边角区域。过去边角区域的裁剪主要用在测试,这里用到了训练中的数据增强。
  • scale jittering:通过改变图片的长宽比来增加数据多样性。具体先把所有帧 resize 到 256 × 340 256\times 340 256×340,然后再图片上做裁剪,裁剪区域长宽的数值从 { 256 , 224 , 192 , 168 } \{256,224,192,168\} {256,224,192,168} 随机挑选,例如 256 × 256 256\times 256 256×256 192 × 168 192\times 168 192×168 等。

实验

在这里插入图片描述

  表格中顶部为传统方法,中间为深度学习方法,底部为 TSN(3 modalities 是多使用了另一种形式的光流)。

3D

C3D

方法

  作者使用了一个较深的 3D CNN 在 Sports-1M 这样较大的数据集上进行训练。网络结构与 VGG 非常类似,基本就是每个 Stage 删除一层卷积,然后把 3 × 3 3\times3 3×3 的 2D 卷积变成了 3 × 3 × 3 3\times3\times3 3×3×3 的 3D 卷积。Pooling 层中,除了 Pool1 是 1 × 2 × 2 1\times2\times2 1×2×2,即不对时间维度做下采样,其余都是 2 × 2 × 2 2\times2\times2 2×2×2

在这里插入图片描述
  作者发现 fine-tune 网络费时费力且效果不好,后续就以 FC6 的输出作为抽取的特征,后续再训练一个 SVM 做分类效果很好。

实验

在这里插入图片描述在这里插入图片描述
  左侧为 C3D 在 UCF-101 上的结果,右侧为同期 TDD 的实验结果。从精度上看 C3D 并不突出,但文章主要的卖点在于开放了 C3D 抽取特征的接口,可以用于各种下游任务(当时的算力不足以大多数人去训练或 fine-tune 视频模型,C3D 以 Facebook 的算力训练了一个月)。

I3D

方法

  作者制作了 Kinetics 数据集,模型通过选取优秀的 2D 网络 inflate 到 3D 来构建。文中回顾了过去的一些方法,最终提出了图 e 所示的网络结构,可以看出是个 3D 版的双流网络。
在这里插入图片描述
  I3D 是从 2D 网络扩张到 3D,也就是保持网络整体结构不变,卷积、池化操作扩张为 3D,这看起来很简单,但关键的是用 2D 的网络来初始化 3D 的网络,从而降低训练难度。之前 C3D 效果不好很可能是因为没有类似 ImageNet 这样的预训练模型做初始化。
  作者提出了一个巧妙的初始化方式,将一个静止的视频,即每帧都是同一张图像 I I I 的视频作为 3D 的输入,而 I I I 同时作为 2D 的输入,目标是让两者的输出保持一致。对于 3D 卷积来说比 2D 卷积多了时间上的维度 N N N,那么就把 2D 的参数复制 N N N 份作为 3D 的参数。如此得到的 3D 输出会是 2D 的 N N N 倍,因此将参数都除以 N N N 即可。输出一致意味着后续网络的输入也是一致的,使得后续的参数也是有效的。

实验

Table 1

在这里插入图片描述

Table 2

在这里插入图片描述

  表1 对上文提到的 5 种方式做了实验,值得注意的是将图像和光流做 Late Fusion 效果总是有提升的,证明了光流对于动作识别是很有效的,只是计算光流的成本较高。表2 证明了在 K-400 上使用 ImageNet 做初始化的有效性。

Table 3

在这里插入图片描述
  表3 对迁移学习做了测试。Original 代表不使用迁移学习,直接在 UCF-101 或 HMDB-51 上训练;Fixed 代表冻结 Backbone 做微调;Full-FT 代表在整个网络上微调。

Table 4

在这里插入图片描述
  表4 除了与现有方法作对比,还体现了 K-400 数据集的价值。在 K-400 数据集上直接训练作为预训练模型不使用 ImageNet 也能得到很好的效果,这样一来网络可以从头训练,网络的设计可以有更大的空间。

Non-local

方法

  卷积和递归(RNN、LSTM?)的操作都是在局部区域进行处理,如果能覆盖更长的上下文肯定会更好。受 Non-local means 操作的启发,提出了一个 Non-local 算子。这是一个即插即用的模块,可以用到视频、检测、分割等各种任务中。结构上其实和自注意力完全一致。

在这里插入图片描述

实验

在这里插入图片描述
  作者做了大量的消融实验

  • (a) 注意力的计算方式,最终使用 dot-product,也是 Transformer 中的默认方式
  • (b) 尝试在网络的不同位置插入一个模块,res5 的效果最差,原因可能是特征图太小,包含的空间信息少;而在 res2 插入模块计算开销较大,最终确定在 res3 和 res4
  • © 尝试插入多个模块,对于 Resnet-50 的层数分别是 3、4、6、3,10-block 就是在每个卷积层后面都插入,5-block 就是一个隔一个插入
  • (d) 对比了时间、空间和时空三种方式,证明本文这种在时间和空间上同时做自注意力的操作更好
  • (g) 在更长的上下文 128 帧上做测试,证明了 Non-local 同样可以提高性能,确实对远距离的上下文理解有帮助

在这里插入图片描述
  对比实验在 K-400 数据集上做,可以看到 Non-local I3D 只使用图像作为输入的情况下,可以和之前使用图像、光流加音频的方法打平,且在原始 I3D 上提升很多。

R(2+1)D

方法

  主要研究在动作视频中如何使用时空卷积。由于 2D 卷积也能得到不错的结果,而且计算开销比 3D 卷积小很多,于是测试了各种结构来组合使用 2D 和 3D 卷积,最后发现把 3D 卷积拆分为空间上的 2D 和时间上的 1D 效果最好。

在这里插入图片描述
请添加图片描述
  从消融实验中可以看出,单纯使用 2D 和 3D 的方法效果最差,组合使用 2D 和 3D 效果稍好,拆分的 3D 的 R(2+1)D 方式效果最佳。其中 R(2+1)D 的参数量是为了和 R3D 的参数量保持一致,从而做公平的对比。

在这里插入图片描述

  具体的拆分方法就是把一个 t × d × d t\times d \times d t×d×d 的卷积拆分成, 1 × d × d 1 \times d \times d 1×d×d 的 2D 空间卷积和 t × 1 × 1 t \times 1 \times 1 t×1×1 的 1D 时间卷积,中间的 M i \mathrm{M}_i Mi 是做特征维度映射,使得参数量逼近 R3D。
  作者分析拆分成两个卷积可以增加一次激活函数,提高网络的非线性能力;并且直接学习 3D 卷积比较困难,拆分成空间和时间会更容易优化。(基本是先射箭后画靶)

实验

在这里插入图片描述
在这里插入图片描述

  在 K-400 上,R(2+1)D 单独使用图像或光流都优于 I3D,但是两者做 Late Fusion 后反而不如 I3D。在 UCF-101 和 HMDB-51 上,只在使用图像上优于 I3D,作者给出的解释是预训练比 I3D 少用了 ImageNet,而实际上 I3D 只使用 K-400 做预训练也优于 R(2+1)D。不过 R(2+1)D 的输入为 112 × 112 112\times112 112×112,而 I3D 的输入为 224 × 224 224\times224 224×224,并且 R(2+1)D 的方式确实更容易训练和抑制过拟合。

SlowFast

方法

  人的视觉系统中 P 细胞占视觉细胞的 80% 负责处理静态图像,M 细胞占 20% 处理高频率的运动信息,与双流网络很像。于是在 3D 网络中如法炮制,设计了 Slow 和 Fast 两个分支,但两个分支输入的都是图像。
在这里插入图片描述
在这里插入图片描述
  具体来说,对于一个视频先用较长的间隔取少量帧作为 Slow 分支的输入,再用较短的间隔区大量帧作为 Fast 分支的输入,并且 Slow 分支的模型更大参数更多,Fast 分支的模型更小参数更少,在过程中使用 Lateral connections 做特征融合和信息交互。从表中的详细数据可以看出,模型结构是 ResNet 版 I3D,Fast 的输入量是 Slow 的 8 倍,而 Fast 中的卷积通道数也是 Slow 的 1/8 降低计算开销,另外在时间维度上不做下采样。

实验

在这里插入图片描述
  SlowFast 除了在精度上很高,在计算开销上比过去的方法低很多。并且使用更大的模型做 Backbone 和添加 Non-local 模块后精度能进一步提高。

Transformer

TimeSformer

方法

  作者主要探索如何把 ViT 从图像领域迁移到视频领域,主要尝试了以下 5 种方式:

  • 只在空间维度做注意力,也就是原始 ViT 使用的方式,属于图像上的 Baseline
  • 在空间和时间维度上一起做注意力,但明显 GPU 吃不消
  • 时空切分,先在时间上做,再在空间上做
  • 局部切分,先在局部上做,再在全局上做,类似 Swin Transformer 在局部窗口中做
  • 轴方向切分,现在时间维度做,再分别在宽高维度做
    在这里插入图片描述
      这里的可视化图像非常直观,蓝色块作为基准点,其余为不同步骤参与注意力计算的元素。
    在这里插入图片描述
      经过消融实验后,作者选择了 Divided Space-Time 的方式作为 TimeSformer 网络。

在这里插入图片描述

实验

在这里插入图片描述
在这里插入图片描述

  这里进行了选择性对比,从精度而言 SlowFast 有 R101+NL 的版本达到 79.8 的精度,但是训练时间(ViT 做微调)和推理开销(输入少)确实更好。并且作者在更大的模型和数据集上将 K-400 刷到了 80.7。
  后续的一些相关工作其实想法也差不多,核心还是直接使用自注意力计算量太大,通过探索不同的拆分方式来提升效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值