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

https://blog.csdn.net/u011974639/article/details/79518175

DeepLabv3+

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

原文地址:DeepLabv3+

注意本文的一作Liang−ChiehChenLiang-Chieh ChenLiang−ChiehChen参与了DeepLab系列,MaskLab和MobileNet系列的工作。本文是在DeepLabv3的基础上将多个技术融合到一起,达到新的state-of-the-art。

论文在提出了DeepLabv3+架构。主要以DeepLabv3做encoder架构,decoder采用一个简单却有效的模块。并探索了了改进的Xception和深度分离卷积在模型中的应用,进一步提升模型在语义分割任务上的性能。


Abstract

空间金字塔模块在输入feature上应用多采样率扩张卷积、多接收野卷积或池化,探索多尺度上下文信息。 Encoder-Decoder结构通过逐渐恢复空间信息来捕捉清晰的目标边界。

DeepLabv3+结合了这两者的优点,具体来说,以DeepLabv3为encoder架构,在此基础上添加了简单却有效的decoder模块用于细化分割结果。此外论文进一步探究了以Xception结构为模型主干,并探讨了Depthwise separable convolution在ASPP和decoder模块上的应用,最终得到了更快更强大的encoder-decoder网络。

论文在PASCAL VOC 2012上验证了模型的有效性,在没有添加任何后端处理的情况下达到了89%mIoU.


Introduction

在DeepLabv3+中,使用了两种类型的神经网络,使用空间金字塔模块和encoder-decoder结构做语义分割。

DeepLabv3+结合这两者的优点,在DeepLabv3的基础上拓展了一个简单有效的模块用于恢复边界信息。如下图所示:

DeepLabv3的top layer输出的feature中有丰富的语义信息,可通过扩张卷积依据计算资源限制控制计算密度,配合一个decoder模块用于逐渐恢复边界信息。

在上述的encoder-decoder架构上,论文受到Xception等工作启发,将深度分离卷积应用到ASPP和decoder模块,用于快速计算并保持模型的强大学习能力。最终得到的模型在没有添加后端处理的情况下,达到了新的state-of-the-art.

论文的主要贡献在于:


Related Work

近几年基于全卷积神经网络的模型在语义分割任务上表现成功。有几种变体模型提出利用上下文信息包括多尺度输入在内的做分割,也有采用概率图模型细化分割结果。本文主要讨论使用空间金字塔池化和encoder-decoder结构、并讨论了基于Xception为主体的强大特征提取层,和基于深度分离卷积快速计算。

**空间金字塔池化:**如PSPNet使用多个不同gird的池化,DeepLab的ASPP模块平行的使用不同扩张率的扩张卷积,执行空间金字塔合并获取多尺度信息。在多个benchmark获得不错的结果。

Encoder-Decoder: encoder-decoder结构在多个计算机视觉任务上获得成功,例如人类姿态估计、目标检测和语义分割。通常,encoder-decoder网络包含:

在这领域上基础上,我们使用DeepLabv3作为encoder模块,并增加一个简单又有效的的decoder模块获取空间信息。

深度分离卷积: 深度分离卷积和组卷积能够减少计算消耗和参数量的同时维持相似的表现。深度分离卷积已应用在多个神经网络中,特别的,我们探索了Xception架构,在语义分割任务上展现了精度和速度上的双重提升。


Methods

本节简单回顾DeepLabv3架构,提出改进后的Xception模型,介绍扩张卷积和深度分离卷积。

Encoder-Decoder with Atrous Convolution

DeepLabv3 as encoder:
DeepLabv3中也使用扩张卷积提取特征,我们将输入和输出的分辨率比值称为output_strideoutput\_strideoutput_stride,对于语义分割任务,使用扩张卷积替换下采样,使得输出的feature的output_stride=16output\_stride=16output_stride=16。

DeepLabv3的ASPP模块使用了多个平行的扩张卷积,配合了图像级特征(即全局平均池化)。我们将DeepLabv3的logit前的输出特征作为encoder-decoder模型的encoder输出。此时输出的feature通道为256,可依据计算资源限制合理使用扩张卷积。

Proposed decoder:

在原先的DeepLabv3中,取预测的feature 直接双线性上采样16倍到期望尺寸,这样的简易的decoder模块不能成功的恢复分割细节(这个问题在Understand Convolution for Semantic Segmentation重点讨论过~)

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


简单说一下decoder的组成:

在实验部分展示了output_stride=16output\_stride=16output_stride=16是在速度和精度上最佳的平衡点,使用output_stride=8output\_stride=8output_stride=8能够进一步提升精度,伴随着是更大的计算消耗。

使用分离卷积改进Xcetpion

扩张分离卷积

Atrous Convolution:

扩张卷积在DeepLab系列,Understand Convolution for Semantic Segmentation, Dilated Residual Networks 上都介绍过。这里简单说一下:

考虑到二维信号上使用空洞卷积,对于位置iii,在输入为xxx上应用滤波器www,输出为yyy:

y[i]=∑kx[i+r⋅k]w[k]y[i]=\sum_{k}x[i+r·k]w[k]y[i]=k∑​x[i+r⋅k]w[k]
其中速率rrr在采样点之间引入r−1r-1r−1个零,有效的将感受野从k×kk×kk×k扩展到ke=k+(k−1)(r−1)k_e=k+(k-1)(r-1)ke​=k+(k−1)(r−1),而不增加参数和计算量。

Depthwise separable convolution:

深度分离卷积在MobileNet里面重点讲过,这里简单说一下:

深度可分离卷积干的活是:把标准卷积分解成深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。深度卷积对每个通道独立使用空间卷积,逐点卷积用于结合深度卷积的输出。深度分离卷积可以大幅度降低参数量和计算量。

