您的位置 首页 > 数码极客

变形金刚如何映射科技

resnet一直是计算机视觉中的backbone模型,

transformer变形金刚也一直是自然语言处理中的backbone思路。

那么当transformer来进行计算机视觉任务时,resnet还能胜利?

论文解读Vision Transformer

论文地址:

代码地址: research/vision_transformer


使用transformers进行图像识别

NLP任务的de-facto标准模型就是Transformer,但计算机视觉的标准模型还是没有的。

在CV中,一般的方法是使用注意力机制用来代替某些模块。

其实,注意力思路不一定非要依赖CNN。

纯transformer直接去做识别,效果也很好的。

使用纯transformer就好像BERT一样,在大量数据上预训练,然后在下游数据集上做迁移学习,比如ImageNet,CIFAR-100,VTAB,等。

Vision Transformer(ViT)于CNN相比,取得了很好的效果,并且训练起来需要更少的资源。

  • 1 Introduction
  • 2 Related Work
  • 3 Method
  • 4 Experiments
  • 5 Conclusion
  • Acknowledgements
  • References


1 introduction

Transformers是NLP任务的核心模型。

由于计算的加速,可以训练超大模型,参数量超过100B,随着数据和模型参数的提升,也没发现模型有衰减现象。

但在CV,没有一个可训练的超大模型,当前的主流CNN并没有产生超大规模模型。

但是受Transformers启发,很多模型在尝试使用注意力机制与CNN的结合,有些论文还完全放弃了CNN,用注意力结构来代替。但是这些研究都没能出现一个可缩放的结构,没有出现一个超大模型出来。

当前,大规模的图像识别,经典的ResNet还是主流。

Transformers既然在NLP领域训练出来了一个超大模型,作为NLP所有任务的backbone使用,那么直接用transformer来进行图像识别,不对或者尽量少的修改transformer结构,或许也可以的。

为了完成这个思路,我们把图片序列化:分成网格,然后提取这些网格内图像的线性嵌入特征,等于说是把一个图片矩阵,变成一个序列的向量,然后输入到Transformer中。

这里网格内的图像块,就好比NLP任务中句子中的词。图像对应句子。图像块对应词。

我们用有导师的方式,训练这个模型去对图像分类。


当在中规模数据集ImageNet训练Transformer时,没有用任何的正则化方法,它的性能与Resnet相比,略微差一些。

这好像证明了CNN的卷积中的 等效变形和归纳偏置结构是非常有效的,而Transformer正好缺少了这些结构,所以效果不好。

但是在大型数据集上进行训练(14M-300M images),发现CNN 的归纳偏置结构失败了。

当有足够量的数据训练时,ViT模型可以用非常少的数据迁移到其他任务上。当使用ImageNet-21K,或者JFT-300M数据集这中大型数据集时,Vit效果好过CNN。在ImageNet上,最好的模型达到88.55%, 在ImageNet-ReaL上,达到90.72%,在CIFAR-100上,达到94.55%,在VTAB上达到77.63%.


2 相关工作

2017年,Vaswani提出用Transformers来做机器翻译,从此Transformers成为了许多NLP任务的sota.

基于Transformer的大型模型,通常在大数据集上预训练,然后在具体任务上微调:2019年,Devlin提出的BERT就是这样,

BERT使用无噪声的自导师的方法去预先训练。

GPT的一系列工作,2018年,.2019年Radford,2020年Brown就是用语言模型作为预训练模型的。


初期的自注意力会需要像素与像素之间进行注意力。这样计算量就是像素的平方了,显然是不现实的。

所以,为了在图像是使用Transformers来,2018年,Parmar对每个像素的一个邻域范围内的像素使用了自注意力机制。

2019年,Hu同学,2019年Ramachandran同学,2020zhao同学的研究表明,像这样局部像素之间的多头点积自注意力模块,完全可以代替卷积模块。

2019年的Child同学的工作有点不同,它使用了全局注意力的思路,不过这个全局是近似的,全局的程度是可控制的,因为真正的全局自注意力,计算量太大,是不现实的。

2019年Weissenborn同学把注意力机制用在了不同尺度的模块中。 2019年Ho同学,2020年王同学仅仅在X方向或者Y方向上做注意力,不在是一个区域内。

这些方法使用注意力,期望在视觉任务上取得较好的结果。但是需要比较繁琐的编程,才能在硬件上完成比较高效的加速。


2020年Cordonnier同学的思路跟我们最相似,把图片分成2x2的子图片,然后使用全局自注意力。这个模型与我们的ViT非常的像,但是显然Vit做的更彻底,并且证明了大规模预训练模型vanilla Transformers比sota的CNNs更好。

Cordonnier使用2x2图像块,使模型仅仅工作在低纬度分辨率上,但是,我们解决了中纬度分辨率上的图片识别。


