DeepLab v2

1.语义分割面临的挑战

为了更好的理解整个文章,我们应该先理解文章中提出的问题。

1.1第一个问题就是分辨率。

我们在FCN的论文当中说过,这个分辨率下降是我们看不懂这些提取过的图片,但是电脑可以看得懂,可以通过算法提取出信息。
这句话呢?是对的,但是这个东西吧,也不能无休止的一直提取信息啊,提取的过于抽象电脑也就看不懂了。也就是说分辨率对于分割任务来说还是比较重要的。
产生的原因:
1.我们在学习FCN模型当中,我们知道我们是在不断地使用下采样块提取图片的特征,再通过上采样还原图片的尺寸。连续的卷积和池化会大幅度降低图片的清晰程度,也就是降低了分辨率,且在上采样的过程中难以恢复。这就是丢失了很多的细节信息。
如下图:我们可以明显的看到,卷积会使得分辨率下降非常多。
在这里插入图片描述

2.上面我们只是粗略的思考这个分辨率的问题,我们使得分辨率下降是对细节信息的丢失,这是不好的,但是在论文:(暂时省略)当中也证明了分辨率对于语义分割精确程度的重要性。

因此越来越多的网络都在想办法降低下采样对分辨率的影响,例如空洞卷积、或是步长为2的卷积来代替池化等操作来解决这个问题。诸如此类的方法,被证明是有效的。确实可以降低分辨率的损失。

空洞卷积细说:空洞卷积

同时,在这些实验当中,我们使用空洞卷积和步长为2的卷积来代替池化来降低分辨率的损失。之后测试其正确率也确实有了很好的提升。也就是说,通过减小卷积的分辨率损失,可以有效地提升语义分割的正确性。换言之就是高分辨率是语义分割的一个非常有利的条件。

当然之前的所有内容我们都是想着如何在特征提取的过程中降低分辨率的损失,但是其实我们还有另外的方法,例如跳连接(skip connection)。就是直接将原有图片传过来一份。
这两种方法各有利弊,要看情况选择(测试中选择)

1.2感受域(Receptive field感受野)的问题

什么是感受野?
首先,我们得先明白什么是感受野,感受野就是当前得到的图片的一个像素所对应原来图片中的像素的个数的情况,例如:原始图片经过一个步长为1,卷积核大小为3的卷积得到的感受域大小就是33,可以粗略的理解得到的一个像素来自于原来的33的像素。
当然感受域的计算是有公式的,这个使用递推的方式定义的:
在这里插入图片描述
我们可以通过下图来理解一下感受野,其准确定义是一个神经节点所对应原来图片当中的范围大小:
在这里插入图片描述
该如何处理感受野?
一般来讲增加感受野是对我们的识别有好处的,所以我们应当从公式上出发探索一下,我们从这个公式可以看出来想要获得更大的感受域,我们有两个办法:
1.增大卷积核的大小。kernel
2.增大步长。stride
如果使用更大的kernel,我们可以粗略理解一下,这样子的话我们会引入更多的无关信息,就像是使用一个线性模型一样,我们需要用更大的数据集进行训练。也需要更大的算力消耗。
如我我们增大stride那么问题更糟,这样我们就跳过了很多信息啊。
所以可以看出扩大感受野是一个十分重要的内容,Deeplab的论文大多是在感受野的问题上进行探索。

1.3多尺度特征的问题

我们首先得明白多尺度是如何考量信息的:
我们可以看到不同参数的卷积和池化,可以得到不同尺度的特征图。这样呢?我们可以德奥不同大小的特征,有些特征大有些特征小,我们将其都输入网络当中做融合处理,相当于即处理了大尺度的特征也处理的小尺度的特征。所以多尺度输入可以有效地提升网络的性能。同时实验也可以证明这个观点。
接下来我们看实现可能遇见的问题以及解决办法:
如果我们直接在训练的过程中就进行融合训练,那么将面对这样的一个问题,本身这一次传递只需要一个卷积层,可能需要一组参数,现在情况下我们进行一次传递实际上是有很多个卷积层在进行传递,这样的话,就需要很多组参数。这样的话,在存储参数和存储梯度的过程中,将会产生很大的内存开销。这个也就导致对硬件的要求很大。

在这样的问题当中,很多人在论文当中选择在训练的过程中使用多尺度训练。在测试阶段进行多尺度融合。就是训练的时候每个epoch只进行一种特征的训练,但是在测试阶段将其融合在一起。

这个不仅仅是我们这里的模型可以使用,在很多网络当中如果遇见瓶颈都可以加入多尺度的特征

2.DeepLab v1是什么

2.1DeepLab v1做什么优化?

DeepLab v1是在做什么?
其结合了DCNNs(Deep Convolution Nets深度卷积神经网络)合DenseCRFs(Conditional Random Field,概率图模型)这里的DCNNs我们较为熟系,这里的CRF是一个随机场的模型。主要体现在一个序列或是一组内容之间相互影响的问题。
这个论文主要是有两个创新点:

1.首先就是深度卷积网络:
1.1其首先使用FCN得到一个coarse score map(一个较为粗糙的特征图),并用插值的方法将其还原到原来的大小。
1.2之后使用空洞卷积(Atrous convolution)得到一个感受野不变但是更加dense(密集)的feature map

2.借用fully connected CRF对从FCN得到的分割结果做细节上的优化(refine)。

2.2我们仔细看一下空洞卷积的问题:

