Transformer for image recognition at scale论文阅读笔记

原论文链接:https://openreview.net/forum?id=YicbFdNTTy

摘要

因为transformer已经成为NLP任务中标准的方法了,但是在计算机视觉中的应用还是有限,但是注意力机制在图像中也可以应用,可以是纯attention,也可以是结合CNN的,所以CNN并不是必要的。VIT(vision transformer)的提出已经在很多评价标准上成为了SOTA的方法,并且训练需要的计算资源更少。

引言

transformer是基于自注意力机制的,在NLP任务中,主流的方式是先在一个大文本语料库上进行预训练,然后再去一个小一点的特定任务的数据集上进行微调。因为transformer的计算效率高(并行处理)具备扩展性等优点,可以训练很大规模的模型,所以到目前还没有出现饱和的迹象。
在CV任务上,受NLP任务的启发,已经存在使用attention替代CNN的工作了,但是目前Resnet仍然是图像分类任务上最SOTA的方法。
在中等规模的数据集,比如说ImageNet上,如果没有很强的正则化,transformer的效果没有CNN好。这里原文中有一句“Transformers lack some of the inductive biases inherent to CNNs”,意思是transformer缺乏CNN固有的归纳偏置,对于归纳偏置这个词我有点疑惑,经过查找,我的理解是CNN有感受野,获取局部特征,而transformer获取的是一整个序列的资料,相当于CNN是带着偏见(把相邻的图像特征放在一起就更容易得到解)的。
但是实验发现,大规模的数据训练可以克服缺乏归纳偏置的问题,首先在足够的数据上进行训练,然后再转换到更少数据的任务上。最好的模型在image net上的准确率达到了88.55%

相关工作

其实很多人已经尝试了使用transformer在图像识别上的应用,但是要么是对每个query pixel使用局部的attention,要么是做一些近似。但是这些特定的注意力体系需要在硬件加速器上复杂配置。
上图是模型预览

结果

这篇文章有什么成果呢?
(1)直接将transformer应用到图像识别中,除了在最初的图像切片过程中,没有引入特定于图像的归纳偏差。
(2)将图像转换成一序列的补丁patches,并使用标准的transformer模型来处理它们。在很多图像分类数据集取得了SOTA,并且在大数据集上的预训练也相对cheap一点。
(3)但是仍然存在一些挑战:一个是将viT应用到其他的视觉任务中,一个是继续探索自监督预训练方式,在自监督预训练和大规模监督预训练之间还存在很大的鸿沟。最后是进一步扩大Vit的规模。

方法

基本按照transformer的原始结构,尽可能地不进行改动。
sequence embedding
处理2D图像,将H×W×C的图像转换成平铺的2D序列patches,H和W是图像的分辨率,C是图像的通道数。(p,p)是每个补丁的分辨率,N=H×W/p²是产生的patch数量,也就是transformer输入序列的有效长度(类似于NLP中一句话的长度)。

position embedding
使用标准的可学习的1D位置embedding方式,因为使用了2D的位置嵌入方法并没有显著的提高性能。

encoder
transformer的encoder是由多头注意力机制(MSA)、MLP blocks(多层感知机)交替的,在每一个block之前使用layer norm层,每一个block之后使用残差连接。

inductive bias(归纳偏差)
初始化时的位置嵌入不携带补丁的二维位置信息,补丁之间的所有空间关系必须从头学习。

higher resolution and pre-trained
当给定的输入是更高像素的图片时,保持补丁的size相同,就会导致更大的sequence长度,虽然transformer能够处理任意长度的序列,但是这样可能使得预训练的位置embedding不再有意义。因此,我们根据预先训练好的位置嵌入在原始图像中的位置,进行二维插值。

做了什么实验

(1)评估了resnet、viT和混合结构模型的表征学习能力。
(2)为了理解每个模型的数据需求,我们对不同大小的数据集进行了预训练,并评估了许多benchmarks。
(3)进行了自我监督的实验,表明了自监督viT可能带来的提升的希望。

数据集:
ILSVRC-2012 ImageNet,1000个类,1.3M(130万)的图像
ImageNet-21k,2100个类,14M(1400万)的图像
JFT ,1800个类,303M(3.03亿)高分辨率的图像
对于CNN的网络,使用Resnet网络

训练参数:
使用Adam,β1 = 0.9,β2 = 0.999
batch size是4096,使用0.1的权值衰减率。
微调的时候,使用带动量的SGD,batch size是512

实验结果:
viT-Large-16*16,在JFT300M上预训练的模型,在大多数数据集上的表现都很好,而且预训练的计算资源更少。而Huge viT 16的表现效果更好一点,甚至是在极具挑战的数据集上。
在这里插入图片描述
其实通过表格的对比,我感觉transformer方法在精确度上比resnet提升不了多少,主要是在计算资源上,因为可以并行处理,这个应该才是最重要的关键。又快又好。

对预训练数据集大小的要求:
因为transformer比resnet少了对图片信息的归纳偏差,所以需要用足够的数据来弥补这一点。那么多大的数据集是合适的呢?
在这里插入图片描述
从上图中的实验结果可以看出,transformer结构的模型,需要大量的预训练数据作为支撑,在小size数据集预训练的情况下,模型的性能没有resnet 好。

拓展研究:哪种模型更高效?
在这里插入图片描述
以上图是不同模型架构的性能和计算成本。
以上实验表明:
(1)纯Transformer架构(ViT)在大小和计算规模上都比传统的CNNs (ResNet BiT)更具效率和可扩展性
(2)混合架构(CNNs + Transformer)在较小的模型尺寸下性能优于纯Transformer,当模型尺寸较大时性能非常接近

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值