作者 | 汤诗雨 编辑 | 汽车人
原文链接:https://www.zhihu.com/question/349958732/answer/28728688
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【全栈算法】技术交流群
后台回复【Transformer综述】获取2022最新ViT综述论文!
这是出自复旦和腾讯PCG的一篇ICLR2023,移动端分割方向的文章,但不局限于分割,其中的高效注意力模块在分类实验中也体现出了优秀的性能,同时在swintransformer的结构中横向对比其他注意力机制也获得了最优的效果。[pdf][code]
-
出发点:
-
Transformer在服务器端的多类别语义分割数据集上均获得了碾压的效果,Topformer第一次在移动端上使用了Transformer的注意力机制增强了特征,但是使用的注意力还是不够高效,因此只能在下采样64倍的分辨率上进行特征增强。
-
现有的高效注意力机制包含基于窗口的注意力机制和轴线注意力等,但是这些注意力在高分辨率上的延时对于移动端来说还是损失了全局信息/不够高效。
-
解决方式:
-
设计增加了位置信息的轴线压缩增强注意力,一方面将QKV特征进行轴线压缩后再注意力增强,另一方面将QKV特征使用卷积网络提升局部信息,最后将二者融合,输出增强特征。
-
改进后的注意力相对原本的轴线注意力,将计算复杂度从O((H + W)HW)降低到O(HW)。
1模型结构
模型结构主要包含了MV2的Stem、上下文和空间分支和轻量分割头。
-
Stem:仅将特征下采样8倍,并且其中config系数在topformer的基础上对倒数第二个stage减少了一层,并增加了通道数量。
-
上下文分支:将特征进一步进行三个stage的下采样,并中间使用设计的seaformer layer进行特征增强。可以发现这里的注意力通过减少了延时,可以直接作用于16倍下采样的特征上。并且backbone部分由stem和上下文分支组成。
-
空间分支:采用大分辨率的特征,并使用特征融合模块不断吸收来自高分辨率的上下文信息,注意到这里的融合模块和topformer比较相似,因此不作为重点。
-
轻量分割头:将特征从8倍下采样后进行像素分类。
模型结构结构代码解析
我们从forward大致理解组网方式,详细的代码可以参见代码库:https://github.com/fudan-zvg/SeaFormer/blob/main/seaformer-seg/mmseg/models/backbones/seaformer.py
-
backbone部分将八倍下采样的特征输出,并不断获取通过注意力模块增强的特征,最终输出不同下采样的特征。
-
fusion部分也较为简单,将backbone的输出不断和8倍下采样的特征融合,最终将特征通过分类层输出结果。
注意力层
注意力层正如之前说到的分为两个部分,主要为下图的下半部分,其使用了压缩后的特征进行全局注意力,上半部分则使用卷积层补充局部信息,最后使用相乘的形式进行融合。特别的是,这里的注意力不是直接使用的特征,而是将特征分别映射到QKV后进行的增强,作者也通过对比消融实验说明了通道数量对整体效果的影响(对比Exp.1的upconv和conv的实验结果)
注意力层代码分析
注意里的代码主要三块,即局部信息提取,行注意力和列注意力,最后将二者融合。代码和图中略有不同在于在行列注意力相加之后又与V进行了相加,随后映射后才和局部特征进行相乘融合。
注意力时间复杂度分析
本篇文章最重要的在于分析不同注意力机制的时间复杂度,并通过时间复杂度分析真正设计出高效的注意力机制,下图展示了不同注意力机制的时间对比,可以看到其将注意力的复杂度降低到近似线性。如果对于时间复杂度分析感兴趣的读者可以阅读论文获取详细分析,主要时间在于:1.映射到QKV的矩阵计算,2. QKV的两两矩阵乘。并且在实际代码中,映射到QKV实际使用的是卷积而不是全连接映射,因此时间复杂度会明显低于传统tranformer的注意力复杂度。
2实验结果
本文作者做了在分割和分类数据上的实验,注意力模块本身的消融实验,以及和其他注意力机制的横向对比等,可以说实验十分扎实和丰富的,此处展示几个觉得比较亮眼的实验结果。
3优缺点分析
读完本文,还是受到很多启发。本篇文章围绕高效的注意力在更高维度的特征上进行了增强,其中基于综合的轴线进行全局特征注意力生成非常引人深思。同时详实和突出的实验结果也是一大亮点,通过和其他注意力的横向对比,说明其可以在任何一种需要使用注意力模块的位置插入并提升精度和速度。从而展现出其在分类分割多任务上的优越性能。