前言
本博客记录我学习vision Transformer这篇文章的过程,旨在记录整合各大网页资料,方便日后查看。
目录
7.2 Fine-tuning and higher resolution(微调和更高的分辨率)
8.2 Comparision to state of the ART(与最新技术的比较)
8.3 Pre-trainign Data Requirments(预训练数据要求)
8.5 Inspecting Vision Transformer(VISION TRANSFORMER检验)
一、学习链接
1. 本文主要学习地址
VIT论文精读(李沐):ViT论文逐段精读【论文精读】
VIT论文链接:https://arxiv.org/pdf/2010.11929.pdf
VIT源码链接:https://github.com/rwightman/pytorch-image-models
VIT论文翻译:https://blog.csdn.net/jjw_zyfx/article/details/125036387
2. VIT值得一看的学习链接
【ViT模型】嚣张的Transformer如何“浪”!:https://www.bilibili.com/video/BV13B4y1x7jQ
【知多少】 什么是 ViT(Vision Transformer)?:https://www.bilibili.com/video/BV18u411m7PY
ViT(Vision Transformer)解析 :https://zhuanlan.zhihu.com/p/445122996
3. 相关知识点的学习链接
归纳偏置 (Inductive Bias):https://blog.csdn.net/qq_39478403/article/details/121107057
二、论文学习笔记
1. About VIT(关于VIT)
Vision Transformer:开启了CV领域的新时代
- 挑战了 2012 Alexnet 提出的 CNN 在 CV 领域的绝对统治地位
- 在有足够多的预训练数据下,将NLP 的 Transformer 搬运到 CV,也能取得很好的效果
- VIT不仅打破了 CV 和 NLP 的壁垒,在多模态领域的发展也很有潜力
Vision Transformer的效果:paperwithcode网站(集成了某个领域或者某个数据集表现最好的方法排名)
- 在paperwithcode网站基于ImageNet数据集,排名靠前的全是基于Vision Transformer
- 在paperwithcode网站基于CoCo数据集(目标检测):排名靠前的全是基于Swin Transformer( ICCV 21 best paper:多尺度的 ViT )
- 在语义分割、实例分割、视频、医疗、遥感等视觉领域皆可应用
在卷积神经网络CNN上表现不好但在 VIT中表现很好的例子
- 如:遮挡、数据分布有所偏移(纹理的去除)、鸟头部+对抗的patch、图片打散重新排列组合
2. Title(标题)
作者来自 Google research 和 Google brain team
An image is worth 16*16 words:Transformers for image recognition at scale
翻译:一张图片等价很多16*16的单词:transformer 去做大规模的图像识别
3. Abstract(摘要)
论文翻译:
- Transformer 在 NLP 是基本操作, 但 transformer 在 CV 的应用受限,在视觉领域,注意力要么和卷积网络结合使用,要么替换卷积网络中的某些部分,同时保持整体结构不变。
- 本文表明对CNNs的依赖不是必要的,纯转换器(pure transformer)直接应用于图像块(image patches)序列在图像分类任务中也能发挥很好的作用。
- 当对大量数据进行预训练并把它转移到多个中型或者小型图像识别基准中,与SOTA卷积网络相比,Vision Transformer(ViT)获得了出色的结果,同时训练时需要更少的计算资源。
Q1: CV 里的 attention 是怎么用的呢?
- attention + CNN, or attention 替换 CNN components 但依然保持 CNN 整体结构。
Q2: 如何理解 CNN 整体结构不变?
- 例如ResNet 50 有 4 个 stages (res2 res3 res4 res5), stage 不变,attention 取代每一个 stage 每一个 block 里的这个操作,而不改变整体结构。
Q3: VIT训练时需要更少的计算资源?
- No,少的训练资源 == TPUv 3 + 2500 天,"fewer" 是相对来说。
4. Introduction(引言)
论文翻译:
- 基于self-attention 架构,尤其是Transformers,已经是 NLP 必选模型。主流方式是 BERT 提出的,在大规模数据集预训练,在特定领域的小数据集做微调。 由于Transformer比较好的计算效率和可扩展性,现在已经可以训练超过1000亿参数的模型。随着模型和数据集发展,还没有出现性能饱和的现象。
- 在计算机视觉领域,卷积结构仍然占主导地位。受NLP成功的启发,多项工作都尝试将类似CNN的结构与注意力机制结合(Wang et al.,2018;Carion et al.,2020),有些甚至取代了卷积(Ramachandran et al.,2019;Wang et al.,2020a)。这种直接取代卷积虽然理论上可行,但是由于使用专门的注意力模式,还没有在现代硬件加速器上有效扩展。在大规模图像识别中,经典的类似ResNet架构仍然是最好的。
- 受在NLP中Transformer大规模应用成功的启发,我们尝试将标准Transformer直接应用于图像,并进行尽可能少的修改。为此,我们将一个图片分割为多个图片块,并将这些块编成一个线性序列作为 Transformer的输入。图片块被做成像NLP中的tokens一样的方式。我们以有监督的方式在图片分类上训练模型。
- 当在中等规模的数据集(如ImageNet)上不用很强的正则化进行训练时,这些模型会产生比同等规模的ResNets低几个百分点的适度精度。这种看似令人沮丧的结果可能是意料之中的:Transformers缺乏CNN固有的一些归纳偏置,例如平移不变性和局部性,因此,当在数据量不足的情况下进行训练时,Transformers不具有很好地泛化能力。
- 然而,如果是在更大规模的数据集上训练 (14M-300M 个图片的数据集)。我们发现大规模训练胜过了CNN中的归纳偏置。我们的Vision Transformer (ViT)当在一个足够大的数据集上预训练然后迁移到具有很少数据点的任务上时取得了非常好的结果。当在公开的ImageNet-21k数据集或者公司内部的JFT-300M数据集上预训练时, ViT接近或者胜过了在多图像识别中的目前最好的基准模型。尤其是,我们的最好的模型在ImageNet上达到了 88.55%的精度,在ImageNet-ReaL达到了 90.72%,在CIFAR-100上达到了94.55%,在19个任务的 VTAB上达到了77.63%。
Q1: 什么是性能饱和的现象?
- 很多时候,不是一味地扩大数据集或者模型就能获得更好的效果,尤其是当扩大模型的时候,很容易出现过拟合的问题。
Q2: Transformer 应用在 CV 有难点吗?
- 有,计算像素的self-attention,序列长,维度爆炸,Transformer 的计算复杂度是序列长度 n 的平方O(n^2),现在硬件能支持的序列长度一般就是几百或者上千,BERT序列是512长。在计算机视觉领域,我们得把一个2D图片转化为一个1D的序列,最直观的方式是把每个像素点当成序列元素。对于分类任务来说,一般来说一个224 *224分辨率的图片,有 50176 个像素点,序列长度是 BERT 的近 100 倍。而对于检测或者分割任务,很多模型输入已经变成600*600或者更大,复杂度更高。
Q3: CNN的结构一般如何与注意力机制结合?
- 由于序列长度太长,那么我们想办法降低这个序列长度。比如原始图片像素点输入的序列太长,那就可以将 CNN 网络中间的特征图作为输入,进入 Transformer,例如论文中给的例子CVPR 18 Local Network.Wang et al这篇文章,可以将ResNet 50 最后一个 stage, res4的feature map为14* 14,拉长后序列长度也就196这么长。
- 文中给的例子,降低序列长度的方式有:用特征图做 transformer 输入(Wang et al 2018)和自注意力机制完全取代了卷积 (Ramachandran et al., 2019 stand-alone attention 孤立自注意力; Wang et al., 2020 axial attention 轴注意力)。stand-alone attention 孤立自注意力:用local window局部小窗口控制transformer的计算复杂度,有点像卷积,卷积也有locality,局部窗口卷积。axial attention 轴注意力:2个1D 顺序操作,降低计算复杂度,因为图片的序列长度 n = H * W太长,将2D矩阵拆分为2个1D向量,先在H高度 dimension 做一次 self-attention,再在W宽度 dimension做一次self-attention。
Q4: 如何将标准Transformer直接应用于图像,做尽可能少的修改?
- 把图片划分成很多patches,每个patch元素大小是16*16,例如输入图片大小为224x224,将图片分为固定大小的patch,patch大小为16x16,则每张图像会生成224x224/16x16=196个patch,即输入序列长度为196。
Q5: VIT为什么比CNN精度低?什么是归纳偏置?
- Transformer比CNN少inductive biases(归纳偏置),inductive biases归纳偏置指:先验知识 or 提前的假设。CNN常有的inductive biases是locality(局部性)和translation equaivariance(平移不变性)。
- locality:CNN用滑动窗口在图片上做卷积,假设是图片相邻的区域有相似的特征。比如桌子和椅子在一起的概率大,距离近的物品相关性越强。
- translation equaivariance:公式: ,f:卷积 ,g:平移, 无论先做平移 g 还是先做卷积 f , 最后结果一样,因为CNN 的卷积核像一个 template 模板,同样的物体无论移动到哪里,遇到了相同的卷积核,它的输出一致。
- CNN有了locality和 translation equivariance归纳偏置,就有了很多先验信息 ,只需要较少的数据去学好一个模型。而Transformer 没有这些先验信息,只能从图片数据里,自己学习对视觉世界 的感知。
引言总结:
- 第一段:Transformer在 NLP扩展的很好,没有因为大模型和大数据集而饱和,performance一直有提升,引出Transformer在 CV 里是否也能有大幅度的提升呢?
- 第二段:前人工作。这么好的idea有哪些人做过呢?讲清楚自己的工作和related works的区别。之前的工作是CNN+attention 或者attention替代CNN,但没有工作将transformer直接用到 CV 领域,没有得到很好的扩展效果。
- 第三段:Vision Transformer是用了标准的Transformer模型,就是将图片切分成图片块,再输入到Transformer中就可以了,把 CV 问题理解为 NLP 问题,ViT 融合了 CV 和 NLP 领域。
- 第四+五段:展现结果,在足够多的数据集训练下,ViT能取得很好的效果。
5. Conclusion(结论)
论文翻译:
- 我们已经探索了将Transformers直接应用到图像识别中。不同于以前在计算机视觉中使用自注意力,除了最初的图像块提取步骤外,我们不会在体系结构中引入特定于图像的归纳偏差。相反,我们把图片分解为一个图片块序列,通过就像在 NLP中的标准的Transformer编码器处理它。这种简单但可扩展的策略与在大数据集上的预培训相结合时,效果出奇地好。而且Vision Transformer达到设置超越在很多图像分类数据集上的最好的模型,同时预训练开销相对较小。
- 尽管这些初步结果是很鼓舞人心的,但仍然有很多挑战。其中一个就是将ViT应用到其他视觉任务中,像检测任务和分割任务。我们的结果和Carionet al. (2020)的结果表明:这种方法很有希望。另一个挑战是继续探索自注意力预训练方法。我们的初步实验显示了自注意力预训练是有提高的,但是自监督和大规模有监督预训练仍然有很大的差距。最后,ViT的进一步扩展可能会提高性能。
Q1: Transformer是否可以做CV?
- VIT出来后产生的问题 —— Vision Transformer在CV上除了做分类,还能不能做图形分割、目标检测另外两个主流视觉任务呢?DETR (Carion et al. 2020) 目标检测的力作,改变了目标检测出框的方式,说明VIT 做其它CV任务应该效果也很好。
- 事实上在VIT出来的一个半月后(2020年 12 月),检测方面推出:ViT-FRCNN ,把VIT用到detection上;分割方面推出SETR,把VIT用到segmentation上。三个月后,Swin Transformer 融合Transformer 和多尺度设计横空出世。证明了Transformer 可以作为CV领域的一个通用的骨干网络backbone。
- 另外一个未来工作方向,自监督的预训练方式。NLP大的 transformer模型都使用自监督预训练,ViT有initial experiments证明自监督预训练也可以,但和有监督的训练有差距。把 ViT 变得更大,有可能取得更好的结果。
- VIT型为CV领域打下基础,激发后续的探索。如视觉领域CV的进一步发展,以及多模态任务,是否可以一个transformer处理CV和NLP。
6. Related Work(相关工作)
论文翻译:
- Transformers是2017年由Vaswani等人提出的机器翻译方法,至此成为很多NLP任务中最先进的方法。大型的基于Transformer的模型大多是先在大型语料库上进行预训练,然后对特定任务进行微调:BERT(Devlin et al.,2019)使用去噪的自监督预训练任务,而GPT系列则使用语言模型作为其预训练任务 (Radford et al., 2018; 2019; Brown et al., 2020)。
- 应用到图片上的自注意力要求每个像素关注到所有的其他像素。由于具有像素平方级的代价,这不能作为实际输入的大小。因此,在图像处理领域应用Transformers,过去尝试了一些方法:在每个像素的局部邻域中用自注意力机制(self-attention),不是在全局范围内。这样的局部多头点积(multi-head dot-product)自注意力模块可以完全替代卷积网络。或者像Sparse Transformers采用全局自我注意力的可扩展的近似值来应用于图像。一种替代方法用于计算大小不同的块。许多专门的注意力机制在计算机视觉任务中展现了出色的结果,但是需要复杂的工程才能在硬件加速器上使用。
- 和我们的模型最相近的是Cordonnier et al. (2020)的模型,他的模型从输入图片中抽取2x2大小的图片块,在顶层使用全注意力。这个模型和ViT非常相似,但是我们的工作进一步论证了:大规模预训练能让 transformers和目前最好的CNNs进行对比。而且,Cordonnier et al. (2020)使用小的2×2的像素块,这使得该模型仅适用于小分辨率图像,而我们的模型也能处理中分辨率的图像。
- 有很多人对卷积神经网络和自注意力相结合感兴趣。例如,通过增强特征映射进行图像分类 (Bello et al., 2019)或者对CNN的输出结果使用自注意力做进一步的处理,例如在目标检测,视频处理,图片分类,基于无监督的物体发现,统一的文本视觉任务。
- 另一个相近的模型是图片 GPT (iGPT),在降低图像分辨率和颜色空间后,将Transformers应用到图像像素上。iGPT作为生成模型采用无监督方式进行训练,通过微调或者线性探测来提高分类性能,在 ImageNet上达到了一个最大精度72%。
- 我们的工作是在比标准的ImageNet数据集还大的数据集上探索图像识别。使用额外的数据源可以在标准基准上取得最好的结果。而且, Sun et al. (2017)研究了随着数据集大小的变化,CNN的性能是如何变化的。 Kolesnikovet al. (2020); Djolonga et al. (2020)展示了CNN从大规模数据集上进行迁移学习的一个实验探索。像数据集 ImageNet-21k和JFT-300M。我们同样关注这两个数据集,但是在以前工作的基础上使用Transformers而不是基于 ResNet的模型进行训练。
相关工作总结:
- 第一段:Transformer 在 NLP 领域的应用:BERT, GPT
- 第二段:self-attention 在视觉领域的应用,为解决“维度爆炸问题”,列举了过去提出的一些方法。
- 第三段:介绍了Cordonnier et al. (2020)的模型,与VIT很相似,但是训练规模不够大。
- 第四段:点明计算机视觉领域还有很多工作是将卷积神经网络和自注意力相结合,涵盖检测、分类、视频处理、多模态等。
- 第五段:另一个相似工作:image GPT,GPT 是 NLP 的生成模型,无监督预训练,ImageNet 准确率 72%。
- 第六段:VIT关注 ImageNet-21k和JFT-300M两个数据集,使用Transformers。
7. Method(方法)
在模型设计上我们尽可能的遵循原始的Transformer的设计。这种简化设置的意图的一个优点是让NLP Transformer架构可扩展,他们高效的实现几乎能开箱即用。
Figure 1:模型总览,我们将图片分割成固定大小的块,并将他们线性编码,添加到位置编码当中,然后将具有向量序列的结果装填到标准的Transformer编码器中,为了能执行分类,我们在序列上使用标准的添加了一个额外的可学习"分类标记"的方法。Transformer编码器的图解是受到了Vaswani et al. (2017)的启发。
7.1 Vision Transformer (VIT)
论文翻译:
- Figure 1上是这个模型的总揽图。标准的 Transformer的输入是一个1D的token编码序列。为了处理2D图片,我们将图片的形状变成了了一个平面2D图像块序列,其中,(H, W)是原始图片的分辨率,C是通道数, (P, P)每个像素块的分辨率,是图像块个数,它也作为Transformer有效输入序列长度。Transformer在它的所有层中使用固定的向量大小D。因此i,我们将像素块展平,用一个可训练的线性投影将其映射成D维(Eq. 1)。我们将这个投影的输出作为像素块的编码。
- 与BERT的[class]token类似,我们在编码图像块的序列上预置了一个可学习的编码 (),它在 Transformer编码器输出的状态()作为图片的y (Eq. 4)。在预训练和微调期间作为一个分类头赋值给,分类头在预训练期间由一个带有一层隐藏层的MLP实现,在微调期间由一个单线性层实现。
- 位置编码是被添加到图像块编码当中用来保留位置信息。我们用标准的可学习的1D位置编码,因为我们没有从高级的2D位置编码当中看到有重大的性能提升 (附录 D.4)。嵌入向量的序列结果作为编码器的输入。
- Transformer编码器是由多头的自注意力和MLP块交替组成。层归一化 (LN)是应用在每个块之前,在每个块之后使用残差连接。MLP包含两个具有非线性GELU的层。
- 归纳偏置:我们注意到Vision Transformer(ViT)比CNNs拥有更小的针对图像的归纳偏置。在CNNs中,局部性,2维邻域结构和平移不变性贯穿于整个网络的每一层。在ViT中,只有MLP层是局部共享和平移不变的而自注意力层是全局的。二维邻域结构用的很少:在模型的开始部分,把图片裁切成图片块。在微调期间为了不同像素的图片,调整位置嵌入(下边会介绍)。除了这些,位置嵌入在初始化时没有携带图像块的2D位置信息,图像块之间的所有空间关系都必须从头开始学习。
- 混合架构:作为原始图像块的替代方法,可以从CNN的特征图中形成输入序列(LeCun et al., 1989)。在这个混合模型中,图像块嵌入投影E(等式1)应用于从CNN特征图中提取的图像块。作为特例,图像块的的空间大小可以是1x1,这意味着输入序列是通过简单地展平特征映射的空间维度并投影到Transformer维度来获得的。分类输入嵌入和位置嵌入按照上述方式被添加上。
Q1:VIT 整体流程:
- 整体流程:给定一张图,把图打成一个个patch(图一中是打成九宫格),然后把patch变成一个序列,每个patch会通过一个线性投射层得到一个特征(Patch embedding),加上位置编码以后,tokens传入Transformer encoder,得到很多输出。每一个 token 都有输出,用哪个输出分类呢?借鉴 BERT,它有一个extra learnable embedding(特殊字符cls),同样的我们在token上也加了一个特殊字符(图中用*代替),他也是一个position embedding,其位置信息永远为0。因为所有的 token都在跟所有的token做交互信息。因此,我们标记的CLS可以从别的embedding里学到有用信息,从而我们只需要根据他的输出做一个最后的分类判断就可以了。后面的MLP Head其实就是一个通用的分类头了,最后用交叉熵函数去进行模型的训练。
- 建议观看下面视频(录自:【ViT模型】嚣张的Transformer如何“浪”!_哔哩哔哩_bilibili)
VIT整体流程
Q2:VIT 前向过程(Vision 问题变成 NLP 问题):
- patch embedding:例如输入图片大小为224x224,将图片分为固定大小的patch,patch大小为16x16,则每张图像会生成224x224/16x16=196个patch,即输入序列长度为196,每个patch维度16x16x3=768,线性投射层的维度为768xN (N=768),因此输入通过线性投射层之后的维度依然为196x768,即一共有196个token,每个token的维度是768。这里还需要加上一个特殊字符cls,因此最终的维度是197x768。到目前为止,已经通过patch embedding将一个视觉问题转化为了一个NLP问题。
- positional encoding(standard learnable 1D position embeddings):ViT同样需要加入位置编码,位置编码可以理解为一张表,表一共有N行,N的大小和输入序列长度相同,每一行代表一个向量,向量的维度和输入序列embedding的维度相同(768)。注意位置编码的操作是sum,而不是concat。加入位置编码信息之后,维度依然是197x768
- LN/multi-head attention/LN:LN输出维度依然是197x768。多头自注意力时,先将输入映射到q,k,v,如果只有一个头,qkv的维度都是197x768,如果有12个头(768/12=64),则qkv的维度是197x64,一共有12组qkv,最后再将12组qkv的输出拼接起来,输出维度是197x768,然后在过一层LN,维度依然是197x768
- MLP:将维度放大再缩小回去,197x768放大为197x3072,再缩小变为197x768
一个block之后维度依然和输入相同,都是197x768,因此可以堆叠多个block。最后会将特殊字符cls对应的输出 作为encoder的最终输出 ,代表最终的image presentation(另一种做法是不加cls字符,对所有的tokens的输出做一个平均),如论文公式,后面接一个MLP进行图片分类。
Q3:归纳偏置(Inductive bias):
- 参考资料:https://blog.csdn.net/qq_39478403/article/details/121107057
- CNN 的 inductive bias: locality 局部性, translation equivalence 平移等变性。在 CNN 模型每一层都有所体现,模型的先验知识从头到尾,贯穿整个模型。但是对于VIT,只有MLP层是局部共享和平移不变的而自注意力层是全局的。也就是说VIT 比 CNN 的 inductive bias 少, only MLP。VIT 的 patches 块的 2d 位置信息 + spatial relations 图像块之间的场景信息,都需要重新学。所以ViT 没有很多 inductive bias,中小型数据集训练 VIT 效果不如 CNN。
Q4:混合结构(Hybrid architecture)
因为Transformer全局建模能力强,而CNN又比较data-efficient,不用那么多训练数据,考虑结合,前 CNN+后Transformer,通过实验对比两种不同的图片预处理方式:ViT 的图片预处理方式是把一张图划分成 patches,直接过全连接层 fc,混合结构不划分 patches,采用 CNN (Res50 的 feature map 14 * 14 = 196),过全连接层 E Linear projections 得到图片的 embedding
7.2 Fine-tuning and higher resolution(微调和更高的分辨率)
论文翻译:
- 通常,我们在大数据集上预训练ViT, 并微调到(较小的)下游任务。为此,我们移除了预训练预测头,换成了一个DxK的初始化全为0的前馈层,其中,K为下游的类别数。通常使用比预训练更高分辨率的微调是有益的(Touvron et al., 2019; Kolesnikov et al., 2020)。当保持图像块大小不变,送入更高分辨率的图片时,这会导致一个更大的有效序列长度。VIT能处理任何序列长度(直到内存的上限)。然而,预训练位置嵌入可能不在有意义。因此,我们根据他们在原始图片中的位置执行预训练位置嵌入的2D插值。注意:分辨率调整,图像块的抽取,是 Vision Transformer中唯一一个手动注入图像2D结构的归纳偏置点。
Q1:patches数增多,如何使用已预训练好的位置编码呢?
Transformer 理论上,可以处理任意长度。但是,提前训练好的 position embedding 可能失效,比如本来1- 9的九宫格图片,patches增多,位置编码需要1- 25。 那么patches数增多,如何使用 已预训练好的位置编码呢?这里简单做了一个2D插值,用torch官方自带的interpolate函数实现;但也不是任意长度增加都能保持效果。当你从一个很短的序列变成一个很长的序列时(256→ 512 →768),直接使用差值,最后效果会掉点。插值 interpolate 只是一个临时解决方案,也是VIT 微调时的一个局限。也因为你通过图片的位置信息去做这个差值,在分辨率调整和图像块抽取这里是Vision Transformer里唯一用了图片2D信息的归纳偏置。
8. Experiments(实验)
论文翻译:
- 我们评估 ResNet, Vision Transformer (ViT)和两者的混合网络的表征学习能力。为了理解每个模型对数据的要求,我们在非常大的数据集上预训练,用很多的基准任务评估。当考虑预训练模型的计算代价的时候。ViT表现非常出色,用更低的预训练代价,达到了目前最好的结果,在绝大多数识别基准上。最后,我们用自监督执行一个小的实验,显示自监督ViT在未来很有希望。
8.1 Setup(设置)
8.1.1 Datasets(数据集)
- 为了探究模型的可扩展性(to explore model scalability),预训练阶段使用了ImageNet-1K(1.3million)、ImageNet-21K(14million),JFT-18K(303million)三个数据集。同时参考BiT,删除预训练数据集中和下游任务测试集中重复的数据(de-duplicate the pre-training datasets w.r.t. the test sets of the downstream)
- 下游数据集包括:ImageNet(on the original validation labels),ImageNet (on the cleaned-up ReaL labels ),CIFAR-10/100,Oxford-IIIT Pets,Oxford Flowers-102,VTAB (19 tasks)
- ImageNet ReaL参考2020-Are we done with imagenet? VTAB参考2019-A large-scale study of representation learning with the visual task adaptation benchmark,所有数据集的预处理参考BiT
8.1.2 Model Variants(模型及变体)
- ViT:参考BERT,共设置了三种模型变体(增加了Huge变体)如下图所示。例如ViT-L/16,代表Large变体,输入patch size为16x16。
- CNN:baseline CNNs选择ResNet,同时用Group Normalization替代Batch Normalization,使用standardized convolutions,以提升模型迁移性能。
- Hybrid:混合模型就是使用ResNet50输出的特征图,不同stage会得到不同大小的特征图,即生成不同长度序列
- 所有模型的训练均使用Adam( β1=0.9 , β2=0.999 ),batch_size设为4096,权重衰减(apply a high weight decay of 0.1),同时使用了学习率warmup策略(use a linear learning rate warmup and decay);微调阶段,使用SGD with momentum,batch_size设为512
8.2 Comparision to state of the ART(与最新技术的比较)
- 可以看到在JFT数据集上预训练的ViT模型,迁移到下游任务后,表现要好于基于ResNet的BiT和基于EfficientNet的Noisy Student,且需要更少的预训练时间。即突出ViT 优点:效果好 + 训练快。
- 上面的实验显示,当在很大的数据集上预训练时,ViT性能超越CNN,后面探究不同大小预训练数据集对模型性能的影响(不能只看超大数据集)
8.3 Pre-trainign Data Requirments(预训练数据要求)
- 这里当在更小的数据集上预训练时(ImageNet),优化三个超参数以提升模型性能,分别是weight decay, dropout 和 label smoothing。可以看到当在小数据集上预训练时(ImageNet-1k,1.3million),ViT微调后的效果远远比不上ResNet;在中等数据集上预训练时(ImageNet-21K,14million),两者效果相当;当在很大的数据集上(JFT-300M, 300million)预训练时,ViT的效果要更好。所以当我们只有较小的数据集时,更适合使用ResNet(并不是所有数据集都适合硬套transformer)
- 如上图,在同一个数据集(JFT),分别抽取不同数量的数据(10M,30M,100M,300M),避免不同数据集之间的gap,同时不适用额外的regularization,超参数保证相同。linear evaluation是指直接把预训练模型当做特征提取器,不fine-tune,拿提取到的特征直接做logistic regression。few-shot是指在evaluation的时候,每一类只sample五张图片。
- 可以看到当数据集很小时,CNN预训练模型表现更好,证明了CNN归纳偏置的有效性,但是当数据集足够大时,归纳偏置和Transformer比较就失去了优势,甚至没有归纳偏置,直接从数据learn patterns会更有效。同时细心观察会发现即使预训练的数据集很大,最后ViT的性能提升也不是很明显,因此如何使用ViT来做这种小样本学习任务,是一个有待继续研究的方向。
8.4 Scaling Study(规模研究)
- 上图实验证明了ViT的预训练比ResNet要更便宜,即在相同的预训练计算复杂度下,ViT的效果要比ResNet更好。可以看到,当模型较小时,混合模型的表现要更好,但是随着模型的增大,ViT的表现超过了混合模型(为什么混合模型这个时候不如ViT,直觉上混合模型吸收了双方的优点,应该表现更好)。
8.5 Inspecting Vision Transformer(VISION TRANSFORMER检验)
- 左边:ViT block第一层(linear projection)的前28个主成分。图示可以看出Vision Transformer和 CNN学到的很像,类似gabor filter有颜色、纹理,可以做基函数,描述每个图像块的底层信息 。
- 中间:位置编码得相似性分析(cos),位置越接接近,patches之间的相似度越高;相同行/列的 patches 有相似的 embeddings;说明 Position embedding 能学到一些表示位置距离的信息。虽然是1d的 position embedding,但已经学到了2d的图像位置概念,所以换成 2d position 提升不多。
- 右边:为了理解 self-attention 是如何聚合信息的,看看 Self-attention 有没有起作用,所以基于 attention weight 计算不同 layer 不同 head 的 average attention distance,每一个 layer的每一个head的average attention distance,类似于CNN感受野的概念,average attention distance是基于attention weight计算,具体做法是用 attention weight 乘以 query pixel 和所有其它 pixels 的距离,再求平均。通过图示可以发现,一些head在第一个layer就关注到了几乎整张图片的范围,即self-attention刚开始就注意到全局的信息;而CNN刚开始第一层的感受野receptive filed很小,只能看到附近的 pixel;随之网络加深,模型学到的特征越来越high level,越来越有语义信息,像素的自注意力距离也越来越远。
- 为了证明自注意力有学到很远距离的像素(pixel)信息,作者给出图六,它是ViT最后一层 output token做的图,他发现如果用输出的这些图做自注意力,折射(逆向映射)回原来的输入图片,可以看到ViT 真的学到了一些概念:如狗、飞机。作者最后一句话说:全局来看,输出的 token 是融合全局的特征信息,ViT 模型可以关注到和 classfication 分类相关的图像区域。
8.6 Self-Supervision(自监督)
Transformers在NLP任务中展现出了令人印象深刻的性能提升。然而,他们的成功不仅源于出色的可扩展性,还源于大规模的自监督预训练。我们也在基于自监督的掩码图像块预测方面做了初步的探索。模仿在bert中使用的掩码语言模型。通过使用自监督预训练,我们的较小的ViT-B/16模型在ImageNet上达到了 79.9%的精度。从头开始训练,和之前的自监督模型相比有2%的巨大提升。但是仍有4%落后于有监督。附录 B.1.2包含更多细节。我们把对比训练的探索留给了未来的工作。
三、Vision Transformer总结
- 写作角度:简洁明了、有轻有重(重要结果放正文),图表清晰。
- 内容角度:Vision Transformer 挖了一个大坑:可以各个角度的分析,提升或推广。
- 任务角度:VIT只做了分类,那么检测、分割、其它领域的任务未来都可以做。
- VIT 结构的角度:可以对开始的 tokenization,中间的transformer block,包括目标函数有监督或不同的自监督训练方式都可以改进。
- VIT 打通了 CV 和 NLP 之间的鸿沟,挖了一个更大的多模态的坑,对视频、音频、或者基于 touch 的信号,各种 modality 的信号都可以拿来用。