告别CNN?一张图等于16x16个字,计算机视觉也用上Transformer了
编译 | 凯隐
出品 | AI科技大本营(ID:rgznai100)
Transformer是由谷歌于2017年提出的具有里程碑意义的模型,同时也是语言AI革命的关键技术。在此之前的SOTA模型都是以循环神经网络为基础(RNN, LSTM等)。从本质上来讲,RNN是以串行的方式来处理数据,对应到NLP任务上,即按照句中词语的先后顺序,每一个时间步处理一个词语。
相较于这种串行模式,Transformer的巨大创新便在于并行化的语言处理:文本中的所有词语都可以在同一时间进行分析,而不是按照序列先后顺序。为了支持这种并行化的处理方式,Transformer依赖于注意力机制。注意力机制可以让模型考虑任意两个词语之间的相互关系,且不受它们在文本序列中位置的影响。通过分析词语之间的两两相互关系,来决定应该对哪些词或短语赋予更多的注意力。
相较于RNN必须按时间顺序进行计算,Transformer并行处理机制的显著好处便在于更高的计算效率,可以通过并行计算来大大加快训练速度,从而能在更大的数据集上进行训练。例如GPT-3(Transformer的第三代)的训练数据集大约包含5000亿个词语,并且模型参数量达到1750亿,远远超越了现有的任何基于RNN的模型。
现有的各种基于Transformer的模型基本只是与NLP任务有关,这得益于GPT-3等衍生模型的成功。然而,最近ICLR 2021的一篇投稿文章开创性地将Transformer模型跨领域地引用到了计算机视觉任务中,并取得了不错地成果。这也被许多AI学者认为是开创了CV领域的新时代,甚至可能完全取代传统的卷积操作。
论文链接:
https://openreview.net/pdf?id=YicbFdNTTy
其中,Google的Deepmind 研究科学家Oriol Vinyals的看法很直接:告别卷积。
以下为该论文的详细工作:
基本内容
Transformer的核心原理是注意力机制,注意力机制在具体实现时主要以矩阵乘法计算为基础,这意味着可以通过并行化来加快计算速度,相较于只能按时间顺序进行串行计算的RNN模型而言,大大提高了训练速度,从而能够在更大的数据集上进行训练。
此外,Transformer模型还具有良好的可扩展性和伸缩性,在面对具体的任务时,常用的做法是先在大型数据集上进行训练,然后在指定任务数据集上进行微调。并且随着模型大小和数据集的增长,模型本身的性能也会跟着提升,目前为止还没有一个明显的性能天花板。
Transformer的这两个特性不仅让其在NLP领域大获成功,也提供了将其迁移到其他任务上的潜力。此前已经有文章尝试将注意力机制应用到图像识别任务上,但他们要么是没有脱离CNN的框架,要么是对注意力机制进行了修改,导致计算效率低,不能很好地实现并行计算加速。因此在大规模图片分类任务中,以ResNet为基本结构的模型依然是主流。
这篇文章首先尝试在几乎不做改动的情况下将Transformer模型应用到图像分类任务中,在 ImageNet 得到的结果相较于 ResNet 较差,这是因为Transformer模型缺乏归纳偏置能力,例如并不具备CNN那样的平移不变性和局部性,因此在数据不足时不能很好的泛化到该任务上。
然而,当训练数据量得到提升时,归纳偏置的问题便能得到缓解,即如果在足够大的数据集上进行与训练,便能很好地迁移到小规模数据集上。
在此基础上,作者提出了Vision Transformer模型。下面将介绍模型原理。
模型原理
该研究提出了一种称为Vision Transformer(ViT)的模型,在设计上是尽可能遵循原版Transformer结构,这也是为了尽可能保持原版的性能。
虽然可以并行处理,但Transformer依然是以一维序列作为输入,然而图片数据都是二维的,因此首先要解决的问题是如何将图片以合适的方式输入到模型中。本文采用的是切块 + embedding的方法,如下图:
首先将原始图片划分为多个子图(patch),每个子图相当于一个word,这个过程也可以表示为:
其中x是输入图片,xp则是处理后的子图序列,P2则是子图的分辨率,N则是切分后的子图数量(即序列长度),显然有。由于Transformer只接受1D序列作为输入,因此还需要对每个patch进行embedding,通过一个线性变换层将二维的patch嵌入表示为长度为D的一维向量,得到的输出被称为patch嵌入。
类似于BERT模型的[class] token机制,对每一个patch嵌入,都会额外预测一个可学习的嵌入表示,然后将这个嵌入表示在encoder中的最终输出(
)作为对应patch的表示。在预训练和微调阶段,分类头都依赖于
。
此外还加入了位置嵌入信息(图中的0,1,2,3…),因为序列化的patch丢失了他们在图片中的位置信息。作者尝试了各种不同的2D嵌入方法,但是相较于一般的1D嵌入并没有任何显著的性能提升,因此最终使用联合嵌入作为输入。
模型结构与标准的Transformer相同(如上图右侧),即由多个交互层多头注意力(MSA)和多层感知器(MLP)构成。在每个模块前使用LayerNorm,在模块后使用残差连接。使用GELU作为MLP的激活函数。整个模型的更新公式如下:
其中(1)代表了嵌入层的更新,公式(2)和(3)则代表了MSA和MLP的前向传播。
此外本文还提出了一种直接采用ResNet中间层输出作为图片嵌入表示的方法,可以作为上述基于patch分割方法的替代。
模型训练和分辨率调整
和之前常用的做法一样,在针对具体任务时,先在大规模数据集上训练,然后根据具体的任务需求进行微调。这里主要是更换最后的分类头,按照分类数来设置分类头的参数形状。此外作者还发现在更高的分辨率进行微调往往能取得更好的效果,因为在保持patch分辨率不变的情况下,原始图像分辨率越高,得到的patch数越大,因此得到的有效序列也就越长。
对比实验
4.1 实验设置
首先作者设计了多个不同大小的ViT变体,分别对应不同的复杂度。
数据集主要使用ILSVRC-2012,ImageNet-21K,以及JFT数据集。
4.2 与SOTA模型的性能对比
首先是和ResNet以及efficientNet的对比,这两个模型都是比较有代表的基于CNN的模型。
其中ViT模型都是在JFT-300M数据集上进行了预训练。从上表可以看出,复杂度较低,规模较小的ViT-L在各个数据集上都超过了ResNet,并且其所需的算力也要少十多倍。ViT-H规模更大,但性能也有进一步提升,在ImageNet, CIFAR,Oxford-IIIT, VTAB等数据集上超过了SOTA,且有大幅提升。
作者进一步将VTAB的任务分为多组,并对比了ViT和其他几个SOTA模型的性能:
可以看到除了在Natrual任务中ViT略低于BiT外,在其他三个任务中都达到了SOTA,这再次证明了ViT的性能强大。
4.3 不同预训练数据集对性能的影响
预训练对于该模型而言是一个非常重要的环节,预训练所用数据集的规模将影响模型的归纳偏置能力,因此作者进一步探究了不同规模的预训练数据集对性能的影响:
上图展示了不同规模的预训练数据集(横轴)对不同大小的模型的性能影响,注意微调时的数据集固定为ImageNet。可以看到对大部分模型而言,预训练数据集规模越大,最终的性能越好。并且随着数据集的增大,较大的ViT模型(ViT-H/14)要由于较小的ViT模型(ViT-L)。
此外,作者还在不同大小的JFT数据集的子集上进行了模型训练:
可以发现ViT-L对应的两个模型在数据集规模增大时有非常明显的提升,而ResNet则几乎没有变化。这里可以得出两个结论,一是ViT模型本身的性能上限要优于ResNet,这可以理解为注意力机制的上限高于CNN。二是在数据集非常大的情况下,ViT模型性能大幅超越ResNet, 这说明在数据足够的情况下,注意力机制完全可以代替CNN,而在数据集较小的情况下(10M),卷积则更为有效。
除了以上实验,作者还探究了ViT模型的迁移性能,实验结果表明不论是性能还是算力需求,ViT模型在进行迁移时都优于ResNet。
可视化分析
可视化分析可以帮助我们了解ViT的特征学习过程。显然,ViT模型的注意力一定是放在了与分类有关的区域:
总结
本文提出的基于patch分割的图像解释策略,在结合Transformer的情况下取得了非常好的效果,这为CV领域的其他研究提供了一个很好的思路。此外,接下来应该会出现许多基于这篇工作的研究,进一步将这一划时代的模型应用到更多的任务上,例如目标检测、实例分割、行为识别等等。此外,也会出现针对patch分割策略的改进,来进一步提高模型性能。
相关链接:
https://www.forbes.com/sites/robtoews/2020/10/12/the-next-generation-of-artificial-intelligence/#de89ca259eb1
更多精彩推荐
相关文章:

