Vision Transformer 论文解读

原文链接:https://blog.csdn.net/qq_16236875/article/details/108964948

扩展阅读:吸取CNN优点!LeViT:用于快速推理的视觉Transformer https://zhuanlan.zhihu.com/p/363647380

Abstract:

Transformer 架构早已在自然语言处理任务中得到广泛应用,但在计算机视觉领域中仍然受到限制。在计算机视觉领域,注意力要么与卷积网络结合使用,要么用来代替卷积网络的某些组件,同时保持其整体架构不变。

该研究表明,对 CNN 的依赖不是必需的,当直接应用于图像块序列时,transformer 也能很好地执行图像分类任务。该研究基于大量数据进行模型预训练,并迁移至多个图像识别基准数据集(ImageNet、CIFAR-100、VTAB 等),结果表明 Vision Transformer(ViT)模型可以获得与当前最优卷积网络相媲美的结果,而其训练所需的计算资源大大减少。

1 Introduction

1.1 NLP 领域中的 Transformer VS 计算机视觉领域中的 CNN

基于自注意力的架构,尤其 Transformer,已经成为 NLP 领域的首选模型。该主流方法基于大型文本语料库进行预训练,然后针对较小的任务特定数据集进行微调。由于 Transformer 的计算效率和可扩展性,基于它甚至可以训练出参数超过 100B 的模型。随着模型和数据集的增长,性能仍然没有饱和的迹象。

然而,在计算机视觉中,卷积架构仍然占主导地位。受 NLP 成功的启发,多项计算机视觉研究尝试将类 CNN 架构与自注意力相结合,有的甚至完全代替了卷积。后者虽然在理论上有效,但由于其使用了专门的注意力模式,因此尚未在现代硬件加速器上有效地扩展。因此,在大规模图像识别任务中,经典的类 ResNet 架构仍然是最先进的

1.2 Transformer 向视觉领域的跨界融合

受到 NLP 领域中 Transformer 缩放成功的启发,这项研究尝试将标准 Transformer 直接应用于图像,并尽可能减少修改。为此,该研究将图像分割成多个图像块(patch),并将这些图像块的线性嵌入序列作为 Transformer 的输入。然后用 NLP 领域中处理 token 的方式处理图像块,并以监督的方式训练图像分类模型。

在中等规模的数据集(如 ImageNet)上训练时,这样的模型产生的结果并不理想,准确率比同等大小的 ResNet 低几个百分点。这个看似令人沮丧的结果是可以预料的:Transformer 缺少一些 CNN 固有的归纳偏置,例如平移同变性和局部性,因此在数据量不足的情况下进行训练后,Transformer 不能很好地泛化。

但是,如果在大型数据集(14M-300M 张图像)上训练模型,则情况大为不同。该研究发现大规模训练胜过归纳偏置。在足够大的数据规模上进行预训练并迁移到数据点较少的任务时,Transformer 可以获得出色的结果。

该研究提出的 Vision Transformer 在 JFT-300M 数据集上进行预训练,在多个图像识别基准上接近或超过了 SOTA 水平,在 ImageNet 上达到了 88.36% 的准确率,在 ImageNet ReaL 上达到了 90.77% 的准确率,在 CIFAR-100 上达到了 94.55% 的准确率,在 VTAB 基准 19 个任务中达到了 77.16% 的准确率。

模型和方法

研究者尽可能地遵循原始 Transformer 的设计。这种故意为之的简单设置具有以下优势,即可扩展 NLP Transformer 架构和相应的高效实现几乎可以实现开箱即用。研究者想要证明,当进行适当地扩展时,该方法足以超越当前最优的卷积神经网络。

2.1 Vision Transformer(ViT)

该研究提出的 Vision Transformer 架构遵循原版 Transformer 架构。下图 1 为模型架构图。

标准 Transformer 接收 1D 序列的 token 嵌入为输入。为了处理 2D 图像,研究者将图像 x ∈ R^H×W×C 变形为一系列的扁平化 2D patch x_p ∈ R^N×(P^2 ·C),其中 (H, W) 表示原始图像的分辨率,(P, P) 表示每个图像 patch 的分辨率。然后,N = HW/P^2 成为 Vision Transformer 的有效序列长度。

Vision Transformer 在所有层使用相同的宽度,所以一个可训练的线性投影将每个向量化 patch 映射到模型维度 D 上(公式 1),相应的输出被称为 patch 嵌入。

