目录

  • 一、Transformer原理
    • 模型思想
    • 1、Transformer各个模块结构
      • 1.1 Encoder(编码器)
      • 1.2 Decoder(解码器)
      • 1.3 多头注意力(multi-head)
      • 1.4 基于位置的前馈网络(Feedforward Net, FFN)
      • 1.5 层归一化(layer normalization)
      • 1.6 信息传递
      • 1.7 预测
    • 2、Transformer相比于CNN的优缺点
    • 3、总结
  • 二、transformer在CV的应用
    • 1、分类(backbone)
    • 2、目标检测(Detection 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

计算机视觉中transformer的理解相关推荐

  1. 计算机视觉中的transformer模型创新思路总结

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨仿佛若有光 来源丨CV技术指南 编辑丨极市平台 导读 本文回顾了ViT的结构,总结了计算机视觉 ...

  2. 当图网络遇上计算机视觉!计算机视觉中基于图神经网络和图Transformer的方法和最新进展...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 可能是目前最全面的<当图网络遇上计算机视觉>综述!近四 ...

  3. 理解计算机视觉中的损失函数

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 损失函数在模型的性能中起着关键作用.选择正确的损失函数可以帮 ...

  4. 为何Transformer在计算机视觉中如此受欢迎?

    编者按:近一年来,Transformer 在计算机视觉领域所带来的革命性提升,引起了学术界的广泛关注,有越来越多的研究人员投入其中.Transformer 的特点和优势是什么?为什么在计算机领域中 T ...

  5. 【深度学习】transformer 真的快要取代计算机视觉中的 CNN 吗?

    我相信你肯定已经在自然语言领域中听说过 transformer 这种结构,因为它在 2020 年的 GPT3 上引起了巨大轰动.Transformer 不仅仅可以用于NLP,在许多其他领域表现依然非常 ...

  6. 计算机视觉中的Transformer

    计算机视觉中的Transformer 序 综述 分类 交集 DETR路线 DETR Deformable DETR ViT路线 ViT DieT Tokens-to-Token ViT Pyramid ...

  7. 计算机视觉中的MAP的理解(mean average precision)

    计算机视觉中的MAP的理解(mean average precision) 精准率(Precision, P值)和召回率(Recall,R值) 下面我们来讲AP(average precision) ...

  8. 对Transformer中的MASK理解

    对Transformer中的MASK理解 Padding Masked Self-Attention Masked 上一篇文章我们介绍了 对Transformer中FeedForward层的理解,今天 ...

  9. 深入理解计算机视觉中的损失函数

    作者丨ronghuaiyang 来源丨AI公园 编辑丨极市平台 计算机视觉是计算机科学的一个领域,主要研究从数字图像中自动提取信息. 在过去的十年中,在深度学习方面的创新,大量数据的方便获取以及GPU ...

最新文章

  1. 爬虫基本库的使用---urllib库
  2. SpringMVC的优点
  3. java 多线程监听同一个端口_使用多线程在Java服务器中同时侦听两个端口
  4. 超不清视频播放器-用Python将视频转成字符
  5. 读书笔记5-处理器的微架构
  6. php5.6 event,php安装event扩展
  7. python多个变量与字符串判断_python怎么判断变量是否为字符串
  8. python进阶项目设计_Python进阶循环设计
  9. 2018qs计算机科学专业,2018QS世界大学计算机科学专业排名.docx
  10. python中属性是什么意思啊_python中的“对象属性”和一般属性是什么?
  11. PVFS2 1.4.0的安装、配置与性能测试
  12. 配置classpath,引入jar包
  13. pspice和matlab,PSpice和MATLAB综合电路仿真与分析(原书第2版)
  14. 浏览器UserAgent的趣味史
  15. PMBOK 49过程 ITTO和4W1H(第六版)
  16. 华为联运游戏或应用审核驳回:点击登录进入游戏,未显示欢迎栏
  17. 图解PC CPU发展史
  18. 运筹帷幄之中决胜千里之外 菜鸟初识代码编程规范二 命名规范
  19. 使用 Ubuntu 搭建 Minecraft 官方或Mod(Forge)服务器
  20. 【软件工具】之下载微软官方正版 windows 系统

热门文章

  1. ceil — 进一法取整 4.1 = 5 5.9 = 6 取小数点两位
  2. 【转】[中级]我对『PID算法』的理解 —— 原理介绍
  3. Stata:计算绿色全要素生产率-gtfpch
  4. html 纵向导航,div+css纵向导航如何实现且为导航添加超链接
  5. 俩台虚拟机,一台有网,一台没网
  6. step5. 安装Eclipse4.7(Oxygen)+如何优雅书写多个工具的PATH路径(转)
  7. 网站建设在网页界面设计中该如何做到简约
  8. CSS基础(11)- 浮动
  9. 华为HCNP/HCNA RS实验文件分享
  10. Arduino驱动oled