论文题目: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个优点:
- 它仅沿着一个空间维度(长或宽)部署一个long kernel shape,可以捕获孤立区域的长期依赖关系;
- 该算法在其他空间维度上保持较窄的kernel shape,有利于捕获局部上下文,防止不相关区域干扰标签预测。
2 相关工作
目前最先进的语义分割方法大多利用CNNs。然而,CNN的接受域通过叠加局部卷积或池化操作,因此增长缓慢,从而阻碍了它们考虑足够有用的上下文信息。建模上下文关系,增加感受野,主要有以下3种解决方法:
- 早期技术包括条件随机场(CRFs),但它们大多是在离散的标签空间中建模,计算成本很高;
- 对于连续特征空间学习,以往的工作使用多尺度特征聚合,通过以多个rates和多个视野的卷积或池化操作,探测传入的特征来融合上下文信息。如Deeplab使用空洞卷积以及融合不同dilation rate的特征图来扩大感受野,以及NL方法等;
- 改善感受野的另一个方向是改善空间金字塔池化,但它只能利用方形空间内的信息,且只能用在骨干网络之后(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)
![](https://i-blog.csdnimg.cn/blog_migrate/75711d7c17a88e182e9491f038aeb2e2.png)
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作为骨干: