type
status
password
date
slug
summary
category
URL
tags
icon
概述
通过2D-CNN无法很好的处理视频数据。所以经历了双流网络、3D网络、Transformer几个阶段。
1、概述
1.1、数据集
- UCF–101数据集包含13,320 个视频;101个类别,每类只有100个样本。
- Sports-1M 数据集包含 1,133,158 个 YouTube 视频;487 个类别,每类有2000多个。
- ImageNet包含1400万多个图片;2 万多个类别,破解平均每个类别500~1000个图片。
1.2、发展史
1.3、实验
sss
2、DeepVideo阶段(IEEE 2014)

选19个视频帧的1个小的视频片段,每4个视频帧就通过一个卷积神经网络,刚开始的层也是权值共享的,在抽出最开始的这些特征之后,由最开始的4个输入片段,慢慢合并成2个输入片段,再去做一些卷积操作,去学习更深层的特征。然后在融合2个特征,最后把学习到的特征给FC。
先在Sports-1M上进行训练,然后在UCF101上进行迁移,微调顶层的前三层。3折交叉验证结果是65.4%。

3、双流网络
深度学习的效果不太好,比不上光流特征,所以使用光流+图像特征。
3.1、双流网络(NeurIPS 2014)

- 空间流卷积网络,输入是单个帧画面(从视频中随机抽取一帧)。在ImageNet 数据集上进行预训练
- 光流卷积网络,输入是
L
张光流图,channnel=2×L
(前向传播为L;后向传播为L;一般取L=10
)。从头开始训练。
将UCF-101、HMDB-51换分为训练集、测试集对模型进行评估,评估结果如下所示:
3.2、Beyond Short Snippets(CVRR 2015)
上双流网络的基础上,使用了多种方式对卷积后的输出结果进行融合。


- Conv Pooling:在卷积层的输出增加一个最大池化层,然后再连接两个全连接层,这种网络结构的特点通过在时间域上的最大操作,保留了卷积层输出中的空间信息,使得卷积特征图的响应值与其感受野是相互对应的。
ㅤ | 帧1 | 帧2 | 池化结果 |
通道1 | [[0.1, 0.2],
[0.3, 0.4]] | [[0.9, 0.8],
[0.7, 0.6]] | [[0.9, 0.8],
[0.7, 0.6]] |
通道2 | [[0.5, 0.6],
[0.7, 0.8]] | [[0.5, 0.4],
[0.3, 0.2]] | [[0.5, 0.6],
[0.7, 0.8]] |
- LSTM:C表示最后一层CNN输出的特征,每个视频帧都对应了一个特征。这些特征是有时序的,所以将其用5层的LSTM处理抽取的视频特征,最后的橘黄色这一层代表直接做softmax分类了。
使用 AlexNet 和 GoogLeNet 预训练模型(在Image Net上进行预训练),首先在Sports-1M上进行训练,最后在UCF-101上进行预测。
3.3、Early Fusion(CVPR 2016 )

- 输入:从视频中抽取间隔 帧的个时间块,即时间点为 。其中空间分支输入为1帧视频,时间分支为L帧光流。
- 以 VGG 系列网络(VGG-M 和 VGG-16预训练模型)为基础构建双流架构,蓝色代表空间流网络,绿色代表时间流网络。对于每个时间点,计算光流特征与视频空间特征。
- 时空融合:先分别从两个网络抽取特征,然后在Conv5这一层先做一次Early Fusion(3D Conv+3D Pooling),融合后用FC层得到最后的融合特征,这个特征就包含了时空信息。空间流在 ImageNet 数据集上预训练。
- 时间流融合:时间流特征非常重要,所以将时间流特征单独拿出来也做一次3D pooling,再接FC层,并专门设计一个时间上的损失函数Temporal Loss。
时空学习和时序学习,对应的也有两个损失函数Spatiotemporal Loss和Temporal Loss。推理时,两个分支的输出做一次加权平均。
3.4、TSN

- 将长视频分成段,在每一段里随机抽取一帧当做RGB图像输入,后续连续的10帧计算光流图像作为光流输入。
- 分别通过个双流网络得到组logits(一组有时空两个logits,这些双流网络共享参数)。
双流网络采用BN-Inception作为back bone。
采用在ImageNet上预训练的模型做初始化;对于光流网络,先将ImageNet预训练模型第一层网络输入的RGB三个channel的权重做一个平均,得到一个channel的权重,然后将其复制20次就行。
只微调第一层的BN,其它的BN 层参数全部冻住。
- 将个空间流网络输出特征做一次融合(
Segmental Consensus
,达成共识),另外个时间流输出特征也如此操作。融合方式有很多种,例如:取平均、最大值、加权平均。
- 最后将两个融合特征做一次late fusion(加权平均)得到最终结果。

3、3D网络
双流网络在计算光流的过程中太消耗资源,所以使用3D网络。起初3D网络效果不好,无法与双流网络进行比较,但是通过扩大数据集,3D网络的效果逐渐得到了改善,最终在I3D模型中超越了双流网络。
计算光流的常用算法tvl one来自《 High accuracy optical flow estimation based on a theory for warping》这篇论文,使用的是其GPU实现,计算一帧光流需要约0.06秒,所以抽取光流是非常耗时的。
3.1、C3D网络
将视频片段的大小表示为 ,其中 是通道数, 是帧数, 和 分别是帧的高度和宽度。我们还将 3D 卷积和池化核的大小表示为 ,其中 是核的时间深度, 是核的空间大小。
C3D包含8个卷积层、5个池化层,所有3D卷积核均为 (时间深度×空间尺寸),步长为 ;池化层中,除 pool1 为 (时间深度×空间尺寸)、步长 外,其余池化层( pool2 - pool5 )均为 、步长 。
在Sport-1M数据上进行预训练,并在UCF-101上进行测试。
3.2、I3D网络
C3D在
Sports-1M
这么大的数据集进行预训练之后,效果还是不太行。所以作者使用了一个更大的数据集Kinetics,包括240k个视频。将空间、光流数据输入到3D CNN网络,最后将2个分支的输出进行加权平均。3D CNN网络结构采用
nception-V1
结构,详细信息如中间图片左右;其中Inception Module模块如右图所示。参数初始化:将 2D 卷积的权重沿时间维度重复N次,然后除以N进行缩放。
在Kinetics 上进行预训练,再在UCF-101 或 HMDB-51 上,进行全量微调。