我们将扩张卷积核深度分离卷积结合到一起,即扩张分离卷积。扩张分离卷积能够显著的减少模型的计算复杂度并维持相似的表现。

Modified Aligned Xcetpion

论文受到近期MSRA组在Xception上改进工作可变形卷积(Deformable-ConvNets)启发,Deformable-ConvNets对Xception做了改进,能够进一步提升模型学习能力,新的结构如下:


摘自MSRA COCO Detection & Segmentation Challenge 2017 Entry。

论文进一步改进了MSRA的工作以适应语义分割任务,具体如下:

改进后的Xception整体结构如下:


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


Experiment

论文使用modified aligned Xception改进后的ResNet-101,在ImageNet-1K上做预训练,通过扩张卷积做密集的特征提取。采用DeepLabv3的训练方式(poly学习策略,crop513×513513×513513×513).注意在decoder模块同样包含BN层。

Decoder Design Choise

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

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

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


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


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

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

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


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


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

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

即下图示意部分:


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


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

ResNet-101 as Network Backbone

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

  • Baseline: 在下表的第一组。都没有使用decoder。测试了不同output_strideoutput\_strideoutput_stride,多尺度输入,左右翻转操作。

  • Adding decoder: 下表的第二组。采用的encoder。平均多增加了20B的计算消耗。

  • Coarser feature maps: 测试了使用output_stride=32output\_stride=32output_stride=32,这样计算速度更快。但是相对于output_stride=16output\_stride=16output_stride=16准确率下降了1-2%左右。


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

Xception as Network Backbone

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

选项 配置
优化器 Nesterov momentum optimizer,momentum = 0.9
学习率 初始学习率0.05,2个epochs衰减0.94
weight_decay 4e-5
硬件 同步使用50 GPUs
batchsize 每个GPU取32
image size 299x299


可以看到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的可视化结果如下:


Conclusion

论文提出的DeepLabv3+是encoder-decoder架构,其中encoder架构采用DeepLabv3,decoder采用一个简单却有效的模块用于恢复目标边界细节。并可使用扩张卷积在指定计算资源下控制feature的分辨率。

论文探索了Xception和深度分离卷积在模型上的使用,进一步提高模型的速度和性能。模型在VOC2012上获得了新的state-of-the-art表现。

转载于:https://www.cnblogs.com/yumoye/p/11306195.html

语义分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic相关推荐

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

    一.摘要: 1.spp是什么? 问题:分割 我们提出了什么: 1.deeplab v3+ 在deeplab v3的基础上加了一个简单的decoder模块来改善分割结果,尤其是对于边界区域 2.我们采用 ...

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

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

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

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

  4. Pytorch 语义分割DeepLabV3+ 训练自己的数据集

    照葫芦画瓢总结记录了一下DeepLab分割系列,并对Deeplab V3++实现 一.DeepLab系列理解 1.DeepLab V1 原文:Semantic image segmentation w ...

  5. 语义分割Deeplabv3+论文解读

    论文链接 Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation https://arxiv ...

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

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

  7. 语义分割——DeepLabv3+的学习笔记~

    1 前言 听说DeepLabv3+是现在最优秀的语义分割框架~ 2 学习笔记 2.1 DeepLabv3+用到了CRF的技术吗? 没有,好像是通过增加context模块实现的:也就是利用了上下文的信息 ...

  8. 对象上下文语义分割:OCR论文笔记(Object-Contextual Representations for Semantic Segmentation )

    对象上下文语义分割:OCR 原文:Object-Contextual Representations for Semantic Segmentation 论文链接: https://arxiv.org ...

  9. 人人必须要知道的语义分割模型:DeepLabv3+

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意 ...

最新文章

  1. 电子狗显示连接不上服务器,大家觉得我这样做得对吗?行车记录仪新名词:云狗...
  2. java 判断数的位数_Java判断数字位数的两种方法
  3. (剑指Offer)面试题19:二叉树的镜像
  4. 你学废了 Mybatis 动态批量修改吗?
  5. 项目整体管理:项目整体管理实现过程
  6. Linux安装配置Java1.8开发环境
  7. [TJOI2015]线性代数(最小割)
  8. 记录一个layui框架之自定义模块出现的问题
  9. 面试必备|ID3、C4.5、CART、RF、boosting、Adaboost、GBDT、xgboost模型
  10. Xendesktop 5.0与view 4.5对比的看法
  11. 华为Mate 40系列或采用双处理器方案:国行版仍为麒麟芯
  12. 20165223《网络对抗技术》Exp3 免杀原理与实践
  13. Abp集成Quartz.net记录
  14. 7.Linux 的文件权限和目录配置
  15. Java学习笔记(JDBC数据库编程常用接口)
  16. 计算机组成与体系结构——指令的基本概念——2020.11.19
  17. 数字图像处理-基本知识总结
  18. SAP-MM MRP类型详解
  19. 【Python数据分析】二手车价格预测
  20. 域控制器丢失NETLOGON目录的解决办法

热门文章

  1. 在Android中使用RecyclerView
  2. 英语学习app源码_无纸化英语学习APP击败%89英语学习者
  3. python计算相关性显著性p值_基于python实现计算两组数据P值
  4. python对数据进行统计分析_python获取ELK数据进行统计分析
  5. svd pca matlab,从SVD到PCA——奇妙的数学游戏
  6. mysql执行ref_MySql执行分析
  7. python image模块需要安装吗_python Image模块安装
  8. 2020天津理工大学计算机考研录取名单,天津理工大学2020年硕士研究生拟录取名单公示...
  9. java volatile 基本类型_Java中Volatile关键字详解(转)
  10. 服务器搜索文件命令,Centos文件搜索命令的讲解