CVPR2021
论文:
https://arxiv.org/abs/2103.15691
代码:
scenic/scenic/projects/vivit at main · google-research/scenic · GitHub
参考博客:
初探Video Transformer(二):谷歌开源更全面、高效的无卷积视频分类模型ViViT (qq.com)
1 Introduction
ViViT利用纯Transformer结构进行视频分类,是ViT在视频输入上的应用。
视频的输入是图像输入的数多倍,Transformer的性能和输入token之间是平方关系,处理性能是一个很大的问题。
通过挖掘spatio-temporal tokens,进而encode一系列的transformer层。针对视频长距离依赖的问题,提出一系列变体模型。并且介绍如何有效训练以及利用图片的预训练模型让训练在小数据集上成为可能。
本文探究了视频数据在ViT上的优化,再进一步探究了四种不提供的特征融合提取方式的性能和效果。
2 Method
2.1 Embedding video clips
- Uniform frame sampling:
将视频取N帧,然后按照vit的方式得到所有的图片的token,再将所有的token合并起来。也就是说如果每张图取KxK的patch,则最后所有的tokens数量为KxKxN。
- Tubelet embedding:
从输入整体中以spatio-temporal方式取得不重叠的tubes,这种方式是将ViT中的embedding扩展到3D形式。
一个tubelet维度为t*h*w。
tokens分别来自temporal、height和width维度。更小的tubelet维度会导致更多的tokens,增加计算量。
2.2 Transformer models for video
提出多个基于transformer的体系结构。本论文从ViT的一个简单的扩展开始,它对所有时空token之间的成对交互进行建模,然后开发更有效的变体,将输入视频的空间和时间维度在transformer架构体系中的各个层次上进行分解。
2.2.1 Model1:spatial-temporal attention
第一个模型直接将从视频中得到的tokens传递到transformer编码器,每层都让所有的spatio-temporal tokens成对交互。对比于CNN模型,这种模型第一层开始就可以让模型长依赖交互。但是同时由于Mult-Headed Self Attention(MSA)的存在,计算量也显著增加,并且随着帧数的增加复杂度线性增加。
2.2.2 Model2:Factorised encoder
由两个transformer编码器组成。
第一部分的空间编码器只交互同一帧抽出来的tokens,输入多个tokens,输出一个token。
然后交由时间编码器将不同帧的同一位置的tokens交互,最后接一个MLP进行分类。
空间编码器与用于图像分类的编码器相同。
这种模型有更多的transformer层,所以参数量更大,但是比model1 需要更小的FLOPS(因为两个独立的transformer块具有更少的复杂度。)
2.2.3 Model3:Factorised self-attention
一般情况下transformer层数量与model1相同。
在每个transformer块内,多头自注意力操作分为两个步骤。首先进行空间上的自注意力(同一帧tokens),然后计算时间上的自注意力(来自同一空间index的tokens)。
因此,transformer中的每个自注意力块对时空交互作用进行建模,但通过在两个较小的元素集上对操作进行因式分解,从而实现与模型2相同的计算复杂度。通过将token reshape来计算空间自注意力。
2.2.4 Model4:Factorised dot-product attention
具有与模型2和3相同的计算复杂性,同时保留了与模型1相同的参数数目。
与models3类似,区别在于model4的spatial和temporal heads是并行的而非串行。
空间维度和时间维度上使用不同的头部分别计算每个token的注意力权重。
对于一半的头部,只计算空间维度上的点积注意力,而对于另一半,只计算时间维度上的点积注意力。
通过构造对应于这些维度的键和值来修改每个查询的键和值,使其只关注来自同一时空索引的token。
假设只改变每个查询的注意邻域,那么注意操作的维度与无因式分解的情况相同。
将多个头的输出做concatenation并使用线性投影来组合多个头的输出。
2.3 Initialization by leveraging pretrained models
能够在较小的数据集上有效训练有一部分原因是使用了图片VIT模型的预训练,针对几个特殊模块的预训练权重的利用方式如下:
2.3.1 Positional embedding
将位置嵌入添加到每个输入token。但是,视频模型拥有比预训练图像多很多倍的token。
因此,本论文通过“repeating”来初始化位置嵌入(从H*W扩展到T*H*W),具有相同空间index的所有token具有相同的嵌入,然后对其进行微调。
2.3.2 Embedding weights
当使用“tubelet embedding”token方法时,与预先训练的模型中的2D张量相比较,嵌入滤波器是3D张量。使用2D滤波器来初始化3D卷积滤波器的常用方法是“inflate”:沿时间维复制滤波器并将其平均。
另外,考虑一个额外的策略“中心帧初始化”,只初始化中间时间位置的权重,其它帧都置为0。
因此,3D卷积滤波器在初始化时类似于“均匀帧采样”,同时也使得模型能够在训练中从多个帧融合时间信息。
2.3.3 Transformer weights for model 3
模型3中的transformer块与预训练的ViT模型的不同之处在于它包含两个多头自注意力(MSA)模块。
从预训练的模块中初始化空间MSA模块,并用零初始化时间MSA的所有权重。
3 Experiments
Datasets:Kinetics / Epic Kitchens-100 / Moments in Time / Something-Something v2
Backbone: ViT / BERT
ViT-Base(L=12, NH=12, d=768)
ViT-Large(L=24, NH=16, d=1024)
ViT-Huge(L=32, NH=16, d=1280)
L指的是transformer层的数量,每个transformer层包括一个自注意力模块(NH个头,隐藏维度d)
Model1 在K400上效果最好,但是在小数据集EK上过拟合了。
Model2 在小数据集EK上效果最好。
Model2(AVE POOL BASELINE)是指不使用时间transformer,将spatial encoder得到的frame-level的结果进行平均池化来分类。
使用较小尺寸的input tubelet size可以获得更好的效果,与之相应的是计算量的提高。
增加输入到网络的视频帧数,accuracy增加,因为网络能够结合更长时间的信息。
但是,常见做法是对同一视频剪辑出的多个较短“view”的结果进行平均。
一旦view的数量足以覆盖整个视频,精确度就会饱和。
由于Kinetics视频由250帧组成,我们以2的步幅采样帧,因此模型处理128帧的视频只需一个view即可“查看”整个视频并达到其最大精确度。