3.3、Non-local Neural Networks
卷积(convolutional)和递归(recurrent)都是对局部区域进行的操作;如果能看到更长距离的上下文,肯定是对各种任务都有帮助的。本文提出一种
non-local
算子用于捕获长距离依赖。
是一个feature map,形状为,其中1024为channel; 经过三种卷积核(每种卷积核有512个卷积),将通道缩减为原来一半得到。然后将三个维度进行flatten,变为。对对应的tensor进行转置,得到形状为的tensor。然后与对应的tensor进行矩阵乘法,得到一个形状为的矩阵,这个矩阵计算的是相似度(或者理解为attention)。然后经过softmax进行归一化,然后将相似度与 经过flatten和转置的结果进行矩阵相乘,得到的形状为的结果。将维度重新伸展为,从而得到了形状为的tensor。然后对这个tensor再使用1024个卷积核,将通道扩展为原来的,这样得到了的tensor。最终一步操作是将与得到的tensor进行相加(类似resnet中的residual block)。
在
Kinetics 400
上的效果对比。NL I3D
是将I3D
的backb替换为ResNet
,精度提升了一个点左右,加入non local之后,又提升了三个点。3.4、R(2+1)D
R(2+1)D
就是将一个 t×d×d
的卷积核,替换为一个 1×d×d
的卷积核和一个t×1×1
的卷积核。也就是先只在空间维度(宽高尺度)上做卷积,时间维度卷积尺寸保持为1不变;然后再保持空间维度不变,只做时间维度的卷积。在
Kinetics
上的结果。R(2+1)D
单个网络(RGB/Flow)比I3D
单个网络的效果更好,但是双流R(2+1)D
比双流I3D效果略低,也就是Fusion操作对I3D提升更大。
3.5、SlowFast
本文提出了一种快慢结合的网络来用于视频分类。其中一路为Slow网络,输入为低帧率,用来捕获空间语义信息。另一路为Fast网络,输入为高帧率,用来捕获运动信息,且Fast网络是一个轻量级的网络,其channel数比较小。

4、Transformer
当前的 3D CNN 最多只能够处理几秒钟的片段,而TimeSformer甚至可以在数分钟的片段上进行训练(更节省计算资源)。
4.1、TimeSformer
借鉴
R(2+1)D
的方法,将其拆分为Temporal Self Attention
+Spatial Self Attention
。先做时间上的自注意力,也就是计算不同帧中同一位置的self attention(第t
帧blue patch
、第t+1
帧green patch
、第t-1
帧green patch
)。然后计算同一帧上所有patches的self attention;在Kinetics-400上的效果
TimeSformer
、I3D
、SlowFast
三种模型在K400数据集上的精度。其实 SlowFast使用Resnet101效果更好(精度78.9)。但是TimeSformer
确实训练(微调)时间和推理速度都更短。
- 作者使用了更大的
TimeSformer-L
模型,并在ImageNet-21K
上进行训练,终于把K400
刷到80.7了。
5、实验效果
I3D 98.0

DeepVideo(IEEE 2014)
作者提出的Single Frame、Late Frame、Early Fusion、Slow Fusion、 多分辨率卷积网络几种架构效果都不太好。
1、网络架构
DeepVideo论文中的方法是比较直接的,论文中的想法就是如何将卷积神经网络从图片识别应用到视频识别中。视频与图片的不同在于,视频多了一个时间轴(有更多的视频帧)。所以论文中尝试了以下几个变体(下图后3种):

- Single Frame:在视频里任选一帧,然后把这一帧通过一个卷积神经网络,然后通过两个FC,最后得到分类结果。本质上就是一个图片分类的任务,没有应用时间信息,也没有应用视频信息。
- Late Fusion:从视频中,随机选几帧,然后每一帧都单独通过一个卷积神经网络,这两个神经网络是权值共享的,将两个特征合并,再通过FC【全连接层】,最后做输出。
- Early Fusion:原来一张图片,有3个channel,现在有5张图片,就有3x5=15个channel;所以第一个卷积层接受的输入的通道数,就要由原来的3变成15,之后的网络都和之前的保持不变。
- Slow Fusion:Late Fusion合并太晚,Early Fusion合并太早了,Slow Fusion在特征层面做了一些融合。具体做法就是选19个视频帧的1个小的视频片段,每4个视频帧就通过一个卷积神经网络,刚开始的层也是权值共享的,在抽出最开始的这些特征之后,由最开始的4个输入片段,慢慢合并成2个输入片段,再去做一些卷积操作,去学习更深层的特征。然后在融合2个特征,最后把学习到的特征给FC。
但是从总体看来,这几种方法的差别都不大。即使在Sports-1M(100万个视频)上去做了预训练之后,在UCF101小数据集上去做迁移学习的时候,效果竟然还比不上之前的手工特征。
2、多分辨率卷积网络
Single Frame、Late Frame、Early Fusion、Slow Fusion效果都不太好,所以作者创建了多分辨率卷积网络。最后经过测试多分辨率卷积网络也不好。

作者将输入分成了2部分,一个是原图,另外一个是从原图的正中间抠出来的一部分(无论是对图片还是视频,最有用的物体大多会出现在图片或者视频的正中间)。图中上面一条流称为fovea stream,下面一条流称为context stream。fovea输入为图片的中间区域。context输入为原始图片。作者想通过这些操作让网络学习到网络中最有用的信息,又能学习到这个图片整体的理解。Multiresolution CNN中的两个网络是权值共享的。
3、实验结果
3.1、Sports-1M
经过在Sports-1M数据上实验后发现,多分辨率卷积网络又一定提升,比如和Single-Frame(基准 Baseline)与Single-Frame Multires相比,有一定提升,但是提升相对来说比较小。Early Fusion和Late Fusion 都比Single-Frame(基准 Baseline)差。Slow Fusion经过一系列复杂操作后,也只比Single-Frame(基准 Baseline)高一点点。

3.2、UCF101
在14年的UCF101数据集上,Fine-tune top 3 layers,也只有65.4%的准确度。而当时最好的手工方法已经可以达到87%的准确度。这样巨大的差异,让人们思考,深度学习网络在图片分类、图片检测效果都很好,为啥到了视频分类就碰壁了呢?

双流网络(NeurIPS 2014)
因为CNN无法很好的处理时序信息,所以双流网络用一个分支处理图像特征,用另一个分支处理时序特征(光流)。

