语义分割之RefineNet

背景介绍

      近来年,深度卷积网络在目标检测方面取得了一定的成绩。但对于密集预测,仍存在一定不足,原因是频繁的卷积和池化导致最终的特征分辨率降低。

      针对这个问题,目前主要采用两种方法:第一种:空洞卷积,如Deeplab,但计算资源消耗太大;下图分别是残差结构和空洞卷积在提取稠密分割结果时的操作流程:

 
 

很明显,残差结构直接损失了空间分辨率。虽然空洞卷积在一定程度上减小了残差结构空间分辨率的损失,但是其训练的代价是非常高昂的(即使在GPU上)。

         第二种、充分利用中间层的语义信息来生成较高分辨率的预测结果,即本文采用的方法。
 
正文

一、创新点:

      1、提出一种新的模块:RefineNet,利用不同层的特征来完成语义分割。主要利用了递归的方式。

      2、提出了链式残差池化的思想,可以在较大的图像区域上捕获背景信息。

二、详细功能介绍:

      1、多路径Refine恢复分辨率

       实现将粗糙的较高层次语义特征与精细的较低层次语义特征结合,来生成高分辨率的语义分割图片;

基于ResNet网络,在4种不同的降采样阶段,将特征图输入到RefineNet模块中,产生整合后的特征图。除了RefineNet4,每个RefineNet模块都有两个输入,一个是本阶段的特征图,另一个是低层产生的经过处理的特征图。随着降采样的进行,语义信息逐渐丰富。最终得到的得分图,经过上采样恢复到原有的图片大小。

      2、RefineNet模块(全局特征提取与融合)

      每个RefineNet模块结构如下:

 主要由4部分组成:

      1)残差卷积单元RCU,用来调整预训练权重;


    

每个RCU模块包括一个ReLU层和一个卷积层,网络结构中,每个分辨率下应用两个串联的RCU模块,用于提取该分辨率下的分割结果的残差,最后以相加的形式校正该分辨率下的原始分割结果。

      2)多分辨率融合单元,实现不同分辨率特征图的融合;


      首先通过一个卷积层处理输入进来的不同分辨率下的分割结果,从而学习得到各通道下的适应性权重。随后,应用上采样,统一所有通道下的分割结果,并将各通道结果求和。求和结果送入下一个模块。

      3)链式残差池化,用来捕获背景上下文信息;

   

    

       通过残差校正的方式,优化前两步融合得到的分割结果。

       该模块主要由一个残差结构、一个池化层和一个卷积层组成。其中,池化层加卷积层用来习得用于校正的残差。值得注意的是,RefineNet在这里用了一个比较巧妙的做法:用前一级的残差结果作为下一级的残差学习模块的输入,而非直接从校正后的分割结果上再重新习得一个独立的残差。好处是:可以使得后面的模块在前面残差的基础上,继续深入学习,得到一个更好的残差校正结果。

      4)输出卷积单元,用于处理结果的最终预测。

     3、恒等映射

      方便进行端到端的处理。

三、详细架构图:

 

 四、RefineNet不同变种结构:

1、单个RefineNet


2、二次级联的RefineNet


3、四次级联RefineNet


五、实验结果:

RefineNet在NYUv2数据库、PASCAL VOC 2012数据库和Cityscapes数据库下都有实验验证。下表是其在NYUv2下的结果(40类):

NYU数据集下载链接:https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html

        预处理链接:http://www.manongjc.com/article/26507.html

 

下表是其在Cityscapes下的结果:

CityScapes数据集下载链接:https://www.cityscapes-dataset.com/

 
 

下图是语义分割问题上的直观结果:

 
 

除了语义分割,RefineNet还可以用于目标理解(object parsing)。下表是其在目标理解上的表现:

下图是RefineNet在目标理解上的直观结果:

 

 注:该方法可进行端到端的训练,且在不同的训练集上表现都不错。

原文地址:https://www.cnblogs.com/jimchen1218/p/11928279.html