目录
参考资料
论文:
Is Space-Time Attention All You Need for Video Understanding?
博客:
Facebook AI 提出 TimeSformer:完全基于 Transformer 的视频理解框架
第1章 引言
首先介绍CNN与Transformer的区别:
- 表达能力的区别:Transformer本身含有较少的限制性归纳性偏差,从而扩宽函数可表示的范围,不需要太多的归纳性先验信息,增强了模型的泛化能力;
- CNN局部依赖的局限性:CNN的特点是局部建模,无法对感受野以外的依赖关系进行建模,从而也限制对长期依赖关系捕捉;
- 资源的消耗瓶颈:训练CNN模型需要消耗资源数目较多,最近的研究表明使用Transformer在相同的资源预算下,相比CNN会有更大的学习能力;
在视频理解相关任务中,一般的操作就是使用3D卷积,对输入增加一维(时间维),然后将2D卷积直接拓展为3D卷积(相当卷积核也增加一维),这样的代价是计算量太大。当Transformer应用到图像领域(VIT论文)时,可以代替卷积操作对图像进行特征提取,主要操作就是把图像分成一个一个的小patch,每一个patch当作一个token作为输入,直接送到transformer做分类,效果也是不错。
如果直接将VIT用于视频理解,那要怎么做呢,就是取多帧,把每一帧的图像都分成一个一个的小patch,之后也可以直接送入transformer,只不过是输入的patch多了几倍而已。从原理上来说这样是可行的,但是就如同3D卷积一样,这样的计算量也是难以接受的,特别是对于视频时间相对长一些的数据来说,需要提取的帧数也要随之增加。
TimeSformer
基于 Transformer 中的自注意力机制,使得它能够捕捉到整段视频中的时空依赖性。这个模型将输入的视频看做是从各个帧中提取的图像块(patch)的时空序列,以将 Transformer 应用于视频。这个使用的方式与 NLP 中的用法非常相似。NLP Transformer 是通过将每个词与句子中的所有词进行比较,来推断每个词的含义,这种方法叫做自注意力机制。
TimeSformer
模型通过将每个图像块的语义与视频中的其它图像块进行比较,来获取每个图像块的语义,从而可以同时捕获到邻近的图像块之间的局部依赖关系,以及远距离图像块的全局依赖性。
第2章 主要方法
这项工作基于图像模型 Vision Transformer(ViT)
,将自注意力机制从图像空间扩展到时空的 3D 空间,下图展示了不同的 attention
机制,其中 divided space-time attention(分开的时空注意力机制)
的效果最好:
- 在
time attention
中,每个图像块仅和其余帧在对应位置提取出的图像块进行 attention; - 在
space attention
中,这个图像块仅和同一帧的提取出的图像块进行 attention;
作者发现,分开的时空注意力机制,效果要好于共同使用的时空注意力机制。
这里假设我们对视频提取 3 3 3 帧,即 t − δ 、 t 、 t + δ t−δ、t、t+δ t−δ、t、t+δ ,每一帧分成 16 16 16 小块。第 t t t 帧中蓝颜色的块为 q u e r y query query 块,其余颜色块为与其进行attention的patch块,没有颜色的图像块没有被使用到。
这里图中只展示了三帧,但是作用时是作用在整个序列上的。
通过对输入图像进行分块,论文中一共研究了五种不同的注意力机制:
- 空间注意力机制(
S
):只取同一帧内的图像块进行自注意力机制,即:第 t t t 时刻其余图像块参与 q u e r y query query 块的计算,即只考虑每一帧自身,不考虑时序性,即第 t t t 帧与 t + δ t+δ t+δ 和 t − δ t−δ t−δ 没有联系; - 时空共同注意力机制(
ST
):取所有帧中的所有图像块进行注意力机制,即:三帧中所有图像块(除去 q u e r y query query 块)均参与 q u e r y query query 块进行计算,这样明显计算量大了很多。 - 分开的时空注意力机制(
T+S
):先对同一帧中的所有图像块进行自注意力机制,然后对不同帧中对应位置的图像块进行注意力机制,即:其一为Space Attention
,第 t t t 时刻其余图像块参与 q u e r y query query 块的计算;其二为Time attention
,第 t t t 时刻的 q u e r y query query 和 其余时刻对应位置的图像块计算。 - 稀疏局部全局注意力机制(
L+G
):先利用所有帧中,相邻的 H 2 \frac{H}{2} 2H 和 W 2 \frac{W}{2} 2W 的图像块计算局部的注意力,然后在空间上,使用 2 2 2 个图像块的步长,在整个序列中计算自注意力机制,这个可以看做全局的时空注意力更快的近似。 - 轴向的注意力机制(
T+W+H
):先在时间维度上进行自注意力机制,然后在纵坐标相同的图像块上进行自注意力机制,最后在横坐标相同的图像块上进行自注意力机制;
作者给出了几种不同方式的效果。作者发现 divided space-time attention(分开的时空注意力机制)
效果最好,既考虑了时空性,计算开销也能接受。
第3章 实验
3.1 图像大小和视频长度的影响
当每一个图像块的大小不变时,图像越大,图像块的个数越多。同时,帧数越多,输入注意力机制的数据也越多。作者也研究了这些对于最终性能的影响,结果是随着输入信息更加丰富,带来的效果提升是非常明显的。
这里由于显存的限制,没有办法测试 96 帧以上的视频片段。作者说,这已经是一个很大的提升了, 因为目前的卷积模型,输入一般都被限制在 8-32 帧。
3.2 预训练和数据集规模的重要性
因为这个模型需要非常大的数据才能够训练,作者有尝试自己从头训练,但是都失败了,因此在论文中报告的所有结果,都使用了 ImageNet 进行预训练。
为了研究数据集的规模的影响,使用了两个数据集,实验中,分四组,分别使用25%,50%,75%和100%的数据。结果是 TimeSformer 当数据比较少的时候表现不太好,数据多的时候表现好。
3.3 与 SOTA 比较
在本节中使用了三个模型的变种:
- TimeSformer :输入
8*224*224
,8为帧数 - TimeSformer-HR:空间清晰度比较高,输入为
16*448*448
- TimeSformer-L:时间范围比较广,输入为
96*224*224
在 K400 数据集上视频分类的结果,达到了SOTA。
K600数据集上的结果,达到了 SOTA。
3.4 视频中的长期建模
作者还验证了所提模型相比于 CNN 来说,对于长期视频建模的优势。这一步使用了 HowTo100M 数据集。
其中,Input Frames
代表输入模型的帧数,Single Clip Coverage
代表输入的一段视频覆盖了多久的视频,Test Clips
代表预测阶段,需要将输入视频裁剪几段才能输入进网络。可以看到,当TimeSformer 输入96帧时,能够有效利用视频中长期依赖的信息,达到了最好的效果。
第4章 Pytorch实现TimeSformer
参考代码:
lucidrains/TimeSformer-pytorch