Vision Transformer(VIT)原理总结

Vision Transformer(VIT)原理总结_第1张图片

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

✨1 网络结构

Vision Transformer(VIT)原理总结_第2张图片
如上图,按照红框可分为四块:

  1. 图像预处理:Transformer不能直接处理图像。因此,需要将图像分层NxN的图像块。如果图像分辨率变大,而要求图像块尺寸不变,增加图像块数量即可。
  2. 展平层:第二个红框(Linear Projection of Fallttened Patches)将图像块展平为一维(NxN=>N^2X1)。
  3. Transformer Encoder:依次赋予展平的图像块类别记号和位置编码并输入Transormer的编码器,输出结果。注意,因为这里是分类任务而不是生成任务,因此不需要解码器。
  4. MLP:取Transformer编码器输出的第一个embedding,将其输入到分类网络,即MLP中,输出所属类别概率

✨2 Transformer Encoder

Transformer原理在另一个文章中总结过,这里主要介绍之前没有提过的类别记号

假设,图像经过预处理和展平层后得到维度为(Batch size, block_num, D)的矩阵X。

2.1 类别记号

如果没有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维度该过程如下图:
Vision Transformer(VIT)原理总结_第3张图片
需要注意的是,类别记号也是一个可学习编码变量,正常初始化即可。

✨3 MLP

Vision Transformer(VIT)原理总结_第4张图片
MLP结构如下,其中FC(全连接层)和tanh(激活函数)可选,Linear用于分类。

4 ✨参考文章

1️⃣https://zhuanlan.zhihu.com/p/617175563

你可能感兴趣的:(图像分类,目标检测,transformer,深度学习,计算机视觉)