Vision Transformer(VIT)

Vision Transformer(VIT) 

  

从宏观的角度看,Vision Transformer和一般的CNN模型大体相同,都分为特征提取网络与分类网络。

特征提取网络部分,Vision Transformer会将图片等量切分成若干个patches,并将这些patches压平成一个并不包含空间位置信息的patch序列,输入至模型中。而后使用Transformer Encoder中的多头自注意力机制(Multi-Head Self-Attention)对输入的每个patch计算其重要程度,并保留其本身提取到的信息。

分类网络部分,Vision Transformer接收到了特征提取网络输出的特征信息,将这些特征信息通过一个普通的多层感知机(MLP)对全局特征进行分类。

1、Linear Projection of Flattened Patches(Embedding层)

        对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim],(向量数,向量)如下图,token0-9对应的都是向量,以ViT-B/16为例,每个token向量长度为768。

 对于图像数据而言,其数据格式为[H, W, C]是三维矩阵明显不是Transformer想要的。所以需要先通过一个Embedding层来对数据做个变换。以ViT-B/16为例,将输入图片(224x224)按照16x16大小的Patch进行划分,划分后会得到196个Patches。接着通过线性映射将每个Patch映射到一维向量中,以ViT-B/16为例,每个Patche数据shape为[16, 16, 3]通过映射得到一个长度为768的向量(后面都直接称为token)。[16, 16, 3] -> [768]。196个长度为768的向量正好可以构成一个【196,768】的二维矩阵。

如下图所示,首先将一张图片按给定大小分成一堆Patches。

同时,在输入Transformer Encoder之前注意需要加上[class]token(用来分类)以及Position Embedding(用来定位)。 在刚刚得到的一堆tokens中插入一个专门用于分类的[class]token,这个[class]token是一个可训练的参数,数据格式和其他token一样都是一个向量,以ViT-B/16为例,就是一个长度为768的向量,与之前从图片中生成的tokens拼接在一起,Cat([1, 768], [196, 768]) -> [197, 768]。然后关于Position Embedding就是之前Transformer中讲到的Positional Encoding,这里的Position Embedding采用的是一个可训练的参数(1D Pos. Emb.),是直接叠加在tokens上的(add),所以shape要一样。以ViT-B/16为例,刚刚拼接[class]token后shape是[197, 768],那么这里的Position Embedding的shape也是[197, 768]
 

 

 

VIT细节部分
Vision Transformer (ViT) 用于图片分类_哔哩哔哩_bilibili

图像处理中的注意力机制
神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解_注意力机制是一个非常有效的trick,它的核心重点就是让网络关注到它更需要关注的地_Bubbliiiing的博客-CSDN博客

 参考链接:

Vision Transformer详解_太阳花的小绿豆的博客-CSDN博客

保姆级教学 —— 手把手教你复现Vision Transformer_vision transformer复现_越来越胖的GuanRunwei的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值