与 BERT 的 [class] token 类似,研究者在一系列嵌入 patch (z_0^0 = x_class)之前预先添加了一个可学习嵌入,它在 Transformer 编码器(z_0^L )输出中的状态可以作为图像表示 y(公式 4)。在预训练和微调阶段,分类头(head)依附于 z_L^0。

位置嵌入被添加到 patch 嵌入中以保留位置信息。研究者尝试了位置嵌入的不同 2D 感知变体,但与标准 1D 位置嵌入相比并没有显著的增益。所以,编码器以联合嵌入为输入。

Transformer 编码器由多个交互层的多头自注意力(MSA)和 MLP 块组成(公式 2、3)。每个块之前应用 Layernorm(LN),而残差连接在每个块之后应用。MLP 包含两个呈现 GELU 非线性的层。

作为将图像分割成 patch 的一种替代方案,输出序列可以通过 ResNet 的中间特征图来形成。在这个混合模型中,patch 嵌入投影(公式 1)被早期阶段的 ResNet 取代。ResNet 的其中一个中间 2D 特征图被扁平化处理成一个序列,映射到 Transformer 维度,然后馈入并作为 Transformer 的输入序列。最后,如上文所述,将分类输入嵌入和位置嵌入添加到 Transformer 输入中。

2.2 微调和更高分辨率

研究者在大型数据集上预训练 ViT 模型,并针对更小规模的下游任务对模型进行微调。为此,研究者移除了预训练预测头,并添加了一个零初始化的 D × K 前馈层,其中 K 表示下游类的数量。与预训练相比,在更高分辨率时进行微调通常更有益处。当馈入更高分辨率的图像时,研究者保持 patch 大小不变,从而得到更大的有效序列长度。

ViT 模型可以处理任意序列长度(取决于内存约束),但预训练位置嵌入或许不再具有意义。所以,研究者根据预训练位置嵌入在原始图像中的位置,对它们进行 2D 插值操作。需要注意的是,只有在分辨率调整和 patch 提取中,才能将 2D 图像的归纳偏置手动注入到 ViT 模型中。

3 实验

3.1 模型

该研究进行了大量实验,并使用了多个 ViT 模型变体,参见下表 1:

3.2 SOTA 模型的性能对比

研究者首先将最大的 ViT 模型(在 JFT-300M 数据集上预训练的 ViT-H/14 和 ViT-L/16)与 SOTA CNN 模型进行对比,结果参见下表 2。

表 2:ViT 模型与 SOTA 模型在流行图像分类基准数据集上的性能对比。

从上表中可以看出,规模较小的 ViT-L/16 模型在所有数据集上的性能堪比或者超过 BiT-L,同时它需要的算力也少得多。较大的 ViTH-14 模型进一步提升了性能,尤其在更具挑战性的数据集上,如 ImageNet、CIFAR-100 和 VTAB。ViTH-14 模型在所有数据集上的性能匹配或超过 SOTA,甚至在某些情况下大幅超过 SOTA 模型(如在 CIFAR-100 数据集上的性能高出 1%)。在 ImageNet 数据集上,ViT 模型的性能比 Noisy Student 低了大约 0.1%,不过在具备更干净 ReaL 标签的 ImageNet 数据集上,ViT 的性能超过 SOTA 模型。

下图 2 将 VTAB 任务分解为多个组,并对比了 ViT 与 SOTA 方法的性能,这些方法包括 BiT、VIVI 和 S4L。

在 Natural 任务中,ViT-H/14 的性能略低于 BiT-R152x4;在 Specialized 任务中,ViT 的性能超过 BiT 等方法;而在 Structured 任务中,ViT 显著优于其他方法。

3.3 预训练数据要求

Vision Transformer 在大型 JFT-300M 数据集上进行预训练后表现出了优秀的性能。在 ViT 的归纳偏置少于 ResNet 的情况下,数据集规模的重要性几何呢?该研究进行了一些实验。

首先,在规模逐渐增加的数据集(ImageNet、ImageNet-21k 和 JFT300M)上预训练 ViT 模型。下图 3 展示了模型在 ImageNet 数据集上的性能:

下表 3 展示了模型在 ImageNet、ImageNet-21k 和 JFT300M 数据集上的性能对比情况。在前两个规模较小的数据集上,ViT-Large 模型的性能不如 ViT-Base,但在规模较大的 JFT300M 数据集上,大模型展现出了优势。这说明,随着数据集规模的增大,较大的 ViT 模型变体优于较小的模型

