vcjmhg 的个人博客

自律者自由

  menu

语义分割之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+ 的内容我会单独写篇博客进行详细记录。


标题:语义分割之deeplab v3
作者:vcjmhg
地址:https://vcjmhg.top/deeplabv3