• 语义分割之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在目标理解上的直观结果:

     

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

  • 相关阅读:
    85--spring cloud (Ribbon-Eureka注册中心)
    85--spring cloud 入门(springcloud简介)
    84--spring cloud 入门(微服务注册中心介绍)
    83--spring cloud 入门(Eureka注册中心)
    82--JT项目20(订单模块实现/ThreadLocal本地线程变量/Quartz框架)
    81--JT项目19(商品购物车/详情/用户退出)
    80--JT项目18(Dubbo负载均衡/单点登录/注册业务)
    Ajax中post与get的区别
    Process
    Java实现CURL,与把字符串结果写到json文件
  • 原文地址:https://www.cnblogs.com/jimchen1218/p/11928279.html
Copyright © 2020-2023  润新知