CNN与自注意力的结合有非常多有意思的方式,比如2019年Bello,用自注意力来增强feature maps,比如2018年Hu同学,2020年Carion同学,在目标检测任务上,利用自注意力,对CNN的输出进行后处理。

以及其他的用于视频处理的,图像分类的,无导师的显著性检测的,以及一些比如OCR类的,将文字和视觉相结合的任务上。


2020年,Chen同学有个模型,image GPT,简称IGPT,先将图片在尺度和颜色上降低维度,然后使用了Transformers. 这个模型是一个风格转换的生成式模型,训练是无导师的,这个模型提取到的图像特征可以微调,或者线性预测的方法去做图像分类,在ImageNet上能够达到72%。


我们也收集了使用超过ImageNet数据集去训练图像分类模型的论文。

有人使用额外数据进行训练,有人专门研究CNN性能与数据集尺寸的关系。

有人使用迁移学习的思路,将CNN用在了大规模数据集ImageNet-21k和JFT-300M上做实验。

我们也用了这两个比较新的大型数据集,但是我们训练的是基于Transformers的,不是基于ResNet的。


3 Method


尽量使用原版2017年Vaswani的Transformer.为什么要尽量用原版?因为原版Transformer模型很容易放大,放大后性能还不衰减。并且原版transformer是实现代码是开箱即用的。非常方便。

3.1 Vision Transformer(ViT)




HxWxC —> N个1xP^2*C的向量,N=HW/P^2,(P,P)是图像块的大小。


NxP^2*c—> NxD,使用公式1表示的可学习的linear projection,线性映射

注意到,公式(1)中的Xclass, 它是一个可学习的embedding,它在每层transformer中的输出都是第0个,也就是它的输出来产生图片的分类结果y, 公式4所示

预训练的时候,分类头是一个隐藏层的MLP。微调的时候,分类头就是一个线性层。

位置潜入是1D的,2D的位置潜入效果并不好。附件4有实验结果。

Transformer整体由交替的多头自注意力MSA和多层感知器MLP交替组成,每次MSA或者MLP后,都有Layernorm(LN),都有残差设计,如公式2,3所示。

MLP是两层的,激活函数为GELU


Inductive bias

Vit的相比CNN,少了归纳偏置。

CNN中,局部的2维邻域上做等效变换是贯穿模型始终的。

Vit中,只有MLP是局部的,而且是等效变换的, 自注意力层是全局的。两维邻域的信息很少使用:开始的时候,将图片切成小块,微调的时候,调整不同分辨率图像的位置嵌入。并且,位置嵌入并没有2D信息,图像块之间的空间关系是学习得到的。


Hybrid Architecture

其实,transformer的输入,也可以是CNN的特征图上的patches,不一定是原图傻姑娘的patches. 有个特殊情况,feature map上的patches是1x1xc的,这意味着简单的拉平feature map,然后用矩阵将channel映射为D,就得到了Transformer的输入序列。 其他的细节比如分类输入嵌入和位置嵌入都与标准的vit一样


3.2 Fine-tuning and Higher resolution

我们在大型数据库上预训练vit,然后在下游任务上微调。微调时,移除预测头,添加零初始化的DxK的前馈层,K是下游任务的类别数。相对于预训练的时候,用更高分辨率去微调更加有效,虽然图片分辨率高了,但是patch大小不能改变,输入transfomer的序列可以变长。vit可以允许输入序列是长度可变的,不过如果这样,预训练使用的位置嵌入就没意义了。所以我们使用了预训练时的位置嵌入的2D差值,作为变长以后序列的位置嵌入。

注意,图片分辨率自适应和图像块的提取是vit中唯一与inductive bias有关的操作,我们手工操作后,输入到了vit中,vit内部并没有与inductive bias相关的操作。


4 Experiments

我们测试了ResNet,vit, hybrid的学习能力,提取特征的能力,也就是表征学习能力。

为了理解每个模型的数据需求量,我们在超大规模的数据集上预训练,在很多基准任务上做了测试。

Vit的计算开销非常小。

最后,用自导师的方法做了一个小实验,展示了vit代表未来

4.1 setup

Datasets.

为了展示模型是否有放大的能力, 我们使用ILSVRC-2012 ImageNet dataset with 1k classed ,一共1.3M images,

还使用了2009年,Deng发布的数据集ImageNet-21k,21k类别,14M图片

还使用了2017年,sun发布的数据集JFT,18k类别,303M高分辨率图片。

我们按照2020年kolesnikov的方法消除了数据集中的重复。

预训练完成后,我们把模型迁移到了一些基本的任务上:ImageNet的原始验证标签, 清理过的真是标签,2009,krizhevsky的CIFAR-10/100,2012年,Parkhi的OxfordIIIT Pets, 2008年Nilsback & Zisserman的Oxford Flowers-102.

