VIT,文章题名为An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale,发表于2020年10月。基于纯Transformer结构来做图像分类任务,论文中相关实验证明在大规模数据集上做完预训练后的ViT模型,在迁移到中小规模数据集的分类任务上以后,能够取得比CNN更好的性能。
1 网络结构
2 Transformer Encoder
2.1 类别记号
3 MLP
4 参考文章
论文地址
Code
Transformer原理在另一个文章中总结过,这里主要介绍之前没有提过的类别记号
假设,图像经过预处理和展平层后得到维度为(Batch size, block_num, D)的矩阵X。
如果没有class token,我们将X与位置编码相加再通过Transformer Encoder后,仍然输出维度为(Batch size, Block num, D)的矩阵。但是输入分类网络的变量维度只需要(Batch size, 1, D),这就很难决定用Block num个变量中哪一个进行分类。(原因)
因此,输入Tranformer Encoder之前,将X与一个维度为(Batch size, 1, D)的类别记号编码进行拼接,最终维度为(Batch size, Block num + 1, D),然后与维度为(Batch size, Block num + 1, D)的位置编码相加,并输入Transformer Encoder。最终输出结果的维度为(Batch size, Block num+1, D),此时利用切片,获得第一个变量(Batch size, 1, D)输入MLP进行分类。(具体做法)
省略Batch Size维度该过程如下图:
需要注意的是,类别记号也是一个可学习编码变量,正常初始化即可。
MLP结构如下,其中FC(全连接层)和tanh(激活函数)可选,Linear用于分类。
1️⃣https://zhuanlan.zhihu.com/p/617175563