语义分割之deeplab v1

概述

首先我们简单考虑一下什么是语义分割

语义分割是从粗推理到精推理的自然步骤。原点可以定位在分类,分类包括对整个输入进行预测。下一步是本地化/检测,它不仅提供类,还提供关于这些类的空间位置的附加信息。最后,语义分割通过对每个像素进行密集的预测、推断标签来实现细粒度的推理,从而使每个像素都被标记为其封闭对象区域的类别。

image-20200728222339597

其实简单来说,语义分割就是像素级别的图像分类。我们以下边一幅图为例:左侧是原图,右侧是经过图像分割之后的图片,结果图中我们可以看到,经过图片分割后,不同类别的物体,例如行人飞机、房子等被分别标记成不同的颜色。

Deeplabv1是谷歌14年提出的语义分割算法,它解决语义分割分割问题的基本思想就将卷积神经网络(DCNNs)和概率图模型(DenseCRFs)进行结合。简单来说,DeepLab是结合了深度卷积神经网络(DCNNs)和概率图模型(DenseCRFs)的方法。具体结合方式是这样的:将每个像素视为CRF节点,利用远程依赖关系,并使用CRF推理直接优化DCNN的损失函数。

算法

image-20200728222746963

整个算法处理过程是这样的:首先对输入的图片经过DCNN网络处理,得到其初步的得分图,然后通过双线性插值,扩大图片尺寸,进而经过全连接CRF处理之后,最后输出结果图。

在语义分割任务中,DCNN存在两个问题:

  1. 最大池化和下采样操作压缩了图像分辨率。一般语义分割来说通过将网络的全连接层改为卷积层,获取得分图(或称为概率图、热图),然后对其上采样、反卷积等操作还原与输入图像同样大小。如果压缩太厉害,还原后分辨率就会比较低,因此我们希望获得更为稠密(dense)的得分图;
  2. 对空间变换的不变性限制了模型的精度,网络丢失了很多细节,获得的概率图会比较模糊,我们希望获得更多的细节。

天若OCR_202007282203500SS

在该文章中,提出使用空洞算法和全连接CRF分别解决这两个问题。下边我们具体展开来说。首先是DCNN的设计,DCNN是由VGG16网络变换过来的,具体变换过程是这样的:

  1. 首先我们知道在VGG16中,卷积层的卷积核大小统一为 3*3,步长为 1,最大池化层的池化窗口为 2 * 2 ,步长为2 。在变换的时候,首先现将先将VGG16的FC层转为卷积层,这样就变成了的全卷积神经网络。
  2. 第二步将pool4和pool5的步长由2改为1, 这样在原本FC7的位置,VGG网络总的步长由原来的32变为8。 (展开来说:一般来说,池化层的步长为2,池化后输出大小变为输入大小的一半。原VGG16模型有5次池化,缩小 2^5=32 倍,修改后的VGG16有3次补步长为2的池化,缩小 2^3=8 倍,两次步长为1的池化,输出大小基本不变,所以说VGG网络总的步长由原来的32变为8。)
  3. 在经过前两步之后,由于采样率的减少,使得得分图(score map)会变得稀疏,为了得到更加稠密(步幅8)的得分图,我们在最后的两个最大池化层不进行下采样(padding到原大小),而是通过2或4的采样率的空洞卷积对特征图做采样,扩大感受野,缩小步幅。

空洞卷积具体过程是怎样的那?

image-20200728224132221

首先我们看上边这个图,这个是作者论文中给定图,是在一维条件下,空洞卷积的作用过程,其中卷积核大小是3,输入步长是2,输出步长是1。可能在一维条件下,不太直观。因此我找到了一个二维图的空洞卷积过程如下图所示:

image-20200728224251399

其中蓝色部分是输入:7×7的图像;青色部分是输出:3×3的图像;空洞卷积核:3×3采样率(扩展率)为2 。我们非常直观的看到上边,每9个输入对应一个输出。从而实现得分图的稠密化。