空间流和时间流网络结构几乎是一样的,唯一区别就是输入不一样。前者输入的是静止的视频帧,输入
channel=3
;后者输入是L
张光流图的叠加,输入channnel=2×L
(前向传播为L;后向传播为L;一般取L=10
)。因为时间流网络输入通道是2L
,所以没法用一般的CNN预训练模型。1、Spatio Stream Convet
空间流卷积网络,输入是单个帧画面(从视频中随机抽取一帧),主要学习场景信息。因为是处理静态图片,所以可以使用预训练的模型来做,更容易优化。最后根据网络输出的特征得出一个logist
2、temporal stream convet
时间流卷积网络(光流网络),输入是多帧光流图像(Optical Flow),反映相邻帧之间的像素运动趋势;光流分为前向光流(当前帧到下一帧的运动)和后向光流,通常取多帧(如10-20帧)的光流堆叠作为输入。最后也根据网络输出的特征得出一个logist。
光流输入显式地描述了视频帧之间的运动,而不用CNN本身去学动作信息,大大简化了学习过程。加入时间流卷积网络之后,模型精度大大提升。
输入为,其中为帧数。本质上将不同帧作为通道使用
2.1、光流
optical flow简单说就是每个物体的运动轨迹,运动越明显的区域亮度越高。比如下图左侧由两张图片组成,背景不变,只有人的运动状态变了;右图背景运动状态不变,所以是黑色的,只有图中的人处于运动中,是亮色的。通过提取光流,可以去掉背景噪声、人物穿着性别等和运动无关的特征都忽略掉,所以最后提取的特征能很好的描述运动信息,也变相的相当于视频里的时序信息的特征表示。

计算光流的算法来自《 High accuracy optical flow estimation based on a theory for warping》这篇论文,使用的是其GPU实现,计算一帧光流需要约0.06秒,所以抽取光流是非常耗时的。
3、融合
late fusion
融合:两个logist加权平均得到最终分类结果(比如两个softmax向量取平均,再做一个argmax操作)。
early fusion
融合:就是在网络中间层特征上做融合。
4、消融实验
4.1、空间网络
不使用预训练模型而是从头训练,效果很差。
4.2、时间流网络
前者表示简单的叠加光流,效果更好;后者表示按轨迹叠加光流,效果较差。

4.3、模型效果

- 第一行是IDT手工特征的效果,非常的好。
- 二、三行是对IDT的改进,加了全局特征,使其更适合做视频,结果也更高。
- 四、五行是之前深度学习尝试做视频处理的工作,结果非常差。(第五行就是上面说的DeepVideo)
- Spatial stream ConvNet、Temporal stream ConvNet:单独的空间流和时间流网络。可以看到单独的时间流网络效果已经非常好,而且是从头训练的网络,没有使用预训练模型。
- 最后两行是两个网络分别用加权平均融合,以及额外训练SVM分类器。
Beyond Short Snippets——Two stream + LSTM、CNN(CVRR 2015)
原始的双流网络,空间流输入是一帧或几帧视频帧,时间流输入是10帧光流,只能处理很短的视频。如果是长视频,有特别多的视频帧,首先想到的还是用CNN去抽取视频特征,但关键是抽取的特征如何去做pooling。本文探索了6种pooling方法,最后结果差不多,conv pooling稍微好一点。另外还作者还试了使用LSTM做特征融合,最后提升有限。
我们使用两种 CNN 架构来处理单个视频帧:AlexNet 和 GoogLeNet;CNN 在帧之间共享参数。然后我们研究了各种聚合多个视频帧方法,在第一部分中,我们研究了各种与时间顺序无关的特征池化架构,在接下来的部分中,我们研究了能够从时间有序序列中学习的 LSTM 网络。
因为是短视频,每一帧视频相似度很高,所以提取到的特征十分相似。导致LSTM无法学习到有用的信息。
1、CNN+Pooling
图中砖色是卷积层,蓝色是最大池化层,绿色是时域卷积层,黄色全连接层,橘色softmax层。
1.1、Conv Pooling
第一种结构称为卷积-池化结构,在卷积层的输出增加一个最大池化层,然后再连接两个全连接层,这种网络结构的特点通过在时间域上的最大操作,保留了卷积层输出中的空间信息,使得卷积特征图的响应值与其感受野是相互对应的。
在时间维度上进行最大池化。该操作会保留每个空间位置上在时间序列中的最大特征值,从而将多帧的空间特征聚合为一个全局特征向量。
ㅤ | 帧1 | 帧2 | 池化结果 |
通道1 | [[0.1, 0.2],
[0.3, 0.4]] | [[0.9, 0.8],
[0.7, 0.6]] | [[0.9, 0.8],
[0.7, 0.6]] |
通道2 | [[0.5, 0.6],
[0.7, 0.8]] | [[0.5, 0.4],
[0.3, 0.2]] | [[0.5, 0.6],
[0.7, 0.8]] |
1.2、Late Pooling
第二种结构称为滞后池化结构,这种结构首先将每一帧计算的卷积特征图flatten后通过两个全连接层,然后对全连接层的输出沿着时间最大池化;所有卷积层和全连接层的权重是共享的。这种网络结构与Conv Pooling结构相比,不会保留池化前特征的空间结构,而是直接组合高维抽象特征的时间动态。
ㅤ | 维度1 | 维度2 | 维度3 | 维度4 |
帧1 | 0.2 | 1.8 | 0.5 | 3.0 |
帧2 | 0.8 | 0.4 | 2.2 | 1.1 |
帧3 | 0.1 | 2.5 | 1.0 | 0.9 |
池化 | max(0.2, 0.8, 0.1)=0.8 | max(1.8, 0.4, 2.5)=2.5 | max(0.5, 2.2, 1.0)=2.2 | max(3.0, 1.1, 0.9)=3.0 |
假设有3帧视频,每帧特征维度D=4:
1.3、Slow Pooling
第三种结构称为慢速池化结构,这种结构从较小的时间窗口分层组合帧级信息,对于卷积网络的输出,首先使用滑动窗口最大池化组合输入的局部帧级信息,然后对每个局部帧级组合连接全连接层(全连接层共享权重),再对全连接层的输出结果通过最大池化层组合全部的局部帧级信息,最后通过全连接层获得最终的结果。这种网络结构的特点是在组合高维抽象的特征之前,可以先组合局部的时间运动信息。
1.4、Local Pooling
第四种结构称为局部池化结构,这种结构和Slow Pooling很像,对于卷积网络的输出,首先使用滑动窗口最大池化组合输入的局部帧级信息;然后对每个局部帧级特征连接两个全连接层(共享参数);最后,一个更大的 softmax 层连接到所有塔。这种网络结构与Slow Pooling的不同点在于该网络结构通过消除第二个最大池化层,局部池化网络避免了潜在的时间信息丢失。
1.5、Time-Domain Convolutio
第五种结构称为时域卷积结构,这种结构与前边的四种结构相比多了一层时间卷积层。相当于在Conv Pooling结构的最大池化层之前增加一层时间卷积层。
将连续T帧的特征图沿时间维度堆叠,形成C×T×H×W的4D张量(C为通道数,H×W为空间尺寸)。那么对于每一个通道,卷积、池化的原理如下图所示:

2、CNN+LSTM
具体的LSTM操作如下图所示,C表示最后一层CNN输出的特征,每个视频帧都对应了一个特征。这些特征是有时序的,所以将其用5层的LSTM处理抽取的视频特征,最后的橘黄色这一层代表直接做softmax分类了。
简单说,就是从双流网络抽取特征之后直接做softmax分类,改为抽取特征后进行LSTM融合,再做softmax分类。

