Deeplab系列理解



  • Deeplab系列分析

    参考文章:

    语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

    DeepLab系列学习笔记

    空洞卷积

    空洞卷积就是在常规卷积核里边按给定的input stride(rate)填充0,从而增大了卷积核的有效视野(FOV).这样的机制可以抵消掉max pool不下采样(stride=1)带来的感受野减小的问题.另外,在DCNNs中减少了两次下采样,输出的feature maps尺寸相对于输入图像是下采样了8x,即得到了更加稠密(分辨率更高)同时又具备足够高级语义的feature输出,这有利于小目标和目标边缘细节的精细分割.这样做不仅考虑了目标尺度和边缘,分割精度得到明显的提升,而且,简化了传统DCNNs用于语义分割时冗余且低效的上采样过程.空洞卷积核并没有参数量引入额外的参数,相比传统语义分割的DCNNs少了两次上采样,速度也更快了.总的来说就是真的做到更快更精准.

    空洞卷积核普通卷积的效果对比

    DeepLabv1

    • 其流程看起来可以很简单:

      deeplabv1流程

      简单来说就是让输入图片经过一个backbone,然后会生成一个缩小的特征图(如图中右上),这里的热力图表示了score,然后再进行上采样,得到和原图一样大的热力图,再进行CRF得到最后的分割图。此处CRF不谈,在deeplabv3已经被扔掉了。

    • deeplabv1出现的背景

      ​ 在分割任务以前,分类任务比较成熟,网络都利用了卷积核池化的平移不变性。但是对于分割或检测任务来说, DCNNs它只能够预测目标出大概的位置,不能预测出很精细的边缘细节.因为DCNNs中多采用卷积和max pooling的组合来提取特征以及下采样,最后得到很高级很抽象的语义特征,特别适用于分类任务.但是在这不断的下采样过程中,必然会损失掉很多空间信息,所以最后得到的小分辨率feature maps对于小目标来说,是不容检测出来的,尤其是边缘细节.

      ​ 针对分辨率小这个问题,在卷积过程中就可以减少下采样的倍数实际论文中是将pool4和pool5的stride改为1,也就是得到8x下采样feature maps之后就不下采样了,此时相当于8个输入像素计算一个特征响应,从而获得更加稠密(分辨率高)的feature maps,相当于是在高层语义特征和高分辨率之间的一个权衡折中.但是又会有问题,不做下采样的话,就会失去原先网络的大感受野(感受野会变小).怎么办?deeplabv1从小波变换将空洞算法引入卷积网络中,空洞卷积核可以扩大卷积核的感受野.总的来说,pool4(stride=1)之后,conv5采用dialate conv(空洞卷积)(input stride或rate=2)来弥补;pool5(stride=1)之后,跟着fc6,fc7,fc8,softmax.而作者在fc6采用几种kernel size核input stride的组合来做对比实验,得到的结论是,fc6采用1024x3x3,rate=12的卷积核来全卷积连接,得到最佳表现(与fc6为4096x7x7精度相等,但更快更轻量). 该网络是对VGG16的修改,修改实际图如下:

      image-20210221171729076

      所以看吧deeplabv1都没做太多的事,就是在已有的网络上去做修正,而且还是分类网络,其中提出了空洞卷积的操作。

      另外本文还采用了多尺度目标检测训练的策略以及全连接的CRFs

    Deeplabv2

    v2相对于v1没改太多,backbone换成了resnet101,又对CRF和空洞卷积进行了微调。最值得关注的可能就是SPP 模块的使用,但是这里是使用空洞卷积然后将不同dial rate的结果进行了拼接

    • ASPP

      **空洞空间金字塔池化(ASPP)**灵感来自于SPP检测网络,主要解决目标的多尺度问题.输入的feature maps为pool5的输出.假如要分割的目标在橙色框内,那么显然用大的滤波器来检测是不合适的.而往往我们也不知道使用什么样的滤波器才好,所以作者在这里设计了4种尺度的卷积核来提取目标特征

    ASPP的使用

    Deeplabv3

    • 从ASPP到ASPP+

      在ASPP中加入BN层。
      当采样率变大,卷积核的有效权重变小。
      在65×6565×65的feature map上以不同采样率采用3×33×3的卷积核。当采样率接近于feature map尺寸时,3×33×3退化为1×11×1卷积核,只有中心的权重是有效的。

      为了解决该问题并在模型中整合全局上下文信息,我们对最后的feature map采用全局池化,并经过256个1×11×1的卷积核(BN),然后双线性插值到所需空间维度。

    • 级联ResNet

      将空洞卷积应用于级联结构,在ResNet最后一个block(block4)后连接许多级联模块。


    DeepLabv3+

    • 提出一个encoder-decoder结构,其包含DeepLabv3作为encoder和高效的decoder模块。

    • encoderdecoder结构中可以通过空洞卷积来平衡精度和运行时间,现有的encoder-decoder结构是不可行的。

    • 在语义分割任务中采用Xception模型并采用depthwise separable convolution,从而更快更有效。

      图a为v3,图c为v3+

    对比

    deeplab系列对比


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待