[2021][ICLR] AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
Abstract
ViT 首次抛弃CNN的纯Transformer,大规模数据上训练,分类任务上做了尝试
Introduction
NLP上Transformer的潜力还在不断挖掘 前人在CV上的尝试效果欠佳,效率不高,CNN经典模型依然SOTA 直接使用NLP中的标准结构,尽量减少修改,patch as token mid-sized数据集(image net)中Transformer和Resnet比表现差,缺少inductive biases(平移等变、局部性),数据量不足事效果不好 14M-300M的数据集下有好效果,接近或超过SOTA,可做迁移
Related Work
17年NLP上提出Transformer,NLP上使用时也是pretrain+finetune 每个像素点对其他点的attention计算消耗量过大,之前的方法有仅对临近像素计算等。计算消耗对硬件加速的要求依然很高。 2020Cordonnier等的工作和ViT很像,把图分成了22的patch,但是没能作出超过CNN的实验,同时22导致只适用于小图(计算消耗) CNN和Self-attentoin结合的工作 iGPT先缩小图像再在像素层面计算
Method
参考BERT中的class token,encoder输出的Z预留了一个Z0位置,作为特征表示的输出位置,可学习(类别编码)。公式中N表示patch数量,D可以理解成CNN中的C,自行设定,Epos用来做位置编码,standard learnable 1D position embeddings, 我的理解是随机初始化后留给网络去学出spatial信息,但这样真的可以学到吗。MSA,多头注意力,LN,layernorm。
inductive biases
CNN的locality 二维领域结构 translation equivariance 这些是贯穿整个模型的,而ViT中只有MLP是有局部、平移等变的感知的,self-attention的感知是全局性的。而且ViT中position信息初始化时并未引入输入,所有的2D spatial relation靠从头学。(1D上的相对位置还是有的)。
Hybrid Architecture
原始图像切patch组成输入序列之外,也可以将CNN得到的feature map切patch (后面的实验证明在小模型下Hybrid略好,大模型下优势消失,CNN在大的size下没有能帮到ViT)
pretrain+finetune
去掉predict head 加一个D*K的前向layer即可,K为需要的分类数目。一般在比pretrain的resolution更高的图上finetune可以获得好效果(引19 20 Kolesinkov等的结论。ViT可以处理任意长度的序列,所以finetune时保持patchsize不变,这样一来之前的位置编码可能会失去意义,所以Epos会经过插值调整。这也是模型唯一引入inductive bias的地方。
Experiments
没细看 Scaling Study(消耗小,还没饱和)
Conclusion
do not introduce image-specific inductive biases into the architecture apart from the initial patch extraction step scalable,分类数据集上matches or exceeds SOTA 存在的挑战: 1、 其他下游任务如检测和分割 2、 自监督做pretrain(transformer在NLP上的成功很大程度上源自大规模的自监督,参考BERT),ViT的初步实验显示自监督比从头训有两个点的提升,但比有监督低四个点 (我猜想或许是数据量还不够,毕竟自监督对数据量的要求更高)
|