3、实验结果
在Sports-1M和UCF-101数据集上评估我们提出方法的结构。每个视频的前 5 分钟以 1 帧 / 秒的帧率采样,每个视频获得 300 帧。
3.1、池化操作(Sports-1M)
我们使用了Hit@k值,这表明测试样本在前个预测中包含至少一个ground truth标签的分数。发现Conv Pooling的效果最好,Late Pooling的效果最差,这表明在跨时间域执行池化操作时保留空间信息是很重要的。与Late Pooling相比Time-Domain Convolution的结果更差,这表明,一个时间域的卷积层对于在高级特征上学习时间关系是无效的,这促使我们去探索更复杂的网络架构。

3.2、LSTM操作(Sports-1M)
比较了Conv-Pooling和LSTM模型2种聚合函数。可以看到随着输入帧长的增加,clip 和 video 的准确率都是提高的,相同帧数下,LSTM优于Conv-Pooling。

3.3、特征提取层(Sports-1M)
GoogLeNet优于AlexNet。

3.4、效果(UCF-101)

Two-Stream+Early Fusion(CVPR 2016 )
1、概述
1.1、问题
双流网络也存在一些问题,作者具体说了两点:
- 双流网络无法学习到时间特征和空间特征的像素间的关系。
- 双流网络对时间维度的利用很有限,空间网络只用了一帧,时间网络只用了10帧。

1.2、解决方法
- 空间融合:在隐藏层中间对两个网络进行融合,并且提出了多种融合方式;
- 时间融合:提出用Conv3D和Pool3D提取时间维度的特征,在时间维度上进行“融合”。
2、Spatial fusion
考虑区分刷牙和梳头的动作。如果手在某个空间位置周期性移动,那么时间网络可以识别该运动,而空间网络可以识别位置(牙齿或头发),它们的结合就能区分这两个动作。所以,我们希望在特定的卷积层融合两个网络。
2.1、不同的空间融合策略
融合函数 融合两个在时间的特征图, 代表空间网络的输入,代表时间网络的输入,产生输出图;其中、和分别是各特征图的宽度、高度和通道数。当应用于由卷积层、全连接层、池化层和非线性层组成的前馈ConvNet架构时,可以在网络的不同点应用以实现例如早期融合、晚期融合或多层融合。可以使用各种融合函数。我们在本文中研究以下函数,为简单起见,假设 ,并且省略下标。
- Sum fusion: 计算两个特征图在相同空间位置和特征通道处的和;输出的通道数为。随机匹配不同空间网络与时间网络的特征图。
- Max fusion: 计算两个特征图在相同空间位置和特征通道处的最大值;输出的通道数为。随机匹配不同空间网络与时间网络的特征图。
- Concatenation fusion: 在相同空间位置处沿特征通道堆叠两个特征图;输出通道数为。
- Conv fusion: 在相同空间位置处沿特征通道堆叠两个特征图,然后用一组滤波器和偏置对堆叠数据进行卷积;输出通道数为。
有几个卷积核,就会有几个输出通道。
- Bilinear fusion:在两个特征图上做一个外积,然后再做一次加权平均,通道数为。说好点是对所有信息融合,说坏点就是分不清主次。
其中, 和 分别来自两个网络(空间流和时间流)在位置处的特征向量(维度为),外积得到矩阵,然后对所有位置求和得到一个的矩阵,最后将这个矩阵向量化为一个维的特征向量 。

融合可以应用于两个网络的任何位置,唯一的约束是两个输入图和在时间具有相同的空间维度;即。这可以通过使用“上卷积”层来实现,或者如果维度相似,可以通过用零填充较小的图来实现上采样。
2.2、不同位置的融合效果
基于 VGG-M 网络结构,测试不同层级的融合效果。左图两个网络在Conv4之后,就做一次融合,然后就变为一个卷积神经网络了。右图在conv5和fc8两个层都分别做一次融合;将空间流的conv5特征拿过来和时间流的conv5特征合并,最后时间流得到一个 spatial temporal feature(时空特征)。同时空间流继续做完剩下层,得到一个完整的空间流特征。在最后的fc8层,再做一次合并。

下表展示了卷积融合在不同层融合的性能比较:
- 早融合:在relu5之前融合,效果不佳;
- 早融合加多融合:效果不佳;
- 晚融合(relu5)和多融合(relu5+fc8)效果最好,但是多融合训练参数多一倍;

3、temporal fusion
temporal fusion就是抽取多个视频帧的特征之后,如何在时间轴位置将这些特征融合。作者3尝试了两种方式:3D Pooling和3D Conv+3D Pooling,后一种方式性能最好。

a:2D Pooling完全忽略了时序信息
b:3D Pooling:先在时间维度堆叠各个特征图,再做Pooling
c:3D Pooling之前先做一次3D卷积
3.1、3D pooling
将连续T帧的特征图沿时间维度堆叠,形成C×T×H×W的4D张量(C为通道数,H×W为空间尺寸)。那么对于每一个通道,卷积、池化的原理如下图所示:

3.2、实验结果

4、整体结构
在讨论了如何在时间上融合网络之后,我们现在讨论采样时间序列的频率问题。时间融合层接收间隔 帧的个时间块;即双流塔应用于输入视频的时间点为 。

网络输入是[t-τ,t+τ]时刻的RGB图像输入和对应的光流输入,蓝色代表空间流网络,绿色代表时间流网络。
时空融合:先分别从两个网络抽取特征,然后在Conv5这一层先做一次Early Fusion(3D Conv+3D Pooling),融合后用FC层得到最后的融合特征,这个特征就包含了时空信息
时间流融合:因为时间流特征非常重要,所以将时间流特征单独拿出来也做一次3D pooling,再接FC层,并专门设计一个时间上的损失函数Temporal Loss。
也就是这个模型有两个分支:时空学习和时序学习,对应的也有两个损失函数Spatiotemporal Loss和Temporal Loss。推理时,两个分支的输出做一次加权平均。最后结果如下:

TSN(长视频理解,ECCV 2016)
two-stream 卷积网络对于长范围时间结构的建模无能为力,主要因为它仅仅操作一帧(空间网络)或者操作短片段中的单堆帧(时间网络),因此对时间上下文的访问是有限的。视频级框架TSN可以从整段视频中建模动作。
1、结构