mysql left join,right join,inner join用法分析
2019独角兽企业重金招聘Python工程师标准>>> 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 200603240…

如果BarTender出现卸载不干净的问题如何处理
自从BarTender 2016出了之后,好多小伙伴都想试试新功能咋样,这就意味着首先要卸载电脑上旧版BarTender。然而就是这个操作,难倒了好一批人,他们表示BarTender卸载卸不干净,不仅旧版的用不起来了,新版BarTen…

iometer硬盘测试工具附教程
教程地址http://servers.pconline.com.cn/skills/0711/1145597.html转载于:https://blog.51cto.com/cywin7/1081456
Python炫技操作:模块重载的五种方法
作者 | 写代码的明哥来源 | Python编程时光环境准备新建一个 foo 文件夹,其下包含一个 bar.py 文件$ tree foofoo└── bar.py 0 directories, 1 filebar.py 的内容非常简单,只写了个 print 语句print("successful to be imported")只要 bar.…

使用Powershell管理Linux 下的 SQL Server
使用Powershell管理Linux 下的 SQL Server我们上一篇文章介绍了在Centos 7.3下安装及配置 SQL Server,今天我们主要介绍的是如何在Windows下使用Powershell来管理Linux下的SQL Server,其实说到Powershell大家都已经很熟悉了,Powershell不止是…
这么多年,终于有人讲清楚Transformer了
作者 | Jay Alammar译者 | 香槟超新星,责编 | 夕颜来源 | CSDN(ID:CSDNnews)注意力机制是一种在现代深度学习模型中无处不在的方法,它有助于提高神经机器翻译应用程序性能的概念。在本文中,我们将介绍Transformer这种模…