前边我们通过对VGG16进行变换形成了DCNN,但在实际使用过程中仍然有两个问题:

  1. 在使用VGG-16网络的情况下,如果网络应用卷积,其感受野是224×224(零填充)和404×404。 作者认为这种感受野大小太大,无法保证良好的定位精度。
  2. 将网络转换为完全卷积的网络之后,第一个全连接层具有4,096个大小的7×7空间大小的滤波器,这十分消耗计算资源。

因此作者想出通过卷积网络控制感受野的大小,具体来说将第一个FC层空间抽样到4×4空间大小,这样之后能够将网络的感受野减少到128×128(零填充)或308×308(卷积模式),并将第一个FC层的计算时间缩短了3倍。

image-20200728224957253

前边在通过DCNN网络处理的过程中,不断向下采样,原来的位置信息会随着深度减少甚至消失。最后导致分类结果变得十分平滑,但最后我们想要的结果它的细节应该是突出的。从这个图中我们可以看到经过DCNN处理之后,飞机的边界变得十分模糊。然后经过CRF处理之后飞机的分类边界变得越来越清晰。CRF在传统图像处理上主要做平滑处理。这跟我此处的使用场景刚好相反,我们需要的是锐化,因此作者对传统的CRF进行改良,二元势能函数使用的是高斯核,并且任意两个像素点都有此项,因此被称为全连接CRF。

image-20200728225104963

此外为了获得更好的边界信息,作者还增加了一个多尺度预测。具体来说就是在输入图片与前四个max pooling后添加MLP,得到预测结果。最终输出的特征映射送到模型的最后一层辅助预测,合起来模型最后的softmax层输入特征多了640个通道。虽然,多尺度预测处理效果不如全连接CRF,但也有一定效果,并且作者最终两个模型都用上了,即最终模型是结合了全连接CRF与多尺度预测。

实验

item set
数据集 PASCAL VOC 2012 segmentation benchmark
DCNN模型 权重采用预训练的VGG16
交叉熵
训练器 SGD,batch=20
学习率 初始为0.001,最后的分类层是0.01。每2000次迭代乘0.1
权重 0.9的动量, 0.0005的衰减

为了验证deeplab算法的效果,作者设计了一系列的实验验证,上边是实验参数。值得注意的是模型训练的方式是分段训练就是说DCNN的输出是CRF的输入。

image-20200728225333841

上面这张图是CRF以及多尺度预测在测试集上的表现,从图中可以看到带CRF和多尺度的预测的DeepLab模型效果明显上升了。

image-20200728225732045

上边这张图是多尺度的视觉效果图。第一行的图片表示的是原始的输出,第二行是经过多尺度预测之后的输出,可以明显看出经过多尺度预测之后输出部分的细节要比原来要好一些。

image-20200728225757376

image-20200728225805670

上面这两张图这两张图是deeplab和其他模型相比的效果图。从图中我们可以看出,与其他先进模型相比,DeepLab捕获到了更具细节的边界(第二行图是预测目标)。

结论

最后作者得出结论DeepLab创造性的结合了DCNN和CRF产生一种新的语义分割模型,模型有准确预测结果同时,计算效率也比较高。在PASCAL VOC 2012上展现了先进的水平。虽然说deeplab语义分割的效果好像不错,但是问题依然存在,问题主要有三个方面1.特征分辨率的降低、2.物体存在多尺度、3.DCNN 的平移不变性。关于这些问题的解决方案,我们可能需要在v2上边寻找答案。

总结

应导师要求,学习语义分割(已经换了两个方向了,好苦逼呀😄)。但时间花了,还是要写点东西,做记录的。因此写了两篇文章对deeplab的内容进行记录,希望能给别人以帮助。后续也会写一篇关于v3+版本,这个应该是最新的。

posted @ 2020-07-29 19:22  vcjmhg  阅读(630)  评论(0编辑  收藏  举报