TSN的想法非常简单,就是把长视频分成段来进行处理:
- 将长视频分成段,在每一段里随机抽取一帧当做RGB图像输入,后续连续的10帧计算光流图像作为光流输入。
- 分别通过个双流网络得到组logits(一组有时空两个logits,这些双流网络共享参数)。
双流网络采用BN-Inception作为back bone。
采用在ImageNet上预训练的模型做初始化;对于光流网络,先将ImageNet预训练模型第一层网络输入的RGB三个channel的权重做一个平均,得到一个channel的权重,然后将其复制20次就行。
只微调第一层的BN,其它的BN 层参数全部冻住。
- 将个空间流网络输出特征做一次融合(
Segmental Consensus
,达成共识),另外个时间流输出特征也如此操作。融合方式有很多种,例如:取平均、最大值、加权平均。
- 最后将两个融合特征做一次late fusion(加权平均)得到最终结果。
如果一个视频也不是太长,里面就包括一个事件或者一个动作的话,抽出来的K帧即使表面看起来不一样,但其高层语义信息上,应该还是描述的同一个东西,所以可以分成段之后再融合来进行处理。
2、技巧
2.1、初始化
空间网络以RGB图像作为输入:故采用在ImageNet上预训练的模型做初始化。对于其他输入模式(比如:RGB差异和光流场),其分布不同于RGB图像的分布。作者提出了交叉模式预训练技术:利用RGB模型初始化时间网络。
ImageNet预训练模型的网络输入channel=3,而光流网络输入channel=20,无法直接使用。作者先将ImageNet预训练模型第一层网络输入的RGB三个channel的权重做一个平均,得到一个channel的权重( average the weights across the RGB channels ),然后将其复制20次就行。
这种初始化技巧使得光流网络也能使用预训练模型,最终模型精度提高了5个点。这种技巧后来被广泛使用,I3D中使用预训练的2D模型来初始化3D模型,也是这么做的。
2.2、正则化
在视频领域初期,很多视频数据集都很小,使用BN虽然可以加速训练,但也带来了严重的过拟合问题(数据集小,一微调就容易过拟合)。作者由此提出了
partial BN
。partial BN
:简单说就是只微调第一层的BN,其它的BN 层参数全部冻住这是因为一方面存在过拟合,所以考虑冻结BN层;但是全部冻住,迁移学习的效果就不好了。Imagenet数据集和视频分类数据集还是差的很远的,之前BN层估计出来的统计量不一定适用于视频分类,所以第一层BN必须进行学习,但后面再动就有过拟合的风险了。
2.3、数据增强
数据增强能产生不同的训练样本并且可以防止严重的过拟合。在传统的two-stream中,采用随机裁剪和水平翻转方法增加训练样本。作者采用两个新方法:角裁剪(corner cropping)和尺度抖动(scale-jittering)。
- 角裁剪(corner cropping):作者发现random crop经常是crop图片中间部分,很难crop到边角。作者强制使用角裁剪,仅从图片的边角或中心进行crop。
- 尺度抖动(scale jittering):将输入图像或者光流场的大小固定为 ,裁剪区域的宽和高随机从 中选择。最终,这些裁剪区域将会被resize到 用于网络训练。事实上,这种方法不光包括了尺度抖动,还包括了宽高比抖动。
3、实验设置
3.1、数据集
实验在两个大型主流动作数据集HMDB51和UCF101上进行。UCF101数据集包含13,320个视频剪辑,其中共101类动作。HMDB51数据集是来自各种来源的大量现实视频的集合,比如:电影和网络视频,数据集包含来自51个动作分类的6,766个视频剪辑。
3.2、超参数
batch size设置为256,momentum设置为0.9。用在ImageNet上预训练的模型对网络权重进行初始化。实验中learning rate设置较小:对于空间网络,初始化为0.01,并且每2,000次迭代降为它的 ,训练过程共迭代4,500次;对于时间网络,初始化为0.005,并且在第12,000和18,000次迭代之后降为它的 ,训练过程共迭代20,000次。
4、消融实验
4.1、训练策略的影响

- From Scratch:从零开始训练。从零开始训练比基线算法(two-stream卷积网络)的表现要差很多。
- Pre-train Spatial:仅仅预训练空间流。
- + Cross modality pre-training:在Pre-train Spatial的基础上,采用交叉输入模式预训练(对时间网络添加初始化)。
- + Partial BN with dropout:交叉输入模式预训练和部分BN dropout结合
4.2、不同输入模式

首先,RGB图像和RGB差异的结合可以将识别准确率提高到87.3%,这表明两者的结合可以编码一些补充信息。光流和扭曲光流的表现相近(87.2% vs 86.9%),两者融合可以提高到87.8%。四种模式的结合可以提高到91.7%。而光流、扭曲光流和RGB图像的结合可以达到92.3%。
RGB差异在描述运动时是不稳定的
4.3、共识函数
采用最大池化、平均池化、加权平均 3种函数作为
Segmental Consensus
函数。我们发现平局池化函数达到最佳的性能。
4.4、Backbone
比较了3个非常深的网络架构:BN-Inception、GoogLeNet和VGGNet-16。在这些架构中,BN-Inception表现最好,故选择它作为TSN的卷积网络架构。

5、实验效果
使用BN-Inception作为主干网络。

C3D(ICCV 2015)
1、主要贡献
使用的3D CNN还比较深,而且是在一个特别大的数据集上进行训练的(
Sports-1M
数据集)。C3D
并不是第一个使用3D CNN来做视频理解的,但却是第一个使用大规模的训练数据集,且使用了比较深的CNN 网络,最终取得的效果也较好。2、符号说明
将视频片段的大小表示为 ,其中 是通道数, 是帧数, 和 分别是帧的高度和宽度。我们还将 3D 卷积和池化核的大小表示为 ,其中 是核的时间深度, 是核的空间大小。
3、模型结构
简单来说就是有8个conv层和5个pooling层,两个FC层和最后的softmax分类层。整个3D CNN的构造,就是把所有的2d 卷积核都变成3d的卷积核,2d pooling层换成3d pooling层。C3D包含8个卷积层、5个池化层,所有3D卷积核均为 (时间深度×空间尺寸),步长为 ;池化层中,除 pool1 为 (时间深度×空间尺寸)、步长 外,其余池化层( pool2 - pool5 )均为 、步长 。
模型输入维度是
[16,112,112]
(也就是输入16个视频帧,每帧尺寸是112×112),其余各个block尺寸如下:3.1、数据流
- conv1:输入 ,输出 (64个卷积,卷积后维度不变,应该有1个padding);
- pool1:输入 ,输出 (空间维度减半,时间维度不变,步长为);
- conv2:输入 ,输出 (128个卷积)
- pool2:输入 ,输出 (时间和空间维度均减半);
- conv3:输入 ,输出 (256个卷积);
- pool3:输入 ,输出 (时间和空间维度均减半);
- conv4:输入 ,输出 (256个卷积);
- pool4:输入 ,输出 (时间和空间维度均减半);
- conv5:输入 ,输出 (256个卷积);
- pool5:输入 ,输出 (时间和空间维度均减半)。
4、实验结果
4.1、与DeepVideo的对比

