transformer in cv简介

举报
嘿哈 发表于 2021/04/20 17:53:01 2021/04/20
【摘要】 如何将transformer应用到CV的分类,检测,分割任务中

近年来transformer在nlp占据了统治地位,现在将transformer在cv中也逐渐大火了起来,下面分享几篇有关transformer在cv中应用的相关的论文

1.transformer本身的介绍

论文名称:Attention Is All You Need

     transformer提出的原因

  • RNNLSTM计算时时间t计算依赖t-1时刻的计算结果,这样限制了模型的并行能力;
  • 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力

     transformer的介绍

   

       图一

        图一左是经典的transformer经典的结构图,图一右则是使用transformer进行机器翻译的一个架构图

        transformer中的encoder:     

  • 输入单词word2vector转化成嵌入向量,加上PE位置特征;PE为位置特征,因为transformer将单词直接enbedding后,并没有包含单词的位置信息,因此强迫加入PE,每个单词的位置特征,位置使用三角函数,是由于一个单词不仅和它的绝对位置有关,而且和它的相对位置有关,而三角函数恰巧可以表示相对信息,一个位置可以由其它任意位置表示,公式中dmodel为word_to_vector的维度,i为word_to_vector中的遍历,pos为单词在句子中的位置,这样word_to_vector中每一个值就可以表示不同频率下的位置表示。
  • 根据嵌入向量乘上对应待学习的权重矩阵得到q,k,v三个向量;q为输入的query向量,k和v表示一个键值对,一般通过q和k的相似度得到k,然后通过k查找得到v,得到q的特征表示。
  • 为每个向量计算一个score:q·k
  • 为了梯度的稳定,Transformer使用了score归一化,即除√dk
  • 对score施以softmax激活函数;
  • softmax点乘Valuev得到加权的每个输入向量评分v
  • 相加之后得到最终的输出结果z。如图二,由于是multi_head,作者在这里使用了h个head。这里可以理解为将特征分散到h个子空间进行特征学习。
  • 最后通过残差正则和FFN(是两个全连接层)进行特征输出。正则使用LN,而不是BN,原因是由于在图像中认为BN正则的时候是对统一特征进行归一化,而nlp中对多个句子中相同位置的词进行正则是没有意义的,对整个句子归一化才有意义。其中

         

     

                                                     图二

          transformer中的decoder,如图三:

                                                           图三

  • 使用masked multihead attention,是为了训练和推理保持一致,因为在推理的时候是一个字一个字进行解码(编码时是同时对所有字进行编码),只能知道已经解码的字,对该字后面的字并不知道,所以把它遮住。
  • Decoder接收来自encoderkv

2.分类中的transformer

论文名称:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

                                                               图四

     论文贡献:

  • 实现完全使用transformer代替CNN
  • 论文的主要目的是在大数据上给定一个预训练网络,finetune以后效果优于CNN网络

     pipeline介绍:论文的题目是一张图片顶16个单词,transformer在大规模图像识别分类任务中的应用。这里图片将一张图片切割成9个patch,每个patch其实就是一个单词,然后对每一个patch过一个全连接层得到它的特征,在和它的位置特征信息进行相加,最后作为一个序列送入到transformer的encoder中。最后再通过一个全连接层输出分类的置信度。

     注意:

  • *是一个可学习的类别信息,新增的token在句子中与任何的词无关,在图像中与任何的patch无关,所以不会造成偏向于某一个patch问题,能够比较公允地反映全图的信息
  • 位置信息直接采用1D编码
  • CNNtransformer的混合,先提取图像特征再做patch

                                                            图五

     图五为网络的指标,可以看到

  • 小数据效果不如resnet,是因为CNN有很强的归纳偏置作用,可以理解为某一特定场景下对物体的识别,当数据足够多之后,归纳偏置将被忽略,所以transformer更好
  • ViT训练的更快,一个TPU只有2.5k天,resnet要9.9k天,此处必须要膜拜一下谷歌的机器真的真的多,同时参数更少

3.检测中的transformer

