论文阅读 - Is Space-Time Attention All You Need for Video Understanding?

文章目录

    • 1 概述
    • 2 模型结构
      • 2.1 模型输入
      • 2.2 attention模块
      • 2.3 分类模块
    • 3 模型分析
      • 3.1 不同attention方式
      • 3.2 不同的输入
      • 3.3 不同的模型
      • 3.4 不同的预训练数据
      • 3.5 不同的数据量
      • 3.6 position embedding的影响
      • 3.7 长输入时长
      • 3.8 不同的transformer
      • 3.9 不同的patch size
      • 3.10 attention的顺序
    • 参考资料

1 概述

这篇论文是在vision transformer的基础上,在时间维度进行了attention,将图像分类拓展到了视频分类。这也是第一个完全抛弃CNN,只用transformer搭建整个网络的视频分类模型。

作者在文中说到,之所以进行这种只用transformer的尝试,是有三点原因:
(1)tranformer在NLP领域取得了巨大的成功,视频和文本一样,某些动作需要有上下文才能进行准确的分类;
(2)CNN有很强的inductive bias,其一,卷积利用卷积核的方式告诉了卷积网络,每个像素点和它周围的像素点有很大的关联;其二,卷积核权重共享的机制告诉了卷积网络,图像当中的物体移动之后,仍旧是相同的物体。transformer其实也有一些inductive biases,比如必须要根据相似度来融合信息,但这种biases比较weak。同时CNN只能处理感受野之内的信息,如果需要看图片的全局信息,就必须要用很深的网络,而很深的网络又需要大量的数据和大量的算力。
(3)transformer需要的算力小,而且可以适用于比较长的视频,比如1分钟以上的,甚至是7分钟左右的。

在将空间维度的transformer和时间维度的transformer进行结合时,作者也尝试了很多方法,最终发现将时间和空间和attention分开计算的"divided space-time attention"是效果最好的。

2 模型结构

2.1 模型输入

模型的输入为从视频片段中等分抽取的FFF帧,表示为XXXXXX的shape为H×W×3×FH \times W \times 3 \times FH×W×3×F。比如一个2s,fps为24的视频片段,当F=8F=8F=8时,就会取[0,6,12,18,24,30,36,42][0, 6, 12, 18, 24, 30, 36, 42][0,6,12,18,24,30,36,42]这几帧作为一个序列来输入。FFF在论文中的取值是[8,32,64,96][8, 32, 64, 96][8,32,64,96]这几种,没有特殊说明的话,就是F=8F=8F=8

输入的每一帧会先经过resize和crop成为一个预先设置好的模型接受的输入尺寸,一般是224×224224\times224224×224,然后每一帧都会被切成多个patches,每个patch的尺寸为P×PP \times PP×PPPP一般取16。切成多个patches之后的图像就如图2-2中的图片示意的那样,一共会被切成NNN个patch,N=HW/P2N=HW/P^2N=HW/P2

切割后的每一个patch可以表示为x(p,t)x_{(p, t)}x(p,t),其中p=1,...,Np=1,...,Np=1,...,N表示属于一帧中的第几个patch,t=1,...,Ft=1,...,Ft=1,...,F表示第几帧。

最后,每个patch会经过一层embedding,得到

z(p,t)(0)=Ex(p,t)+e(p,t)pos(2-1)z_{(p, t)}^{(0)} = Ex_{(p, t)} + e_{(p, t)}^{pos} \tag{2-1} z(p,t)(0)=Ex(p,t)+e(p,t)pos(2-1)

其中,z(p,t)(0)z_{(p, t)}^{(0)}z(p,t)(0)表示第0层,第ttt帧的第ppp个patch的embedding结果,EEE是一个可以学习的大的矩阵,e(p,t)pose_{(p, t)}^{pos}e(p,t)pos是position embedding,也是一个可以学习的参数。

同时,也加入了一个特殊的可学习的向量z(0,0)(0)z_{(0, 0)}^{(0)}z(0,0)(0),这个向量对应的输出会被用作最终分类网络的输入。这部分和vision transformer基本一致,熟悉vision transformer的话,对这里的理解就不会有问题。

2.2 attention模块

首先,要得到每个patch的query,key和value。

