【论文阅读】SPNet(CVPR2020)

论文题目:Strip Pooling: Rethinking Spatial Pooling for Scene Parsing

论文地址:https://arxiv.org/abs/2003.13328v1

代码地址:https://github.com/Andrew-Qibin/SPNet

 

文章贡献:

1. 提出了strip pooling,它继承了全局平均池化的优点,可以收集长期的依赖关系,同时关注局部细节;

2. 基于strip pooling设计了SPM(Strip Pooling Moudule)和MPM(Mixed Pooling Module),均为轻量级模块,可插入任何骨干网络使用;

3. 基于SPM和MPM设计了SPNet,在场景解析数据集中实现了先进的分割效果。

 

1 背景和动机

卷积+池化堆叠设计的网络,其感受野有限,无法处理复杂场景,需要提高网络的长期依赖建模能力。

但现有的解决方法要么会产生多余计算量,要么是方形映射,不满足现实需求。如下图场景中的柱子是竖长条的,草地是横长条的,都不是类方形,而方形池化窗口会产生许多无关的污染信息:

因此作者提出了strip pooling作为全局池化的替代,有以下2个优点:

  1. 它仅沿着一个空间维度(长或宽)部署一个long kernel shape,可以捕获孤立区域的长期依赖关系;
  2. 该算法在其他空间维度上保持较窄的kernel shape,有利于捕获局部上下文,防止不相关区域干扰标签预测。

 

2 相关工作

目前最先进的语义分割方法大多利用CNNs。然而,CNN的接受域通过叠加局部卷积或池化操作,因此增长缓慢,从而阻碍了它们考虑足够有用的上下文信息。建模上下文关系,增加感受野,主要有以下3种解决方法:

  1. 早期技术包括条件随机场(CRFs),但它们大多是在离散的标签空间中建模,计算成本很高;
  2. 对于连续特征空间学习,以往的工作使用多尺度特征聚合,通过以多个rates和多个视野的卷积或池化操作,探测传入的特征来融合上下文信息。如Deeplab使用空洞卷积以及融合不同dilation rate的特征图来扩大感受野,以及NL方法等;
  3. 改善感受野的另一个方向是改善空间金字塔池化,但它只能利用方形空间内的信息,且只能用在骨干网络之后(pspnet),不能在骨干网络中实现。

因此,论文提出strip pooling,拥有1xN或Nx1的pooling kernels,可以插入并堆叠到现有的网络中,捕获丰富的上下文信息。

 

3 网络结构

条状池化(strip pooling)

(1)标准空间平均池化

上式表示一个h*w的平均池化,即对HxW的特征图x,将其每一个h*w区域内的值取平均,得到的输出特征图大小为H/h * W/w.

但它在处理不规则目标时,可能包含大量无关区域。

(2)条状池化

为了解决上述问题,提出strip pooling,它将沿水平或垂直方向执行池化操作。

  

式2表示水平条状池化,即在HxW的特征图上对每一个横条进行平均池化,得到Hx1的池化结果;式3表示垂直条状池化。

SPM(Strip Pooling Module

SPM的结构图,输入为CxHxW的特征图x,在每一个通道上,分别对水平和垂直方向进行平均池化,经过3x1和1x3卷积调整当前位置和相邻特征,再扩展为HxW的大小。之后将两者的结果进行fusion操作(论文中采用的add),经过1x1卷和sigmiod求得权重,再与之前的x加权求和,获得输出特征图。

在上面的过程中,允许输出张量中的每个位置与输入张量中的各种位置建立关系(如输出的黑框处像素融合了其与输入的红紫框处像素之间的关系)。通过几个SPM的叠加,可以构建整个场景的长期依赖关系。也可以将整个过程看成是一种注意力。

MPM(Mixed Pooling Module

PPM(pyramid pooling module )的结构图:

PPM将输入特征图分别进行4种不同尺度的池化操作,其结果分别经过1x1调整通道后再上采样到原始大小,进行cancat。输入和输出的长宽相同,但通道数不同。

考虑到Strip Pooling的优点,论文提出MPM,融合了两者池化方法:

对输入特征x进行1x1卷积调整通道数(2048-->1024),得到x1和x2分别输入两个分支,用于捕捉短期依赖信息和长期依赖信息。

图a中,x1经过2种不同尺度的平均池化操作,获得12x12和20x20的大小x2_2和x2_3,对这2种池化结果以及初始的x1均经过3x3卷积(1024-->256)。将x2_1,x2_2,x2_3三者均上采样回HxW大小,对应位置相加,再经过一个3x3卷积(256-->256),得到分支1的输出结果x1'。

图b中,x2经过水平和垂直条状池化操作,得到Hx1和1xW的大小,和a中类似的,卷积后上采样回HxW大小,最后得到x2‘。

将x1'和x2'进行cancat(256-->512),并1x1卷积条状通道(512-->1024),与原始输出特征图x相加,得到最终结果。

代码如下所示:

除了conv1_1和conv3,都是kernel size=3的1D或2D卷积。输入和输出的CHW都是相同的,C=1024.

SPNet

基于SPM和MPM,作者构建了SPNet。

对于SPM,在resnet网络每个stage的最后一个block中和最后一个stage的所有blocks中使用。如resnet50是4个stage,有[3,4,6,3]共16个blocks,即在第3、7、13、14、15、16个block中使用SPM。SPM位于3x3卷积的后面:

对于MPM,由于骨干网络的输出维度为2048,首先经过1x1卷积调整通道为1024,然后经过2个MPMs。每个MPM中的3x3卷积都将通道数由1024调整到256,在最后添加卷积层来实现预测,最后上采样回HxW大小,获取最终的分割图:

 

4 实验结果

在3个数据集上进行实验,使用随机翻转和缩放进行预处理,使用了fcn来计算辅助损失(权重为0.4)。为了方便对比其他方法,进行了multi-grid实验。

ADE20K

(1)MPM的数量选择

以resnet50为骨干:

 

  • 使用1个MPM时,有40.5%的mIoU,使用2个时,有41.92%,使用更多的MPM并不能再带来性能的提升;
  • 使用2个MPM时,能达到pspnet的效果,且参数量小。

(2)strip pooling在MPM中的作用

LRD(长期依赖聚合子模块)包含了strip pooling而SRD(短期依赖聚合子模块)没有,可以看到使用LRD比使用SRD效果要好,两者一起使用效果更好。

(3)SPM的效果

以base-fcn+2MPMs作为基线,对比在不同位置加入SPM的效果。L表示每个stage的最后一个block,A表示最后一个stage的所有blocks:

L比A效果好,A+L位置均使用时效果更好。

(4) strip pooling和Global Average Pooling的对比

将SPM中的strip pooling替换成Global Average Pooling,即相当于是SE操作,mIou反而从41.92%降到了41.34%。

可能是由于直接融合特征映射来构造一个一维向量,丢失了太多的空间信息,从而导致歧义。

(5)骨干网的深度和多尺度翻转测试

 深层骨干效果更好,多尺度翻转效果更好。

(6)各种实验的效果

(7)与其他先进技术的比较

Cityscapes

使用resnet101作为骨干:

Pascal Context

  • 13
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值