如上图所示,前两行都是Deep Video在Sports-1M数据集上的训练结果。如果改为C3D,则效果略有提升。如果C3D换成是在更大的数据集I380K(Facebook内部数据集,未开源)上预训练,效果进一步提升。所以这也是作者反复强调的,3D CNN比2D CNN做更适合做视频理解(Deep Video还是使用一个2D CNN,只不过后面做了一些Fusion )。
4.2、UCF101数据集

只使用一个C3D网络,精度只有82.3%,如果集成三个网络,精度为85.2%,也低于同期双流网络和手工特征的结果。结果最好的是C3D+iDT+SVM分类器,精度90.4%。
I3D(双流网络的3D实现、CVPR 2017)
C3D在
Sports-1M
这么大的数据集进行预训练之后,效果还是不太行。作者坚信,如果使用一个类似ImageNet这样的预训练模型,让网络进行更好的初始化,降低训练难度,模型性能一定会提高很多。Sports-1M 数据集包含 1,133,158 个 YouTube 视频;487 个类别,每类有2000多个视频。ImageNet包含1400万多个图片;2 万多个类别,破解平均每个类别500~1000个图片。
1、相关研究
1.1、概述
- CNN+LSTM:即CNN抽取关键帧特征,LSTM进行时序建模,具体来说,就是先抽取视频中的关键帧得到张图,然后将这张图输入CNN网络得到图片特征。再将这些特征全部输入LSTM网络,进行各个时间戳上图片特征的融合,得到整个视频的融合特征。最后将LSTM最终时刻的特征接一个FC层得到分类结果。
- 3D网络:将视频帧(分割好的一个个的视频段,每段含有张图片)直接输入3D 的CNN网络进行时空学习。 此时卷积核必须是3维的(比如每个卷积核都是3×3×3,加入了时间维度),网络不光学习空间信息,还需要学习时序信息(运动信息)。最后3D Conv输出的特征也是接一个全连接层得到分类结果。因为多了一个维度,模型的参数量很大,不太好训练,而且效果也不好。
- 双流网络:整体还是2D网络结构,但额外引入一个时间流网络。通过巧妙的利用光流来提供的物体运动信息,而不用神经网络自己去隐式地学习运动特征,大大提高了模型的性能。
计算光流的常用算法tvl one来自《 High accuracy optical flow estimation based on a theory for warping》这篇论文,使用的是其GPU实现,计算一帧光流需要约0.06秒,所以抽取光流是非常耗时的。这限制了双流网络在现实中的应用。
3D Fused Two stream(early fusion)
双流网络的改进。作者认为双流网络中,两个网络的输出只是进行简单的加权平均来处理,效果还不够。所以将其替换为一个较小的3D网络,进一步融合特征。实验证明这种先进行2D卷积网络训练,再进行3D卷积网络融合的效果更好。
Two stream 3D ConvNet
:I3D是3D网络和双流网络的结合。因为单纯的使用3D网络,模型效果还是不好,加上光流之后,可以大大提高模型性能。
1.2、输入
2、网络结构
将空间、光流数据输入到3D CNN网络,最后将2个分支的输出进行加权平均。3D CNN网络结构采用
nception-V1
结构,详细信息如中间图片左右;其中Inception Module模块如右图所示。Inflated Inception-V1
结构,就是卷积核都加了一个维度(K*K —> K*K*K
,上图蓝色框)。池化层也加了一个维度,但时间维度不进行下采样。比如池化是3*3—>1*3*3
而非3*3*3
,对应的stride是2*2—>1*2*2*
,而非2*2*2*
。不过在后面几个阶段进行了时间维度的下采样(后三个池化层)
Inception Module
,和之前2D结构一样,只是卷积核变为了3D。
之所以使用Inception-V1非ResNet,是因为当年(2016年——2017年),很多视频工作的消融表明,使用I
nception-V1
的效果比ResNet
更好。但是ResNet统治力是在是太强了,一年后《Non-local Neural Networks》用ResNet
实现了I3D
模型,并且加入了self-attention
。后续大家一般提到I3D
,都是指其ResNet
实现的版本。2.1、参数初始化
将一张图复制粘贴N次就得到了一个视频,这个视频(boring video)每个时间步上都是同一张图片。将图片和其复制次得到的视频分别输入2D网络和3D网络,将后者的网络除以,如果和2D网络的输出一样,则说明3D网络初始化OK。
具体来说,将 2D 过滤器的权重沿时间维度重复N次,然后除以N进行缩放。这一操作确保了 3D 模型对 ”重复单帧构成的视频“(boring video) 的卷积响应与原 2D 模型对单帧的响应一致。
3、实验结果
3.1、 相关研究对比

I3D效果最好,而且双流好于单独空间流或视频流。
3.2、预训练
现在ImageNet pretraining上进行预训练以后再Kinetics上进行训练和测试效果更好

3.3、迁移能力
可以看到I3D的效果最好;且在Kinetics 上进行预训练,再在UCF-101 或 HMDB-51 上进行微调,模型的效果有进一步提升。
- Original:在 UCF-101 或 HMDB-51 上训练;
- Fixed:使用 Kinetics 的特征,仅最后一层在 UCF-101 或 HMDB-51 上训练;
- Full-FT:基于 Kinetics 预训练,在 UCF-101 或 HMDB-51 上进行端到端微调。

3.4、与历史模型对比

Non-local Neural Networks(CVPR 2018)
卷积(convolutional)和递归(recurrent)都是对局部区域进行的操作;如果能看到更长距离的上下文,肯定是对各种任务都有帮助的。本文提出一种
non-local
算子用于捕获长距离依赖。将
self-attention
融入I3D
当中。1、Non-local Block结构
下图是一个时空Non-local Block。输入X经过变换得到三个向量,也就相当于self-attention里的。然后前两者做点积注意力操作得到注意力分数,再和输出的向量做加权求和,得到最终的自注意力结果。这个结果和模块的输入做一个残差连接,得到整个模块的最终输出Z:
是一个的卷积核。

是一个feature map,形状为,其中1024为channel; 经过三种卷积核(每种卷积核有512个卷积),将通道缩减为原来一半得到。然后将三个维度进行flatten,变为。对对应的tensor进行转置,得到形状为的tensor。然后与对应的tensor进行矩阵乘法,得到一个形状为的矩阵,这个矩阵计算的是相似度(或者理解为attention)。然后经过softmax进行归一化,然后将相似度与 经过flatten和转置的结果进行矩阵相乘,得到的形状为的结果。将维度重新伸展为,从而得到了形状为的tensor。然后对这个tensor再使用1024个卷积核,将通道扩展为原来的,这样得到了的tensor。最终一步操作是将与得到的tensor进行相加(类似resnet中的residual block)。
1.1、注意力计算方式
采用Dot product的方法
- Dot product:,直接进行点乘
- Concatenation:拼接起来,通过一个全连接神经网络
2、实验结果
2.1、baseline
ResNet-50 C2D baseline:2D 卷积核,3D pooling,结构如下图。作者先构造了一个没有使用non local的ResNet-50 C2D baseline。输入的video clip是32帧,大小为224*224。所有卷积都是2D的,即逐帧对输入视频进行计算。唯一和时序有关的计算就是pooling,即简单的在时间维度上做了一个聚合操作。

