目录
0、摘要
空间池化已被证明在像素级预测的任务(如:场景解析)中进行捕获长距离上下文信息时非常高效。本文针对传统的核大小为N*N的空间池化进行了改进,提出了一种核大小为1*N或者N*1的池化操作,称之为条纹池化。基于条纹池化,进一步研究了池化结构:(1)引入了一个新的条纹池化模块,使得模型可以建模长距离依赖;(2)展示了一种新颖的构建块,其带有不同的空间池化核;(3)系统地对条纹池化和传统池化方法进行了对比。这种基于新颖池化的设计,既轻量,又可作为插件应用到已有的场景解析网络。在流行基准集上的大量实验表明,该方法达到了SOTA。
1、动机
在语义分割领域,用于获取长距离依赖的方法有:自注意力机制、空洞卷积。
自注意力机制可以建模全局上下文,不过其计算量过大;空洞卷积通过增大感受野来捕获更远距离的依赖信息,不过其形状为方形,仍然限制了其捕获的距离。
因此,本文提出了条纹池化方法来扩展CNN的感受野,同时收集上下文信息。
条纹池化作为全局池化的替代品,有两个优势:
首先,其在一个空间维度上应用了一个长条状的池化核,因此能够捕获长距离信息,如图1a和1c;
其次,它在另一个维度上保持比较窄的尺寸,可以避免捕获一些无关信息。
2、方法
基于条纹池化操作,本文提出了两个模块:条纹池化模块(SPM)、混合池化模块(MPM)。
其中,SPM包含了两条路径:水平、垂直,分别用于捕获两个方向的长距离上下文依赖;MPM用于在高语义级别上进一步建模长距离依赖,其通过利用不同形状的池化核进行信息聚合,来探索复杂场景的图像。
基于SPM和MPM两种模块,作者设计出了SPNet,该网络在各流行benchmark上达到了SOTA。
2.1、池化公式
设输入为,池化核大小为
,考虑一种简单情况:H和W能够被h和w整除,则池化后的尺寸为
。
则传统的平均池化公式为:
(1)
而对于条纹池化,其水平和垂直方向的池化公式分别为:
(2)
(3)
2.2、SPM
SPM主要用于backbone,以增强其捕获长距离依赖的能力。如图2所示,令输入为,SPM的处理过程描述如下:
- (1)将输入分别进行水平条纹池化、垂直条纹池化,得到对应的池化map:
、
;
- (2)使用一个3*3的1D卷积,将池化map扩展到与输入相同的分辨率
,得到扩展后的
;
- (3)对扩展后的feature map进行融合:
;
- (4)然后,经过一个1*1卷积和一个Sigmoid层之后,与原输入进行对应元素相乘,即可得到SPM最终的输出:
;
经过上述过程,output tensor中的每个位置都构建了input tensor中对应位置垂直、水平两个方向上各位置的信息,也即十字交叉位置上的所有元素。这一点和CCNet中的交叉注意力机制有点相似,其实,作者也提到该模块也可以作为一个注意力模块插件来使用。
2.3、MPM
金字塔池化模块(PPM)对场景解析的作用已被证实,但是PPM严重依赖标准的池化方法(在不同等级的金字塔上应用不同的池化核)。因此,作者设计了MPM来充分利用标准池化和条纹池化的优势:通过不同的池化操作融合不同类型的上下文信息,从而使得特征更具判别力。
所提出的MPM包括两个子模块:同时捕获不同位置间的短距离依赖和长距离依赖关系,这两种依赖对场景解析都具有一定帮助。
对于长距离依赖,没有使用功能先前研究使用的全局平均池化(GAP),而是使用水平和垂直的条纹池化来收集这类线索。基于此,设计了捕获长距离依赖的子模块,如图3(b)所示。
条纹池化可以捕获分布较为分散的上下文信息,但是,对于那些较为集中的信息则仍需要使用标准的空间池化来捕获。也因此,设计了捕获短距离依赖关系的的子模块,如图3(a)所示。
对于两个子模块,简单描述下:
- 对于(a)模块,使用了了两种标准的池化操作得到池化后的map,再加上原始输入,共三个feature maps,分别经过2D卷积后,池化路径(上面两条)进行上采样,然后将三个feature maps融合,再经过一个2D卷积;
- 对于(b)模块,与SPM类似,分别使用水平、垂直方向的条纹池化,得到一维向量,然后经过1D卷积后,上采样到原分辨率,最后经过一个2D卷积;
2.4、SPNet
基于SPM和MPM模块,作者设计了SPNet:
- backbone用的是ResNet,并利用空洞卷积进行了改进,同时将最终输入步长设为8,也即得到的feature map尺寸是原图1/8。
- SPMs模块加到每个stage的最后一个构建块以及最后一个stage的所有构建块的3*3卷积之后。SPM中的所有卷积层的通道数都与该模块的输入通道保持一致。
- MPM则直接放在backbone之后:首先使用一个1*1卷积将backbone的输出进行降维,从2048到1024;然后接上两个MPM。对于每个MPM,所有卷积层都是核大小为3*3、通道数为256。
- 最后在接一个卷积层来生成最终的分割map。
3、实验结果
4、总结
本文主要是提出了一种新的池化方法——条纹池化,其通过长而窄的池化核可以建模长距离依赖关系。基于这种池化方式,设计了两个模块:条纹池化模块SPM用于增加backbone的感受野、混合池化模块MPM用于同时捕获长、短距离的上下文信息。