如果你不了解空洞卷积: 点这里就能了解空洞卷积
这里总结起来是一个提升分辨率、同时提升感受野的问题。
首先我们看一下池化的问题,我们知道在进行正常的池化(stride=kernel的池化,也就是池化的步长和池化的尺寸相同情况)的处理的过程中,我们的分辨率下降非常剧烈,我们分析一下这是池化的错吗,并不是池化的错,而是池化的步长的错,那么只需要降低步长就可以解决问题了。
在这里插入图片描述
但是,我们看一下下面的这个图片,如果我们降低了池化的步长,那么新的问题就出现了,感受野就在急速的下降。
在这里插入图片描述
也就说,这个东西不好,我们不想用。但是,为了更好的感受野,我们不得不用。我们的目标是在高分辨率的前提下,感受野不变或是扩大才可以。空洞卷积就是在这样的前提下诞生的。
我们看一下,下图就是使用空洞卷积的结果,还是在池化步长为1这种对分辨率损失不大的情况下,我们在第二层使用空洞卷积,这样子可以有效地增大感受野,在下图中,我们可以看到红色的节点就是我们另外新增出来的节点。
在这里插入图片描述
我们看一下DeepLab v1的内容主要是从其中选择一部分内容不往下进行传递,这就是一些空洞,可以放弃这些内容的依据是,这些内容和临近的内容非常接近,所以我们只用一个就可以了。既然放弃了其中的相近的一部分节点,那么我们就可以获得远处那些区别更大的,更有作用的节点。
DeepLab最开始的部分并不是使用空洞卷积来进行实现的,是达到了一定的程度之后才开始使用空洞卷积来完成任务的。也就是在最后几层才开始使用。
另外我们可以看到在DeepLab当中我们还是使用全连接层进行处理的,我们学过FCN之后还是可以了解到全连接层是有很多弊端的。这就要求在DeepLab v1的基础上再进行优化来达到更好的效果。

2.2.1论文原有的图片

当然这里我们还可以放一下论文中对空洞卷积的说明图片,这里和我们的图片不太一样的是,他提取出的内容是在上方的,上面画的是在下方。
在这里插入图片描述
我们还可以看一下论文当中给出来的比较图:
在这里插入图片描述
上面的内容是使用卷积池化上采样得到的,下面是使用空洞卷积再进行上采样得到图片,可以看到使用空洞卷积的这个效果更好一些。
当然这里并不是我们直接使用了一个空洞卷积,而是实际上使用了一个ASPP来完成操作。

2.2.2空洞卷积的dilation rate是什么?

在这里插入图片描述
a是普通的卷积过程(dilation rate = 1),卷积后的感受野为3
b是dilation rate = 2的空洞卷积,卷积后的感受野为5
c是dilation rate = 3的空洞卷积,卷积后的感受野为8

3.DeepLab v2又做了什么?

3.1DeepLab v2做什么优化?

1.使用多尺度的或者多孔金字塔池化,可以更好的分割物体
我们最开始就说过,语义分割的三个问题是:1.分辨率、2.感受野、3.多尺度,我们再v1当中其实只解决了前两个在这里我们才解决了第三个。这里做出的创新就是将多尺度和空洞卷积结合在一起了。

2.DeepLab v2采用最新的ResNet图像分类深度卷积神经网络构建,与原来基于VGG—16的网络相比,取得了更好的语义分割性能。
经过实验得到,在语义分割的过程中,ResNet的效果是要比VGG好的,所以我们在大多的模型实现当中使用的是ResNet而不是VGG。很多人使用VGG的原因是VGG的网络结构简单容易上手,ResNet的特点在于网络层次较为复杂,不容易上手。

4.DeepLab v3和v3+又做了什么?

4.1DeepLab v3做什么优化?

使用串行网络和并行网络相融合来得到更好的识别结果,主要是加入了ASPP来完成的任务,这里只是复用了别人的想法优化了自己的模型,创新性并不好。

4.1DeepLab v3+做什么优化?

就是在原有的基础上优化了网络的结构,但是没有实质上的创新点。
在这里插入图片描述
这两个的创新点不是很足,只是将空洞卷积和金字塔模型的思想加以实现的一个论文。

5.论文阅读

摘要部分:摘要翻译和理解
引言和相关工作:引言和相关工作翻译和理解

6.详细理解ASPP

不使用ASPP的话会如何?

为了更好的理解ASPP的优势,我们应当仔细理解没有ASPP会怎么样。说到这个,我们就应该看一下没有空洞卷积的时候我们是怎么完成不同尺寸的图片输入的处理的,我们就是直接使用卷积来完成下采样,通过不断地下采样完成我们的操作。之后使用一个SPP来将其化归一致的结果。这个看起来好像问题不大。
之后我们就得思考一下在我们的DeepLab当中我们应当如何完成多尺度设计的呢?我们在设计的过程中,首先只有一个输入就是某个图片,然后完成对图片的语义分割。
这就要求我们把图片转化为多个尺寸,转化多个尺寸的过程中,我们就将图片裁剪成原来的1/4或者其他比例,类似于我们的金字塔卷积,之后将这些小块送入模型训练,然后设置多种1/4这种东西(n种),也就是构成了n种模型,对于每个像素形成n种结果,之后在最后的n种结果中进行融合,选取最大的一个作为最后的结果。

存在的问题:

1.这样每次向前传递要求我们相当于进行n次前传,这就有非常大的计算开销。
2.在训练的过程中也伴随着大量开销。
也就是精度确实提升了,但是开销特别大。

代码

这里没有非常关键的代码实现,因为这里提出的主要一个内容就是空洞卷积块,只是大篇幅的论文的一个小块。所以代码较为简单,这里只说明一个块就好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CUHK-SZ-relu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值