论文名称:End-to-End Object Detection with Transformers

                                                                                    图六

                                                                                   图七

     论文贡献:

  • 舍弃一些手工部件,不依赖NMSAnchor ,简化了检测的pipeline
  • 整个DETR架构包括两部分:基于集合的全局损失与Transfomer encoder-decoder

     pipeline介绍:首先输入一张图片,过CNN得到feature map,然后加上feature channel维度的位置特征,组成一个序列,当成transformer encoder的输入,decoder的输入是随机初始化的N个向量,初始化好后就通过网络进行学习改变,N为网络要预测一个图片中框的个数,一般比图片中物体的个数大的多,可以理解这N个随机初始化的向量为N个人训练这N个人对这张图片中哪里比较关注,如图七,左上角第一张图表示第一个随机向量训练好后reshape然后激活后的热点图,可以看到,第一个人比较关注一张图片中左下角的信息,也就是说,人力来一张图片,他会对这张图片提问,“hi,你的左下角有哪些东西”。然后从decoder输出N个特征向量,通过全连接层FFN输出N个框和框对应的类别,最后通过基于全局的损失函数进行优化。下面详细介绍一下基于全局的损失函数。

    首先你预测出来N个框以后,但是GT一般远小于N,一般的检测框架是先通过NMS消框,然后通过IOU匹配,最后在算loss,而本文提出的loss的流程为先将GT扩充到N个,扩充的时候类别用背景类进行扩充,bbox就无所谓,因为如果是背景框的话就不进行框的loss计算。扩充完后就变成了二分图最优匹配问题,所以使用匈牙利算法,按照IOU和类别进行匹配,最终得到每个预测框对应的gt,然后分类使用softmax进行匹配,回归使用iou loss和L1的加权进行计算来优化整个网络。图八中第一行为整个loss函数,第二行为匹配函数,第三行为匹配好后的损失函数,分别为类别和框的损失函数,第四行为box的损失函数。

                                                                         图八

                                                                                  图九

       图九为整个模型的结果对比,基本上在相同的FPS下,transformer由于普通的RCNN,但是我在这里严重怀疑作者肯定没有在Faster上加各种trick,加了trick在coco上应该不止这个点吧。就是欺负人,不过话说回来,transformer新出来就只能先和常规的RCNN较量一下,后续发展,装备起来了就能和加了各种trick的Faster较量较量了。

                                                                                  图十

       图十为作者贴出来的一些他们认为比较好的(肯定是只贴效果好的,手动狗头),可以看到transformer可以精确关注到这种遮挡严重情况下,哪块到底属于哪个物体的,建议可以在密集遮挡的数据集上测测效果。

                                                                           图十一

       图十一说明了该方法也可以用于分割

4.分割中的transformer

论文题目:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

                                                                          图十二

        图十二为整个网络的pipeline,主要还是利用ViT那一套,先将一张图片切成patch,然后全连接映射送入到transformer的encoder中,关键在于decoder,作者这里给出了三种decoder方法:

  • naive:直接将encoder的特征进行reshape到原图大小
  • 上采样+卷积:如图十二中的(b)先reshape,再卷积,再上采样.......,最后到原图大小
  • SETR-MLA:如图十二中的(c),由于作者在这里将一张图切成了25份,所以使用的是第6,12,18,24个特征,先reshape,再卷积+上采样concate的方式,最终一个双线性插值恢复到原始分辨率。

                                                                  图十三

      图十三为整个模型的对比结果,(又是在打小孩),可以看到比FCN好很多。

5.Transformer真正的作用

Attention is not all you need: pure attention loses rank doubly exponentially with depth

                                                   图十四

      由于这篇论文公式推导过于复杂,就不在这里一一赘述了,只讲一下结论就行,这篇论文是从真正从公式上解释了transformer为什么起作用

  • 注意力网络的输出可以被分解为更小项的和,而每个更小项是包括了注意力头序列的跨层运算的;路径分解,本来是一层层的切,现在是跨层横向切割,得到一个个的路径了
  • 通过这个分解操作,作者证明了自注意力具有比较强的归纳偏差(归纳偏见-inductive bias),朝向“token uniformity”(单词均一性,即ntoken的表示向量都统一化了。。。rank-1的矩阵);
  • 特别的,如果没有skip connection (residual connection-残差链接)和MLPh->4h->h的双层position-wise feed-forward network)罩着,自注意力网络的输出会朝着一个rank-1的矩阵倍速+指数级收缩;即,skip connectionMLP可以很好地阻止自注意力网络的这种”退化“;

      总而言之,transformer没有残差和FFN(前馈神经网络),它啥也不是。(话都让谷歌的人说了,说transformer牛逼的是你,说它不行的也是你)

             

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。