提高IIS网站服务器的效率的八种方法 (转载)
作者:未知 请作者速与本人联系以下是提高IIS 5.0网站服务器的执行效率的八种方法: 1. 启用HTTP的持续作用可以改善15~20%的执行效率。 2. 不启用记录可以改善5~8%的执行效率。 3. 使用 [独立] 的处理程序会损失20%的执行效率。 4. 增加快取记忆体的保存…

搭建Docker私有仓库--自签名方式
为了能集中管理我们创建好的镜像,方便部署服务,我们会创建私有的Docker仓库。通读了一遍官方文档,Docker为了确保安全使用TLS,需要CA认证,认证时间长的要钱啊,免费过期时间太短,还是用自签名比较简单。 准备…

Visual C# .NET 2003 语言的改变
Visual C# .NET 2003 语言的改变 Prashant Sridharan Microsoft Corporation 2002年12月30日 适用于: Microsoft Visual Studio C# 2003 摘要:为了与欧洲计算机制造商协会 (ECMA) 的 C# 规范完全兼容,Microsoft Corporation 对 C# 编译器的…

.net内存管理与指针
本人前段时间准备做个TIN三角网的程序,思想是是分割合并法,分割的同时建立平衡二叉树,然后子树建三角网并相互合并,再向上加入父亲的点集。由于我对.net语言熟点,就准备用c#语言实现。但是不知从那听过当建立的类型只想…
强化学习是针对优化数据的监督学习?
作者 | Ben Eysenbach、Aviral Kumar、Abhishek Gupta 编译 | 凯隐出品 | AI科技大本营(ID:rgznai100)强化学习(RL)可以从两个不同的视角来看待:优化和动态规划。其中,诸如REINFORCE等通过计算不可微目标期…

solrcloud Read and Write Side Fault Tolerance
2019独角兽企业重金招聘Python工程师标准>>> SolrCloud supports elasticity, high availability, and fault tolerance in reads and writes. What this means, basically, is that when you have a large cluster, you can always make requests to the cluster: …

XML的二十个热点问题
http://www.netqu.com 中华技术网会员 Wuxuehui 发布翻译:Chen Zhihong 编辑:孙一中这些日子,几乎每个人都在谈论XML (Extensible Markup Language),但是很少有人真正理解其含义。XML的推崇者认为它能够解决所有HTML不能解决的问题࿰…
5G+云网融合,移动云带领开发者释放边缘计算的力量
在5G浪潮的驱动下,智能设备、自动驾驶、VR/AR等对于实时性、本地性有着较强需求的场景日益丰富,边缘计算应运而生,有效提升了用户体验。众所周知,边缘计算技术的突破,意味着许多控制将通过本地设备实现而无需交由云端&…

Linux下模拟RAID5实现磁盘损坏,数据自动切换到备份磁盘上
另一个博客地址:www.rsyslog.org Linux社区 RAID5磁盘配额, 1块磁盘,分5个分区模拟5块磁盘,其中4个做成RAID5分区,剩余一个作为冗余磁盘,挂载到/data1目录,模拟其中一块磁盘损坏,冗…

jsp9大内置对象
转载于:https://www.cnblogs.com/xtdxs/p/6523059.html

