《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》论文笔记

源码地址:TENSORFLOW
语意分割相关,Deeplab3+
看了几篇Deeplab的文章。觉得Deeplab的文章的思想还是很相近的,可能方法的创新上不是非常重大的突破。但是方法的应用上都是非常的...嗯,集大成的。通过实验的方式去探索各种方法的结合。探究每一个因素对于网络的影响,从而把前人的精髓都集成到自己的方法上,得到更好的结果。

What: 从大的框架上来讲,这是一篇将两个框架PSPnet与Encoder-Decoder结合的一个新模型,如下图。在细节上,它又使用了膨胀卷积控制视野增加过程中分辨率的大小。主干网络的选取上,又使用Xception和ResNet101进行了对比。正如作者总结的,这篇文章的几个贡献如下:
(1)提出了新的编码解码结构,使用Deeplab3做更强的编码结构,使用了一个简单的解码结构。
(2)提出的编码解码结构可以取得一个计算精度与运行时间的权衡(通过牺牲一方换取另一方)。在其他解码编码结构中是没有这个功能的。

(3)将Xception分离卷积用到ASPP与解码结构中,获得更快更健壮的编码解码网络
(4)提供了开放的基于tensorflow的源代码。

《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》论文笔记
Why:    作者为什么能够想到将两个模型融合呢?作者提到了两种结构的各自的优点,为了同时获得这两个优点,作者将两个网络融合了起来。
金字塔网络:精度高,但是计算量太大,所以运行时间长。
编码解码网络:计算量小,但是精度相对较低。

至于为什么用膨胀卷积,参考Deeplab3,扩大使用的同时控制分辨率。为什么用Xception:减少计算量。

How:    文中方法的实现过程,总的说来还是不复杂的。如上图所示:
(1)首先建立一个大的编码解码结构,其中编码结构用ASPP代替。这一部分的特征图连接之后经过 1*1卷积核卷积后得到一定通道数的特征图,经过4倍的上采样得到一组特征图Features1。
(2)将编码过程中的一组低水平特征图(与Features1尺度相同)拉出来,经过1*1的卷积核调整通道数得到一组特征图Features2。这里用1*1卷积核调整通道数是因问一般前面提取低水平特征时往往通道数很大(256),这样导致低水平特征占比太大,不易训练。

(3)将Features1 和Features2连接起来。经过3*3的卷积核提取特征,然后再经过4倍的上采样得到与原图相同的尺度的图片输出。
这里需要交代为什么经过两个4倍的上采样,而不是2-2-2-2这样类似与U-net的复杂方式呢,作者进行了实验,发现精度并没有什么提高,反而网络更复杂了,所以选择两个四倍的上采样。

主干网络上:作者分别嵌入了Resnet101与Xception进行了对比实验,实验结果来看Xception 的结果更好。Xceoption有如下改变:

  1. 层数变深了
  2. 所有的最大池化都被替换成了3x3 with stride 2 的separable convolution
  3. 在每个3x3 depthwise separable convolution的后面加了BN和ReLU

《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》论文笔记

Result:
Deeplab的习惯,做一大推对比试验,导出最优模型,以下是几组对比实验结果。

《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》论文笔记
《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》论文笔记