DeepLab V3

好长一段时间没有和大家见面,但是在学习群里,大家每天都是非常活跃的进行着学术邻域的探讨,今天算是四月的初始,又是一个清爽明媚的季节,在这个样的季节中,大家一定都有很大的动力,去学习去科研去努力去进步!今天给大家分享的是这个系列的最后一篇——DeepLab V3。

Rethinking Atrous Convolution for Semantic Image Segmentation

论文下载地址:http://arxiv.org/abs/1706.05587

代码地址:https://github.com/tensorflow/models/tree/master/research/deeplab.

简要介绍

  • DeeplabV1和V2 ,即带孔卷积(atrous convolution), 能够明确地调整filters的感受野,并决定DNN计算得到特征的分辨率;

  • DeeplabV3,即多尺度(multiple scales)分割物体,设计了串行和并行的带孔卷积模块,采用多种不同的atrous rates来获取多尺度的内容信息;

  • DeeplabV3中提出 Atrous Spatial Pyramid Pooling(ASPP)模块, 挖掘不同尺度的卷积特征,以及编码了全局内容信息的图像层特征,提升分割效果;

  • DeeplabV3中,不需要DenseCRF后处理(与之前的不一样的处理)。

接下来简单介绍下带孔卷积的内容。

带孔卷积(Atrous convolution

Atrous convolution, 即dilated convolution, 它主要是通过移除网络最后几层的降采样操作以及对应的滤波器核的上采样操作,来提取更紧凑的特征,相当于在不同的滤波器权重之间插入holes,其决定了DCNNs计算的特征的分辨率,而不增加新的额外学习参数。

640?wx_fmt=png

常见的多尺度处理如下:

640?wx_fmt=png

DeeplabV3

  • 在串行模块和空间金字塔池化(spatial pyramid pooling,SPP)模块的网络结构中,atrous convolution都能够有效增加filters的感受野,整合多尺度信息;

  • 提出的串行和并行(atrous spatial pyramid pooling,ASPP)网络模块中包含了不同rates的atrous convolution处理与batch normalization layers,对于网络训练非常重要;

  • 采用rate非常大的3×3 atrous convolution,由于图像边界效应,不能捕捉图像的大范围信息,effectively simply degenerating to 1×1 convolution, 所以提出将图像层特征整合仅在ASPP模块中。

接下来我们来主要讲讲主要的方法内容。

主要方法

这里主要回顾如何应用atrous convolution来提取紧凑的特征,以进行语义分割; 然后介绍在串行和并行中采用atrous convolution的模块。

  • Atrous Convolution for Dense Feature Extraction

假设2维信号,针对每个位置i,对应的输出y, 以及filter w,对于输入feature map x进行 atrous convlution 计算:  

640?wx_fmt=png

其中,atrous rate r表示对输入信号进行采样的步长(stride),等价于将输入x 和通过在两个连续的filters值间沿着各空间维度插入r−1个零值得到的上采样filters进行卷积。通过改变Atrous convolution 的rate值,来修改filter的感受野,也可以控制FCN网络(fully convolutional networks)计算的特征紧凑程度。如上面图中提及到的。标准卷积即是atrous convlution的一种rate r=1的特殊形式。

  • Going Deeper with Atrous Convolution

以串行方式设计atrous convolution 模块,复制ResNet的最后一个block,如下图的block4,并将复制后的blocks以串行方式级联。

640?wx_fmt=png

其中,各block中有三个convolutions, 除了最后一个block, 其它block的最后一个convolution的步长都为2, 类似于原来的ResNet(残差网络)。

这种网络模型设计的动机,引入的stride能更容易的捕获较深的blockes中的大范围信息。例如,整体图像feature可以融合到最后一个小分辨率的feature map中,如上图(a)。

不过,这种连续的步长式设计,对于语义分割是不利的,会破坏图像的细节信息。因此,这里采用由期望outpur_stride值来确定rates的atrous convolution 进行模型设计,如上图(b)。

采用串行的ResNet,级联block为block5、block6、block7,均为block4的复制,如果没有 atrous convolution, 其output_stride=256。

  • Multi-grid Method

对block4~block7 采用不同atrous rates.。即,定义Multi_Grid=(r1,r2,r3)为block4~block7的三个convolutional layers的 unit rates。

convolutional layer最终的atrous rate等于unit rate与对应的rate的乘积。例如,当output_stride=16, Multi_Grid=(1,2,4)时, block4中three convolutions的rate分别为:rates=2∗(1,2,4) = (2,4,8)。

Atrous Spatial Pyramid Pooling

  • ASPP, 采用四个并行的不同atrous rates的atrous convolutions对feature map进行处理,灵感来自spatial pyramid pooling。

  • ASPP, deeplabv3 中将batch normalization加入到ASPP模块。

  • 具有不同atrous rates的ASPP能够有效的捕获多尺度信息。不过,论文发现,随着sampling rate的增加,有效filter特征权重(即有效特征区域,而不是补零区域的权重)的数量会变小。如下图所示,当采用具有不同atrous rates的3×3 filter应用到65×65 feature map时,在rate值接近于feature map 大小的极端情况,该3×3 filter不能捕获整个图像内容嘻嘻,而退化成了一个简单的1×1 filter, 因为只有中心 filter 权重才是有效的。

640?wx_fmt=png

针对上面的问题,并将全局内容信息整合进模型中,则采用图像级特征。

采用全局平均池化(global average pooling)对模型的feature map进行处理,将得到的图像级特征输入到一个1×1 convolution with 256 filters(加入 batch normalization)中,然后将特征进行双线性上采样(bilinearly upsample)到特定的空间维度。

改进了ASPP, 即:

  • 当output_stride=16时,包括一个1×1 convolution和3×3 convolutions,其中3×3 convolutions的rates=(6,12,18),(所有的filter个数为256,并加入batch normalization)。需要注意的是,当output_stride=8时,rates将加倍;

  • 图像级特征, 如下图所示。

640?wx_fmt=png

连接所有分支的最终特征,输入到另一个1×1 convolution(所有的filter个数也为256,并加入batch normalization),再进入最终的1×1 convolution,得到 logits 结果。

实验结


640?wx_fmt=png

最后还给出了可视化的效果,如下:

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

但是实验过程中,也出现了一些错的案例,比如:

640?wx_fmt=png

小结一下:

提出的模型”DeepLab v3”采用atrous convolution的上采样滤波器提取稠密特征映射和去捕获大范围的上下文信息。具体来说,编码多尺度信息,提出的级联模块逐步翻倍的atrous rates,提出的atrous spatial pyramid pooling模块增强图像级的特征,探讨了多采样率和有效视场下的滤波器特性。实验结果表明,该模型在Pascalvoc 2012语义图像分割基准上比以前的DeppLab版本有了明显的改进,并取得了与其他先进模型相当的性能。






<think>好的,我现在需要帮助用户了解DeepLab v3+的模型架构、实现方法以及代码示例。首先,我要回忆一下DeepLab v3+的相关知识,确保信息准确。根据用户提供的引用,DeepLab v3+结合了空间金字塔池化(ASPP)和编码器-解码器结构,使用Atrous卷积来提取多尺度特征,并改进了分割边界的效果。 接下来,我需要整理模型的主要架构部分。编码器部分通常使用ResNet或Xception作为主干网络,结合ASPP模块,通过不同膨胀率的空洞卷积捕获多尺度上下文信息。解码器部分则融合深层语义特征和浅层细节,提升边界精度。这些内容在引用[1]、[3]、[5]中都有提到,需要正确引用。 然后,实现方法方面,用户可能关心如何应用Atrous卷积,如何设计ASPP模块,以及训练时的技巧,比如学习率调整和数据增强。引用[2]和[4]提到了PyTorch实现和代码示例,需要指出具体的项目地址和参考资料。 关于代码示例,用户提供的引用中有GitCode的仓库链接(引用[2]),应该推荐这个资源,并简要说明代码结构,如模型定义、数据加载等部分。此外,引用[4]提到的博客和视频教程也是有用的学习资源,可以一并提及。 还需要考虑用户可能的后续问题,比如模型优化、训练细节或应用场景,提前准备相关问题,如与其他模型的比较、训练技巧和部署方法。这些问题能帮助用户深入理解,并引导他们进一步探索。 最后,要确保回答结构清晰,分点说明架构、实现和代码,引用正确,语法符合要求,数学公式用$...$格式,例如ASPP中的膨胀率用$rate=r$表示。检查所有引用是否准确对应,比如引用[5]中的架构图描述,确保没有错误。</think>### DeepLab v3+ 模型详解 #### 一、模型架构 DeepLab v3+ 是经典的语义分割模型,结合了**空间金字塔池化(ASPP)**和**编码器-解码器结构**,核心改进包括: 1. **编码器模块**:主干网络(如ResNet、Xception)配合**Atrous(空洞)卷积**,支持多分辨率特征提取 $$ \text{Atrous卷积公式}: y[i] = \sum_{k} x[i + r \cdot k] \cdot w[k] $$ 其中$r$为膨胀率,可扩大感受野[^5]。 2. **ASPP模块**:并行使用不同膨胀率的空洞卷积(如$rate=6,12,18$)捕获多尺度特征[^3] 3. **解码器模块**:融合深层语义特征与浅层细节信息,优化边界分割精度[^1] ![](https://example.com/deeplabv3plus_arch.png) (架构示意图:编码器提取语义信息,解码器恢复边界细节) #### 二、实现方法 1. **主干网络选择**:推荐使用Xception或MobileNetV2轻量化变体 2. **多尺度训练**:通过设置不同输入分辨率提升泛化能力 3. **损失函数**:常用交叉熵损失 + 辅助损失(如边界加权损失) #### 三、代码示例(PyTorch) 基于引用[2][^2]的官方实现: ```python import torch from modeling.deeplab import DeepLab # 初始化模型 model = DeepLab(backbone=&#39;xception&#39;, output_stride=16, num_classes=21) # 输入处理 input = torch.randn(2, 3, 512, 512) output = model(input) print(output.size()) # [2,21,512,512] ``` 代码说明: - `output_stride`控制特征图下采样率 - ASPP模块自动根据输出步长调整膨胀率 #### 四、训练技巧 1. 使用**Poly学习率策略**:$$ lr = base\_lr \times (1 - \frac{iter}{max\_iter})^{power} $$ 2. 数据增强:随机缩放(0.5-2.0倍)、左右翻转、颜色抖动 3. 预训练权重:建议加载COCO或Cityscapes预训练模型[^4]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计算机视觉研究院

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

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

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

打赏作者

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

抵扣说明:

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

余额充值