Understanding Convolution for Semantic Segmentation

理解论文   Understanding Convolution for Semantic Segmentation

摘要

1.设计了dense upsampling convolution(DUC)来产生像素级的预测,能够捕获和解码双线性上采样的丢失的更多详细信息。

2.在编码阶段,提出了混合膨胀卷积(Hybrid dilated convolution)框架,简称HDC。这个框架 (1)有效的扩大了网络的感知野用来聚合全局信息。(2)减轻了 标准的膨胀卷积造成的“grid issue ”。

3.在Cityscapes dataset上实验,提交的测试集上达到了80.1% mIOU。

4.源代码

一、Introduction

1.从其他角度改进语义分割:编码和解码阶段的卷积操作。

2.在解码阶段,现行的所部分语义分割系统使用双线性上采样来得到 output label map。双线性上采样是不能学习的并且可能会丢失一些信息。

3.提出了dense upsampling convolution(DUC),这种方式是特别容易实现并且能够实现像素级的精确度:取代了立即去尝试恢复full-resolution label map,学习了一组向上缩放滤波器,将缩放后的feature map向上缩放到最终的所需大小的dense feature map中。 

4.DUC通过支持端到端的训练自然适合FCN框架,并且提高了在Cityscapes dataset上像素级的分割的mIOU,特别是在相对较小的目标上。

5.在编码阶段,流行使用膨胀卷积,保持了分辨率和感知野通过在卷积核中增加孔洞,因此减少了下采样的需要(max pooling 或者是strided convolution)。然而现有的膨胀卷积网络中存在固有的问题,称他为“gridding”:因为卷积核中的两个像素之间填充0,该核的感知野仅覆盖棋盘格图案的区域——仅对具有非零值的位置进行采样,从而丢失一些相邻信息。当膨胀率增加的时候,这个问题更严重。通常在较高层中,当感知野很大时:卷积核太稀疏,以至于不能覆盖任何局部信息,因为非零值相距太远。 对固定像素有贡献的信息总是来自其预定义的网格模式,因此丢失了很大一部分信息。 

6.提出了hybrid dilated convolution(HDC)框架作为解决“gridding”问题的第一步,取代使用相同的膨胀率来获得相同的空间分辨率的做法,使用一系列膨胀率,并以与RESNET-101中的“blocks”相同的方式将它们串联起来。提出的方法能够轻“gridding”问题。更重要的是:选择合适的膨胀率能否有效的增加感知野,并且能提高相对较大的目标的精确度。

二、Related Work

1.Decoding of Feature Representation。

2.Dilated Convolution

三、Method

1.Dense Upsampling Convolution (DUC)

    (1)取代bilinear upsampling,因为不可学习。

    (2)取代 deconvolution,因为卷积操作之前的unpooling那一步必须使用0填充

    (3)DUC在feature上直接使用convolution operation,来获得dense pixel-wise prediction map。图1展示了DUC layer,

    

    (4)DUC 操作都与卷积操作相关。DUC该文章中在size为h*w*c的feature map上操作,来获得size为h*w*(d2*L)的输出feature map,其中L代表语义分割任务的类别数。因此,每一层的dense convolution都在学习每个像素的预测结果。然后,使用SoftMax层将输出特征映射重新reshape为H*W*L,并应用ElementWise ArgMax操作获得最终的label map。 

    (5)在实践中,“reshape”操作可能不是必需的,因为feature map可以直接折叠到要馈送到SoftMax层的向量。 

    (6)DUC的核心思想是将整个label map划分为与输入特征映射具有相同高度和宽度的d2个子部分。 也就是说,将整个label map转换为具有多个通道的更小的label map。 这种转换允许在输入feature map和输出label map之间直接应用卷积操作,而不需要在deconvolution网络中插入额外的值(“unpooling”操作)。 

    (7)由于DUC是可学习的,所以它能够捕获和恢复在双线性插值操作中通常丢失的精细详细信息。 例如,如果网络的下采样率为1/16,并且对象的长度或宽度小于16个像素(如极点或远方的人),则双线性上采样很可能无法恢复该对象。 同时,必须对相应的训练标签进行下采样,以与输出维度相对应,这已经会造成细节信息的丢失。 另一方面,duc的预测以原始分辨率执行,从而使得能够进行像素级decoding。 此外,DUC操作可以自然地集成到FCN框架中,并使整个编码和解码过程端到端可训练

2.Hybrid Dilated Convolution (HDC)

 1.在1-D环境中,dilated convolution定义如下:

其中,f[i]是input,g[i]是output,h[l]代表滤波器的长度,r对应于膨胀率,在标准卷积操作中,r=1。

2.在语义分割系统中,2D膨胀卷积是通过在卷积核中的每个像素之间插入“holes”(zeros) 来构造的。对于size为k*k的卷积核,膨胀的卷积核的size为kd * kd,其中kd = k + (k - 1) * (r - 1)。

