Vision Transformer (ViT)
- 论文:https://arxiv.org/abs/2010.11929
- 代码:GitHub - google-research/vision_transformer
1.背景
(1)transformer在NLP很强,但在CV的应用还非常有限,在此之前只有目标检测中的DETR大规模使用了transformer,其他领域很少,而纯transformer结构的网络则是没有。
(2)transform的模型很有优势,有并行计算、全局视野和灵活的堆叠的优点。
2.研究成果
实现了纯transformer结构完成图像分类任务,完成的很不错。在足够大的数据集上训练后,ViT可以拿到和CNN的SOTA不相上下的结果。
3.研究意义
展示了在计算机视觉中使用纯transformer结构的可能。
4.论文结构
vit结构是因为看到transformer在nlp很好用,transformer的scale能力强,就想在cv上用,使用的时候做了最小的改动,简单来说就是把图片切分重排,当做输入。实际上只用到了transformer的Encode。
5.attention注意力机制
定义:对不同的隐藏层会有不同的权重,这个权重是通过相似度计算得到的。
优点:并行计算和全局视野
6.self attention
输入是一个序列
nlp:word转换成vector当做输入
cv:image转换成sequence当做输入
Q,K,V的获得,本质是输入的线性变换,采用矩阵乘法计算,通过nn.Linear实现。
q:查询
k:键值
v:价值
可以联想以前的kv键值对,只是多了一个q查询。Q,K,V是三个矩阵。
7.MultiHead attention
定义:有多个Wq,Wk,Wv,上述操作重复多次,结果concat到一起。
目的:给注意力提供多种可能性
以上就是transform网络的主要内容。
8.图像的输入
图片切分,每一个小片就叫一个patches,编号,拉平,降维,输入到transform网络就可以了。其中把每个patches拉平经过liner把维度变小做为输入向量。其中图片是二维或者三维的,拉平就是把图片乘开,例如32x32x3就是他的拉平维度也就是向量。
9.位置编码
位置进行编码的原因:图片切分重排后失去了位置信息,transform的内部运算没有考虑空间信息,所以需要把位置信息编码重新传进网络。ViT使用了一个可学习的vector来编码,编码victor和原本的输入向量直接相加组成输入。
10.图像分类
将经过处理的向量输入模型进行训练,实现对图像的分类。