论文信息
name_en: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
name_ch: 将16x16的块看作词:用Transformers实现大规模图像识别
paper_addr: http://arxiv.org/abs/2010.11929
doi: 10.48550/arXiv.2010.11929
date_read: 2023-04-08
date_publish: 2021-06-03
tags: ['深度学习','计算机视觉']
author: Alexey Dosovitskiy
citation: 14053
code: https://github.com/google-research/vision_transformer
other src: ViT论文逐段精读:https://www.bilibili.com/video/BV15P4y137jb/?spm_id_from=333.999.0.0
type: 略读
读后感
ViT是Vision Transformer的缩写,是2020年Google团队提出的将Transformer应用在图像分类的模型。ViT将输入图片分为多个patch,再将每个patch投影为固定长度的向量送入Transformer,后续encoder的操作和原始Transformer中完全相同。
ViT虽然不是第一篇将transformer应用在视觉任务的论文,但是因为其模型“简单”且效果好,可扩展性强(scalable,模型越大效果越好),成为了transformer在CV领域应用的里程碑著作。
在不修改优化Transformer的基础上,通过将切块的图片像word一样转入Transformer模型,并使用类似BERT的结构处理分类问题,在大数据集训练后效果好于已有模型。后面的很多模型都基于该模型为基础调优,可以说它奠定了视觉大模型的基础。
方法
![](https://img.haomeiwen.com/i5357893/40ea936471c52c82.png)
图-1示例将图切成9个16x16大小的块,然后用线性映射成Patch Embedding;由于图片有上下左右的顺序,又加了Position Embedding(与BERT方法一致);另外,前面还加了一个星的token,它类似于BERT对分类的处理,最终也是通过这个token来完成分类任务。
比如:图片是224x224x3,拆成14x14块,每块:16x16x3=768,经过映射(768x768)后输出也是768(可以设置),结果就是:每句9个单词,每个单词用768维表示(Patch Embedding)。
公式如下:
![](https://img.haomeiwen.com/i5357893/9dd6d06764395f40.png)
Z0为第一层,E为映射到嵌入空间,Epos为位置嵌入,Xclass为类别token;Zt为后n层;MSA是多头注意力;MLP是全连接层。ViT没有用太多归纳偏置(先验知识),所以在中小数据集中效果不如CNN。
实验
结果证明ViT比另两个模型训练快且效果好:
![](https://img.haomeiwen.com/i5357893/1b8e7a0e1509800f.png)
数据越多,模型效果越好,扩展性更好;数据少里ViT更容易过拟合,效果不如ResNet。
![](https://img.haomeiwen.com/i5357893/0c1837441080db7a.png)
对比不同资源占用,证明ViT更节约资源:
![](https://img.haomeiwen.com/i5357893/4932576eb1a320c4.png)
从左图可以看到,ViT和CNN学到了类似的图像表征;
从中间图可以看到,虽然使用了一维的position,但是明显学到了上下左右的位置信息;
从右图可以看到,根据注意力权重计算图像空间中集成信息的平均距离(类似于 CNN 中的感受野大小),在低层的注意力距离一直很小,即注意力相对局部化,注意力距离随着网络深度的增加而增加,高层的关系更概括抽象。
![](https://img.haomeiwen.com/i5357893/d39f0446cc5fb118.png)
网友评论