deeplab V1 V2 V3 V3+系列

一、Deeplab v1

1、引言

deeplab V1 V2 V3 V3+系列_第1张图片

2、亮点

deeplab V1 V2 V3 V3+系列_第2张图片

3、细节

deeplab V1 V2 V3 V3+系列_第3张图片
作用是保证效果不下降的情况下,降低参数和加快速度,否定了fcn的7*7卷积,会成为计算瓶颈。
deeplab V1 V2 V3 V3+系列_第4张图片
deeplab V1 V2 V3 V3+系列_第5张图片

二、Deeplab v2

1、引言

deeplab V1 V2 V3 V3+系列_第6张图片
deeplab V1 V2 V3 V3+系列_第7张图片

2、亮点

deeplab V1 V2 V3 V3+系列_第8张图片
deeplab V1 V2 V3 V3+系列_第9张图片

3、细节

deeplab V1 V2 V3 V3+系列_第10张图片
四个采用不同膨胀系数的膨胀卷积,这样每个分支的感受野大小就是不一样的,从而具备解决多 尺度问题。
deeplab V1 V2 V3 V3+系列_第11张图片
使用vgg时才有后面两层全卷积层,使用resnet的话就不用。

把输入图片分别缩放到0.5,0.75,1倍输入网络,将得到的三个score maps进行融合,对每一个pixel取最大值,这种操作对效果有较大提升。
deeplab V1 V2 V3 V3+系列_第12张图片
deeplab V1 V2 V3 V3+系列_第13张图片

三、Deeplab v3

1、引言

deeplab V1 V2 V3 V3+系列_第14张图片

2、细节

获取多尺度范围信息的方法: deeplab V1 V2 V3 V3+系列_第15张图片
deeplab V1 V2 V3 V3+系列_第16张图片
对于级联模型中,训练时下采样到16(batch_size可以设置得更大一点,加速训练),预测是下采样到8(验证结果会好一点)
aspp模型,引入了一个全局平均池化分支。
deeplab V1 V2 V3 V3+系列_第17张图片
deeplab V1 V2 V3 V3+系列_第18张图片
deeplab V1 V2 V3 V3+系列_第19张图片
deeplab V1 V2 V3 V3+系列_第20张图片
deeplab V1 V2 V3 V3+系列_第21张图片
pytorch官方实现的deeplab v3结构:
deeplab V1 V2 V3 V3+系列_第22张图片
注意:v1和v2中计算损失是在上采样之前,对标签进行下采样到同样尺寸进行计算的(为了减少显存消耗,加快速度),但是v3是上采样之后再与标签进行计算损失的。

四、Deeplab v3+

1、引言

deeplab V1 V2 V3 V3+系列_第23张图片
2018年发表的。

2、亮点

第一节首先介绍Deeplab当前的缺陷,即输出图放大的效果不好,信息太少,因此提到了编码-解码结构
原DeepLabv3当作encoder,添加decoder得到新的模型(DeepLabv3+)。
如下图所示,作者把spatial pyramid pooling module和Encoder-Decoder融合成一体:
deeplab V1 V2 V3 V3+系列_第24张图片
相比DeepLabv3,v3+引入了Decoder模块,其将底层特征与高层特征进一步融合,提升分割边界准确度。从某种意义上看,DeepLabv3+在DilatedFCN基础上引入了EcoderDecoder的思路。
把Xception和Depthwise separable convolution应用到Atrous Spatial Pyramid Pooling和decoder中。

3、细节

deeplab V1 V2 V3 V3+系列_第25张图片

  • Encoder
    Encoder就是原来的DeepLabv3,注意点有2点:
    输入尺寸与输出尺寸比(output stride = 16),最后一个stage的膨胀率rate为2
    Atrous Spatial Pyramid Pooling module(ASPP)有四个不同的rate,额外一个全局平均池化
    为了防止encoder得到的高级特征被弱化,先采用1x1卷积对低级特征进行降维(paper中输出维度为48)
  • Decoder
    明显看到先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征concat一起,再进行3x3的卷积,最后上采样4倍得到最终结果
    需要注意点:
    融合低层次信息前,先进行1x1的卷积,目的是降通道(例如有512个通道,而encoder结果只有256个通道)

DeepLabv3所采用的backbone是ResNet网络,在v3+模型作者尝试了改进的Xception,Xception网络主要采用depthwise separable convolution,这使得Xception计算量更小。改进的Xception主要体现在以下几点: (1)参考MSRA的修改(Deformable Convolutional Networks),增加了更多的层; (2)所有的最大池化层使用stride=2的depthwise separable convolutions替换,这样可以改成空洞卷积 ; (3)与MobileNet类似,在3x3 depthwise convolution后增加BN和ReLU。

采用改进的Xception网络作为backbone,DeepLab网络分割效果上有一定的提升。作者还尝试了在ASPP中加入depthwise separable convolution,发现在基本不影响模型效果的前提下减少计算量。
deeplab V1 V2 V3 V3+系列_第26张图片
DCNN部分出现了新的选择:修改后的Xception,其结构如图。

  • max pooling结构被stride=2的深度可分离卷积代替
  • 更深的Xception结构,并不修改entry flow network结构
  • 每个3x3的depthwise convolution都跟BN和Relu
    deeplab V1 V2 V3 V3+系列_第27张图片
    表1和表2介绍了不同解码器配置对应的结果。值得注意的是,更复杂的解码器不一定代表更好的效果。
    deeplab V1 V2 V3 V3+系列_第28张图片
    不同编码器配置的效果如表3(使用ResNet-101)。
    deeplab V1 V2 V3 V3+系列_第29张图片
    其SC,COCO和JFT分别为不同数据集。可以看到,这种方案效果更好,并且数据越多效果越好。

总结

DeepLab作为DilatedFCN的典范还是值得学习的,其分割效果也是极其好的。但是由于存在空洞卷积,DeepLab的计算复杂度要高一些,特别是output_stride=8,对于一些要求低延迟的场景如无人车,还是需要更加轻量级的分割模型。 原因:内存访问,空洞卷积代价要比普通卷积大。从CPU访问角度看,空洞卷积内存不连续,存在严重的cache miss 问题,而且不连续,需要多次访存才能获得目标数据。同样的问题,对GPU也是一样的,如果不连续,本来一次可以读到的,得分多次

【参考】
b站:霹雳吧啦Wz

你可能感兴趣的:(语义分割,计算机视觉,图像处理,语义分割)