卷积神经网络本身具有先验知识:
- Locality:相邻的区域之间的相关性更高
- Translation equation:平移等变性
Transformer的时间复杂度在O(n^2),n是序列长度,而图片的大小是224 * 224,Flatten之后太大了,有一些之前的文章将Res50中的Res4部分输出的14*14的特征输入Transformer中解决了输入太大的问题,而ViT通过将图片切分成一个一个的Patch输入Transformer。
Transformer目前没有饱和的现象。
VIT - Patch输入
- 输入图像224 * 224 * 3的大小
- 根据16 * 16的Patch对图像进行切分,切分为14*14=196的数量
- 196个Patch,每个Patch中16 * 16 * 3的维度,得到196 * 768的特征维度
- 特征通过Linear全连接层,得到196 * 768的大小特征
- Cls特征用于学习分类的损失,特征大小为768大小,与196 * 768大小进行拼接,得到197 * 768大小的特征
- 然后与位置编码进行相加,位置编码对应的和之前的特征一样的大小,为了减少对模型的改动,我们最后还是使用了1D的位置编码(1D和2D的效果发现很像)
最后得到197*768的大小作为输入。
VIT - Transformer Encoder
- 输入为197 * 768大小
- 通过Layer和Norm得到197 * 768
- 如果使用12个头,得到197*64的QKV
- 通过多头的拼接得到197*768的特征
- 然后通过Layer和Norm得到197 * 768
- 最后通过MLP,中间特征维度一般会增大4倍,得到197*3072维度的特征
- 最后得到的197*768的特征维度
VIT - 分类
- MLP用作分类头
- stay as close as possible:保留了原始的< cls >,用这个输入MLP中进行分类
VIT - Fine Tuning and Higher Resolution
如果改变了图像大小,意味着改变了Patch的数量,也就是原来的位置信息可能就没用了;在这里可以使用插值的思想,临时解决方案,所以可能会掉点。
VIT - 自监督学习
Bert使用的是Mask Language Model.
VIT使用的是Masked Patch Prediction.