{q(p,t)(l,a)=WQ(l,a)LN(z(p,t)(l−1))k(p,t)(l,a)=WK(l,a)LN(z(p,t)(l−1))v(p,t)(l,a)=WV(l,a)LN(z(p,t)(l−1))(2-2)\begin{cases} &q_{(p, t)}^{(l, a)} = W_{Q}^{(l,a)}LN(z_{(p, t)}^{(l-1)}) \\ &k_{(p, t)}^{(l, a)} = W_{K}^{(l,a)}LN(z_{(p, t)}^{(l-1)}) \\ &v_{(p, t)}^{(l, a)} = W_{V}^{(l,a)}LN(z_{(p, t)}^{(l-1)}) \end{cases} \tag{2-2} q(p,t)(l,a)=WQ(l,a)LN(z(p,t)(l1))k(p,t)(l,a)=WK(l,a)LN(z(p,t)(l1))v(p,t)(l,a)=WV(l,a)LN(z(p,t)(l1))(2-2)

其中,LN()LN()LN()表示LayerNorm,a=1,...,Aa=1,...,Aa=1,...,A表示第aaa个head。

然后开始attention,这里相比图片的transformer多了时间的维度,所以如果直接全都做attetion的话,计算量会非常大,每个patch需要计算N×F+1N \times F + 1N×F+1次attention,如下式(2−3)(2-3)(23)所示。

α(p,t)(l,a)=SM((q(p,t)(l,a))TDh⋅[k(0,0)(l,a){k(p′,t′)(l,a)}p′=1,...,N∣t′=1,...,F])(2-3)\alpha_{(p, t)}^{(l, a)} = SM(\frac{(q_{(p, t)}^{(l, a)})^T}{\sqrt{D_h}} \cdot [k_{(0,0)}^{(l, a)}\{ k_{(p', t')}^{(l, a)} \}_{p'=1,...,N | t'=1,...,F}]) \tag{2-3} α(p,t)(l,a)=SM(Dh(q(p,t)(l,a))T[k(0,0)(l,a){k(p,t)(l,a)}p=1,...,Nt=1,...,F])(2-3)

其中SMSMSM表示softmax,Dh=D/AD_h=D/ADh=D/A表示每个head分到的维度,DDD是embedding的维度。中括号里的kkk表示kkk的可选集合。

为了减小attention的计算量,作者想出了如下图2-1所示的多种attention的方式。
多种attention的方式示意图

图2-1 多种attention的方式网络结构示意图

图2-1中,中间这种将时间的attention和空间的attention分开计算的方式,效果最好,也是作者最后使用的,称为"divided space-time attention"。这种方法只需要计算N+F+2N+F+2N+F+2次attention即可,如下式(2−4)(2-4)(24)所示。

{α(p,t)(l,a)time=SM((q(p,t)(l,a))TDh⋅[k(0,0)(l,a){k(p′,t′)(l,a)}t′=1,...,F])α(p,t)(l,a)space=SM((q(p,t)(l,a))TDh⋅[k(0,0)(l,a){k(p′,t′)(l,a)}p′=1,...,N])(2-4)\begin{cases} \alpha_{(p, t)}^{(l, a)time} &= SM(\frac{(q_{(p, t)}^{(l, a)})^T}{\sqrt{D_h}} \cdot [k_{(0,0)}^{(l, a)}\{ k_{(p', t')}^{(l, a)} \}_{t'=1,...,F}]) \\ \alpha_{(p, t)}^{(l, a)space} &= SM(\frac{(q_{(p, t)}^{(l, a)})^T}{\sqrt{D_h}} \cdot [k_{(0,0)}^{(l, a)}\{ k_{(p', t')}^{(l, a)} \}_{p'=1,...,N}]) \end{cases} \tag{2-4} α(p,t)(l,a)timeα(p,t)(l,a)space=SM(Dh(q(p,t)(l,a))T[k(0,0)(l,a){k(p,t)(l,a)}t=1,...,F])=SM(Dh(q(p,t)(l,a))T[k(0,0)(l,a){k(p,t)(l,a)}p=1,...,N])(2-4)

注意,这里为了书写方便才这么写的,但是我们要心里清楚,time和space所用到的qqqkkkvvv是不同层的,是不同的。

其他几种方式的attention也是大同小异,不了解也没关系,下图2-2是将在不同方式下第t帧的左上角的patch做attention时,用到的前后帧及自身的patch的示意图。
多种attention的方式图片示意图

图2-2 多种attention的方式图片示意图

从图2-2中可以看出,"divided space-time attention"在时间的维度上,只考虑了对应位置的patch,因此,不难想象,它对于更依赖于时间去辨别的类别,效果要差一些。

有了attention之后,结合value可以得到一个attention的最终输出

s(p,t)(l,a)=α(p,t),(0,0)(l,a)v(0,0)(l,a)+∑p′=1N∑t′=1Fα(p,t),(p′,t′)(l,a)v(p′,t′)(l,a)(2-5)s_{(p, t)}^{(l, a)} = \alpha_{(p, t), (0, 0)}^{(l, a)}v_{(0, 0)}^{(l, a)} + \sum_{p'=1}^{N} \sum_{t'=1}^{F} \alpha_{(p, t), (p', t')}^{(l, a)}v_{(p', t')}^{(l, a)} \tag{2-5} s(p,t)(l,a)=α(p,t),(0,0)(l,a)v(0,0)(l,a)+p=1Nt=1Fα(p,t),(p,t)(l,a)v(p,t)(l,a)(2-5)

这个输出再经过一个MLP,搞个残差,就得到了一层的输出,如下式(2-6)所示。之前说的time和space用的是不同层的,就是这里的不同。

{z(p,t)′(l)=WO[s(p,t)(l,1),..,s(p,t)(l,A)]T+z(p,t)(l−1)z(p,t)(l)=MLP(LN(z′(p,t)l))+z′(p,t)(l)(2-6)\begin{cases} z'^{(l)}_{(p, t)} &= W_O [s_{(p, t)}^{(l, 1)}, ..,s_{(p, t)}^{(l, A)}]^T + z_{(p, t)}^{(l-1)} \\ z^{(l)}_{(p, t)} &= MLP(LN({z'}_{(p, t)}^{l})) + {z'}_{(p, t)}^{(l)} \end{cases}\tag{2-6} {z(p,t)(l)z(p,t)(l)=WO[s(p,t)(l,1),..,s(p,t)(l,A)]T+z(p,t)(l1)=MLP(LN(z(p,t)l))+z(p,t)(l)(2-6)

2.3 分类模块

当得到所有层的输出之后,分类用的就是用的之前在输入中加的特殊的向量对应的输出。

y=LN(z(0,0)(L))(2-7)y = LN(z_{(0, 0)}^{(L)}) \tag{2-7} y=LN(z(0,0)(L))(2-7)

yyy去过分类器就行了,分类器可以是一个全连接。

这里有一个细节值得一提,在预测的时候,作者用了三种不同crop的方式,过模型之后取平均。crop的方式是top-left, center和bottom-right,这一步是在模型输入的时候做的。比如把图片resize到256×256256 \times 256256×256之后,再用这种方式crop到224×224224 \times 224224×224

3 模型分析

3.1 不同attention方式

如下表3-1所示,不同的attention的方式,所需要的参数量不同,在数据集K400和SSv2上的表现也不同。总体来说"divided space-time"的效果最好。

表3-1 不同attention方式效果对比表

不同attention方式的效果
这里值得一提的是,只有space attention的模型在K400上也有比较好的表现,但是在SSv2上效果显著下降,这一方面说明SSv2数据集的类别更需要时间维度的信息,另一方面也说明了time attention的确对时间维度的信息有较大贡献。

3.2 不同的输入

作者对比了不同的输入尺寸和不同的输入帧数下,"joint space-time"和"divided space-time"所需要的算力的对比。"divided space-time"显然需要的算力更小,这也与理论一致。
不同的输入

图3-1 不同的输入算力对比

不同的输入,对TimeSformer的最终效果也有一定的影响,更大的输入尺寸,更多的输入帧数,代表着更高的准确率。不过尺寸,会带来负收益。
不同的输入2

图3-2 不同的输入准确率对比

3.3 不同的模型

作者对比了不同模型在相同数据集上的表现,如下表3-2所示。可见TimeSformer需要的训练时间更少,准确率也更高。虽然TimeSformer的参数量远大于其他模型,但是其需要的算力更小,这就是纯transformer相较于CNN的优势。

表3-2 不同的模型效果对比表

不同的模型
同时也不难看出,在更大的数据集上进行pretrain之后,模型的效果也会变得更好。

除此之外,作者也对比了一些现在state of art的模型在不同数据集上的表现,其结果如下表3-3,表3-4和表3-5所示。总的来说就是准确率更高,算力更小,不多说了。不过在依赖于时间特征的数据集上,并不是最好的模型。

表3-3 不同的模型在K400效果对比表

在这里插入图片描述

表3-4 不同的模型在K600效果对比表

在这里插入图片描述

表3-5 不同的模型在SSv2和Diving-48**效果对比表

在这里插入图片描述

3.4 不同的预训练数据

在不同的图片预训练数据下,更大的数据集,会让模型在K400上有更好的表现,但在SSv2上却见效甚微,这主要是因为SSv2更需要时间维度的特征来区别。

表3-6 不同的预训练数据效果对比表

不同的预训练数据

3.5 不同的数据量

不同模型在更大的数据量上,都有更好的表现,但是SSv2上,TimeSformer需要更多的数据才能学习到时间维度的重要特征。
不同的数据量

图3-3 不同的数据量对比

3.6 position embedding的影响

position embedding对模型也有着很大的影响,在不太关注时间维度的K400上,没有time维度的position embedding也有不错的表现,但是类别识别依赖于时间维度特征的SSv2就既要space的embedding,又要time的embedding了。

position embedding在时间和空间维度都很重要。

表3-7 不同的position embedding效果对比表

position embedding的影响

3.7 长输入时长

作者对比了不同输入时长下,SlowFast和TimeSformer的效果,TimeSformer明显更适用于处理较长的视频。

表3-8 长输入时长效果对比表

在这里插入图片描述
对于表中的Single Clip Coverage和Test Clips,我的理解是一段视频很长,当输入为8帧时,这8帧大概涵盖了视频8.5s的内容,于是要切不相互覆盖的48个8.5s,分别过模型,并取平均。其他的也是同样的道理。

3.8 不同的transformer

作者也使用了更大和更小的vision transformer,发现更小的tranformer准确率会掉5%,更大的transfomer准确率会掉1%。作者推测更大的效果变差是因为数据集不够大。

3.9 不同的patch size

作者对比了16和32的patch size,发现16的patch size比32的patch size要好3%。但这其实和输入的尺寸也有关,这里还可以再坐下不同分辨率下不同patch size的表现。

3.10 attention的顺序

因为使用的是divided attention,所有就有time先,还是space先,还是并行的顺序问题。作者发现,time先的方式,效果要略好一点。

这的确会有些影响,举个不恰当的例子,比如往可乐瓶子里倒水,先倒热水,再倒冷水,瓶子就会经历高温,会在高温时萎缩,但是先倒冷水,再倒热水就不会经历高温了。

参考资料

[1] Is Space-Time Attention All You Need for Video Understanding?
[2] https://github.com/facebookresearch/TimeSformer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS中常见的6种传值方式,UIPageViewController

通过属性传值、方法传值、代理传值、Block传值、单例传值、通知传值6种方式进行不同视图之间的传值。不同方式只需要在AppDelegate中更改下UINavigationController的根控制器即可。使用很简单的实例让你很快理解不同的传值方式。 UIPageViewController(上传者:JoneJ…

websocket 获取ip_Spark+Kafka+WebSocket+eCharts实时分析-完全记录(1)

本系列内容:Kafka环境搭建与测试Python生产者/消费者测试Spark接收Kafka消息处理,然后回传到KafkaFlask引入消费者WebSocket实时显示版本:spark-2.4.3-bin-hadoop2.7.tgzkafka_2.11-2.1.0.tgz------------------------第1小节:Kaf…

二十八、PHP框架Laravel学习笔记——模型的关联查询

二.关联查询 前几篇博文,了解了三种基础的关联模型,并简单的进行查询;本节课,我们详细的了解更多的查询方案; //下面两种查询是一样的; $books User::find(19)->book; $books User::fin…

搞懂CRF

文章目录1 前言2 Log-linear model3 MEMM3.1 模型概述3.2 label bias问题4 CRF4.1 模型概述4.2 模型训练4.3 模型解码4.4 小结参考资料1 前言 条件随机场(conditional random field, CRF)是在建立序列模型时的常用模块,它的本质就是描述观测到的序列xˉ\bar{x}xˉ对…

skywalking 安装_SkyWalking全链路追踪利器

随着目前系统架构的复杂度越来越高(中台、微服务),并且线上应用的多级监控覆盖到了通讯、应用处理过程监控并且实现端到端的应用监测,线上性能故障的快速定位修复;而传统的监控分析方式已经无法满足我们的需求,因此许多强大的APM工…

二十九、PHP框架Laravel学习笔记——Debugbar 调试器

二.安装使用 通过 composer 在项目中安装 Debugbar,命令如下: composer require barryvdh/laravel-debugbar 生成一个配置文件,给用户配置,可以根据需求进行配置; php artisan vendor:publish --provider…

论文阅读 - Video Swin Transformer

文章目录1 概述2 模型介绍2.1 整体架构2.1.1 backbone2.1.2 head2.2 模块详述2.2.1 Patch Partition2.2.2 3D Patch Merging2.2.3 W-MSA2.2.4 SW-MSA2.2.5 Relative Position Bias3 模型效果参考资料1 概述 Vision Transformer是transformer应用到图像领域的一个里程碑&#x…

rocketmq queue_RocketMQ 实战(三) - 消息的有序性

■ RocketMQ有序消息的使用1 为什么需要消息的有序性比如用户张三终于挣了一百存在在银行卡里存取款,对应两个异步的短信消息,肯定要保证先存后取吧,不然都没钱怎么发了取钱的消息呢! M1 - 存钱 M2 - 取钱而mq默认发消息到不同q显然是行不通的,会乱序 需要发往同一个q,先进先出…

三十、PHP框架Laravel学习笔记——模型的预加载

一.预加载 预加载,就是解决关联查询中产生的 N1 次查询带来的资源消耗我们要获取所有书籍的作者(或拥有者),普通查询方案如下: //获取所有书籍列表 $books Book::all(); //遍历每一本书 foreach ($books as $book) { //每一本…

论文阅读:Spatial Transformer Networks

文章目录1 概述2 模型说明2.1 Localisation Network2.2 Parameterised Sampling Grid3 模型效果参考资料1 概述 CNN的机理使得CNN在处理图像时可以做到transition invariant,却没法做到scaling invariant和rotation invariant。即使是现在火热的transformer搭建的图…

dataframe 排序_疯狂Spark之DataFrame创建方式详解一(九)

创建DataFrame的几种方式1、读取json格式的文件创建DataFrame注意:1. json文件中的json数据不能嵌套json格式数据。2. DataFrame是一个一个Row类型的RDD,df.rdd()/df.javaRdd()。3. 可以两种方式读取json格式的文件。4. df.show()默认显示前20行数据。5.…

【原】npm 常用命令详解

今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块的朋友不可…

论文阅读 - CRNN

文章目录1 概述2 模型介绍2.1 输入2.2 Feature extraction2.3 Sequence modeling2.4 Transcription2.4.1 训练部分2.4.2 预测部分3 模型效果参考资料1 概述 CRNN(Convolutional Recurrent Neural Network)是2015年华科的白翔老师团队提出的,直至今日,仍…

python easygui_Python里的easygui库

想要用python开发一些简单的图形界面,于是接触了easygui库,由于这是新手教程,我会把它写的尽量简单,希望大家都能看懂。1.msgboxmsgbox( )有一个标题,内容和一个ok键(是可以更改的)。举个例子:import easyg…

recv发送失败 缓冲区太小_从 GFS 失败的架构设计来看一致性的重要性

作者简介 陈东明,饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计以及饿了么基础架 构研发工作。曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统构 建和基础架构的研发经验,善于复杂业务需求下…

好用的记事本_分类记事本软件哪个好用?大家推荐一个苹果手机用的分类记事本便签呗...

随着“互联网”的发展,现在都开始在软件上记事备忘了。那么,都有哪些好用的记事本软件可以选择使用呢?大家在选择记事本软件的时候,都有哪些标准呢?不知道大家的标准是什么,小编有一个不能妥协的标准&#…