Vision Transformer(VIT)原理总结

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 网络结构

在这里插入图片描述
如上图,按照红框可分为四块:

  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维度该过程如下图:
在这里插入图片描述
需要注意的是,类别记号也是一个可学习编码变量,正常初始化即可。

✨3 MLP

在这里插入图片描述
MLP结构如下,其中FC(全连接层)和tanh(激活函数)可选,Linear用于分类。

4 ✨参考文章

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白三点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值