VIT速记

VIT架构

在这里插入图片描述

【ViT论文逐段精读【论文精读】】 【精准空降到 30:29】 https://www.bilibili.com/video/BV15P4y137jb/?share_source=copy_web&vd_source=f09504571c3138e9e610217797aba3a4&t=1829

  1. 首先把图片分为几个Patch,比如我们此时输入的图片为224*224*3,我们这里使用16*16的Patch size大小,那么可以得到N=224*224/16^2=196=14^2,也就是196个图像块,每一个图像块的大小是16*16*3=768的维度,也就是196*768维度
  2. 然后通过一个线性投射层
  3. 我们给这个 Patch Embedding加上一个位置信息,并且在开头加上一个cls(类似Bert)最后面用来
  4. 然后就把这些加入到一个Transformer Encoder去,最后又很多输出。我们拿cls当做一个token来输入后的结果当做分类的依据,后面可以再接上一个MLP来进行分类

过程

首先把图片分为几个Patch,比如我们此时输入的图片为224*224*3,我们这里使用16*16的Patch size大小,那么可以得到N=224*224/16^2=196=14^2,也就是196个图像块,每一个图像块的大小是16*16*3=768的维度,也就是196*768维度
在这里插入图片描述

然后经过经过一个全连接层(中间粉色的),他的输入是768,也就是原来得到的每一个Patch的维度,后面得到一个Embedding的维度,我们设为D,这里我们让D和输入一样,也就是D也是768。当然D是可以变得。最后出来的维度还是196*768

除了图像本身的token以外,我们还要再加一个cls token用来分类,所以最后进入Transformer Encoder的维度就是(196 + 1) * 768

在这里插入图片描述

然后我们加上一个位置编码信息,这里的位置编码信息是要去学习的,没有采用那个sin和cos那个位置编码。具体做法是有一个矩阵,每一行代表一个位置编码向量,向量维度就是768,也就是D,然后将位置编码加到(不是ConCat)Embedding上去。到此Transformer的输入就构造完了,维度是197*768

然后就进入Transformer中去。假设我们其中的多头注意力的头是12个。那么每个部分就是768/12=64,那么每个QKV就是197*64一共12个这样的。最后把结果拼接起来就又是197*768了。

在这里插入图片描述

然后经过Layer Norm和MLP,一般MLP中先把他变大(比如四倍),然后再投射回原来的维度,最后出来还是197*768

在这里插入图片描述

mean attention distance

d a b = l a b ∗ w a b d_{ab}=l_{ab} * w_{ab} dab=labwab

Vit中的Attention distance是怎么做的,有什么物理意义? - Glenn的回答 - 知乎
https://www.zhihu.com/question/492429589/answer/3097896708

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值