• 语义分割之deeplab v3


    概述

    之前讲了deeplab v1和v2的内,这次主要讲一下v3部分的内容。

    简单回顾

    image-20200728231611986

    首先我们简单回顾一下前边v1和v2部分的内容,先说它们的相同点,首先他们主要思想都是将卷积神经网络(DCNNs)和概率图模型(DenseCRFs)进行结合来做语义分割。并且两者对图片的处理过程也是一样的。都是先对输入的图片经过DCNN网络处理,得到其初步的得分图,然后通过双线性插值,扩大图片尺寸,进而经过全连接CRF处理之后,最后输出结果图。

    但v2较之于v1提升点主要有三个方面:使用多尺度来获得更好的分割效果,建成ASSP,第二个区别就是基础层网络发生了改变,基础层的网络由VGG16改成了ResNet。并且学习率也发生来改变。

    image-20200728231827198

    当然最大的区别还是ASPP的引入,多尺度主要是为了让算法处理目标在图像中表现为不同大小问题时,仍能够有很好的分割结果。比如同样的物体,在近处拍摄时物体显得大,远处拍摄时显得小。具体做法如上图所示,就是在处理的时候并行的采用多个采样率的空洞卷积提取特征,再将特征融合,类似于空间金字塔结构,形象的称为Atrous Spatial Pyramid Pooling (ASPP),图片中就是分别采用6,12,18,24的采样率进行采样,然后将提取到的特征进行融合。

    v3的提升点

    V3较之于v1和v2提升可能主要有四点:

    1. 提出了更通用的框架,适用于任何网络
    2. 复制了ResNet最后的block,并级联起来
    3. 是改进了v2引入的ASSPP,在ASPP中使用BN层,最后一点去掉了CRF,这可能是冲击最大

    算法

    首先是空洞卷积模块的改进,之前我们说了空洞卷积主要是对特征图做采样,扩大感受野,缩小步幅。在v3中我们以串行的方式来设计空洞卷积模块。

    image-20200728231910952

    image-20200728231934251

    上面这张图就是级联模块的示意图,其中上边的是没有加入空洞卷积的级联模块,下边是加入空洞卷积的级联模块。我们先简单介绍下,这个级联模块的结构,我们先看上边这个简单的级联模块,首先初始的时候,采用的是串行的残差网络,包含的是block1、block2、block3和block4这四个模块,后边的block5、block6、block7就是级联模块,按照论文说法,这几个级联模块都是对block4的复制。这个级联模块被设计的主要目的是引入striding(步幅,或者跨步)使得更深的模块捕获长距离的信息。比如说上面这张图,在引入步幅之后,经过层层级联处理之后,整个图像的特征都可以汇聚到最后一张小分辨率的这张图上。但是这样也有一个不足之处,就是连续的步幅会造成细节信息的丢失,这对语义分割来说是有害的。从下边这张图我们也可以明显看到,随着步幅的增大mIOU,也就是说平均交并比会逐渐减小,也就是说其细节信息会减小。

    image-20200728232114141

    为了解决这个问题,作者就在级联模块中考虑在固定的步幅的情况下引入空洞卷积来解决这个问题。从上边这个图中我们可以看到从block4开始每一个模块都引入了空洞卷积,并且它们使用的采样率是不同的。这样就实现了不增加参数量和计算量的同时有效的缩小了步幅。

    在开始部分我们说了,为了让算法在处理同一物体在不同图片中表现不同大小情况下,仍然具有比较好的分割效果,deeplab v2的时候引入了ASPP,并且发现不同采样率的ASPP能有效地捕捉多尺度信息。但是,随着采样率的增加,滤波器的有效权重(指权重应用于特征区域,而不是填充0的部分)逐渐变小。

    image-20200728232219166

    上边这张图就是在6565特征图上,使用33过滤器对有效权重进行归一化计数,随着采样率的变化的结果图,从图中我们可以看到当原子率较小时,所有9个过滤器权重都将应用于特征图上的大部分有效区域,而采样率率变大时,由于仅中心权重有效,因此3×3过滤器会退化为1×1过滤器。看图后边别的比率都变成了0。

    image-20200728232245049

    为了解决这个问题,并将全局上下文信息纳入到模型中,作者采用了图像级特征,具体来说,改进的ASPP由一个 1×1 卷积,和三个 3×3卷积并行组成,步长为(6,12,18),输出步长为16,我们从图中也可以看到,它是一个并行的结构。模型的最后一个特征图采用全局平均池化,将重新生成的图像级别的特征提供给带256个滤波器(和BN)的1×1卷积,然后使用双线性插值将特征提升到所需的空间维度。我们仔细看会发现,在这个v3版本中CRF已经被去掉了,整个模型也就变得更加简单易懂。

    实验

    为了验证deeplabv3的效果,作者设计了一系列实验来进行验证。

    项目 要求
    数据集 PASCAL VOC 2012
    学习率公式 Poly学习率
    裁剪尺寸 512
    批次归一化 使用output stride= 16并计算批次大小为16的批次归一化统计数据。使用decay= 0.9997来训练批次归一化参数。
    上采样策略 将最终的输出上采样8倍与完整的GroundTruth比较
    数据扩张方法 通过随机缩小或者放大输入图片(从0.5倍到2倍)和训练时随机左右反转图片来使数据扩张

    上面这张表是进行实验验证的一些参数。

    image-20200728232454946

    image-20200728232505152

    首先是空洞卷积模块的验证,上边这个表示输出步长改变对结果的影响。我们使用有7个模块的ResNet-50实验。正如表中所示的。当输出步长为256时(这时没有任何带孔卷积),因为信息的丢失,预测结果的表现比对照组差很多。当输出步长从256变到8的过程中,应用带孔卷积时,准确率就从20.29%提升到了75.18%,说明带孔卷积在语义分割中级联更多模块时非常重要。下边这个表是ResNet-50与ResNet-101对比:我们将ResNet-50换成更深的网络ResNet-101,改变了级联模块的数量。正如表2所示,随着级联更多的模块,准确率越来越好,但是效果提升速度是在下降的。注意,使用7模块稍微降低了ResNet-50的表现,但对于ResNet-101的结果还是有提高的。

    image-20200728232552206

    这张是关于多网格的验证,根据这张表我们发现最好的模型时7七层的并且对应的参数是(1,2,1)。

    image-20200728232644011

    上面这张图实验了在第4模块包含多网格操作和图像级别特征的ASPP模型的结果图。首先固定ASPP =(6,12,18)(即在三个并行的3×3 带孔卷积分支规定步长分别为(6,12,18)),改变多网格的值。Multi_Grid = ( 1,2,1)的结果比Multi_Grid = ( 1,1,1)要好,不过这种步长下最好的Multi_Grid = ( 1,2,4)。如果再加一个并行的步长为24的带孔卷积层来获取更大范围的上下文信息,准确率会稍微降低到0.12%。另一方面,在ASPP模型上加入图像级别的特征是有效的,最终准确率达到了77.21%。

    image-20200728232716174

    上图是验证集的测试结果:从第一行到第二行结果我们可以看到将模型的输出步长改为8,准确率增加了1.3%,加入缩小放大输入图片和左右翻转图片的操作之后,准确率进一步提高了0.94%和0.32%,ASPP最好的模型准确率为79.77%,比级联带孔卷积模型的最优值更高,因此选择ASPP作为deeplab v3最终的模型。

    image-20200728232748746

    最后一张是deeplab v3与其他算法模型的结果对比,我们可以明显看到与其他算法算法deeplab v3的语义分割效果是最好的。

    结论

    最后作者得出结论:实验结果表明,所提出的模型与以前的DeepLab版本相比有显着改进,并且在PASCAL VOC 2012语义图像分割基准测试中可获得与其他最新模型相当的性能。

    同样的v3也有不足,比如需要用采样率8和16的上采样来获取最终的特征图,这种处理很粗糙。因此针对v3的不足v3+做了两点的优化第一个是设计了基于v3的解码模块,第二个是将网络结构改成了xception。关于v3+的内容我会单独写篇博客进行详细记录。

  • 相关阅读:
    WEB前端第十九课——雪碧图&滑动门
    近期网上资源收集(一)
    飞利浦 PHILIPS 电动牙刷HX6730 拆解
    webvtt字幕转srt字幕的python程序(附改名程序)
    [转载]Core Elements of a Program
    反正也没人看
    open read split
    蛋疼的二分法死循环
    leetcode ex3 找出穿过最多点的直线 Max Points on a Line
    leetcode AC1 感受
  • 原文地址:https://www.cnblogs.com/goWithHappy/p/deeplabv2.html
Copyright © 2020-2023  润新知