Dual Attention Network for Scene Segmentation

Dual Attention Network for Scene Segmentation

这篇文章出自CVPR2019,本文是对它的详细解读,希望与同样做语义分割的同学一起交流学习。

1.Abstract

  本文通过自注意力机制(self-attention)来捕获丰富的上下文依赖(rich contextual dependencies)。提出了DANet来自适应地整合局部特征与其全局依赖关系(global dependencies)。具体来说,通过引入空间(spatial)维度和通道(channel)维度的两种attention模块来建模语义依赖关系。Spatial attention module将所有位置的特征的加权和来选择性地聚合每个位置的特征。Channel attention module通过整合所有channel maps来选择性地强调某些相互依赖的channel maps。最后通过融合两个attention module的feature来提升语义分割的特征表达。DANet在Cityscapes, PASCAL Context和COCO Stuff数据集上取得了很好的效果。

解释:

对于刚接触语义分割的人来说,读完上面的摘要,估计这文章就不想看了,可能并不理解文章讲的是什么东西,后面我会慢慢解释每个问题,如果有分析理解不到位的地方,也请读者提出指正。

  • Contextual/Global/Long-range dependencies。18、19年的三大CV顶会文章中经常出现类似这几个词语,翻译成中文可以为上下文/全局/长依赖关系。具体来说,一张图像经过多个卷积层之后,感受野会逐渐变大,即CNN后面几层的feature map中的一个position往往包含了其周围的一些信息。然而,由于卷积操作是在局部进行的,即使经过了多层卷积,一个position也很难能够捕捉到所有position的信息,尤其是距离相对较远的。例如,一张图片左上角有一辆车,右下角有一辆相同型号和颜色的车,虽然它们在图片中的相对位置较远,但它们仍具有相似的特征。仅仅通过卷积的堆叠,左上角的汽车很难捕获到右下角的汽车,因此产生了long-range dependencies问题。该文提出的 Spatial attention module则是为了解决此问题。
  • Attention机制首先是在自然语言处理中提出,后来在CV任务中也被广泛使用,概括来讲它可以emphasize和suppress某些特征,这里对attention机制不做过多具体解释,网上资料一大堆。本文使用了self-attention机制,通过feature map与feature map之间的相互选择来构建similarity attention map,具体如何实现请看后面。
2.Introduction

  为了有效实现分割任务,我们需要区分一些令人困惑的类别,并考虑具有不同外观的对象。比如"field"和"grass"在某些场景中很难区分,"cars"在马路中不同的位置有不同的尺度等等。因此增强像素级识别的特征表示能力是十分必要的。为了提高这种能力,deeplab系列和PSPNet分别用不同的空洞卷积(ASPP)和池化(PSP)来捕获多尺度信息,GCN和EncNet通过增大kernel size和引入一个encoding layer来捕获全局信息,Refinenet, U-Net等encoder-decoder结构通过融合mid-level和high-level特征来实现相同目标。但是,它们都没有利用场景中objects和stuffs之间的关系,这种关系也十分重要。
  另一种方法采用recurrent neural network来解决long-range dependencies问题。但是这类方法都只能隐式地捕获全局关系,它们的有效性在很大程度上依赖于长期记忆的学习成果。
  为了解决long-range dependencies问题,作者提出了DANet,网络结构如图1。在Dilated FCN上,有两个并行的attention modules,一个是position attention module,另一个是channel attention module。Position attention module通过自注意力机制来捕获feature map中任意两个position的空间依赖关系,对于任意一个position,它通过加权求和的所有位置的聚合特征进行更新,权重取决于两个position的similarity,也就是说,不管距离有多远,任意两个具有相似特征的position都可以相互促进。Channel attention module使用相似的自注意力机制来捕获任意两个channel maps之间的channel dependencies,并使用所有channel maps的加权和来更新每个channel map。最后通过融合两个模块来增强模型的特征表达能力。
  作者认为,在处理复杂和多样场景时,DANet要比deeplab和PSPNet更灵活,并解释了为什么DANet好,推荐阅读下面一段论文中的原文,可以帮助读者理解作者提出的模型从哪个角度改善了性能。