其次,研究者在 JFT300M 数据集的 9M、30M 和 90M 随机子集以及完整数据集上进行了模型训练。结果参见下图 4:

从图中可以看到,在较小的数据集和相同的计算成本下,Vision Transformer 比 ResNet 更加过拟合。该结果强化了这一认知:卷积归纳偏置对于规模较小的数据集较为有用,但对于较大的数据集而言,学习相关模式就足够了,甚至更加有效。

3.4 可扩展性研究

研究人员对不同模型执行了受控可扩展性研究(scaling study)。下图 5 展示了模型在不同预训练计算成本情况下的迁移性能:

实验结果表明:

Vision Transformer 在性能 / 算力权衡中显著优于 ResNet。

混合模型在较小计算成本的情况下略优于 ViT,但在计算成本较高时,这一现象消失。该结果令人吃惊。

Vision Transformer 在实验尝试的算力范围内似乎并未饱和,未来可以进行更多可扩展性研究。

3.5 ViT 如何处理图像数据?

为了了解 ViT 处理图像数据的过程,研究者分析了其内部表示。

ViT 的第一层将扁平化后的图像块线性投影至低维空间(公式 1),下图(左)展示了学得嵌入滤波器的主要组件。投影后,将学得的位置嵌入添加至图像块表示。下图(中)展示了模型学习编码图像内的距离,表明距离越近的图像块更有可能具备更相似的位置嵌入。自注意力允许 ViT 集成整个图像的信息,即使最低层也不例外。研究者调查了 ViT 网络利用这一能力的程度。具体而言,该研究计算图像空间中的平均距离(基于注意力权重)参见下图右。「注意力距离」类似于 CNN 中的感受野大小。

ViT 模型关注与分类具备语义相关性的图像区域,参见图 6:

4 CONCLUSION

我们已经探索了Transformers 在图像识别中的直接应用。不像以前的工作在计算机视觉使用self-attention ,我们没有引入 image-specific inductive biases 的结构。相反,我们将一个图像解释为一系列patches,并使用标准的Transformer 对其进行处理,就像在 nlp 中使用的那样。这种简单但可扩展的策略在与大型数据集的预训练相结合时,效果惊人地好。因此,Vision Transformer 匹配或超过许多图像分类数据集的最新水平,同时具有相对便宜的预训练。虽然初步结果令人鼓舞,但仍存在许多挑战。一种是将 vit 应用于其他计算机视觉任务,如检测和分割。我们的研究结果,加上 carion 等人(2020)的研究结果,表明了这种方法的前景。另一个,继续探索自我监督的预训练方法。我们的初步实验表明,自我监督的预训练有所改善,但自我监督的预训练与大规模监督的预训练还有很大的差距。最后可以进一步扩大ViT的规模,随着模型尺寸的增加,性能似乎还没有饱和。

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

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

相关文章

长这么大,才知道数据集不用下载可以直接在线使用

每天清晨打开电脑,搜索所需的数据集,点击“Download”,愉快地眯上眼睛,期待n个小时后醒来乖巧下载好的数据,开始放进模型像小仓鼠进滚轮一样快乐奔跑。梦醒时分,一个“Error”蹦进眼睛里,美好码…

会议交流 - CCKS2020 | 2020年全国知识图谱与语义计算大会

OpenKG开放知识图谱(简称 OpenKG)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

LeetCode 739. 每日温度(单调栈)

