deeplab系列记录

前言:

最近的工作用到了deeplabv3+网络,于是把deeplabv2-v3+的文章都看一遍.

Deeplabv2:

语义分割中存在的问题:
1.由于重复地使用max-pooling和下采样,特征图(feature map)中空间分辨率显著减少.
2.待分割的对象物体在多个尺度上存在,使用传统的DNN并不能对所有尺度的目标都取得较好的分割效果

问题1的应对方案:使用空洞卷积.
为了克服这一障碍以生成更密集的特征图,我们可以去掉FCN中的最后几个max-pooling(池化层就是下采样操作),而是使用空洞卷积来代替,从而以更高的采样率计算出了特征图.

问题2的应对方案:使用ASPP模块

空洞卷积(Atrous Convolution):

优点:
1.在不增加参数或者计算量(扩大卷积核的大小/进行下采样)的前提下扩大模型的感受野.并且不降低影像的空间分辨率.

例如下图,分别使用了s=2 +standard conv和rate = 2的dilation conv有着相同的感受野,所使用的卷积核参也数一模一样,但是使用空洞卷积之后,不需要对原始影像下采样,从而保留更多的空间分辨率信息,这对密集的语义分割任务来说是必要的. 如果使用普通卷积层,在不增加参数的前提下还要保持相同的感受野,就必须要进行下采样:这样即增加了计算量,也降低了图像的空间分辨率
在这里插入图片描述
在这里插入图片描述
2.在DCNN中使用空洞卷积能够允许我们以任意的分辨率计算最后的响应图.
例如vgg-16五次下采样后采样率为32,如果去掉最后一层max-pooling及其之后的标准卷积层,用rate=2的空洞卷积来代替,没有增加任何的参数量,感受野也相同,但是最后输出特征图的空间分辨率提高了一倍(下采样率变为16).但是加入所有的层都使用空洞卷积,那么所有的特征图和原始图像的空间分辨率相同,这样显然很消耗显存!!!

ASPP( Atrous Spatial Pyramid Pooling):

如何对一个像素点分类:对于语义分割来说,我们要classify某一个像素点还需要依据其周围了像素信息,我们把这些点通过卷积到一起,综合利用他周围所有的点的信息,然后判断这个点属于哪个类别??
但是有些物体的尺寸比较大,有些物体的尺寸比较小,不可能使用同一个采样率来分割所有类别的像素点,这个时候就需要用到多尺度了

由于待分割的对象物体在多个尺度上存在, 使用不同采样率(rate)的多个并行空洞卷积来实现在多尺度上捕获图像的上下文内容!!!
ASPP的优点: 使用多采样率(rate)的空洞卷积进行并行采样,从而可以用对给定尺寸的特征图以多个比例来捕获图像的上下文内容.
在这里插入图片描述
利用1*1的卷积可以有效降低特征通道的数量
在这里插入图片描述

总结deeplabv2的主要贡献:

1.引入了空洞卷积,解决了由于重复地使用max-pooling和下采样,特征图(feature map)中空间分辨率显著减少的问题.
2.用空洞卷积改进SPP.引入了ASPP模块,可以多尺度的捕获特征图的上下文信息!


Deeplabv3:

deeplabv3主要是对ASPP模块的改进:
1.讨论了对空洞卷积的级联和并行的模块
2.对ASPP增加了1* 1卷积(可认为是rate很大的情况)和包含进了图像级别的特征,即全局平均池化.
在这里插入图片描述
首先给出了几种常用的获取多尺度内容的结构方法:
在这里插入图片描述

级联空洞卷积(Going Deeper with Atrous Convolution):

这就是上图( C )中所展示的模型
作用利用空洞卷积中越来越大的rate以换取更大的感受野.和没有使用空洞卷积相比,使用空洞卷积级联之后,感受野和卷积核的参数量没有改变,但是最后的特征图明显变大了–是标准卷积的16倍, 也说使用空洞卷积的级联之后空间分辨率变高了,更利于对精细对象的分割!!!
在这里插入图片描述

平行空洞卷积(ASPP):

