Vision Transformer 总结

Vision Transformer

Transformer

结构

ViT中最重要的部分是self-attention, 对照片做的patches, 以及position embedding。self-attention机制在之前的博客里面也有讲过,在这里主要是计算每一个patch 之间的相关性,多头的自注意力机制有些许不一样的。我个人的理解是单头的注意力机制只能计算某一个特征和另外一个特征的相关性,但是多头注意力机制可以同时处理多个特征的和另外多个特征的相关性。我感觉这里可以结合“线性分类器” 和 "CNN"的区别来理解。 线性分类器只能学习到输入数据的一个mode,比如 “一个人的看向左边”,但是如果输入数据中还有:‘一个人看向右边’的图片,线性分类器就无法准确的学习,但是CNN却因为很多的kernels,所以可以学习到一个物体的不同mode。 这里的self-attention 和multi-head self-attention 可以采用的同样的方式来理解。

至于patch, 我认为是将图片序列化的一个过程而已,因为Transformer本身是无法处理图片格式的数据的。所以将图片打散成小的patch更符合Transformer的输入条件。但是图像数据本身携带了位置信息的,通过这样的“序列化”过程会导致图像丢失之前的位置信息,所以position embedding 在ViT中才如此的重要。所谓position embedding 实际上是加在每一个patch上的一个小向量来表示当前patch的位置信息。

相较于CNN 的优势在哪里?

想要获得全局的信息CNN 通常需要通过堆叠深度来实现感受野的增长。因为对于CNN 来说 第N层的特征图上的一个像素点,是第N-1层的一片区域。随着层数的变多,网络的感受野也会逐渐变大,但是通常是需要较深的深度才能达到这个效果,较深深度不仅会出现计算力吃紧的问题,也是潜在出现过拟合的原因,而transformer 因为每一层都会整合patch之间的信息,他可以从第一层开始就看到全局信息,在一定程度上规避了CNN 需要非常深的深度才能获得较好全局信息的问题。

Transformer in Transformer

ViT中将图像分成patches不是最优的选择。因为patch中包含的不同比例和位置的信息不能较好的处理。所以TNT中,进一步将patch再拆分成更小的单位然后进行重组。论文中将patch称为 ‘visual sentance’,把进一步拆分的更小单位称之为’visual words’。

文章只是使用了一个inner VIT 去进一步拆分patch而已,outer VIT 和经典VIT一致。

代码实现的一些描述

postional embedding 和 patch embedding都是使用的一层Conv2D来完成的。将位置和patch 都embed到相同的维度上。注意力机制的QKV 都是使用单独的一层MLP,多头注意力就是把输入特征维度拆分开即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值