DeepLabV3+神经网络解析
- 论文:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
- 什么是DeeplabV3+网络
- deeplabV3+主要结构
- 主干网络(DCNN)
- 空洞卷积(膨胀卷积)
- 空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP))
- 利用特征获得预测结果
- 损失函数
- 结果对比
论文:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
https://arxiv.org/pdf/1802.02611.pdf
什么是DeeplabV3+网络
该网络是于2018年提出的语义分割模型,以deeplabv3为encoder为架构,在此基础上加入了Decoder模块细化分割结果。并将Depthwise separable convolution在ASPP和Decoder上的应用,最终得到了更加强大的神经网络deeplabv3+:
Encoder:
首先图片进入Encoder里面进行特征提取,经过DCNN(深度卷积神经网络)生成两个有效特征层,分别为浅层特征层和深层特征层,浅层特征层的高和宽会大一些,而深层特征层的下采样会多一些,所以高和宽会小一些。在Encoder中,我们会使用不同膨胀率的膨胀卷积进行特征提取,其中有膨胀率分别为6,12,18的3x3卷积,用来提高网络的感受野,使得网络有不同的特征感受情况,之后将特征层进行堆叠,再经过1x1卷积进行通道数调整,获得绿色特征层。
Decoder:
由DCNN生成的浅层特征层进入到Decoder解码器中,由编码器生成的具有高语义信息的绿色特征层进入到Decoder中进行上采样,之后与较浅的特征经过1x1卷积得到的结果进行特征融合,之后经过3x3的卷积进行特征提取,最终经过上采样将输出图片与输入图片大小一致,得到预测结果。
deeplabV3+主要结构
主干网络(DCNN)
论文中采用的是Xception系列作为主干特征提取网络,但由于计算机性能问题,本人采用Mobilenetv2作为主干特征提取网络。
左边为主干部分,首先经过1x1卷积进行升维,然后利用3x3深度可分离卷积进行特征提取,然后利用1x1卷积进行降维,输入和输出直接相接。
需要注意的是,在DeeplabV3当中,一般不会5次下采样,可选的有3次下采样和4次下采样,本文使用的4次下采样。这里所提到的下采样指的是不会进行五次长和宽的压缩,通常选用三次或者四次长和宽的压缩。
在完成MobilenetV2的特征提取后,我们可以获得两个有效特征层,一个有效特征层是输入图片高和宽压缩两次的结果,一个有效特征层是输入图片高和宽压缩四次的结果。
Xception模型
整个网络具有14个模块,36个卷积。它引入了Entry/Middle/Exit三个flow,每个flow内部使用不同的重复模块,当然最最核心的属于中间不断分析、过滤特征的Middel flow。
Entry flow主要是用来不断下采样,减小空间维度;中间则是不断学习关联关系,优化特征;最终则是汇总、整理特征,用于交由FC来进行表达。
空洞卷积(膨胀卷积)
Deeplabv3+在Encoder部分引入了大量的空洞卷积,在不损失信息的情况下,增加了感受野大小,捕捉到了较大范围的信息。
一为普通卷积,也可理解为膨胀率为0的膨胀卷积。二为膨胀率为1的膨胀卷积
膨胀卷积的优点:
1、常见的图像分割算法通常使用池化层和卷积层来增加感受野(Receptive Filed),同时也缩小了特征图尺寸(resolution),然后再利用上采样还原图像尺寸,特征图缩小再放大的过程造成了精度上的损失,而膨胀卷积可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样操作
1、不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息,
1、空洞卷积可以增大感受野,同时可以不改变图像输出特征图的尺寸
空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP))
在Encoder中,我们对压缩四次的初步有效特征层经过ASPP对给定的输入以不同采样率的空洞卷积进行并行采样,相当于以多个比例捕捉图像的上下文。
在Decoder中,我们会对压缩两次的初步有效特征层利用1x1卷积调整通道数,再和空洞卷积后的有效特征层上采样的结果进行堆叠,在完成堆叠后,进行两次深度可分离卷积块。
这个时候,我们就获得了一个最终的有效特征层,它是整张图片的特征浓缩。
利用特征获得预测结果
我们可以获取输入进来的图片的特征,此时,我们需要利用特征获得预测结果。
利用特征获得预测结果的过程可以分为2步:
1、利用一个1x1卷积进行通道调整,调整成Num_Classes。
2、利用resize进行上采样使得最终输出层,宽高和输入图片一样。
损失函数
本文所使用的LOSS由两部分组成:
1、Cross Entropy Loss。
2、Dice Loss。
Cross Entropy Loss就是普通的交叉熵损失,当语义分割平台利用Softmax对像素点进行分类的时候,进行使用。
Dice loss将语义分割的评价指标作为Loss,Dice系数是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值范围在[0,1]。
计算公式如下:
就是预测结果和真实结果的交乘上2,除上预测结果加上真实结果。其值在0-1之间。越大表示预测结果和真实结果重合度越大。所以Dice系数是越大越好。
如果作为LOSS的话是越小越好,所以使得Dice loss = 1 - Dice,就可以将Loss作为语义分割的损失了。
结果对比
本次训练参数如下:
epoch:40
lrate:0.1
gt
pre