在这里插入图片描述
文章指出,膨胀率越大,卷积核中的有效权重越少,当膨胀率足够大时,当采样率(sample rate)很大时,对于一个3 * 3的卷积核来说只有中心的1* 1的filter是有效的.并不能获取到全局的context信息, 下图说明了空洞rate和有效卷积核数之间的关系!!!
在这里插入图片描述
为了克服这个问题同时融入全局的影像信息,作者在最后一个特征图上使用了global average pooling再加上256个1*1的卷积核最后双线性插值上采样到理想的空间的分辨率.最后改进后的ASPP模块的具体结构如下:
在这里插入图片描述
由于并行式的ASPP模块相比于级联式的模块取得了更好的分割效果,因此以后都采用这种平行式的ASPP模块.

总结deeplabv3的主要贡献:

对deeplabv2的ASPP模块进行改进,增加了1*1的卷积, 以及image-level的全局平均池化!!!


Deeplabv3+:

deeplabv3+的主要贡献:
1.结合encoder-decoder的结构,改进了deeplabv3网络的decoder部分
2.使用Xception model来作为backbone, 使用深度可分离卷积来降低参数量.

encoder-decoder with Atrous Conv:

本文考虑了两种类型的神经网络结构:
a): 空间金字塔池化结构:通过多rate和多种感受野对多尺度上下文信息进行编码,使用空洞卷积还能够任意控制特征图的空间分辨率.但是由于显存的影响,在计算上禁止提取比输入分辨率小8倍甚至4倍的输出特征图(大显存的显卡可以提取更高分辨率的输出特征图!!!)
b): encode-decoder结构: 通过逐渐恢复空间信息来捕获更清晰的对象边界
然后作者结合这两种网络各自的优点设计出了encoder-decoder with Atrous Conv的网络结构
在这里插入图片描述

Depthwise separable convolution(深度可分离卷积):

将标准的点积分为深度卷积和点卷积(1* 1),其中深度卷积负责滤波作用,在输入的每个通道上;逐点卷积负责转换通道, 将卷积层通道间的相关性和空间相关性退耦合
对于一个6464256的特征图来说标准卷机需要的卷积核参数是(以3 * 3为例,声成256通道):(3 * 3 * 256) * 256=589,824个参数,现在换成可分离卷积之后:深度卷积参数(3 * 3 * 256) * 1+点卷积的参数(1 * 1 * 256) * 256 = 67, 840, 前着的参数两是后者的8.69倍

在这里插入图片描述
在这里插入图片描述

encoder-decoder with ASPP

DeepLabv3 as encoder:

对于图像级别的分类任务,特征图的分辨率相对于输入图的分辨率一般小32倍(output_stride=32),而对于像素级别的分个任务来说,output_stride=16 (or8),例如对于vgg16网络,把conv4和conv5分别用rate = 2 and rate = 4的空洞卷积代替,这样最终特征图的output_stride=8

Proposed decoder:

在deeplabv3中,output_stride=16,然后编码器的特征被双线性插值放大16倍,损失了很多目标的细节.
在本文中,首先将编码器特征通过双线性差值4倍上采样,然后和相应的 low-level features(有相同的空间分辨率)串联起来.因为 low-level features的通道数可能比encoder feature要多,所以要先用1* 1的卷积减少特征通道数,再串联!!!串联之后再用3 * 3的卷积精细调整特征,然后在双线性插值上采样4倍到原始大小.如果output_stride=8性能会继续提升

大致的架构如下:

在这里插入图片描述

Modified Aligned Xception(这个作为backbone, 上图中的DCNN结构)

(1):在Entry flow上增加了更多的层
(2):所有的最大池化层都被替换为带步长的深度可分离卷积,以便能够使用空洞深度可分离卷积以任意的空间分辨率提取特征图.
(3)额外的BN层和ReLU被添加了

在这里插入图片描述

总结deeplabv3+的主要贡献:

1.结合encoder-decoder的结构,改进了deeplabv3网络的decoder部分
2.使用Xception model来作为backbone, 使用深度可分离卷积来降低参数量. 取得了更好的分割结果!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值