vision transfomer

用一个标准的transfomer模型,就是把图片预处理一下,处理成一系列的序列。就把cv转换成nlp问题

 VIT结构

 

图片预处理 Embedded Patches

对于一张图片,将它分成n个ptach,每个patch就是输入的序列一个元素,所以序列长度是n。而序列中每个元素的维度是ptach的像素个数,假设是x。

经过Linear Projection of Flattened Patch(线性展平)处理之后,序列的每个元素变成了一个token,维度仍然是x。序列元素个数是n+1(n个之前的patch和一个额外的cls{})

最后,还会加上输入图片的位置编码信息,就是输入的patch处在序列的第几位。把位置编码信息加到token序列(不是concat)

之后进入transfomer encoder(L个transomer block)

再通过分类网络分类

一个transofmoer block前向传播的过程

  • 假如:输入图片是224*224*3大小,把图片分成每个patch块大小是16*16*3,也就是每个patch维度是768。
  •  那么patch块的个数是224*224/16*16=196,(224/16=14,14*14=196)
  • 所以输入线性展平的序列是,序列个数是196,维度是768的
  • 经过线性展平E之后,(线性展平层的维度是768*768,输入序列x和线性展平E相乘,xE)。得到196个维度是768的token和一个cls特殊token,总共是197个维度768的token。197*768
  • 再加上位置编码信息,每个信息是1*768的大小,所以加到token中,最终还是197*768
  • 197*768进入encoder会进入多头自注意力机制,如果使用base版本的vit,多头有12个头,所以输入多头自注意力机制的k、q、v分别是197*64(64*12=768),12个头输出出来的结果经过拼接,仍然是197*768大小
  • 经过MLP会把维度放大4倍,变成197*3012
  • 输出会缩小四倍维度,又变回197*768

如果你不通过patch进行预处理,用cnn得到对应的小尺度的特征图进行预处理也可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值