现状:在图像分割这一块,图像在输出时尺寸不能变小,为了解决这个问题,DeepLab是一个比较大的进步,使用dilated convolution使得在不改变图像尺寸的同时扩大接受野,但是有缺陷,一个就是由于卷积层需要处理具有大量高维度细节特征的特征图,这使得计算上付出的代价太大,这也限制了输出尺寸一般为原输入的1/8。另一个就是dilated convolution是一种对特征的粗采样,从而导致本质上忽略了一些细节。而另一种办法是整合中间层的特征来生成高分辨率的图像输出,像FCN和Hypercolumn就是代表。而针对如何有效地采样中间特征这个问题,RefineNet作出了贡献。
主要贡献:
1、提出了一个新的结构(RefineNet)来采集来自中间层的特征,RefineNet以递归的形式refine了低分辨率的语义特征(高级)和精细的低层特征来产生高分辨率的输出图像。
2、RefineNet中的所有部分都用带有identity mapping的residual connection,这使得梯度的传播变得容易了,从而可以有效地进行端到端的训练。
3、提出了一个新的component——“chained residual pooling”,这是为了便于对图片中的大范围场景比如背景的context进行提取。
接下来我们看看RefineNet的结构:
1、Multi-Path Refinement:
首先看看整体的构造:左边相当于是一个ResNet部分,中间是RefineNet,右边上方是输出的高分辨率的特征图,再经过一个dense softmax层即输出分割好的图像。Multi-Path指的就是ResNet每层的输出与RefineNet连接的部分。
从图中可以看到,除了RefineNet-4,每个RefineNet接收的输入为一层Residual block的输出与上一个RefineNet的输出,RefineNet-4只接收最高一层Residual block的输出为输入。但是这个结构并不是固定的,在后面部分会有讲结构的变体。
每个RefineNets参数不相关,这就允许了对于独立级别的细节更灵活的适应性。
2、RefineNet
这是具体的RefineNet的构造,由四个主要部分组成,分别是:RCU、Multi-resolution Fusion、Chained Residual Pooling以及Output conv.(RCU)。可以看出,RefineNet是可以接收任意数量的特征图输入的。
Adaptive Conv中的RCU相当于简化了的原始ResNet中的卷积单元(移除了batch-normalization层),主要用于fine-tune预训练的ResNet的权重。
随后的Multi-resolution Fusion中,第一个卷积层用于对输入的adaptation,产生相同尺寸的特征图,再用上采样将特征图变为最高分辨率的特征图,从而完成特征图的Sum操作。
接下来进入Chained Residual Pooling,背景的区域一般很大,普通池化可能需要对其采用很大的窗口,而链式池化可以减少每层池化所用的窗口大小,这就是这一个component的目的。而仍然采用residual connection,有一个理由就是因为它有利于梯度的传播。
最后的Output Conv,对经过整合的特征图进行非线性操作,这是为了未来的处理或者是预测产生特征。
实验:
下面是RefineNet在各个数据集上的表现:(部分)
变体:
1、Single RefineNet
2、2-cascaded RefineNet
3、4-cascaded 2-scale RefineNet
作者还对这几种变体都进行了实验,结果如下:
发现4-cascaded 2-scale RefineNet的效果其实是最好的,这可能是因为网络容量变大的原因,但是由于训练时间较长于是选择了折中的4-cascaded RefineNet。