2.2、消融实验

- a:试验自注意力计算的方式:点积计算效果最好,这也是transformer默认的计算方式
- b:试验单个non-local block插入位置:在和上插入
non-local block
。 - 在ResNet的第2、3、4这三个block上插入non-local的效果都不错。加在上效果不好,作者认为这是因为第五个block的特征图太小了,没有多少远距离的信息可以学习
- 加在上计算代价比较高,因为这个模块的特征图尺寸还是很大的
- c:试验插入
non local block
的数量。加入更多的block效果就更好,这也说明,自注意力操作真的有用,特别是在视频理解里面,长距离时序建模更为有用。 - ResNet50的4个Conv Block的卷积层层数分别是3、4、6、3,所以下表中加入10个non-local就等于是,在ResNet50的第二、三这两个模块的每个卷积层上,都加入
non local block
。5-block就是每隔一层来一个
- d:试验时空自注意力的有效性
- 表d分别试验了只在时间维度和只在空间维度计算self -attention,以及在时空维度计算self attention的结果,最终显示,时间维度做self attention效果优于空间维度,两个维度都做,效果最好。这也证明作者提出的
spacetime self attention
才是最有效的。
- e:对比
C2D+5 non local blocks
和两种I3D
模型的效果,前者精度更高,FLOPs
更小,说明单独使用non-local
比3D conv
更高效
- f:
I3D+ 5 non-local blocks
,效果进一步提升。
- g:使用更长的视频段(32帧→128帧,大概4秒),加入
non-local block
依然可以提高模型的精度,也说明其对长距离时序建模的有效性。
2.3、对比其它模型

下面是本文的方法和I3D等几种模型在
Kinetics 400
上的效果对比。NL I3D
是将I3D
的backb替换为ResNet
,精度提升了一个点左右,加入non local之后,又提升了三个点,所以总共提升了约4个点,而且比双流I3D的效果还要好,更是给了做3D CNN研究者以信心。R(2+1)D(CVPR 2018)
将3D 卷积拆分成空间上的2D+时间上的1D的网络结构,效果不错,计算量也小。

- R2D:将时间维度合并到channel维度中。比如将输入维度 [C,T,H,W ]→[CT,H,W],然后直接输入到2D卷积网络中,得到最后的分类结果。
- MCx:前x层为3D卷积网络,而其余顶层为2D卷积网络,也就是先在底层抽取时空特征,然后上层用2D CNN降低复杂度
- rMCx:将一帧帧视频帧先输入x 层2D Conv抽取特征,再用3D Conv去做一些融合,输出最后的结果
- R3D:ResNet版本的I3D,即backbone换成3D ResNet,整体结构如下:

- R(2+1)D:本文的网络结构,先做2D的Spatial Conv,再做1D的Temporal Conv,效果最好。
1.1、对比实验
对比结果下面对比了几种网络结构在Kinetics验证集上的动作识别精度,并且都是使用ResNet-18从头训练的模型:
- 单纯使用2D卷积神经网络效果最差,只使用3D效果稍微高一点。
- 不管是MCx还是 rMCx,加入部分2D网络,效果都有提高。
- 本文提出的R(2+1)D网络结构的效果最好

2、R(2+1)D结构
R(2+1)D
就是将一个 t×d×d
的卷积核,替换为一个 1×d×d
的卷积核和一个t×1×1
的卷积核。也就是先只在空间维度(宽高尺度)上做卷积,时间维度卷积尺寸保持为1不变;然后再保持空间维度不变,只做时间维度的卷积。
R(2+1)D
增强了模型的非线性表达能力:相比原来,多使用了一次卷积操作,也就多用了一次RELU函数,所以模型的学习能力更强了;
R(2+1)D
结构使网络更加容易优化:直接使用3D卷积,模型是不容易学习的,拆分成两次卷积之后,降低了模型学习的难度。在参数量相同的情况下,R(2+1)D
获得的训练损失和测试损失更低。网络层数越深,效果差距越明显。
3、实验说明
3.1、实验设置
为了使分解后的 R(2+1)D 网络参数量和原3D网络参数量大体相同(在实验中和3D网络公平对比),中间使用个2D CNN进行一次维度变换(输出维度为)
其中表示2D卷积核的个数(输出channel),为3D卷积核的空间尺寸(宽和高),为3D卷积核的时间尺寸,为3D卷积核的输入channel,为3D卷积核的个数(输出channel)
3.2、网络对比

- 在大数据集kinetics上,R3D的结果要明显好于R2D和rR2D,捕获视频中的时间运动信息还是非常重要的。
- R(2+1)D网络的效果是所有网络结构中最好的,
- MCx的效果要稍微好于rMCx,所以文章认为在底层对时间运动信息编码的效果要好于在顶层对时间运动信息编码,但是,谷歌的那篇论文中得到了相反的结论!两者实验的区别是本文基于Res3D网络做的实验,而谷歌那篇基于I3D做的实验,我个人感觉谷歌那篇的结论更靠谱!
3.3、R(2+1)D与R3D的训练误差比较
可以看到R(2+1)D有更小的训练误差,所以说R(2+1)D网络更加容易优化,并且网络的深度越深,效果越明显。

3.3、模型对比
在
Kinetics
上的结果。R(2+1)D
单个网络(RGB/Flow)比I3D
单个网络的效果更好,但是双流R(2+1)D
比双流I3D效果略低,也就是Fusion操作对I3D提升更大。在UCF101
和HMDB51
两个数据集上,也观察到同样的现象。
这也是可以理解的,因为
R(2+1)D
输入尺寸是112×112,I3D输入尺寸是224×224,所以稍微低一点没关系。R(2+1)D
这种拆分方式,确实有助于降低过拟合,降低训练难度。而且可以从头训练,不需要像I3D一样借助2D模型的ImageNet预训练参数,所以是一个很值得借鉴的网络结构。SlowFast(ICCV 2019 )
本文提出了一种快慢结合的网络来用于视频分类。其中一路为Slow网络,输入为低帧率,用来捕获空间语义信息。另一路为Fast网络,输入为高帧率,用来捕获运动信息,且Fast网络是一个轻量级的网络,其channel数比较小。
人的视觉系统有两种细胞:p细胞和m细胞。前者数量占比约80%,主要处理静态图像;后者占比约20%,主要处理运动信息。受此启发,作者设计了
SlowFast
网络。1、模型结构

