VIT论文阅读
把图片看成一个个16x16的patch堆起来的
摘要
卷积神经网络不是必备的,一个纯transformer表现也是非常好的
transformer?2500天tpu v3
介绍
大规模上预训练,小规模任务数据集上微调。扩大模型时候还没观察到瓶颈(还没出现过拟合)?
轴注意力机制:把2d的图片注意力分成从H和从W出发两个1d的注意力机制
将224x224的图片根据16x16的patch划分成为14x14,使用特征图展开成1d来进行attention操作
在不加强约束的情况下,transformer效果是比Resnet差的,因为少了归纳偏置
1是本地偏置,相近的特征会相邻;2是平移同变性f(g(x))=g(f(x)),无论先做平移还是卷积,输出永远是一样的。卷积有很多先验信息。
只要预训练的数据集够大,特征迟早会学到,效果会变好
前人工作
要么就是用transformer将CNN取代,要么两者结合
降低时间复杂度:
- 使用窗口代替所有像素
- 使用sparse transformer:只对一些稀疏的点使用自注意力
- 横轴和纵轴
但是需要硬件加速
方法
尽可能使用原始的transformer
(无法上传原结构图)
每个patch会通过线性投影层转换成序列,最开始有一个cls标签(分类,从BERT中引进),然后只看该标签来预测类别
流程:224x224图片划分成为14x14=196的16x16x3=768的RGB图片,乘以一个线性投影矩阵得到196x768输出
加上一个cls标签1x768,得到197x768的最终输出,再与位置向量相加,得到patch embeddings
cls相信它可以学到图像的特征。cls经过很多层transformer encoder后融合了其他token的信息。将其最后通过一个MLP处理成分类信息。
位置编码选择一维还是二维?发现两者结果差不多
公式化:
z0是输入,
第二条是多头自注意力机制出来的结果,先LaynerNorm,然后注意力,加上过去输入
第三条就是LN 然后MLP+个残差
第四条是最后一层输出的第一个位置当成整体图像的特征作为分类任务
归纳偏置:
transformer没有先验知识
混合结构:
detr,CNM+tran的结合。使用CNN产生14x14的特征,拉直之后使用原始transformer
微调和更高清晰度
用预训练好的模型尝试高分辨率图片微调
从短序列到长序列,需要进行插值操作,但是效果不太好。微调有局限性。
实验
对比和resnet的表征学习能力
样本小, 小于ImageNet21k时候,bit占优,否则Vit后来居上,效果好一丢丢
可视化
贾柏滤波器(Gabor filter)
可视化注意力距离后,发现在训练初期,同一层自注意力机制是有距离的,并且随着网络越深距离越大且方差越小
这相对与CNN的好处是,CNN在浅层网络的感受野是很小的,只能看到邻近像素点的信息,
作图:将学习到的权重投射到原图的像素点中
消融实验
补充:全局平均池化是每一个channel得到一个元素,最后得到一个长度为channel的一维向量。
在ViT中,全局平均池化和cls token的方法效果一致
2维的位置编码:将一维的长度为D的位置编码换成D/2为高,D/2为宽的2维位置矩阵,根据具体位置选择两个向量拼接到一起就又成了长度D的向量
自监督学习
选择部分patch抹除,然后自监督重建这一部分patch。但是效果差一筹。
结论
不一样的是,我们不使用图像的归纳偏执,而是一个序列块
有可能规模增加还能带来更好的结果 VIT-G
额外
mataformer:用池化操作取代qkv,他觉得是结构好,并不是mlp的原因