这篇文章是在三月八日妇女节提交在arXiv上的,对应代码也已经开源。
理解DeepLab V3+的构架首先需要理解DeepLab V3(可以参考博主的前一篇博客),V3+基本上可以理解成在原始的基础上增加了encoder-decoder模块,进一步保护物体的边缘细节信息。除此之外,也展示了在Xception网络上构架的优势(从原理角度来说也是换汤不换药)。
Motivation
可以发现DeepLab V3版本ASPP得到的特征分辨率即使在采用atrous convolution的情况下,依然有8倍的缩小。个人认为为什么不采用resolution-presevation策略的原因在于,GPU内存的限制,不能够确保卷积过程中每个特征具有那么大的维度。然而在DeepLab v3的最后直接对1/8分辨率的结果图进行上采样,恢复成原始分辨率大小,得到逐项素的分割结果。
可想而知,这样直接上采样操作(可以理解成naive decoder)并不能充分恢复在降采样为1/8分辨率过程中损失的细节信息,所以造成了分割的不精确。所以这篇文章在DeepLab V3的基础上,类似于FCN、SegNet、U-Net的形式,加入decoder的形式恢复原始分辨率的分割结果,使得边缘细节信息能够较好的保留。-
创新点
- 将DeepLab V3作为编码器(利用atrous convolution生成任意维度的特征,并采用ASPP策略),在其后面级联解码器进而恢复边界细节信息。
- 探究了ResNet-101替换成Xception模型的可行性,采用depthwise separable convolution进一步提高分割算法的精度和速度。
算法细节
主要看一下decoder部分,首先采用1*1的卷积核主要是为了对low-level特征通道进行压缩(一般压缩到48),这样能够使得后面的特征对于encoder得到的特征(256通道)有一个偏重,这样可以保证更好的high-level语义信息。然后这边的话也仅仅融合了一个low-level的特征,并没有像FCN、U-Net一样在解码过程中融合很多low-level信息。