语义分割论文阅读之一:RefineNet:Multi-Path
1. motivation
使用FCN来解决Semantic segmentation 问题要解决的主要问题是,随着FCN中的层数的加深,feature map的分辨率会因为步长不为1的卷积层和pooling层的存在而变得越来越小。目前解决这两个问题的主要思路有以下两个:
- 解卷积
- 空洞卷积(deeplab v1中提出)
- 利用多种不同尺度的feature map
但是前两种方法都有自己本身存在的缺陷:
- 经过了深层次的FCN之后得到的feature map损失了很多的底层视觉特征(边界,角,circle等),解卷积方法不能从这些feature map中恢复出这些底层特征。
- 使用空洞卷积来替代FCN中的卷积,并且去掉其中的部分pooling层,可以解决FCN中存在的问题,但是这种方法需要存储尺寸更大的feature map,从而消耗更多的GPU显存,并且因为需要对更大的feature map进行空洞卷积,因此需要的计算量也更大。
第三种方法同时使用FCN里中间层次的feature map,这类方法背后的直觉原因是:中间层次的特征既能够描述mid-level的物体构成部分特征,也能够保留更多的空间信息。(图像中:像素构成了边,边构成了图案,图案构成了部件,部件构成了物体,物体构成了场景:In vision, pixels are assembled into edglets, edglets into motifs, motifs into parts, parts into objects, and objects into scenes)mid-leve的特征补充了low-level特征的高等抽象不足,同时也补充了high-level特征在空间信息上的缺失。
作者认为所有level的特征对于语义分割都是有用的。high-level的特征帮助图像区域的分类识别,low-level的特征帮助保留空间信息,产生更加细腻的边界。那么如何利用mid-level的特征是一个有待解决的问题。有鉴于此,作者提出了一种利用mid-level信息的网络结构---RefineNet。
2. method
-
网络整体结构
网络结构
文中提出的网络结构是基于ResNet的,根据feature map的分辨率将ResNet的blocks分成了四部分,四部分的feature map分辨率分别是原始图像的1/4, 1/8, 1/16, 1/32。将此四个block的输出分别作为4个级联的RefineNet block的输入,每一个Refine block都直接和ResNet block的输出相连。
-
Refine Block的结构:
RefineNet block结构
每一个Refine block由三个级联结构构成:RCU: Residual Conv Unit、Multi-resolution Fusion和Chained Residual Pooling。其中:
- RCU用来fine-tune预训练的ResNet网络的权重。由去掉了BN层之后的简化版的ResNet unit构成
- Multi-resolution Fusion模块将所有RCU模块的输出作为输入,每一个RCU输出都先进行一次卷积,然后上采样,最后进行求和。
- Chained Residual Pooling模块用来获取图像的上下文信息。将MRF的输出作为输入,经过多次大窗口的pooling来获取image region级别的上下文信息。
最后网络又经过了一个RCU模块来对融合之后的feature maps进行一次非线性操作,生成用来进行预测的feature map。
3. result
文中提出的方法在7个公共数据集上(挺牛X的)都达到了state-of-the-art的水平:PASCAL VOC 2012、PASCAL-Context、NYUD v2、SUN-RGBD、Cityscapes、ADE20K, Person-Parts dataset[图片上传失败...(image-e937b3-1547038018170)]