3.膨胀卷积被用来在FCN中保持feature maps的高分辨率通过取代max-pooling操作或者是strided convolution layer,并且同时能够保存对应的层的感知野。

4.例子:如果一个卷积层的stride s=2,那么这一层的stride s重置为1,并且所有卷积核的dilared_rate r设置为2。此过程在具有下采样操作的所有层中迭代应用,因此输出层中的特征映射可以保持与输入层相同的分辨率。 然而,在实践中,膨胀卷积通常应用于已经下采样的特征图上,以实现合理的效率/精度折衷

5.然而,在dialted convolution 框架中存在一个理论上的问题,称这个问题是:“gridding”,如图2所示。这个问题的示意图如下:对于一个膨胀卷积层 l 中的一个像素p,对像素p有贡献的信息来自以p为中心的层 l-1 中的邻近 Kd * Kd 区域。 因为膨胀卷积在卷积核中引入0值,在 Kd * Kd 区域实际参与计算的像素只有 k * k ,它们之间有 r - 1 的间隙。如果k=3,r=2,在区域中的25个像素中只有9个像素参与计算。因为所有的层拥有相同的膨胀率,因此对于顶部膨胀卷积层Ltop中的像素P,有助于计算P值的位置的最大可能数目是(W' * H')/r2,其中W' 和 H'分别是底部扩张卷积层的宽度和高度

6.上述5造成的结果就是,像素p只能以棋盘方式查看信息,并且丢失大部分信息(当r=2时至少75%)。 当 r 由于额外的下采样操作而在更高层变大时,来自输入的样本可能非常稀疏,这可能不利于学习,因为1)局部信息完全丢失;2)信息可能在很远的距离上不相关。

7.为了解决5中存在的问题,提出了一种简单的解决方案:hybrid dilated convolution(HDC)。假设拥有N个卷积层,这些层拥有size为K * K的卷积核并且膨胀率为:HDC的目标是让一系列卷积运算的RF最终大小完全覆盖一个正方形区域,而没有任何holes或missing edges。 定义 “maximum distance between two nonzero values”为:设计的目标是让。例如,kernel size K=3,r=[1,2,5],这种模式工作的话M2=2,然而当以r=[1,2,9]模式工作的话M=5。实际上,在下采样发生后,我们不是对所有层使用相同的膨胀率,而是对每个层使用不同的膨胀率。 在我们的网络中,膨胀率的分配遵循锯齿波式的启发式:将多个层组合在一起以形成具有增大扩膨胀率的波的“上升沿”,并且下一组重复相同的模式。 例如,对于具有膨胀率r=2的所有层,我们形成3个连续层作为一个组,并将它们的膨胀率分别更改为1、2和3。 通过这样做,top layer可以在与原始配置相同的区域中从更宽的像素范围获取信息。 这一过程在所有层中重复进行,从而使top layer的感受野保持不变。 示意图如图2。

8.HDC的另一个好处是,它可以在整个过程中使用任意的扩张率,从而自然地扩大网络的感知野,而无需添加额外的模块,这对于识别相对较大的对象非常重要。 

9.但是,需要注意的一个重要问题是,同组内的扩张率不应具有公共因子关系(如2、4、8等),否则top layer的gridding问题仍然存在。 

10.这是我们的HDC方法与ASPP模块或context聚合模块之间的一个关键区别,在ASPP模块中使用了具有公共因子关系的dilation factors。 此外,HDC自然地与网络的原始层集成,而不需要像ASPP模块或context聚合模块中那样添加额外的模块。 

四、Experiments and Results

    (1).使用了ResNet-101 or ResNet-152 networks。

    (2).都是用了ImageNet dataset上的预训练模型。

    (3).使用了cross-entropy error。

    (4).使用SGD优化器。

    (5).使用MXNet在NVIDIA TITAN X GPUs上来训练和评估模型。

1.Baseline Model

(1)使用DeepLab-V2 中的 ResNet-101 framework来训练基准模型。

(2)网络有下采样率为8,并且膨胀率为2和4的膨胀卷积分别应用于res4b 和 res5b blocks。在网络的顶层增加一个膨胀率为6、12、18和24的ASPP模块,用于提取多尺度上下文信息。prediction maps和training labels与原始图像的大小相比被下采样8倍,并使用双线性上采样来获得最终的prediction。

(3)因为Cityscapes dataset的图像大小是:1024*2048,考虑GPU内存,将图像分成12幅有部分重叠的800*800 patches ,因此扩充了training set。这种数据增强策略能够确保衣服图像的所有区域都能被访问到,这种方法是random cropping的一种改进,因为在random cropping中会重复访问邻近区域。

(4)使用patch size 544*544 (randomly cropped from the 800*800 patch) 和 batch size 12来训练网络。

猜你喜欢

转载自blog.csdn.net/moshiyaofei/article/details/87744853