对这些数据的预处理都按照2020年kolesnikov的方法进行。

也使用了2019年Zhai的19-task VTAB分类数据集。VTAB的每类只有1000个样本去迁移学习。

任务分为三组:

Natural- 跟以上的Pets,CIFAR一样

Specialized-医学和卫星图像

Structured-需要几何理解的任务,比如定位。


Model Variants



实验了3种vit,分别是vit-base,vit-large,vit-huge,

Base和large直接使用BERT中定义的模型,huge模式是自己添加的。

Vit-L/16, 表示Larger vit模型,图像块的大小是16x16的。

注意到,输入序列的长度与图像块的大小成反比。小的图像块所形成的序列更长,需要更多的计算资源。


我们要与CNN进行比较,选用2016年he同学的ResNet,不过用GroupNormalization代替了Batch Normalization layers,并且使用了标准卷积。这些改变能够提升模型的迁移能力。我们定义更改过的resnet为“ResNet(BiT)”.

对于hybrids vit,我们把其中间的feature map喂给bit,patchsize=1.

为了实验不同的序列长度,我们先实验了使用ResNet50的stage4的输出来生成transfomer的输入序列,后来又实验了使用ResNet50的stage3的输出来生成transformer的输入序列。

使用stage3的输出作为后续vit的输入时,序列的长度增加了4倍。

使用stage3时,并不是使用原来的stage3,而是将resnet50种的stage4用stage3替换掉,也就是说整个模型中有两个stage3,

我们使用第二个stage3的输出来生成vit的输入。


Training & Fine-tuning

我们训练了包含resnets在内的所有的模型,adam,beta1=0.9,beta2=0.999, batchsize=4096. 一个比较高的Weight decay=0.1对所有的迁移学习比较有用。

附件D.1证明,在我们所设定的resnet上,Adam比sgd显著有效。

学习率上,也使用了线性学习率预热和衰减,更多细节在附件B.1.

微调时,我们使用SGD momentum, batch size 512, 来训练所有的模型,更多详细材料在附件B.1.1.

对于表2中,在ImageNet上的结果, 我们在更好的分辨率上进行了微调,

Vit-L/16的分辨率是512, vit-H/14的分辨率是518, 并且使用了factor=0.9999的Pllyak & Juditsky平均,这是参考2019年Ramachandran和2020年Wang的论文。


Metrics

我们统计了在下游任务上的准确率。这个准确率是经过few-shat或者微调得到的。

这里的few-shot是指用岭回归的方式把模型提取到的特征回归到目标向量上。

微调性能好,few-shot速度快。追求性能时,我们主要使用微调。有时需要快速测试,我们就使用few-shot.


4.2 Comparison to stage of the art



先对比vit-H/14 , vit-L/16 和2020年Kolesnikov的Bit,Big Transfer,这个模型使用了resnet做有导师的迁移学习。

第二部分是2020年,Xie同学的噪声学生Noisy Student, 大型的 EfficientNet,使用的是半导师学习,数据集是ImageNet和无标签的JFT-300M。Noisy student是sota.

所有模型是用硬件TPUv3训练出来的。

TPUv3-core-days: TPUv3的核心数乘以训练的天数

表2,小模型VIT-L/16比bit-L更好,他们都是用JFT-300M训练的,但是vit-L/16在所有的任务上都更好,并且更快。

大模型vit-H/14,进一步提升了性能,特别是在更困难的数据集ImageNet,Cifar100,VTAB上。

有趣的是,及时大模型vit-H/14,计算量仍然比之前的sota小。

当然,训练效率的提升,不仅仅与模型结构有关,还与其他参数有关,比如训练策略,优化方法,正则化等。在4.4节,我们做了一个对比: 控制学习参数和 改变网络结构的对比。

最终,vit-L/16,这个在ImageNet-21 k 预训练的模型,在大多数数据集上表现良好。

它可以用一个标准云上的8核心的TPUv3,训练30天就行了。



图2展示了在VTAB任务上,Vit-H/14与前面的sota模型的性能对比。

VIVI模型:在Imagenet和Youtube数据集上训练的与resnet为基础的模型。

S4L模型: Imagenet上的半导师模型

这四个模型中,vit-H/14最好。

在speciallized上,vit-h/14 和 Bit-L比较接近。


4.3 pre-training data requirements


vit在JFT-300M数据集上与训练一下,效果会很好。

vit没有inductive biases,那么数据集的大小到底有多重要?

我们做了两个系列的实验。

首先,逐步增加数据集的大小,先使用imagenet, 再使用iamgenet-21k,最后使用jFT-300M.

在小数据集上,为了取得好的性能,使用了正则化,dropout,label smoothing等技术。



图3展示了训练结果。

Bit CNN,在imagenet上性能比vit好,但是随着数据集增大,变为imagenet-21k,JFT-300M,vit模型最终胜出。


