标题
一张图片可以等价于16*16的单词
transformer可以做大规模的图像识别
摘要
虽然现在transformer在nlp上得到广泛运用,但在cv上还没有运用
一般都是cnn+attention
现在用transformer用cv的效果特别好
引言
nlp的主流方式:先做预训练,再做微调
bert里支持512的序列长度
首先要把一个2d的图片,变成一个序列的集合
在视觉阶段,卷积神经网络还是占主导地位的
有些工作会把cnn和attention一起用
有些工作只用attention
有些工作用特征图作为transformer输入的方式
本工作使用一个标准的transformer直接应用于图片
vision transformer把一个图片分成很多patch,一个patch是16*16
14*14 patch = 196
对于视觉,使用有监督的方式去训练
核心:用这么简洁的框架,transformer也能在cv上得到很好的效果
viT在大规模的数据集上预训练后,可以获得更好的效果
这样就可以把cv问题和nlp问题大一统
结论
我们没有使用归纳偏置,而是直接把他看作一个序列化模型输入
效果很好且相对便宜
挖了一个新坑:如何用vision transformer来做cv
目标检测,图像分割
把cv和nlp大一统,然后也推动了多模态的工作
相关工作
自从transformer以后,感觉已经变成了nlp任务上最好的方法
BERT和GPT
自注意力的工作
在像素层面用transformer是不现实的
可以用sparse transformer,轴注意力
这些自注意力在任务上的表现上都是不错的
cnn+注意力的工作
imageGPT和我们的工作很相近
Method
把一张图打成patch
把patch转化成一个序列
patch embedding和position embedding
经过transformer以后,进mlp head
如何把一张图片,变成一系列的token
1414 得到196个patch,每个patch的维度是16 * 16 * 3 = 768
对图片进行预处理和对输出进行后处理是很关键的
消融实验用不同的位置编码:1d位置编码,2d位置编码,相对位置编码
vision transformer和cnn比要少很多归纳偏置
实验
在不同大小的数据集上做了预训练
能在大多数数据集上取得比较好的结果
数据集:ImageNet
三种模型:base, large, huge
vision transformer在中小型数据集上,效果不如resnet,因为没有用到一些先验知识和归纳偏置
在大的数据集上,用viT可以给到更好的结果,他的扩展能力更好一些
做了一些可视化,分析viT内部的表征
masked patch prediction
对比学习、自监督、无监督