Vision Transformer(ViT)

Transformer运用在计算机视觉领域的不足:

Transformer中的attention是用每一个输入的query去和key做比对然后加权和,复杂度是 O ( n 2 ) O(n^2) O(n2)。一般硬件计算可以支持的query长度是几千,但一般视觉分类任务的图片大小是224*224=50176,将2d图片直接按像素点转化成1d序列是不可能的。
其他的改进方式:
稀疏注意力近似全局注意力,轴注意力将图片拆成宽*高来分别求注意力再乘起来

ViT的基本思路

ViT将图片按16*16的网格大小划分,对224*224的图片划分的结果是14*14=196个小图(224/16=14)。将这196个小图作为输入序列(类比Transformer中的单词)进行监督学习

结构

在这里插入图片描述
在这里插入图片描述
命名方式举例
ViT-B/16:base,patchsize=16

过程

首先将图片分割成网格,经过线性投射层得到特征(patch embedding)。将特征加上位置信息(position embedding),并添加一个0位置为class token(class embedding)。这个cls也和各个特征进行交互,因此可以学到一些分类信息,以此将cls作为输出来分类。
在这里插入图片描述

维度计算

以每个网格大小16*16、图片大小224*224,vit-base为例。token的个数为224*224/(1616)=196,每个图像块的维度是1616*3=768。此时相当于将原图片224*224*3转化为196*768。线性投射层的维度是768*768(D),(其中D是可自己决定的,这里是768),因此经过线性投射层后是196*768,这里完成将图片转化成token。将token和cls token加上位置信息(单独位置信息也是768,是加不是拼接)传入transformer,此时维度是(196+1)*768,对应图中右下角embedded patches。经过layernorm后生成KQV,其中vit-base的多头是12个头,因此多头注意力投影后的KQV维度是197*64,其中768/12=64。最终将12个头的KQV都拼接起来输出,维度依旧是197*768。经过残差和LayerNorm后维度不变,MLP将维度放大4倍再投射回去,最终输出为197*768。Transformer block的输入与输出维度都一样。

位置编码

1d,2d(i,j)和相对位置编码(两个token的间隔距离)的结果大致相同。

ViT与ResNet对比

1 归纳偏置

Transformer缺少归纳偏置(inductive biases,即先验信息),归纳偏置包括:

  1. locality:相邻的区域有相似的特征,靠得越近的东西相关性越强。卷积是按窗口计算的,默认相邻的一起计算。Transformer的自注意力部分直接看整个序列,位置编码在初始时也是没有2d信息的(自行学习)。下图证明ViT在最初几层就可以注意到距离很远的patch的相关性。
    在这里插入图片描述3. translation equivariance:f(g(x))=g(f(x)),无论先做卷积还是先做平移,结果都一样。卷积只要是相同位置乘相同卷积核结果就是一样的。
    因此ViT需要更多数据来预训练。

2 后续处理

ResNet对最终的feature map使用了globally average polling(GAP)加上线性层来得到最终分类,而ViT则是用cls的结果做输出。经过试验证明(原文中),直接在所有196个输出token做GAP得到分类结果,和cls效果相近,但两个方法的学习率未必相同,需要好好调参。
在这里插入图片描述

混合模型

先将图片输入CNN,得到14*14的特征图,然后后续相同。在小数据集上效果更好。

微调

图片输入尺寸变化时,如果patch size不变:

  1. 对应生成的token序列长度也会变化,在无硬件限制的情况下ViT可以处理任意长度。
  2. token个数改变意味着位置编码也需要改变,变化较小的情况可以通过interpolation插值操作改变,但变化较大时需要重新学习否则表现下降。(局限性)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值