一.摘要:

1.spp是什么?

问题:分割

我们提出了什么:

1.deeplab v3+ 在deeplab v3的基础上加了一个简单的decoder模块来改善分割结果,尤其是对于边界区域

2.我们采用xception当中的深度壳分离卷积,来应用到aspp和decoder模块中去,能够得到一个更好和更快的结果

结果:

我们证明了所提出的模型在PASCAL VOC 2012语义图像分割数据集上的有效性,并且在没有任何后处理的情况下在测试集上实现了89%的性能

二.介绍:

1.在我们的工作里,我们考虑了两种类型的神经网络

(1).基于spp的(能够捕捉丰富的上下文信息) (2).基于编码器和解码器的(能够获得更加清楚的边界)

2.deeplabv3 采用aspp,pspnet采用池化操作和不同的网格尺度,池化会丢失一些细节信息,使用孔洞卷积可以解决这一个问题,但是会增大计算量。以ResNet-101 [27]为例,当应用atrous卷积提取比输入分辨率小16倍的输出特征时,最后3个残余块(9层)内的特征必须扩大。 更糟糕的是,如果需要比输入小8倍的输出特征,则会影响26个残余块(78层!)(???)

3.我们在deeplab v3的基础上加了一个decoder,这个可以恢复一些目标边界的信息,同时还采用了深度可分离卷积

贡献:

1.我们使用deeplab v3作为encoder,并加入了一个decoder

2.我们提出了一个encoder-decoder结构,可以通过孔洞卷积来控制encoder的特征的分辨率,来权衡准确率和计算量,这是现有目标的网络结构所没有的

3.我们采用Xception中的深度可分离卷积应用在encoder和aspp中,使得网络更强大也更快

4.我们在pascal voc 2012中取得了the state of art的结果

5.我们公开了自己的tensorflow代码.

图a是deeplab v3, 图b是encoder-decoder结构,图3是deeplab v3+ 的结构使用一个轻编码器

方法:

DeepLabv3 as encoder:

DeepLabv3中也使用atrous卷积提取特征。我们将输入和输出的分辨率比值记为output_stride,对于图像分类任务,最终的feature map 的大小一般是输入图像的 1/32,即 output_stride=32;对于语义分割任务,将下采样(普通卷积操作)替换为atrous卷积,这样就可以调整 output_stride = 16(或8),从而进行更密集的特征提取(例如,我们应用rate = 2和rate = 4到最后两个blocks,则output_stride = 8)。

DeepLabv3的ASPP模块使用了多个平行的atrous卷积,配合了图像级特征(即全局平均池化)。我们将DeepLabv3的logit前的输出特征作为encoder-decoder模型的encoder输出。此时输出的feature通道为256并包含丰富的语义信息。另外,可已通过使用 atrous 卷积来匹配计算资源的限制。
Proposed decoder:

在原先的DeepLabv3中,取预测的feature 直接双线性上采样16倍到期望尺寸,这样的简易的decoder模块不能成功的恢复分割细节。因此加入了一个有效的 decoder 模块,如下图所示:编码器特征先进行 factor=4 的双线性上采样,然后与具有相同空间分辨率的网络主干的相应低级特征(例如,在ResNet-101 [25]中跨越之前的Conv2)连接在一起。

DeepLabv3+的整体的架构如下图所示:

改进后的Xception为encodet网络主体,替换原本DeepLabv3的ResNet101.

Experiment

我们采用ImageNet-1k预训练的ResNet-101或修改后的Aligned Xception 来通过taros 卷积提取密集的特征图。采用与 DeepLabv3 相同的训练方式,简而言之,当output_stride = 16时,在训练期间使用相同的学习率计划(即[“poly”策略](Liu, W., Rabinovich, A., Berg, A.C.: Parsenet: Looking wider to see better. arXiv:1506.04579 (2015))和相同的初始学习率0.007)、crop大小513×513 、 batch normalization 参数,以及随机比例数据增强(random scale data augmentation) 。 请注意,我们还在解码器模块中包含批量标准化参数。

这里提出的模型是端到端(end-to-end)训练的,没有对每个组件进行分段预训练。。
Decoder Design Choise

用DeepLabv3作为encoder,对于f 个k×k 的卷积操作记为$[k×k,f] $,先前DeepLabv3是在输出结果上继续双线性上采样16倍得到预测结果,这在PASCAL VOC2012 验证集上达到了77.21%。论文在此基础上,提出了改进的decoder模块。关于decoder的设计有多个方案:

使用1×1卷积减少来自低级feature的通道数

下图示意部分为1×1 卷积:

在这里插入图片描述

为了评估1×1 卷积的重要性,在encoder中取了 Conv2 尺寸为[3×3,256] 为输出,减少通道数在48到32之间性能最佳。结果如下表:

最终采用了[1×1,48]来做通道降维。

是否需要3×3卷积逐步获取分割结果

即下图示意部分3×3卷积恢复信息:


实验部分包括使用1×1,256 的卷积,一组、二组、三组的3×3,256 卷积,使用3×3,128 的卷积,结果如下:

结果显示使用两组3×3,256 卷积性能最佳。

使用哪部分的低级特征帮助提供细节

即下图示意部分:

论文实验了如果使用Conv2 和Conv3 同时预测,Conv2 上采样2倍后与Conv3 结合,再上采样2倍,结果如下:

这并没有显著的提升性能,考虑到计算资源的限制,论文最终采样简单的decoder方案,即取Conv2 Conv2Conv2上采样后再与top feature concatenate。

ResNet-101 as Network Backbone

以ResNet为encoder模型,测试了以下几种变体:

