Vision transformer总结
摘要
Transformer 在自然语言处理方面得到极大地发展,但是在计算机是觉得其他任务中应用有限。将卷积神经网络和attention相结合,或者用attention替换卷积神经网络中的某些部分,但是仍然保持总体结构。在本文中,作者认为,在图像分类任务中可以用transformer完全的完全的替代卷积神经网。当对transformer在大的数据集上进行训练,然后迁移到小的数据集上时,可以取得极好的结果。与最先进的卷积网络相比,Vision Transformer (ViT) 获得了出色的结果,同时需要更少的计算资源来训练.
介绍
在大型语料库上进行训练,然后在小的数据集上应用,取得了非常不错的结果。由于transformer的计算效率和可扩展性,随着模型和数据的增长,并未出现饱和现象。
受transformer在NLP领域的启发,一部分尝试将类似CNN的架构与Attention相结合(利用卷积神经网络子在softmax层之前所提取到的特征矩阵作为输入,将transformer和CNN结合起来),另一些是用transformer完全的取代CNN的功能。第二种在理论上是非常有效的,但是由于使用了专门的注意力机制,尚未在现代硬件加速器上有效地扩展,所以模型还不是很大。因此,在大规模图像识别中,经典的类 ResNet 架构仍然是最先进的。
1.将网络中的特征图当做transformer的输入
2.用一个stand-alone Attention(孤立自注意力),用一个局部的小窗口 去控制计算的复杂度
3.用Axial Attention(轴注意力),分别在高度和宽度上记性Attention。
受transformer在NLP领域的启发,我们希望直接将transformer应用于图片识别,尽可能少的做改动。我们所采用的办法是将图片分割为一个一个的patch,然后将每个分割的图片的线性嵌入序列当做“单词”输入给transformer,我们以有监督的方式在图像分类上训练模型。
结论提出,自监督的训练方式是一个非常需要研究的方向
在中等大小的数据集上进行训练时,模型的准确度要比同等大小的Resnet网络低几个百分点,分析原因是因为,transformer的不想CNN具有本身的归纳偏执和平移不变性的特性
因此在对数据量不足进行训练时不能很好地泛化
机器学习---归纳偏执(Inductive Bias)-CSDN博客
如果在大的数据集上进行训练,我们的模型胜过归纳偏执。VIT在大的数据集上进行训练之后应用于下游任务取得了出色的成果。在ImageNet-21K和JFT-300数据集上进行预训练,
ViT 在多个图像识别基准上接近或击败最先进的技术。
5 CONCLUSION
我们除了最初的对于图像进行patch处理之外,没有将特定图像的归纳偏执引入VIT之中,最大限度的将NLP中的原始Transformer应用到图像上。当在大的数据集上进行预训练之后可以泛华到中小型数据集上并取得很好的成果,因此,Vision Transformer 在许多图像分类数据集上匹配或超过了最先进的技术,同时预训练成本相对较低。
通过本文的研究,可以将Transformer泛化到计算机视觉的其他任务之上,另外就是。预测自监督的训练模式是一个研究方向。
二、相关方法
基于大型 Transformer 的模型通常在大型语料库上进行预训练,然后针对手头的任务进行微调:BERT (Devlin et al., 2019) 使用去噪自监督预训练任务(self-supervised),而 GPT 工作线使用语言建模(language modeling)作为其预训练任务(Radford et al., 2018; 2019; Brown et al., 2020)。
如果将transformer应用于图片,需要关注每个像素点,随着像素的二次方的增大,使得transformer不能应用于大的图片,出现了几种处理方法:1. 只对每个查询像素的局部邻域应用自我注意,而不是全局应用。这种局部多头点积自注意力块可以完全替换卷积;2. Sparse Transformers (Child et al., 2019) 对全局自注意力采用可扩展的近似,以便适用于图像。3.在极端的情况下可以采用轴注意力机制。但是种种的方法都需要硬件加速器进行加速。
在我们的工作之前,在CAIF-10数据集上一应有把图片分割成2x2的patch,但是这种方法仅仅适用于小的图片(32X32),但是ViT证明了在大的数据集上进行预训练可以将ViT作用到大的尺寸的图片上,并且取得不错的结果
将卷积神经网络与self attention 相结合研究有很多,1.通过提高分类的特征图来处理CNN的输出,2.将CNN的输出作为transformer的输入。这些研究包括图像分类,目标检测,语义分割,自监督学习以及对于文本的处理。
最近的另一个相关模型是图像 GPT (iGPT) (Chen et al., 2020a),它在降低图像分辨率和颜色空间后将 Transformer 应用于图像像素。该模型以无监督的方式作为生成模型进行训练,然后可以对生成的表示进行微调或线性探测以提高分类性能,在 ImageNet 上实现了 72% 的最大准确率。(IGPT采用的无监督训练不如ViT采用的有监督训练所取得准确率。)
3 METHOD
在模型设计中,我们尽可能地遵循原始 Transformer (Vaswani et al., 2017)。这种有意简单设置的一个优点是可扩展的 NLP Transformer 架构及其高效实现。保证便于使用
- class token可以用group avargr pooling替代,但是为了保证使用的是原始的transformer,依然使用class token。
- 1D的position embording可以用二维或者1D的相对位置进行替换,但是为了保证使用的是原始的transformer,仍然使用1D的position embaiding
- 在大的数据集上使用ViT可以取得好的结果,如果是在小的数据集上进行训练时,仍然推荐使用卷积神经网络。
- 在transformer中,每个位置的图片都学到了更长距离的权重,最后经过更多层的self attention之后,每个未知的patch都能学习到关于其他位置的权重信息。
- 最后的layer normzation层所提取到的特征(class token)反映射到原图像中,可以发现。Self attention是学习到了图片中的分类信息。
三、方法
整个模型结构可以分为五个步骤进行:
1、将图片切分成多个patch。
2、将得到的patches经过一个线性映射层后得到多个token embedding。
3、将得到的多个token embedding concat一个额外的CLS token,然后和位置编码相加,构成完整的encoder模块的输入。
4、将相加后的结果传入Transformer Encoder模块。
5、Transformer Encoder 模块的输出经过MLP Head 模块做分类输出。
Transformer Block:
Layer Norm层:标准归一化,为了更好的收敛。
MHA层:多头自注意力机制
输入和输出做残差连接
Layer Norm
MLP层: Linear + GRLU +Linear +Dropout
L个Transformer Block 构成一个完整的Transformer Encoder模块。经过Transformer Block 后维度不变。
3.1图像块嵌入(patch Embeddings)
将transformer所需要处理的图像处理成patch,原图像大小是224x224,新的patch的大小时16x16,N=224x224/16x16=14x14=196,一个图片被分成196个patch大小,由于图像的channel是3,所以一个patch的大小是16x16x3,将一个patch拉成一维的向量大小是768,所以,经过embidding的向量大小是196x768,由于需要一个class token来学习self attention中的分类信息,所以最后的向量大小是197x768,之后进行position embidding之后的向量大小为197x768,197x768的向量经过十二个头的多头自注意力机制之后,每个头的矩阵大小是64x768。最后12个多头自注意力的输出进行拼接,输出维度为197x768,经过一个layer normzlination(D-->4D)输出维度为197x3074,输入到MLP之后的输出为(4D-->D)197x768,之后进行到下一个transformer encoder,最后进过N层的transformer encoder 之后输出到layer norm,经过softmax输出为分类结果
3.2可学习的嵌入(Learnable Embedding)
3.3位置嵌入(position Embedding)
相反,若不给模型提供图像块的位置信息,那么模型就需要通过图像块的语义来学习拼图,这就额外增加了学习成本。ViT 论文中对比了几种不同的位置编码方案:
- 无位置嵌入
- 1D的位置嵌入:对分割后的patch进行一维的编号
- 2D的位置嵌入:对分割后的patch进行二维的编号,行编号的长度为D/2, 列编号的长度为D/2。
- 相对位置嵌入:利用相对位置不变性,用Pk-Pq表示距离
不提供位置编码效果会差,但其它各种类型的编码效果效果都接近,这主要是因为 ViT 的输入是相对较大的图像块而非像素,所以学习位置信息相对容易很多。
Transformer 原文中默认采用 固定位置编码,ViT 则采用 标准可学习/训练的 1-D 位置编码嵌入,因为尚未观察到使用更高级的 2-D-aware 位置嵌入 (附录 D.4) 能够带来显著的性能提升 (当然,后续的很多 ViT 变体也使用了 2-D 位置嵌入)。在输入 Transformer 编码器之前直接 将图像块嵌入和位置嵌入按元素相加:
论文中也对学习到的位置编码进行了可视化,发现相近的图像块的位置编码较相似,且同行或列的位置编码也相近:
3.4 Transformer编码器
3.5ViT张量维度变化举例
- 输入图像 (input images) 的 shape = (b = b, c = 3, h = 256, w = 256)。
- 输入图像 (input images) 被切分 (Split / Divide) 并展平 (Flatten) 为:batch size 仍为 b,通道数 c = 3、尺寸 P = 32、个数 N = (256×256) / (32×32) = 64 的图像块 (Patch),每个图像块 (Patch) 均有 P²c = 32×32×3 = 3072 个像素。
- 图像块 (Patch) 馈入线性投影层 (Linear Projection),得到个数/长度 (length) 为 N = 64、像素数/大小/维度 (dimension) 为 D = (32×32×1) = 1024 的图像块嵌入 (Patch Embedding)。
- 每个图像块嵌入 (Patch Embedding) 按元素加 (Element-wise Summary) 入位置向量/嵌入后,尺寸仍为 N×D = 64×1024。
- 具有位置嵌入的图像块嵌入 (Patch Embedding) 再于长度 (length) 维度 拼接 (Concat) 一个用于预测分类结果的 1×1024 可学习嵌入/向量,构成大小为 65×1024 完整嵌入 (长度 (length) N+1 = 64+1 = 65)。
- 完整嵌入输入编码器经过一系列前向处理后,得到尺寸仍为 N×D = 65×1024 的输出。
3.6归纳偏执和混合架构
归纳偏置 (Inductive bias):注意到,Vision Transformer 的图像特定归纳偏置比 CNN 少得多。在 CNN 中,局部性、二维邻域结构 和 平移等效性 存在于整个模型的每一层中。而在 ViT 中,只有 MLP 层是局部和平移等变的,因为自注意力层都是全局的。二维邻域结构 的使用非常谨慎:在模型开始时通过将图像切分成块,并在微调时调整不同分辨率图像的位置嵌入 (如下所述)。此外,初始化时的位置嵌入不携带有关图像块的 2D 位置的信息,图像块之间的所有空间关系都必须从头开始学习。
机器学习---归纳偏执(Inductive Bias)-CSDN博客
混合模型:在对底层特征进行提取时,仍然按照卷积神经网络对于图片的处理方法,只是将卷积神经网络所提取到的特征层作为transformer的输入构成混合网络,在对特征层添加position embedding之后输入到transformer中进行训练。
3.7超参数
如下的 ViT 主要超参数 直接影响模型参数及计算量:
- Layers:Encoder Block 数量;
- Hidden Size D:隐藏层特征大小,其在各 Encoder Block 保持一致;
- MLP Size:MLP 特征大小,通常设为 4D;
- Heads:MSA 中的 heads 数量;
- Patch Size:模型输入的 Patch size,ViT 中共有两个设置:14x14 和 16x16,该参数仅影响计算量;
四、总结
那么 ViT 至少需要多大的数据量才能比肩 CNN 呢?结果如下图所示。可见预训练的数据量须达到 100M 时才能凸显 ViT 的优势。Transformer 的一个特色其 Scalability:当模型和数据量提升时,性能持续提升。在大数据下,ViT 可能会发挥更大的优势。
大的数据集用vit效果更好,小的数据集用CNN效果更好
此外,论文分析了 不同 Layers 的 Mean Attention Distance,其类比于 CNN 的感受野。结果表明:前面层的 “感受野” 虽然差异很大,但总体相比后面层 “感受野” 较小;而模型后半部分 “感受野” 基本覆盖全局,和 CNN 比较类似,说明 ViT 也最后学习到了类似的范式。