Deeplab系列原理

1,200 阅读3分钟

Deeplab系列

Deeplab系列模型共经历了四次改良,2015年提出Deeplabv1,2017年提出Deeplabv2,2017同年提出Deeplabv3,2018年提出Deeplabv3+,接下来我们看看这系列模型分别解决了什么问题,是怎么解决的。

论文下载链接:

Deeplabv1: arxiv.org/pdf/1412.70…

Deeplabv2: arxiv.org/pdf/1606.00…

Deeplabv3: arxiv.org/pdf/1706.05…

Deeplabv3+: arxiv.org/pdf/1802.02…

Deeplabv1

我们在使用CNN解决图像分割问题的时候,往往会存在两个问题:一个是下采样会导致细节信息的丢失;另一个是CNN具有空间不变性,即对于同一张图片进行空间变换(如平移、旋转),其图片分类结果不变,但对于图像分割任务,其结果是变化的

针对第一个问题,Deeplabv1采用空洞卷积解决;针对第二个问题,作者采用DenseCRF解决

空洞卷积的概念:

空洞卷积引入了扩张率的超参数,空洞卷积可以增大感受野,但可以不改变图像输出特征图的尺寸。

参考链接:

zhuanlan.zhihu.com/p/113285797

blog.csdn.net/qq_30159015…

DenseCRF的概念:

参考链接:

zhuanlan.zhihu.com/p/22464586

zhuanlan.zhihu.com/p/22464569

Deeplabv1的结构:

主要是对原有的VGG网络进行了一些变换:

  1. 将原先的全连接层通过卷积层来实现
  2. VGG网络中原有5个max pooling层,先将后两个max pooling去除,相当于只进行了8倍下采样,然后将后两个max pooling后的普通卷积层改为空洞卷积层
  3. 为了减少计算量,将VGG中第一个7*7的卷积层,改为空洞卷积
  4. 损失函数;交叉熵之和

Deeplabv2

Deeplabv2强调使用空洞卷积,并提出了空洞空间卷积池化金字塔(ASPP),以多尺度信息得到更好的分割结果。相对于deeplabv1来说,deeplabv2使用Resnet网络替代了VGG网络,并提出了ASPP,解决多尺度上存在对象的问题。

ASPP

Deeplabv3

Deeplabv3主要关注两个问题:连续的池化或增加卷积的步长会使特征图的分辨率越来越小,网络学习的特征更加抽象化,不利于语义分割这种需要详细空间信息的密集型预测任务;以及物体的多尺度问题。

针对第一个问题,作者使用空洞卷积解决;针对第二个问题,作者对ASPP模块进行了改进,结合不同膨胀系数的空洞卷积,增加了BN层,作者还发现较大膨胀系数的3x3空洞卷积会由于图像边界效应,丢失长距离信息,所以退化为1x1卷积,将图像级特征融合入ASPP模块

Deeplabv3

Deeplabv3+

Deeplabv3+关注的问题:第一个是物体多尺度的问题,作者认为Deeplabv3设计的ASPP结构已经解决了这个问题;第二个是因为深度网络存在stride=2的层,会导致feature分辨率下降,从而导致预测精度降低,造成边界信息丢失的问题。

作者着重解决第二个问题,其设计的编解码结构如下:

编解码结构

Deeplabv3+

编码器采用deeplabv3。

解码器部分:先从低层级选一个feature,将低层级的feature用1*1的卷积进行通道压缩(原本为256通道,或者512通道),目的在于减少低层级的比重。作者认为编码器得到的feature具有更丰富的信息,所以编码器的feature应该有更高的比重。 这样做有利于训练。

再将编码器的输出上采样,使其分辨率与低层级feature一致。 举个例子,如果采用resnet conv2 输出的feature,则这里要4倍上采样。 将两种feature 连接后,再进行一次3x3的卷积(细化作用),然后再次上采样就得到了像素级的预测。 后面的实验结果表明这种结构在stride=16时既有很高的精度速度又很快。stride=8相对来说只获得了一点点精度的提升,但增加了很多的计算量