ICCV2021-《ViViT》-视频领域的纯Transformer方案!谷歌提出ViViT,在多个视频分类基准上SOTA!代码已开源!

作者 | 小马

编辑 | CV君

报道 | 我爱计算机视觉(微信id:aicvml)

【写在前面】

在本文中,作者提出了纯基于Transformer的视频分类模型。本文的模型从输入视频中提取时空token,然后由一系列Transformer层进行编码。为了处理视频中遇到的长token序列,作者提出了模型的几个有效的变体,可以分解输入的空间和时间维度。

虽然已知基于Transformer的模型只有在大型训练数据集可用时才有效,但作者展示了如何在训练期间有效地regularise模型,并利用预先训练过的图像模型能够在相对较小的数据集上进行训练。作者进行了详细的消融研究,并在多个视频分类基准上取得了SOTA的结果,包括Kinetics 400和600, Epic Kitchens,Something-Something v2和Moments in Time。

1. 论文和代码地址

ViViT: A Video Vision Transformer

论文地址:arxiv.org/abs/2103.1569

代码地址:github.com/google-resea

2. Motivation

自AlexNet以来,基于深度卷积神经网络的方法已经提高了许多视觉问题的SOTA性能。同时,在序列到序列建模(如自然语言处理)中,最突出的结构选择是Transformer,它不使用卷积,而是基于多头自注意。该操作在建模远程依赖关系方面特别有效,并允许模型关注输入序列中的所有元素。这与卷积形成了鲜明的对比,在卷积中,对应的“感受野”是有限的,并且随着网络的深度呈线性增长。

NLP中基于注意力模型的成功,启发了计算机视觉中将Transformer集成到CNN中,甚至完全取代卷积结构的方法。然而,最近提出的视觉Transformer(ViT),基于纯Transformer的架构在图像分类方面优于卷积架构。

受ViT的启发,以及基于注意力的结构是在视频中建模独立上下文关系的直观选择,作者开发了几个基于Transformer的模型作为视频分类模型。目前,性能最强的模型是基于三维卷积架构,这是图像分类CNN的自然扩展。最近,这些模型通过将自注意合并到后面的层中而得到了显著增强,并更好地捕获长期依赖关系。

在本文中,作者提出了用于视频分类的纯Transformer模型。在该结构中执行的主要操作是自注意力,它是基于从输入视频中提取的一系列时空token序列上计算的。为了有效地处理视频中可能遇到的大量时空token,作者提出了几种沿时空维度对模型进行分解的方法,以提高效率和可拓展性。此外,为了在更小的数据集上有效地训练本文的模型,作者展示了如何在训练过程中利用预先训练过的图像模型,reguliarise本文的模型。

3. 方法

3.1. Overview of Vision Transformers (ViT)

视觉Transformer(ViT)采用了Transformer架构,以最小的变化处理二维图像。ViT提取N个不重叠的图像patch[公式],然后将其线性投影成1D token[公式]。Transformer编码器的token输入序列为:

[公式]

其中[公式]的投影等价于一个二维卷积。

如上图所示,该序列中有一个学习分类token[公式](也可能没有) ,其在编码器最后一层的表示作为分类层使用的最终表示。此外,在token中添加一个学习到的位置嵌入[公式],以保留位置信息。然后,这些token通过一个由L层Transformer层序列组成的编码器。每一层包括多头自注意、层归一化(LN)和MLP块,如下所示:

[公式]

MLP由两个由GELU非线性分隔的线性投影组成,token维数d在所有层中保持不变。最后,基于[公式]或者对所有token进行平均池化,并采用线性层对编码输入进行分类。

3.2. Embedding video clips

作者考虑了两种简单的方法来将视频[公式]映射到token序列[公式]。然后,作者添加了位置嵌入并reshape为[公式]中得到[公式],即Transformer的输入。

Uniform frame sampling

如上图所示,tokenise输入视频的一种简单方法是从输入视频片段中均匀采样[公式]帧,使用与ViT相同的方法独立嵌入每个2D帧,并将所有这些token concat到一起。具体地说,如果从每一帧提取[公式]个不重叠的图像patch,那么Transformer编码器需要处理[公式]个token。直观地说,这个过程可以被看作是简单地构建了一个大的二维图像,并在ViT之后进行tokenise。

Tubelet embedding

如上图所示,另一种方是从输入视频中提取不重叠的时空“tubes”,并线性投影到[公式]。该方法是ViT嵌入到三维扩展,对应于三维卷积。对于维度为[公式]的tubelet([公式]),分别从时间、高度和宽度维度中提取token。较小的tubelet维度因此会产生更多的token,从而增加了计算量。直观地说,该方法在tokenise过程中融合了时空信息,而“统一帧采样(Uniform frame sampling)”则由Transformer融合了来自不同帧的时间信息。

3.3. Transformer Models for Video

如上图所示,作者提出了多个基于Transformer的架构。作者从ViT的直接扩展开始,模拟所有时空token之间的成对交互,然后开发更有效的变体,在Transformer架构的不同层次上分解输入视频的空间和时间维度。

Model 1: Spatio-temporal attention

该模型简单地通过Transformer编码器处理从视频中提取的所有时空token。与感受野随层数呈线性增长的CNN架构相比,每个Transformer层能够建模所有输入时空token之间的交互。然而,由于它建模了所有的成对交互,多头自注意(MSA)对于token的数量具有二次复杂度。

Model 2: Factorised encoder