另外一个实验,从JFT300M 数据集中,随机抽取10M,30M,100M,300M的子数据集,然后对模型进行对比。

所有模型在所有数据集山的训练策略是一样的,这样更能去掉正则化的方法小效果,更能表明模型本身的特性。我们使用了早停法,获取最好的验证模型。 为了节省算力,使用few-shot代替fine-tuning.

Vit-b/32与resnet50相比,在9M上很快,很差。但是在90M以上的数据集很好

Vit-L/16与rewnet152x2也是一样的现象。

这种现象表明了卷积的集中偏置在小数据集上是有效的,但是对大型数据集很难凑效。


还有一点需要注意, 图4中的准确率是比较低的,还有表2中的准确率也是比较低的。这些是未来比较有意思的地方。


4.4 scaling study

规模可调的模型


数据的大小不再影响模型的性能,我们把不同规模的模型,训练同样的epochs后,对比了其性能。

对比的模型有:

7 resents,

R50x1,

R50x2

R101x1,

R152x1

R152x2,

Plus r152x3,

R200x3 , 14 epochs


6个Vision Transformers:

vit-b/32,

B/16,

L/32,

L/16,

这些训练7个epochs

然后

L/16

L/14训练14个epochs;


5个hybrids[模型后面的数字指下采样倍数,不再是patch的大小]


R50+vit-B/32,B/16,L/32,L/16,7 epoches

R50+vit-L/16,14 epochs.



图5展示了训练结果。

更多细节在附录D.5. 和Table6

3个特点:

  1. Vit使用2-4倍少的计算获取同样的性能。
  2. 在少量训练上,hybrids效果更好。但是,在大规模性恋上,hybrids的效果比明显了。这说明,CNN并不是在所有的尺度上都有效。
  3. 从数据上看,vit仍然非常有潜力,仍然可以继续扩大规模。


4.5 Inspecting vision transformer

回顾检测vit



Vit的第一步就是将图像切割成块,然后将块projection成向量。

图7展示了学习到的embedding filters的主成分。这些主成分是构成每个图像块的主要信息。

Vit的第二部是添加位置嵌入特征。图7也展示了学习到的位置嵌入特征之间的相似度。我们观察到,位置相近的图像块的位置嵌入特征更像。

同一行/列的图像块拥有更相似的位置嵌入。

模型自己学习出了2D图片的拓扑结构,这也解释了为什么手动定义2D的位置嵌入时,模型没有提升。


Vit在一开始的层,就允许从全局获取信息。

我们调研一下,注意力能力是发生的区域大小。

我们基于注意力权重,获取了当前位置信息与哪些位置的信息关系比较大,我们计算了所有相关信息的位置的平局值。

这个指标在CNN中对应于感受野。

我们发现,在一开始的层,一些少量的头的感受也就比较大,这说明,用注意力机制可以集中全局信息。其他头的感受也比较小。

但是在hybrid模型中,感受也比较小的就很少。

这说明什么?

说明在一开始的层中,vit 在模仿cnn提取局部信息。


总的来看,随着深度的增加,注意力距离也在增加,即等效感受野也在增加。



从全局来看, 我们发现,模型注意到一些与分类目标语义相关的区域上,如图6所示范。


4.6 self-supervision

自导师


Transformer在NLP任务上展示了令人印象深刻的能力,它的成功不仅是因为模型规模放大能力,也因为模型是可以自学习的。

所以,我们也在遮挡区域预测上,初步探索了其自学习能力,模仿BERT。

用自学习预训练后,vit-B/16在ImageNet上获取了79.9%的准确率,相对于从零训练,提升了2%,然是这个结果仍然比有导师的预训练低4%。

附录B.1.2含有更多细节。

未来我们再进行更多的关于自训练与有导师训练的对比探索。


5 conclusion


我们展示了transformers在图像识别上的直接使用方法。我们没有像之前的工作那样保守,仅仅把自注意力用于CNN模型中,我们没有使用CNN,也就是没有使用CNN中的集中偏置,我们把图片转换成一个序列,模型处理序列就行了,就像在NLP中一样。

这样的方式构造的模型,大模型的性能非常好,也就是说,模型的规模是可调的,并且数据集规模越大越好。

所以说,vit在很多图像分类数据集上都获取了sota,并且其预训练更高效。


虽然这个结果令人鼓舞,但是还有很多挑战。一个就是在其他任务比如目标检测和分割上,使用ViT。 从我们的结果来看,将vit用在u表检测和分割上,是可期待的。

其他的领域也都在使用自学习的预训练模型去提升。

我们初步的结果展示了自学习的预训练模型所带来的提升,但是我们还没有做大规模的自学习训练。

vit的规模进一步放大能够带来精度的提升。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“变形金刚如何映射科技”边界阅读