图像分割(六):模型(PSPNet)
三、图像分割的模型
7.PSPNet
这个模型最核心的贡献就是提出了全局金字塔池化模块:Pyramid Pooling Module(一个不同尺度的pooling模块),其能够融合不同尺度的上下文信息,提高获取全局特征信息的能力,增加了模型的表现力。
模型结构为:
模型的工作流程为:
- 输入图像
- CNN提取特征(带空洞卷积的预训练ResNet),得到的特征图为输入的1/8
- Pyramid Pooling Module处理
- 再通过卷积,生成最终预测的特征图
着重说一下步骤2:
Pyramid Pooling Module:由全局平均池化(具有增大感受野的作用)和特征融合(融合不同尺度的特征信息)实现。
其工作原理为:
-
分区域进行平均池化:
一层(红色):整个图像为一个区域,池化为一个单位,是最粗浅、模糊,也最全局的层。
二层(橙色):将特征图划分为2x2个子区域,对每个区域分别进行平均池化。
三层(蓝色):3x3个子区域,每个区域进行平均池化。
四层(绿色):6x6个子区域,每个区域进行平均池化。
-
使用1x1卷积进行降维(为了保持全局特征的权重):将通道降为1/N(N为金字塔层数),这里是4,所以降为1/4,比如有400个通道,就会降到100。
-
将输出特征图上采样到输入大小(双线性插值)。
-
将所有特征图沿通道维度拼接起来(concat):融合图像深层和浅层特征。
注:金字塔层数和每层的尺度都可以修改,这里为4层(1x1、2x2、3x3、6x6),池化核大小分别为图像的全部、一半和小部分。
一点细节:
使用了一个辅助性损失(除了最终的softmax loss,额外再第四阶段加了一个损失,给了0.4的权重,两个损失一同优化),只在训练时使用,测试时放弃,类似于GoogleNet / Inception-v1的辅助分类器。
作者对MaxPooling和AveragePooling做了大量测试,认为AveragePooling效果更好:
对结果的一些测试:
缺点:模型融合足够的深层特征,但是浅层特征融合得不怎么够,所以细节分割方面不太好。
相关代码: