当前位置:   article > 正文

计算机视觉中transformer的理解_视觉transformer

视觉transformer

Transformer 2017 年被提出,NLP中红极一时的 BERT、GPT-2 都采用了基于 Transformer 的架构。近年来,Transformer 成为深度学习领域非常受欢迎的一种架构,它依赖于一种简单但却十分强大的机制——注意力机制,使得 AI 模型有选择地聚焦于输入的某些部分,因此推理更加高效。

对于图像问题,卷积具有天然的先天优势(inductive bias):平移等价性(translation equivariance)和局部性(locality)。而transformer虽然不并具备这些优势,但是transformer的核心self-attention的优势是不像卷积那样有固定且有限的感受野,self-attention操作可以获得long-range信息(相比之下CNN要通过不断堆积Conv layers来获取更大的感受野),但训练的难度就比CNN要稍大一些。

Transformer 已经广泛应用于序列数据的处理,尤其是在语言建模、机器翻译等自然语言处理领域。此外,它在语音识别、符号数学、强化学习等多个领域也有应用。

一、Transformer原理

模型思想

Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。 作者采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算是顺序的,RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:

(1) 时间片 t 的计算依赖 t−1 时刻的计算结果,这样限制了模型的并行能力
  (2) 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。
  
  Transformer的提出解决了上面两个问题:

(1) 首先它使用了Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量。
  (2) 其次它不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架。

1、Transformer各个模块结构

在这里插入图片描述

Encoder和Decoder主要由Self-Attention和Feed-Forward Network(前馈网络)两个组件构成,Self-Attention由Scaled Dot-Product Attention和Multi-Head Attention两个组件构成。

1.1 Encoder(编码器)

将Backbone输出的feature map转换成一维表征,得到 特征图,然后结合positional encoding作为Encoder的输入。每个Encoder都由Multi-Head Self-Attention和FFN组成

和Transformer Encoder不同的是,因为Encoder具有位置不变性,DETR将positional encoding添加到每一个Multi-Head Self-Attention中,来保证目标检测的位置敏感性。

1.2 Decoder(解码器)

因为Decoder也具有位置不变性,Decoder的[公式]个object query(可以理解为学习不同object的positional embedding)必须是不同,以便产生不同的结果,并且同时把它们添加到每一个Multi-Head Attention中。个object queries通过Decoder转换成一个output embedding,然后output embedding通过FFN独立解码出[公式]个预测结果,包含box和class。对输入embedding同时使用Self-Attention和Encoder-Decoder Attention,模型可以利用目标的相互关系来进行全局推理。

和Transformer Decoder不同的是,DETR的每个Decoder并行输出[公式]个对象,Transformer Decoder使用的是自回归模型,串行输出[公式]个对象,每次只能预测一个输出序列的一个元素。

1.3 多头注意力(multi-head)

  1. 提出是为了对同一key, value, query,希望 抽取不同的信息例如短距离和长距离,这个有点像CV里面的感受野(field)。
  2. 从图中可知,多头注意力使用h个独立的注意力池化,输出是由各个头concat合并得到的。
    在这里插入图片描述

1.4 基于位置的前馈网络(Feedforward Net, FFN)

1.因为模型就是要讲究泛化,因此不可能针对数据量专门做一个输入序列长度为n的超参数,因此把输入的形状由(b, n, d)变换成(bn, d)
2. 前馈网络作用于两个全连接层
3. 输出形状由(bn, d)变回(b, n, d)
4. 输出层相当于1 * 1卷积层,说白了就是全连接层:
在这里插入图片描述

1.5 层归一化(layer normalization)

一般的BN(batch normalization)是对每个特征/通道里元素进行归一化, 这里并不适合序列长度会变的NLP应用。

layer normalization 则是对每个样本里的元素进行归一化,这也起码是对单个样本做的Normallization, 效果是有的。
在这里插入图片描述

1.6 信息传递

传递的对象:编码器中的输出y1, y2 …yn。

将传递的信息作为解码中第i个Transformer块中多头注意力的key和value, 其中的query来自目标序列。

编码器和解码器中块的个数和输出维度都是一样的
在这里插入图片描述

1.7 预测

预测第t+1个输出时,解码器中输入前t个预测值;
在self-attention中,前t个预测值作为key和value,第t个预测值还作为query
在这里插入图片描述

2、Transformer相比于CNN的优缺点

