论文阅读:《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》
论文地址:https://arxiv.org/abs/2010.11929
代码地址:https://github.com/google-research/vision_transformer
https://github.com/lucidrains/vit-pytorch
论文翻译:https://blog.csdn.net/weixin_40671425/article/details/121457772
面向任务:有监督目标检测
Motivation:使用self-attention机制完全替代CNN进行目标检测任务。
Contribution:1.本文的作者尽可能地将NLP领域的transformer不作修改地搬到CV领域来。2.为了实现将self-attention机制完全替代cnn进行目标检测任务这一目标,本文作者设计了一种将三维的图像转化为序列化的数据的方式。3.没有使用faster-rcnn或者其他类似的backbone网络进行预处理。4.使用方便,可以达到开箱即用。5.本文通过大量的大规模实验证明了Visual Transformer模型的能力优于SOTA CNN模型。6.本文利用不同尺度的数据集和模型,设计了benchmark,与ResNet和混合模型进行比较评价。
Method:模型的架构分为3步,Patching Embedding, Position & Learnable Embedding 还有 Transformer Encoder。
Transformer很强, 但视觉任务中的应用很有限。Transformer提出后在NLP领域中取得了极好的效果, 其全Attention的结构, 不仅增强了特征提取能力, 还保持了并行计算的特点, 可以又快又好的完成NLP领域内几乎所有任务, 极大地推动自然语言处理的发展。但在其在计算机视觉领域的应用还非常有限。 在此之前只有目标检测(Object detection)中的DETR大规模使用了Transformer, 其他领域很少, 而纯Transformer结构的网络则是没有。
我们知道CNN具有平移不变形,但是transformer基于self-attentation可以获得long-range信息(更大的感受野),但是CNN需要更多深层的Conv-layers来不断增大感受野。相当于卷积模型来比,transformer在减少计算资源的同时获得了非常出色的结果。当对中等规模数据集(例如ImageNet)进行训练的时候,此模型所产生的适合的精度要比同等规模的ResNet低几个百分点。数据量越大,模型越友好。很多图像特征提取器将CNN与专门注意力机制结合在一起,但是未能在硬件加速器扩展。transformer缺乏CNN固有的一些感应偏差,例如平移不变性和局部性,因此在训练不足的数量时候,很难有好的效果。
我们证明了,对CNN的依赖不是必要的,在图象识别任务中,在图像块(image patches)的序列上应用纯粹的Transformer模型也可以表现得很好。当使用大量数据进行预训练,再迁移到多个中小型图象识别基准库后,ViT得到了优异的结果,相比于最先进(SOTA)的卷积网络,而训练所需要的计算资源更少。
归纳偏置(Inductive bias):vit比cnn有更少的特定于图像的归纳偏置。在cnn中,局部性、二维邻域结构和平移不变性贯穿整个模型的每一层。在ViT中,只有MLP层是局部和平移等变的,而Self-attention是全局的。二维邻域结构使用地非常少:在模型开始时,将图像切割成小块,并在微调时对不同分辨率的图像进行位置嵌入调整。除此之外,初始化时的位置嵌入不包含块的二维位置信息,所有块之间的空间关系都需要从头学习。
混合结构(Hybrid Architecture):输入序列可以由CNN的feature map组成,从而替代原始图像块。在这个混合模型中,将patch embedding 应用于从CNN feature map中提取的patches。作为一种特殊情况,patches的尺寸可以是1x1,即简单地将feature map平坦化,并映射到Transformer的尺寸即可得到输入序列。如上所述添加分类输入嵌入和位置嵌入。
步骤一(input)
输入图像大小尺寸为,首先我们将图片进行切分,按照patch_size进行切分,这样我们就得到了大小的一个个图块, 这里的图块数量为。联想到transformer,这里的N就可以理解是序列长度,其中序列中每个element的维度dim称之为patch embedding。在我们进行图片分类的时候我们一般在序列前加入一个element,我们称此element为,这样我们得到序列长度为N+1,在训练的时候我们可以通过此element进行图片分类。最后再加上位置矩阵(注意这里是add不是concate)构成我们的输入矩阵z0。
步骤二(forward)
transformer编码器主要由两个components构成分别是MSA(multi-head self-attention)和MLP(multi layer perceptron)组成。
第一个公式:这里的表示的类别element,表示的是输入的每个patch,E代表的对应的权重,N表示的patch的数量,代表的是position的信息。第二个公式:这里的LN表示的是Layer Normalization
这里的qkv矩阵之前已经说过了,如通过输入z与权重得到而来,我们在通过公式得到我们的Attention权重。最终利用v矩阵与attention权重相乘得到。我们得到如下公式:
MLP其实就是多层感知机,这里很容易理解,其包含具有GELU非线性的两全连接层。根据公式(2)(3)可以看到ViT模型结构也采用了残差机制。
特征提取:
a.对输入Patches进行LN标准化处理,用于加快网络收敛;
b.MSA(多头注意力机制),类似CNN中使用多个滤波器,有助于网络捕捉更丰富特征;
c.MLP(多层感知器),全连接+GELU激活函数+Dropout;
d.残差连接,防止梯度消失;
一些训练细节:
训练的时候先在大的数据集上进行预训练,然后用下游任务的小数据集fine-tune。fine-tune的时候用高分辨率的图像往往性能更好。当图像分辨率增大后,是维持每个patch的大小不变,生成更多的patch,还是增大patch的size,维持patch的数量不变呢?作者选择了前者。对于transformer来说,它可以处理任意长度的序列(只要显存够),所以这反面是不会有影响的,但是position embedding会受到影响(可能失效),为了匹配维度,作者根据patch的位置对position embedding进行了2D插值,这是ViT中唯一的归纳偏置(inductive bias)。
跟SOTA对比:
在JFT上预训练的ViT-L/16性能比BiT-L(也是在JFT上进行预训练)更好,且所需的计算资源更少。模型更大一点的ViT-H/14性能进一步提升,尤其是在更具挑战性的任务上,如ImageNet、CIFAR-100和VTAB,且所需的计算资源依旧远小于之前SOTA。在I21K上预训练得到的ViT-L/16性能也不错,需要的计算资源更少,在8TPU上训练30天即可。
数据集的大小对性能的影响:
左图中,在小数据集(ImageNet)上,尽管使用了很强的正则化操作(weight decay,dropout,label smooth),大模型(ViT-L)性能还是不如小模型(ViT-B),应该是过拟合了,也不如BiT(ResNet)。在大数据集(JFT-300M)上,大模型性能更好。
右图中,在9M,30M,90M,300M的JFT数据集上做实验,且不进行正则化,但是采用early-stopping方法,以探索模型本身的属性。对比ViT-B/32和ResNetx1(二者参数量差不多),在小数据集上,ViT-B/32性能不如ResNet,但在90M+的数据集上,ViT-B/32性能更好,对比ViT-L/16和ResNet也是一样。作者得出的结论是,在小数据集上,卷积的归纳偏置是是非常有用的,但在大数据集上,直接学relevant pattern就够了。
计算资源与性能的折中:
Hybrid表示先用ResNet提取patch的特征,而不是直接把patch送入网络。跟ResNet相比,ViT性价比更高,相同性能,ViT所需要的计算资源更少。跟Hybrid模型相比,在计算资源有限的情况下,Hybrid模型性能更优,但随着计算资源的最佳,性能的gap逐渐缩小为0。这让人有些意外,因为直觉上,ResNet提取的特征对ViT应该是有帮助的。
代码结构:
ViT的实现以及初始化
每个transformer包含Attention模块和FeedForward(FFN)模块
重点相关论文
1.Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. In NIPS, 2017.
Transformer 的提出,祖师爷
2.Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. BERT: Pre-training of deep bidirectional transformers for language understanding. In NAACL, 2019.
BERT 模型,这篇论文中大量的设计来自BERT,如xclass标志位,自监督预训练等
3.Jean-Baptiste Cordonnier, Andreas Loukas, and Martin Jaggi. On the relationship between selfattention and convolutional layers. In ICLR, 2020.
像素级,小块级别的attention,和vit很一致
4.Mark Chen, Alec Radford, Rewon Child, Jeff Wu, and Heewoo Jun. Generative pretraining from pixels. In ICML, 2020a.
像素级别,使用Transformer的图像生成模型
参考资料:https://bbs.huaweicloud.com/blogs/detail/280939
https://www.jianshu.com/p/20660b896f07
https://zhuanlan.zhihu.com/p/343812157
https://blog.csdn.net/zhuixun_/article/details/115920130
https://blog.csdn.net/cdknight_happy/article/details/121031678
https://zhuanlan.zhihu.com/p/398983122
https://blog.csdn.net/cg129054036/article/details/121644780
https://zhuanlan.zhihu.com/p/359071701
https://zhuanlan.zhihu.com/p/422144659
ViT三部曲
https://blog.csdn.net/qq_44055705/article/details/113825863