论文:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
论文核心:这篇文章主要讲了在做DCNN时遇到的三个挑战以及他们是如何解决的。
预习内容:这个论文是做语义分割的,如果没有读过其他的语义分割论文,可能需要先补习一下(传送门)。FCN、CRFasRNN、DeepLab等,都是有非常多的相似点的。
主页:http://liangchiehchen.com/projects/DeepLab.html
DCNN做分割的三个问题:
- 特征的分辨率减小。
- 目标可能在不同尺度下。
- DCNN的不变性导致定位的精度降低。
1
这个三个问题都是很现实的,第一个问题体现在用VGG等网络时,多次的Pooling导致最后的特征尺寸过小,很多细节都被忽略了。在FCN当中,作者在第一层用了个100的Padding,这是一种办法,但是太过暴力了,因为这个100 的Padding是固定数字,没有特征。而DeepLab使用的是将后面两层的pooling的stride设置为1,这样就不用再下采样了。
但是这样也引入了一个新的问题:没法用已经训练好的网络初始化了。因为尺寸改变了,导致网络后面层的感受野发生大幅变化,所以后面层应该是很难 fine-tuning 出来的。那怎么办呢?作者就使用 atrous convolution。具体操作看论文哈。
2
那么第二个问题呢?确实在图像中,目标有时远有时近。这个问题在SIFT算法中是引入了SPP,那么这里显然也可以故技重施。作者使用了 ASPP,哈哈,就是在 atrous convolution当中使用不同的 rate 了。
3
第三个问题主要是因为以分类为中心的DCNN学习了位置不变的特征,但是我们做分割的时候,显然必须要位置相关啊。这就有很大矛盾了!怎么办?越深的层,它的位置信息可能越少,那么显然要恢复出位置,必须去前面层找啊!这个东西在FCN当中就已经阐述得相当明显了吧:使用skip layer。如果就这么简单,那就没什么新意了吧。而且,前面层是引入多少比较好呢?这也是个问题。作者使用的是Dense CRF。
CRF使用的是一个一元项和二元项,可以看看这个介绍。最终就是优化这个能量场。二元项当中不仅使用了p(也就是前面DCNN的输出值),还是用了I
,这样约束力更强了,果然厉害。
实验结果就不讲了,自己看论文对比吧。