优点:

Transformer关注全局信息,能建模更加长距离的依赖关系,而CNN关注局部信息,全局信息的捕捉能力弱。

Transformer避免了CNN中存在的归纳偏好问题。

缺点:

Transformer复杂度比CNN高,但是ViT和Deformable DETR给出了一些解决方法来降低Transformer的复杂度。

3、总结

vision transformer的强大性能不太可能归因于注意力机制,而更多地归因于其他因素,如 patch 嵌入和通过训练增强所产生的 inducive bias(诱导性偏差) 等。

Transformer 相比于 RNN/LSTM的优势
(1) RNN 系列的模型,并行计算能力很差, 但其实真实的耗时从业务上来讲,长query,transformer更快,短query,lstm更快。

(2)Transformer 的特征抽取能力比 RNN 系列的模型要好,transform可以动态建立输入序列的长程依赖关系,类似于一层全链接。

回头看Transformer发明之初的用途,就是长度几到十几的序列。被DETR弄到处理几百、上千长度的序列,似乎有点水土不服,训练时间特别长。而Vision Transformer和Visual Transformer,则通过不同的方法缩小“序列”的长度。出来的效果挺好。

因此把Transformer应用到CV领域,目前最明显的就两条路,要么像Deformable Transformer那样加偏好,要么就像ViTX那样,缩序列长度。

二、transformer在CV的应用

1、分类(backbone)

ViT(vision transformer)是Google在2020年提出的直接将transformer应用在图像分类的模型,后面很多的工作都是基于ViT进行改进的。ViT的思路很简单:直接把图像分成固定大小的patchs,然后通过线性变换得到patch embedding,这就类比NLP的words和word embedding,由于transformer的输入就是a sequence of token embeddings,所以将图像的patch embeddings送入transformer后就能够进行特征提取从而分类了。ViT模型原理如下图所示,其实ViT模型只是用了transformer的Encoder来提取特征(原始的transformer还有decoder部分,用于实现sequence to sequence,比如机器翻译)。
在这里插入图片描述

2、目标检测(Detection Transformer)

DETR 将目标检测任务视为一种**图像到集合(image-to-set)**的问题。给定一张图像,模型必须预测所有目标的无序集合(或列表),每个目标基于类别表示,并且周围各有一个紧密的边界框。

DETR使用set loss function作为监督信号来进行端到端训练,然后同时预测所有目标,其中set loss function使用bipartite matching算法将pred目标和gt目标匹配起来。直接将目标检测任务看成set prediction问题,使训练过程变的简洁,并且避免了anchor、NMS等复杂处理。

这种表示方法特别适合 Transformer。因此,研究者使用卷积神经网络(CNN)从图像中提取局部信息,同时利用 Transformer 编码器-解码器架构对图像进行整体推理并生成预测。

在定位图像中的目标以及提取特征时,传统计算机视觉模型通常使用基于自定义层的复杂且部分手动操作的 pipeline。DETR 则使用更为简单的神经网络,它可以提供一个真正的端到端深度学习解决方案。

传统两阶段检测系统,如 Faster R-CNN,通过对大量粗糙候选区域的过滤来预测目标边界框。与之相比,DETR 利用标准 Transformer 架构来执行传统上特定于目标检测的操作,从而简化了检测 pipeline。

DETR 框架包含一个通过二分匹配做出独特预测的基于集合的全局损失,以及一个 Transformer 编码器-解码器架构。给定一个小集合固定的学得目标查询,DETR 对目标和全局图像背景的关系作出推理,从而直接并行输出最终的预测集。之前有研究者尝试将循环神经网络等架构用于目标检测,但由于这类架构是按序列而非并行做预测,因而速度慢且有效性低。

三. 总结

一. Transformer是一个纯使用注意力的编码-解码器,里面没有用到RNN,没有seq2seq, 就很单纯地运用多头注意力来将序列处理并输出。

二. 编码器和解码器都有n个transformer块,保证了序列大小的一致性。

三. 每个block块里使用multi-head多头自注意力,基于位置的前馈网络和层归一化(layer normaliation)。

参考文献

https://zhuanlan.zhihu.com/p/144419825
https://zhuanlan.zhihu.com/p/356155277

https://www.yiyibooks.cn/yiyibooks/Attention_Is_All_You_Need/index.html
https://www.cnblogs.com/zingp/p/11696111.html

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号