如上图所示,该模型由两个独立的Transformer编码器组成。第一个为空间编码器,只建模从同一时间索引中提取的token之间的交互作用。经过[公式]层时间Transformer之后,就可以获得每一帧的表示[公式]。所有的帧级表示[公式]都concat到一起得到[公式],然后由[公式]个Transformer层组成的时间编码器处理,以建模来自不同时间下标的token之间的交互。最后对该编码器的输出token进行分类。

该结构对应于时间信息的“late fusion”,初始空间编码器与用于图像分类的编码器相同。因此,它类似于CNN架构,它首先提取每帧特征,然后在对它们进行分类之前将它们聚合为最终的表示。尽管该模型比模型1具有更多Transformer层(因此具有更多的参数),但它需要更少的浮点运算(FLOPs),因为它有两个独立的Transformer块,复杂度为[公式],比模型1的[公式]要少。

Model 3: Factorised self-attention

相比之下,该模型包含了与模型1相同数量的Transformer层。在该模型中,作者将操作分解,首先只计算空间自注意,然后计算时间自注意力,如上图所示。因此,Transformer中的每个自注意块模拟时空交互,但通过在两组更小的元素集上进行操作分解,比模型1更有效,从而实现与模型2相同的计算复杂度。

首先,通过将token [公式][公式]reshape为[公式](用[公式]表示)来计算空间自注意。同样,对时间自注意的输入,[公式]被reshape为[公式]。Factorised self-attention可以表示为:

Model 4: Factorised dot-product attention

最后,作者还开发了一个与模型2和模型3具有相同的计算复杂度的模型,同时保留了与未分解模型1相同数量的参数。具体地说,作者使用不同的head分别在空间和时间维度上计算每个token的注意权重。首先,每个head的注意力操作被定义为:

[公式]

其中[公式][公式][公式]。非分解情况下(模型1)中,空间和时间维度合并为[公式]。这里的主要思想是通过构建[公式][公式],修改每个query的key和value,以便只attend来自同一时空索引的token。然后,对于一半的注意力头,作者通过计算[公式]来关注空间维度的token,其余的作者通过计算[公式]来关注时间维度。然后,作者通过concat多个头的输出,并使用线性投影[公式]来获得最终输出。

3.4. Initialisation by leveraging pretrained models

ViT已被证明只有在大规模数据集上训练时才有效,因为Transformer缺乏卷积网络的一些归纳偏差。然而,即使是最大的视频数据集,如Kinetics,标注的样本也要少了几个数量级。因此,从头开始到高精度训练大型模型是极具挑战性的。为了避免这个问题,并实现更有效的训练,作者从预先训练过的图像模型中初始化视频模型。然而,这就出现了几个实际的问题,特别是关于如何初始化不存在或与图像模型不兼容的参数。

Positional embeddings

在每个输入token中添加一个位置嵌入[公式]。然而,本文的视频模型的位置比预训练的图像模型多[公式]倍。因此,作者通过从[公式]在时间维度上“重复”位置嵌入得到[公式],来初始化位置嵌入。因此,在初始化时,所有具有相同空间索引的token都有相同的嵌入方式,然后进行微调。

Embedding weights, E

当使用“tubelet embedding”方法时,嵌入滤波器[公式]是一个三维tensor,与预训练模型[公式]中的二维tensor相比。从二维滤波器中初始化三维卷积滤波器的一种常见方法是通过沿着时间维度复制滤波器并将其平均:

[公式]

作者考虑了一个额外的策略,称为“central frame initialisation”,其中[公式]在所有时间位置上初始化为零,除了在中心[公式]

[公式]

Transformer weights for Model 3

模型3中的Transformer块与预训练的ViT模型的区别在于,它包含两个多头自注意(MSA)模块。在这种情况下,作者从预训练的模块中初始化空间MSA模块,并用零初始化时间MSA的所有权值。

4.实验

4.1. Ablation study

Input encoding

上表展示了不同输入embedding方式的实验结果,可以看出Central frame的实验结果最好。

Model variants

上表展示了不同模型变体在 Kinetics 400和Epic Kitchens数据集上的实验结果。

Model regularisation

上表展示了添加不同正则化技术的实验结果。

Varying the backbone

上图展示了在Kinetics 400数据集上,模型1的主干结构对精度和计算量的影响。

Varying the number of tokens

上图展示了在Kinetics 400数据集上,不同数量的时间token对精度和计算量的影响。

Varying the number of input frames

上图显示,随着向网络输入的帧数增加,处理单个视图的精度就会增加,因为网络包含了更长的时间上下文。

4.2. Comparison to state-of-the-art

Kinetics

上表展示了本文方法在Kinetics数据集上和其他SOTA方法的对比。

Moments in Time

上表展示了本文方法在Moments in Time数据集上和其他SOTA方法的对比。

Epic Kitchens 100

上表展示了本文方法在Epic Kitchens 100数据集上和其他SOTA方法的对比。

Something-Something v2 (SSv2)

上表展示了本文方法在Something-Something v2数据集上和其他SOTA方法的对比。

5. 总结

在本文中,作者提出了四种用于视频分类的纯Transformer模型,具有不同的精度和效率,在五个流行的数据集上实现了SOTA的结果。此外,作者还展示了如何有效地regularise这种高容量模型,以便在更小的数据集上进行训练。作者将在未来的工作是消除对图像预训练模型的依赖,并超越视频分类转向更复杂的任务。

转载请注明:《ICCV2021-《ViViT》-视频领域的纯Transformer方案!谷歌提出ViViT,在多个视频分类基准上SOTA!代码已开源!