1. 题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures [73, 74, 75, 71, 69, 72, 76, …

令人振奋的好消息!2016年12月8日Google Developers中文网站发布!

令人振奋的好消息! 2016年12月8日Google Developers中文网站发布! 以往我们需要访问Android的开发网站、Google的开发网站都需要翻墙,苦不堪言。现在Google发布了中文网站,怎能不让人开心?! Android中文…

美团外卖Android Lint代码检查实践

概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量。除了Android原生提供的几百个Lint规则,还可以开发自定义Lint规则以满足实际需要。 为什么要使用Lint 在美团…

零基础入门NLP - 新闻文本分类,正式赛第一名方案分享

零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g

这篇论文提出了一个文本-知识图谱的格式转换器...

文 | 花小花PosyHello, 大家好,我是小花。今天给大家介绍一篇有野心的paper。为何如此说呢?因为该工作提出了一个知识的格式转换器,用于转换 无结构化的纯文本(Text)和结构化的知识图谱(KG) 。换句话说,给模型一打句子&#xff0c…

论文小综 | Using External Knowledge on VQA

本文转载自公众号:浙大KG。本文作者:陈卓,浙江大学在读博士,主要研究方向为图神经网络和知识图谱表示学习我们生活在一个多模态的世界中。视觉的捕捉与理解,知识的学习与感知,语言的交流与表达,…

如何修改TextView链接点击实现(包含链接生成与点击原理分析)

*这篇文章的主要目的是想要大家学习如何了解实现,修改实现,以达到举一反三,自行解决问题的目的。 某天遇到这么一个需求:在TextView中的文本链接要支持跳转,嗯,这个好办,TextView本身是支持的&…

LeetCode 752. 打开转盘锁(图的BFS最短路径)

1. 题目 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨…

使用TensorFlow训练WDL模型性能问题定位与调优

简介 TensorFlow是Google研发的第二代人工智能学习系统,能够处理多种深度学习算法模型,以功能强大和高可扩展性而著称。TensorFlow完全开源,所以很多公司都在使用,但是美团点评在使用分布式TensorFlow训练WDL模型时,发…

docker镜像打包save,载入load,启动run

docker镜像打包save,载入load,启动run docker打包,针对的是镜像,而不是运行中的容器。 查看当前系统的镜像文件: docker images 首先,将当前运行中的,已经自定义修改之后的容器保存为新的镜像…

会议交流 - CNCC 技术论坛 | NLP中知识和数据怎么选?当然是全都要!——第四届中文信息技术发展战略研讨会...

本文转载自公众号:中国计算机学会 。本论坛将于CNCC2020期间,10月23日下午16:00-18:00,在北京新世纪日航饭店3层南京厅举行。本论坛将邀请多位来自国内著名高校和人工智能企业的知名自然语言处理专家介绍他们在知识图谱、知识获取、预训练模型…

从我开发过的Tensorflow、飞桨、无量框架看深度学习这几年

文 | Peter潘欣知乎和深度学习框架打交道已有多年时间。从Google的TensorFlow, 到百度的PaddlePaddle,再到现在腾讯的无量。很庆幸在AI技术爆发的这些年横跨中美几家公司,站在一个比较好的视角看着世界发生巨大的变化。在这些经历中,视角在不…

探索Glide对Gif图片资源的获取、解析过程

先预祝大家汤圆节快乐!很久没写博客了。今天我们来探索一下Glide是如何支持Gif图片加载的。 本篇博客的目的 了解代码分析的基本思路与方法了解Glide是如何对Gif图片进行支持的 探索背景 为什么会有这么一个想法呢,一来一直对Glide是知其名而不知其所…

美团“猜你喜欢”深度学习排序模型实践

引言 推荐作为解决信息过载和挖掘用户潜在需求的技术手段,在美团点评这样业务丰富的生活服务电子商务平台,发挥着重要的作用。在美团App里,首页的“猜你喜欢”、运营区、酒店旅游推荐等重要的业务场景,都是推荐的用武之地。 目前&…

如何关闭docker容器里的进程

如何关闭docker容器里的进程 1、使用docker exec 容器名 ps -ef命令查看进程信息 示例: 创建名为"redis"的容器,并在容器内部和宿主机中查看容器中的进程信息: 2、然后进入该容器中,执行如下命令即可停掉进程&…

论文浅尝 | 一日看尽长安花--NLP可解释研究梳理

本文是对TACL2019《Analysis Methods in Neural Language Processing: A Survey》的翻译和整理。本文转载自知乎,文章链接:https://zhuanlan.zhihu.com/p/265815975导读NLP领域发展迅猛,其模型分析方法也正逐渐火热。为什么要研究NLP的可解释…

简明扼要的反射入门教程

反射 反射作为RTTI语言(比如Java)的基础之一被很多人所熟知,但是有些同学对反射本身还是懵懵懂懂的,不是很清楚它到底有什么用。今天这节课我们就对反射本身来一个通体的认知。 定义 反射所在的包为:java.lang.refl…

人在斯坦福,刚上CS224n

文 | Jazon大家好,我是Jazon,现在是Stanford计算机硕士项目的一只学生,非常荣幸加入小夕的大家庭!请各路大神多多指教呀。2021年1月12日,又一季Stanford CS224n——自然语言处理开课了,我和很多MSCS同学一起…