RHCSA 解析-01
这是RHCSA题目开始正式做题前的准备部分。 后面会陆续连载部分类似的题型极其解法。 考试时间:RHCSA 2.5小时 总分300分,210分pass考试环境:考试为上机考试,在一台真实机系统中,已经预安装好虚拟机,要求所…

关于Visual C#装箱与拆箱的研究
关于Visual C#装箱与拆箱的研究2004-09-15 作者: 出处: CSDN在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题。观者也许曾无数次的使用过诸如System.Console类或.NET类库中那些品种繁多的…

Imagination推出全新多核GPU IP系列:提供33种不同配置,AI算力达24 TOPS
近日,致力于打造半导体和软件知识产权(IP) Imagination Technologies宣布推出全新的IMG B系列(IMG B-Series)图形处理器(GPU),进一步扩展了其GPU知识产权(IP)…

ES6: 字符串
现在ES6增加了很多的字符串的方法,但是有些感觉自己也不是很懂,所以就罗列了一些平常的用的。 includes, startsWith, endsWith includes(): 返回布尔值,表示是否找到了参数字符串;startsWith(): 返回布尔值…

警惕!新版Net Transport(影音传送带)安装有猫腻
http://article.pcpop.com/show.aspx?topic_id1317935由于早些时候FlashGet和NetAnts(网络蚂蚁)迟迟没有新版本发布,Net Transport(影音传送带)趁虚而入,以免费且支持流媒体下载迅速获得了网民的青睐。不过…
我是一个平平无奇的AI神经元
来源 | 编程技术宇宙责编 | 晋兆雨头图 | CSDN付费下载自视觉中国我是一个AI神经元我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇。之所以叫这个名字,是因为我的工作有点像人类身体中的神经元。人体中的神经元可以传递生物信号…

mysql的越过用户权限表登录
mysql的越过用户权限表登录昨天突然有个朋友对了说,不小心把mysql数据库的mysql库的user表给误删了,让我帮帮他。当是我就想到了越过用户权限表启动服务的选项skip-grant-table.自己也实验了一把,以前只知道有这样的方法,但一直没…

互联网引发全面深刻产业变革
2019独角兽企业重金招聘Python工程师标准>>> 当前,互联网已经渗透到社会生产生活各个方面,深刻改变着人类社会运行方式,加速着人类文明进步的步伐,开启了一个崭新的时代。互联网革命是人类发展史上历次科技革命的发展和…

apache模块
核心功能和多路处理模块 core Apache HTTP服务器核心提供的功能,始终有效。 mpm_common 收集了被多个多路处理模块(MPM)实现的公共指令。 beos 专门针对BeOS优化过的多路处理模块(MPM) event 一个标准workerMPM的实验性变种。 mpm_netware Novell NetWare优化过的线…

如何实现iframe(嵌入式帧)的自适应高度
好几次看到有人提问问到如何实现 iframe 的自适应高度,能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象,刚好我在工作中也碰到了类似问题,于是上网翻查,东抄抄西看看,弄出来这么一个函数&#…
拖拉机也将自动驾驶,日本劳动力短缺大力发展无人农业
来源 | HyperAI超神经责编 | 晋兆雨头图 | CSDN付费下载自视觉中国内容提要:为解决农业劳动力短缺问题,日本近年来涌现出自动收割机、插秧机等自动化农业设备。近日,其农机生产商久保田,也宣布与英伟达联手,将推出自动…

php字符串操作
1.字符串的格式化 按照从表单提交数据之后,php处理的不同:接受,显示,存储。也有三种类型的格式化方法。 1.1字符串的接收之后的整理: trim(),ltrim(),rtrim() 当数据从表单中上传上来的时候需要对字符串整理一下,去掉字…

javascript事件列表解说
javascript事件列表解说事件浏览器支持解说一般事件onclickIE3、N2 鼠标点击时触发此事件ondblclickIE4、N4 鼠标双击时触发此事件onmousedownIE4、N4 按下鼠标时触发此事件onmouseupIE4、N4 鼠标按下后松开鼠标时触发此事件onmouseoverIE3、N2 当鼠标移动到某对象范围的上方时…
Facebook如何预测广告点击:剖析经典论文GBDT+LR
作者 | 梁唐来源 | TechFlow今天我们来剖析一篇经典的论文:Practial Lessons from Predicting Clicks on Ads at Facebook。从这篇paper的名称当中我们可以看得出来,这篇paper的作者是Facebook的广告团队。这是一篇将GBDT与LR模型结合应用在广告点击率预…