1.1、Slow pathway
类似p细胞,主要学习静态图像
- 慢分支每隔帧取一帧,假设输入是帧时,原视频是帧的vedio clip。
- 慢分支的网络就类似一个I3D,网络是比较大的。但因为输入只有4帧,所以相对而言,计算复杂度也不高。
1.2、Fast pathway
快分支用于处理动态信息,所以需要更多的输入帧;减少Fast路径的通道量。
- 高帧率:每隔帧取一帧,所以输入是帧。是两个分支的帧速比,是
SlowFast
的关键概念,它表示这两条pathways的时间速度不同,促使两个分支分别学习不同的特征。
1.3、横向连接
将快分支的特征融合到慢分支上。两条分支的每个 stage 上都使用一个侧连接,将快分支的特征融合到慢分支上。作者也尝试了双向融合,提升不大。
- 对于 ResNets而言,这些连接就位于之后。
2、前向过程

- 输入:慢分支和快分支输入维度分别是和。假设样本是64帧224×224的视频帧,则慢分支和快分支的输入分别是4帧和32帧;
- 下采样:在时间维度上,两个分支始终没有在时间维度上进行下采样,也就是始终保持32帧和4帧,使网络可以更好地学习时序信息;空间维度和原来一样,每个block都进行2倍的下采样
- 侧连接:文中讨论了三种将快分支特征变换到慢分支同维度特征的方法,最后采用3D Time-strided卷积:
- 两个分支各接一个全局平均池化层,然后进行特征融合(concate)。最后接一个FC层(包含softmax),得到最终结果。
3、实验结果
最优模型在
Kinetics-400
上的精度达到了79.8%
,基本是3D CNN中的最好结果。TimeSformer
本文讨论了如何将
Vision Transformer
从图像领域迁移到视频领域,即如何将自注意力机制从图像的空间维度(2D)扩展到视频的时空维度(3D)。TimeSformer
算是这方面工作最早的一篇。TimeSformer
在多个有挑战的行为识别数据集上达到了 SOTA 的结果,相比于 3D CNN网络,TimeSformer
训练要快3倍,推理时间仅为其十分之一。此外,TimeSformer
的可扩展性,使得它可以在更长的视频片段上训练更大的模型(当前的 3D CNN 最多只能够处理几秒钟的片段,而TimeSformer 甚至可以在数分钟的片段上进行训练。),为将来的 AI 系统理解更复杂的人类行为做下了铺垫。1、网络结构
1.1、网络结构

- Space Attention(S):只在单帧图像上计算空间自注意力(+残差连接),然后接一个MLP(+残差连接)得到最后的结果,就类似
ViT
本身的做法。
- Joint Space-Time Attention(ST):在视频的三个维度上都使用自注意力。
- Divided Space-TIme Attention(T+S):直接计算3D的时空自注意力显存不够,借鉴
R(2+1)D
的方法,将其拆分为Temporal Self Attention+Spatial Self Attention
。先计算不同帧中同一位置图像块的自注意力,再计算同一帧中的所有图像块的自注意力。
- Space Local Global Attention(L+G):直接计算序列太长,所以考虑先计算局部的自注意力,再在全局计算自注意力,类似Swin-Transformer。具体来说,先利用所有帧中,相邻的 H/2 和 W/2 的图像块计算局部的注意力。然后在空间上,使用2个图像块的步长,在整个序列中计算自注意力机制,这个可以看做全局的时空注意力更快的近似。
- Axial Attention(T+W+H):分别沿着时间维度、width维度和height维度计算自注意力。
1.2、注意力机制的可视化

- Space Attention(S):以第
t
帧blue patch
为基准点时,Space Attention
只计算这一帧内其他patches和基准点的self attention,而完全看不到其它帧的信息;
- Joint Space-Time Attention(ST):基准点(第
t
帧blue patch
)和所有帧的所有patches都计算自注意力;
- Divided Space-TIme Attention(T+S):先做时间上的自注意力,也就是计算不同帧中同一位置的self attention,再针对每个帧内的所有空间位置计算注意力。(第
t
帧blue patch
、第t+1
帧green patch
、第t-1
帧green patch
)。然后计算同一帧上所有patches的self attention;
- Space Local Global Attention(L+G):先计算图中蓝色快和黄色块的局部自注意力,再计算全局自注意力(此时是进行稀疏的计算,所以只计算蓝色块和紫色块的自注意力)。
- Axial Attention(T+W+H):先做时间轴(绿色块)的自注意力,再分别作横轴(黄色块)和纵轴(紫色块)上的自注意力。
2、实验部分
2.1、网络结构
最终作者在
Kinetics-400
和Something-Something-V2
数据集上,试验了这几种结构的精度。拆分时空注意力( divided space-time attention)效果最好;
2.2、显存对比
随着输入图像尺度的增长和输入帧数的增长,
Divided Space-Time
的方式计算复杂度基本还是线性增长,而Joint Space-Time
的方式,计算复杂度增长非常快。下图灰色部分表示从448×448 crop
和32
帧起,就爆显存了,无法训练。
2.3、模型效果对比

- 左图对比了
TimeSformer
、I3D
、SlowFast
三种模型在K400数据集上的精度。其实 SlowFast使用Resnet101效果更好(精度78.9)。但是TimeSformer
确实训练(微调)时间和推理速度都更短。
- 右图是作者使用了更大的
TimeSformer-L
模型,并在ImageNet-21K
上进行训练,终于把K400
刷到80.7了。作为第一篇把ViT
用到视频理解上的论文,这效果已经不错了。

上图是在K600数据集上,
TimeSformer
达到了 SOTA。2.4、长视频对比
作者还验证了TimeSformer在长视频处理上相比于 CNN 更有优势,这一步使用了 HowTo100M 数据集。可以看到,当TimeSformer 输入96帧时,能够有效利用视频中长期依赖的信息,达到了最好的效果。
- # Input Frames :代表输入模型的帧数
- Single Clip Coverage :代表输入的一段视频覆盖了多久的视频
- # Test Clips: 代表预测阶段,需要将输入视频裁剪几段才能输入进网络。

2.5、预训练和数据集规模的重要性
- 因为这个模型需要非常大的数据才能够训练,作者有尝试自己从头训练,但是都失败了,因此在论文中报告的所有结果,都使用了 ImageNet 进行预训练。
- 为了研究数据集的规模的影响,使用了两个数据集,实验中,分四组,分别使用25%,50%,75%和100%的数据。结果是 TimeSformer 当数据比较少的时候表现不太好,数据多的时候表现好(这个结论和ViT中是一样的,即训练transformer需要更大的数据量才能达到媲美CNN的效果)。
