论文阅读《Rethinking Atrous Convolution for Semantic Image Segmentation》
Deeplab v3
1.Contribution:
这篇论文和deeplab v2相比,contribution不多,主要是在原来的ASPP模块里面加入了bn,同时引入加入了global context来提高ASPP模块的性能。
2.Related work
文章主要还是专注于图像多尺度信息的提取,作者总结了目前流行的4中多尺度信息提取的方法,如下图所示:

第一种用图像金字塔作为输入;
第二种采用encoder-decoder的方式,去年的一篇FPN就是这种方式的典型代表;
第三种采用Atrous convolution的方式,利用不同的dilated rate可以提取不同scale的特征;
第四种采用SPP的方式,这个在目标检测领域比较常见,可以人为控制任意大小输入的feature map经过spatial pooling之后的特征大小
3.Methods
作者主要尝试了两种不同的网络结构:Cascade和Parallel
3.1.Going Deeper with Atrous Convolution
下图表示Cascade的结构,以resnet101为例,resnet101一共有4个block

(a)图表示额外增加block5\6\7(来自block4的复制),但是没有引入atrous convolution,这样的话output stride(输入图像的resolution / 输出feature map的resolution)越来越大,导致输出的特征图越来越小;
(b)图表示额外增加block5\6\7(来自block4的复制),同时引入了atrous convolution,这样的话我们可以根据output stride来调整每一个block的rate。例如为了保证output stride = 16,需要把block3最后一个卷积层的stride改成1,同时为了保证感受野一致,需要将block4的卷积层的rate改成2,后面的block同理。
当然目前为止假设每一个原本block4里面的3个卷积层的unit rate是(1,1,1),也就是没有dilation,最终这三个卷积层的dilation rate=unit rate * rate。现在作者也尝试了multi-grid的思想,也就是block4里面三个卷积层的unit-rate不一样,比如(1,2,1)或(1,2,4)等等。
3.2.Atrous Spatial Pyramid Pooling
原本deeplabv2采用的ASPP模块是由4路dilation rate不同的convolution组成的,但是作者发现如果dilation rate太大的话,有效的filter weight会下降,比如对于3x3的卷积核,输入65x65的feature map,如果dilation rate接近feature map的话,那么只有3x3中间的那个1x1的核真正和非padding的区域进行了卷积,也就是原来3x3的卷积核其实退化成了1x1的卷积核。大的dilation rate主要是为了提取global context,因此,可以直接再增加一路,通过global pooling的方式来提取全局的信息。除此之外,作者在v3版本里面的ASPP还加入了bn,在v2里面的ASPP没有加入bn,作者在这篇论文里面说到加入bn对于改善训练提升很大。

这个是作者设计的ASPP模块,也即是atrous convolution的parallel形式。每一个并行的block的rate分别设置为6\12\18,通过对于每一个block内部采用之前说的multi-grid的方法,实验中unit-rate设置成(1,2,4)得到的效果最好。
Experiments
对于cascade模型,实验结果如下

选择最好的inference strategy可以达到79.35的正确率
对于parallel模型,实验结果如下:

选择最好的inference strategy,可以达到79.77的正确率。