take spatial relationships and channel relationships into consideration, so that scene understanding could benefit from long-range dependencies.

图1,DANet

解释:

在introduction中,并没有完全翻译作者的原文,去掉了其中一小部分个人认为不太重要的,总结了一部分内容。总的来说DANet的结构看起来十分简单,相当于在dilated fcn中加入了两个并行attention模块,因此我们主要关注两个模块的内部是如何设计的。

3.Related Work

  这部分作者介绍了一些语义分割和attention模型,不作过多解释。

4.Dual Attention Network
Overview

  Backbone使用了dilated resnet,原始图像经过backbone之后得到大小为1/8原图的feature map,再经过两个并行的attention module分别从spatial和channel维度捕获long-range dependencies。最后将两个模块的信息融合得到更好的特征表达,将增强后的特征经Upsampling还原到原图大小。

Position Attention Module

Position Attention Module
  作者给出的图例已经很详细地表达了设计的细节。首先,上面的两个分支用于生成attention map。将feature map A(CxHxW)分别经过两个带BN和ReLU的卷积层得到feature map B(CxHxW)和C(CxHxW),并将B和C reshape成CxN(N=HxW),将转置后的C(NxC)与B(CxN)做矩阵乘法,并将结果经过softmax layer得到spatial attention map S(NxN)。第三个分支同样将A经过一个卷积曾得到feature map D(CxHxW),并reshape成CxN,将D与spatial attention map S做矩阵相乘并reshape成CxHxW得到attention后的feature map。将其乘一个scale parameter α \alpha α并与原feature map A做一个element-wise sum操作得到最终输出。其中参数 α \alpha α初始值被设为0,并且由网络学到。
  以上皆出自论文原文中,下面是我个人的一些分析,详细分析一下这个module做了什么。首先来看最上面的两个分支,即得到attention map的过程。如下图,A1,A2(在原文中代表特征图B和C)为reshape后的feature map,S为attention map。红条为一个position vector,维度为C,A1和A2每个都有N(HxW)个position。A1,A2中的红色vector做element-wise multiply再求和就得到了S中左上角的绿色方格,代表position i对position i的依赖关系。A1与A2做矩阵相乘后得到的S则代表N个position对每个position的依赖关系。
在这里插入图片描述
  下图中,A3为原图中第三个分支reshape后的feature map。注意作者用的是S’即attention map S的转置而不是S。在矩阵S中,每一行代表position i 对每个position的依赖关系,每一列代表每个position对position i的依赖关系。现在我们需要得到考虑了所有position后的position i的特征,作者将每个position的特征信息乘上position i 对每个positon的依赖关系并求和。即A3中的红色vector(代表第一个channel map中每个position的特征信息)乘S‘中的绿色vector(代表position i对每个position的依赖关系),再求和后得到紫色方格,即考虑了每个position依赖关系后的position i的第一个channel的特征信息。这部分读起来可能有些绕,但是还是希望读者能仔细了解下,如果觉得还有更好的解释或是我的解释不准确,也可以指出。
在这里插入图片描述

问题:

S不转置可不可以,也就是将每个position的特征信息乘上所有position对position i的依赖关系来得到考虑了全局依赖后的position i的特征信息。个人感觉好像没什么影响,后面我会做个实验看下效果有没有影响,等做完实验来更新这一块。

FLOPS计算:

按照作者给出的代码,以输入图像维度为512x512x3为例,feature map A的维度为64x64x512。
三个卷积层作者都采用了1x1卷积,out_dim为64,共需FLOPS:(64x64)x[(1x1x512)x64]x3=6M(忽略bias)
得到attention map S的过程是两个矩阵相乘(NxC)x(CxN),共需FLOPS:4096x64x4096=1G
特征图D与S‘相乘需要FLOPS:64x4096x4096=1G
其实计算量还是很大的,我认为这是这类方法有待改进的地方。

