transformer in cv简介
近年来transformer在nlp占据了统治地位,现在将transformer在cv中也逐渐大火了起来,下面分享几篇有关transformer在cv中应用的相关的论文
1.transformer本身的介绍
论文名称:Attention Is All You Need
transformer提出的原因
- RNN,LSTM计算时时间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点乘Value值v,得到加权的每个输入向量的评分v;
- 相加之后得到最终的输出结果z。如图二,由于是multi_head,作者在这里使用了h个head。这里可以理解为将特征分散到h个子空间进行特征学习。
- 最后通过残差正则和FFN(是两个全连接层)进行特征输出。正则使用LN,而不是BN,原因是由于在图像中认为BN正则的时候是对统一特征进行归一化,而nlp中对多个句子中相同位置的词进行正则是没有意义的,对整个句子归一化才有意义。其中
图二
transformer中的decoder,如图三:
图三
- 使用masked multihead attention,是为了训练和推理保持一致,因为在推理的时候是一个字一个字进行解码(编码时是同时对所有字进行编码),只能知道已经解码的字,对该字后面的字并不知道,所以把它遮住。
- Decoder接收来自encoder的k和v值
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编码
- CNN与transformer的混合,先提取图像特征再做patch
图五
图五为网络的指标,可以看到
- 小数据效果不如resnet,是因为CNN有很强的归纳偏置作用,可以理解为某一特定场景下对物体的识别,当数据足够多之后,归纳偏置将被忽略,所以transformer更好
- ViT训练的更快,一个TPU只有2.5k天,resnet要9.9k天,此处必须要膜拜一下谷歌的机器真的真的多,同时参数更少
3.检测中的transformer
论文名称:End-to-End Object Detection with Transformers
图六
图七
论文贡献:
- 舍弃一些手工部件,不依赖NMS和Anchor ,简化了检测的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”(单词均一性,即n个token的表示向量都统一化了。。。rank-1的矩阵);
- 特别的,如果没有skip connection (residual connection-残差链接)和MLP(h->4h->h的双层position-wise feed-forward network)罩着,自注意力网络的输出会朝着一个rank-1的矩阵倍速+指数级收缩;即,skip connection和MLP可以很好地阻止自注意力网络的这种”退化“;
总而言之,transformer没有残差和FFN(前馈神经网络),它啥也不是。(话都让谷歌的人说了,说transformer牛逼的是你,说它不行的也是你)
- 点赞
- 收藏
- 关注作者
评论(0)