ViT(Vison Transformer)学习
Paper:An image is worth 16×16 words: transformers for image recognition at scale. In ICLR, 2021.
Transformer 在 NLP领域大放异彩,并且随着模型和数据集的不断增长,仍然没有表现出饱和的迹象。这使得使用更大规模的数据对Transformer结构进行训练得到表现更优的模型成为了一种解决问题的方案。受 NLP 中 Transformer 成功的启发,作者尝试将标准 Transformer 直接应用于图像,并进行尽可能少的修改。为此,作者将图像拆分为补丁,并提供这些补丁的线性嵌入序列作为 Transformer 的输入。 在 NLP 应用程序中,图像补丁的处理方式与标记(单词)相同。 并以监督方式训练图像分类模型。
模型概述
![image-20210701092752310](https://i-blog.csdnimg.cn/blog_migrate/da6e5e3c5f190441e5a524af28d6a78a.png)
主要流程如下:
- 将图像分割成固定大小的块,作为三维张量
- 将三维张量向量化为一维序列
- 对一维序列采用共享参数的Dense层进行嵌入
- 将线形层输出结果进行位置嵌入编码,输入给多层Transformer叠加的 Transformer Encoder 进行编码
- 对编码结果进行 Softmax,以输出作为分类矩阵
张量向量化
![image-20210701112205853](https://i-blog.csdnimg.cn/blog_migrate/b61c8b4eb1bad17692a761cfc49798b6.png)
将分割的图像块张量扁平化为向量
对向量进行嵌入
采用Dense层对向量进行嵌入
![image-20210701112247321](https://i-blog.csdnimg.cn/blog_migrate/8cd96a5b7ff6e679fca3ae9b89a20ee2.png)
同时,所有的 Dense 层共享参数信息
![image-20210701112308252](https://i-blog.csdnimg.cn/blog_migrate/985187171f7ef78d35ed003dcb960365.png)
对 embedding 进行位置编码
![image-20210701112352794](https://i-blog.csdnimg.cn/blog_migrate/5c68daef975181e0f10321db31b2aa31.png)
即对位置信息进行编码并与 embedding 进行加和
使用Transformer Encoder 进行处理
![image-20210701112511362](https://i-blog.csdnimg.cn/blog_migrate/a9e4ee23be57ef2672e921ceb763d61e.png)
将编码结果输入多层堆叠的 Transformer,并最终使用 [CLS] 的输出作为分类结果
大数据集预训练
![image-20210701112531315](https://i-blog.csdnimg.cn/blog_migrate/6a5566267653269ff5533dbfaac4dea6.png)
模型在大规模数据集上进行预训练,在目标数据集上进行 finetuning ,并最终在目标数据集的测试集上进行测试