DeepLabv3+ 模型详解

DeepLabv3+ 模型详解

1 简介

Deeplabv3+1是一个语义分割网络,它是在DeepLabv3的基础上增加了一个Decoder模块,它的Backbone可以是ResNet-101或者

Xception,其中卷积操作采用的是atrous convolution。

Encoder-Decoder网络已经成功应用于许多计算机视觉任务,通常,Encoder-Decoder网络包含:

  • 逐步减少特征图并提取更高语义信息的Encoder模块
  • 逐步恢复空间信息的Decoder模块

DeepLabv3+使用DeepLabv3作为Encoder模块,并添加一个简单且有效的Decoder模块来获得更清晰的分割。

deeplab

图1. DeepLabv3+网络结构

2 Encoder

2.1 ResNet-101 as Network Backbone

ResNet的主要贡献:

  1. 提出了一种残差模块,通过堆叠残差模块可以构建任意深度的神经网络,而不会出现“退化”现象
  2. 提出了批归一化方法来对抗梯度消失,该方法降低了网络训练过程对于权重初始化的依赖
  3. 提出了一种针对ReLU激活函数的初始化方法

image-20201022122931951

图2. ImageNet大赛历年冠军

2.1.1 问:在“基础”的卷积神经网络中持续叠加更深的层数会发生什么?

在ResNet网络出现之前,随着“基础”的卷积神经网络层数的加深,会出现精度下降的情况,这是因为在训练过程中,网络的正、反向信息流动不顺畅,网络没有被充分训练,其实就是梯度消失2

image-20201022111553464

图3. 不同层数的网络在训练集和测试集上的错误率

如图所示,随着网络层数的增加,训练集和测试集的错误率都上升

image-20201022112015742

图4. 网络层数的增加导致错误率上升的原因

为了解决这一问题,Kaiming He3提出了ResNet,ResNet中增加了残差模块,解决了梯度消失的问题,这种恒等映射结构可以保证随着网络层数的加深,即使它的性能不会得到提高,也会保持原来的性能不变。

为什么要叫残差模块呢?

F ( X ) = H ( X ) − X F(X) = H(X) - X F(X)=H(X)X
其中 H ( X ) H(X) H(X)表示输出, X X X表示输入,所以 F ( X ) F(X) F(X)叫做残差,学习 F ( X ) F(X) F(X)的模块就叫残差模块

image-20201022122704221

图5. 残差模块

2.1.2 问:为什么ResNet中的残差模块会有用呢?

**正向信息流:**可以用图像处理中的例子,假如X就是原图,F(X)就是边缘细节图,则H(X) = X + F(X)就是锐化后的结果,可以看到,它加强了我们视觉上感兴趣的地方,同理,经过这一模块之后,不仅我们原来的特征保留了下来,而且还加强了对于我们的任务有用的特征,从而保证了前向传播的顺畅。

**反向梯度流:**X处梯度的反向传播有两条通道,即使F(X)那条通道的局部梯度为0,还有一个X,即梯度为1,所以梯度的反向传播也是顺畅的。

image-20201022165150034

图6. 残差模块work的解释

ResNet的性能这么好的根本原因:可以看作多个子网络的集成

image-20201022202255052

图7. 残差网络高效的原因

2.1.3 ResNet的残差模块

其中添加的X称为跳跃连接,这里的第一个1*1卷积是为了减少通道数,减少计算量,第二个1*1卷积是为了恢复原来的通道数,实现相加。

image-20201022172352771

图8. “瓶颈”结构残差模块

image-20201023160800943

图9. 实线和虚线残差模块

2.1.4 ResNet的网络结构

假设输入 ( N , C i n , H i n , W i n ) (N,C_{in},H_{in},W_{in}) (N,Cin,Hin,Win) ,卷积操作后输出 ( N , C o u t , H o u t , W o u t ) (N,C_{out},H_{out},W_{out}) (N,Cout,Hout,Wout)

普通卷积之后的特征图尺寸计算公式:
H o u t = ( H i n − F + 2 P ) / S + 1 W o u t = ( W i n − F + 2 P ) / S + 1 H_{out}=(H_{in}-F+2P)/S+1 \\ W_{out}=(W_{in}-F+2P)/S+1 Hout=(HinF+2P)/S+1Wout=(WinF+2P)/S+1

空洞卷积之后的特征图尺寸计算公式:
H o u t = ( H i n − D ∗ ( F − 1 ) + 2 P − 1 ) / S + 1 W o u t = ( W i n − D ∗ ( F − 1 ) + 2 P − 1 ) / S + 1 H_{out}=(H_{in}-D*(F-1)+2P-1)/S+1 \\ W_{out}=(W_{in}-D*(F-1)+2P-1)/S+1 Hout=(HinD(F1)+2P1)/S+1Wout=(WinD(F1)+2P1)/S+1
池化之后的特征图尺寸计算公式:
H o u t = ( H i n − F ) / S + 1 W o u t = ( W i n − F ) / S + 1 H_{out}=(H_{in}-F)/S+1\\ W_{out}=(W_{in}-F)/S+1 Hout=(HinF)/S+1Wout=(WinF)/S+1
计算特征图大小时,卷积层向下取整,池化层向上取整

image-20201022180044182

图10. ResNet网络结构

2.1.5 ResNet的Pytorch实现

2.2 ASPP结构

ASPP全称为Atrous Spatial Pyramid Pooling,它是在SPP的基础上,采用了Atrous Convolution

2.2.1 SPP结构

image-20201023092419152

图11. 添加SPP结构

在SPP出来之前,所有神经网络都是要输入固定尺寸的图片,比如经常遇到的224×224,图片输入网络前都要resize到224×224,导致图片变形,其中的信息也变形了,从而限制了识别精度。

而SPP和ASPP就是为了解决这个问题,它可以让网络输入原图而不必resize。4

image-20201023220456594
图12. SPP结构
image-20201023220826846
图13. SPP结构解析

如上图所示,最左边的图表示经过卷积得到的256-d特征图,采取三种不同的划分方式,并分别进行池化:

  1. 直接对整个特征图进行池化,每一维得到一个池化后的值,输出一个1*256的向量
  2. 将特征图分成4等份,每份单独进行池化,最终输出4个1*256的向量
  3. 将特征图分成16等份,每份单独进行池化,最终输出16个1*256的向量

将三种划分方式池化后输出的结果进行拼接,输出(1+4+16)*256 = 21*256的特征

由图中可以看出,整个过程对于输入的尺寸大小完全无关,因此可以处理任意尺寸的候选框。

空间池化实际是一种自适应的层,无论你的输入是什么尺寸,输出都是固定的

2.2.2 Atrous Convolution

image-20201024085021776

图14. Atrous Convolution

Atrous Convolution(空洞卷积),它有一个rate参数,称为膨胀率,相比普通卷积,空洞卷积有什么好处呢?

  1. 扩大感受野

    在deep net中为了增加感受野且降低计算量,总要进行降采样(pooling或s2/conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。

  2. 捕获多尺度上下文信息:

    空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。

image-20201024085154901

2.2.3 ASPP的Pytorch实现

3 Decoder

3.1 上采样

3.2 双线性插值

3.3 反卷积

3.4 反池化


  1. 《Encoder-Decoder with Atrous Separable Convolution for SemanticImage Segmentation》 ↩︎

  2. 《计算机视觉与深度学习》 鲁鹏 ↩︎

  3. 《Deep Residual Learning for Image Recognition》 ↩︎

  4. 《金字塔池化系列的理解SPP、ASPP》 ↩︎

  • 11
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值