Baseline: 在下表的第一组。都没有使用decoder。测试了不同output_stride output_strideoutput_stride,多尺度输入,左右翻转操作。
    Adding decoder: 下表的第二组。采用的decoder。相对来说增加了计算消耗。
    Coarser feature maps: 测试了使用output_stride=32 ,这样计算速度更快。但是相对于output_stride=16 准确率下降了1-2%左右。

可以看到使用多尺度MS MSMS计算量计算量增加一个数量级,使用左右翻转Flip FlipFlip计算量翻倍。

Xception as Network Backbone

ImageNet pretraining: 改进后的Xception网络在ImageNet-1K上做了预训练。训练设置如下:

可以看到Modified Xception性能要好点。

整体的使用Modified Xception做为网络骨架,使用如下几种变体:

Baseline: 不使用decoder.
    Adding decoder: 添加了decoder.
    Using depthwise separable convolution: 在ASPP和decoder中使用深度分离卷积。计算量下降了30-40%.
    Pretraining on COCO: 在MS-COCO数据集上预训练
    Pretraining on JFT: 在IamgeNet-1K和JFT-300M上预训练

可以看到使用深度分离卷积可以显著降低计算消耗。

与其他先进模型在VOC12的测试集上对比:

在目标边界上的提升

使用trimap实验测量模型在分割边界的准确度。计算边界周围扩展频带(称为trimap)内的mIoU。结果如下:

与双线性上采样相比,加decoder的有明显的提升。trimap越小效果越明显。

加了decoder的可视化结果如下:

部分转载:https://blog.csdn.net/Lin_Danny/article/details/87924277

deeplab v3+---Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation相关推荐

  1. Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

    完整代码:https://github.com/jfzhang95/pytorch-deeplab-xception class DeepLab(nn.Module):def __init__(sel ...

  2. 语义分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic

    语义分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic .. https://blog.csd ...

  3. 论文阅读:Enconder-Decoder with Atrous Separabel Convolution for Semantic Image Segmentation(deeplabv3+)

    语义分割系列论文-Enconder-Decoder with Atrous Separabel Convolution for Semantic Image Segmentation(deeplabv ...

  4. 【语义分割】ASPP:Rethinking Atrous Convolution for Semantic Image Segmentation

    文章目录 一.主要思想 二.实现 三.代码 一.主要思想 为了提高对不同尺度目标的语义分割,作者串联或并联使用不同扩张率的空洞卷积来实现对多尺度上下文的语义信息捕捉. Atrous Spatial P ...

  5. Semantic Segmentation -- (DeepLabv3)Rethinking Atrous Convolution for Semantic Image Segmentation论文解

    DeepLabv3 Rethinking Atrous Convolution for Semantic Image Segmentation 原文地址:DeepLabv3 代码: TensorFlo ...

  6. 语义分割 DeepLabv3--Rethinking Atrous Convolution for Semantic Image Segmentation

    Rethinking Atrous Convolution for Semantic Image Segmentation https://arxiv.org/abs/1706.05587v1 代码还 ...

  7. 论文阅读:Rethinking Atrous Convolution for Semantic Image Segmentation

    论文地址:https://arxiv.org/pdf/1706.05587.pdf 发表时间:2017 注:2018年提出了deeplab3+,论文详细解读可以参考 https://blog.csdn ...

  8. 关于「Xception」和「DeepLab V3+」的那些事

    作者丨崔权 学校丨早稻田大学硕士生 研究方向丨深度学习,计算机视觉 知乎专栏丨サイ桑的炼丹炉 前言 最近读了 Xception [1] 和 DeepLab V3+ [2] 的论文,觉得有必要总结一下这 ...

  9. [深度学习从入门到女装]DeepLab v3

    DeepLab v3 论文地址:Rethinking Atrous Convolution for Semantic Image Segmentation 1.相比于DeepLab v2,有一点改进就 ...

最新文章

  1. R语定义函数对宽分布(wide distribution )、有偏分布(skew distribution)的数据进行对数变换(符号对数变换函数、signed log transformation)
  2. python多进程_python语法:多进程
  3. 第三届蓝桥杯C++本科B组决赛解题报告(更新中)
  4. 解决Linux安装 VMware tools 工具的方法
  5. hdu 4407 Sum
  6. 51CTO博客——架起我与读者沟通、见面的桥梁[博友话题]
  7. .NET Mail : 注意Win 7 不再包含SMTP服务
  8. 关于应用的外部接口设计心得
  9. Ubuntu系统安装JDK教程
  10. 好用的Android抓包神器 VNET
  11. Android 深色模式适配
  12. At91sam9g35K烧录Linux系统
  13. 送给python初学者在简单编程练习题中的小技巧
  14. 已经更CSS《一篇文章让你从HTML零基础入门前端开发》12.22
  15. 手机拍证件照有什么诀窍
  16. apache kafka技术分享系列(目录索引)
  17. mysql中my.cnf不生效解决
  18. 技术提升了,钱自然就来了:盘点这段时间我挣钱的感受
  19. 重庆科技学院数理学院mysql的期末考试_数据库期末考试重庆科技学院A.doc
  20. 【技术分享】一封伪造邮件引发的研究

热门文章

  1. [PyTorch] 译+注:一个例子,让你明白PyTorch框架
  2. python数据存储系列教程——python操作sqlite数据库:连接、增删查改、指令执行
  3. c#实现文件批处理:剪切、复制、删除、改名、分类等
  4. 腾讯云配置Ubuntu使用SSH登录
  5. basys3利用microblaze连接Pmod ad2
  6. 贺利坚老师汇编课程54笔记:标志寄存器
  7. (重磅)最快的Hadoop完全分布式运行
  8. 微信小程序——获取具体地理位置信息
  9. 汇编debug与masm命令
  10. (三)cmockery中的消息打印以及可变参数相关总结