Channel Attention Module

Channel Attention Module
  在Channel Attention Module中,与Position Attention Module不同的是,作者没有对输入特征A做卷积,而是直接reshape。先看最下面的两个分支,先把feature map A reshape成CxN(N=HxW),再对其中一个转置得到NxC,作矩阵相乘即(CxN)x(Nxc)=CxC,经softmax之后得到了channel维度的attention map。第二个分支将A reshape成CxN,并与attention map的转置作矩阵乘法,得到attention之后的feature map(CxN),将其reshape回CxHxW,将其乘一个scale parameter β \beta β并与原feature map A做一个element-wise sum操作得到最终输出。其中参数 β \beta β初始值也被设为0,并且由网络学到。
  同样地,我们深入矩阵乘法的内部来看看这个模块做了什么。如下图,A1,A2为reshape后的feature map,S为attention map。红条为一层channel map,维度为N,A1和A2每个都有C层channel map。A1,A2中的红色vector做element-wise multiply再求和就得到了S中左上角的绿色方格,代表channel map i对channel map i的依赖关系。A1与A2做矩阵相乘后得到的S则代表C个channel map对每个channel map的依赖关系。
在这里插入图片描述
  下图中,A3为原图中第三个分支reshape后的feature map。同样作者用的是S’即attention map S的转置而不是S,但是这里我没有明白这个转置的必要性,在矩阵S中,每一行代表channel map i 对每层channel map的依赖关系,转置后S’的每一行代表每层channel map对channel map i 的依赖关系,但与position attention不同的是,为了得到对应的维度,S’在这里放在了矩阵乘法的左边,这样一来,相当于是作者将每层channel map对channel map i的依赖关系乘上每层channel map的特征信息并求和, 与position attention是相反的。也就是下图中S‘中的绿色vector(代表channel map i对每个channel map的依赖关系)乘上A3中的红色vector(代表第一个position的所有channel map的特征信息),再求和后得到紫色方格。
在这里插入图片描述

FLOPS计算:

同样,以输入图像维度为512x512x3为例,feature map A的维度为64x64x512。
得到attention map S的过程共需FLOPS:512x4096x512=1G
特征图D与S‘相乘需要FLOPS:512x512x4096=1G
与position attention module相比,只少了三个卷积层的计算量。

Attention Module Embedding with Networks

  这一部分主要是介绍融合两个module的特征,作者在两个attention module得到的output后各加了一个卷积层,然后将两个特征做element-wise sum得到更好的特征表达。

5.Experiments

  作者在三个分割数据集上做了实验,分别是:Cityscapes,PASCAL Context和COCO Stuff。实验配置在这里不再介绍了,可以查看论文原文。这里主要看下在Cityscapes上的ablation study。

Ablation Study for Attention Modules

作者分别以dilated-resnet50和dilated-resnet101为baseline,PAM和CAM都能使mIOU获得4%-5%的性能增益,其中PAM带来的增益略优于CAM
在这里插入图片描述

Ablation Study for Improvement Strategies

这部分主要是增加了一些提升mIOU的trick,比不使用任何trick增加了3.93%mIOU。
在这里插入图片描述

Comparing with State-of-the-art

与各种SOTA比较。
在这里插入图片描述

Results on PASCAL Context and COCO Stuff Dataset

在PASCAL Context和COCO Stuff数据集上和其他SOTA的比较。
在这里插入图片描述
在这里插入图片描述

6.Conclusion

  到这里,DANet基本上就结束了,总的来说,这篇文章提出的两个self-attention模型利用了noo-local的思想,在效果上的性能提升还是很大的(4-5个点),但缺点是计算量很大。DANet的backbone用的是dilated FCN,output_stride为8,这本身就增大了计算量,再加上两个attention module带来的高计算量,使得它训练和推理时间都变得很长。

  • 11
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值