图像语义分割(10)-DeepLabV3+: 用于图像语义分割的带有空洞可分离卷积的编解码结构
论文地址 :Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
论文代码:Github链接
1. 摘要
文章主要的工作是将空间金字塔池化和编解码模块结合,在DeepLabV3的基础上提出DeepLabV3+:使用DeepLabV3作为编码结构,再次基础上增加一个简单有效的解码模块来精细化分割的结果,特别是边界部分。文章还进一步探索Xception的结构,在ASPP和Decoder中都应用了深度可分离卷积,得到一个快速而且健壮的编解码网络。
2. 介绍
语义分割模型中,金字塔池化模块能够在不同分辨率下获取丰富的语义信息而编解码结构则能够捕获比较细节的物体边框。在DeepLabV3中应用了不同空洞率的空洞卷积层并行组成的ASPP模块来捕获多个尺度的特征图,尽管能够将丰富的语义信息编码在最后的特征图中,但是由于池化和带步长卷积的存在,会使得一些关于物体边界的细节信息丢失
这个问题可以通过空洞卷积来减缓,空洞卷积计算代价过大。以ResNet101为例,若output_stride=16,有三个残差块即九个层需要空洞化;若output_stride=8,则有26个残差快即78个层需要空洞化。
但是在编解码结构中不会有如此强度的计算,在此类模型的编码结构中没有特征需要空洞卷积处理,解码结构逐步还原,所以计算更快。而且编解码结构还能获得更加详细的物体边框回复效果,所以论文中将ASPP和编解码结构结合来获取物体多尺度的语义信息并精细化边框,如下图所示:
除了ASPP与编解码结构的结合,模型还应用了深度可分离卷积来简化模型并提速,具体来讲是对Xception进行了一些改进,并将可分离卷积的思想结合空洞卷积形成空洞可分离卷积应用于ASPP和解码模块中。
总的来说,论文的主要贡献在于:
- 新颖的使用DeepLabV3作为编码模块的编解码结构
- 空洞卷积来控制编码结构中特征图尺寸实现精度和速度的均衡
- 应用Xception作为主干网络并在ASPP和解码结构中应用可分离卷积的思想提出空洞可分离卷积
- 在PASCAL VOC 2012数据集上实现了state-of-art 的性能。
3. 方法
涉及的方法有空洞卷积,深度可分离卷积,DeepLabV3作为编码器模块,对应的解码结构,Xception的修改版。
3.1 带有空洞卷积的编解码结构
- 空洞卷积
空洞卷积的引入能够使特征图的分辨率得到控制并且调整滤波器的感受野来捕获多尺度的信息。二维信号中,对于每一个位置iii,有一个输出yyy和一个滤波器www,空洞卷积在特征图x上的应用如下所示:
y[i]=∑kx[i+r⋅k]w[k]y[i]=\sum_{k}x[i+r \cdot k]w[k]y[i]=k∑x[i+r⋅k]w[k] - 深度可分离卷积
深度可分离卷积把标准卷积分解为一个Depthwise Conv和一个Pointwise Conv,其中DW独立地对每个输入通道做空间卷积,PW用于结合DW的输出。将空洞卷积于深度可分离卷积结合可以减少运算量的同时保持不错的效果,结构如下图所示:
- DeepLabV3作为编码模块
对于图像分类任务来说,输出特征图通常是输入图像的三二分之一,即output_stride=32,对于分割任务来说,通常是16或者8,这是通过一处最后的一个block或者两个blocks并应用空洞卷积来实现的。[atrous rate=2,4;output_stride=8]。
对于DeepLabV3来说,它通过应用不同的空洞率的空洞卷积和image-level feature改进了ASPP,我们使用这个结构作为编码结构。这个编码结构的输出使包含256个通道的富语义信息,并且可以通过调整具体的参数得到不同尺寸的输出特征图 - 解码结构
通常来说,DeepLabV3的output_stride=16,然后通过一个16倍的双线性插值来进行上采样,这可以被看作一个简单的解码模块,单并不能很好的恢复分割的细节。文中提出一个解码结构如下图所示:
首先将编码结构的输出双线性插值上采样4倍然后和对应的经过1x1卷积来减少通道数的底层特征图concat,之后应用一个3x3的卷积,之后应用一个4倍的双线性插值上采样来得到最后的输出。实验证明,output_stride=16具有最好的精度和速度的折中。等于8的话精度的提升带来了额外多的计算。
3.2 修改并校准Xception
主要对Xception做了如下修改:
- MSRA类似的改进过的Deeper Xception,即more layers
- 将所有的最大池化操作修改为带步长的深度可分离卷积,以便应用空洞可分离卷积
- 额外的BN层和RELU激活层附加在每一个3x3DW Conv后,这与MobileNet的设计很相似。
最后细节如下图所示:
4.实验
与V3相同的训练参数,具体实验包括:
4.1 Decoder设计的选择
在decoder模块中:
- 1x1 卷积用于减少底层特征图的通道数
- 3x3 卷积用于获取精细的特征图分割结果
- 底层特征图必须要用在编码结构中
不同通道数对结果的影响如下表:
3x3 卷积个数和其滤波器个数对实验结果的影响如下表:
最终采取了这样的解码结构,将经过Conv2的通道减少的特征图与DeepLabV3的特征图做concat后的结果再经过两个[3x3,256]的卷积操作。
4.2 其他实验细节
包括ResNet和Xception的对比,Xception作为主干网络后,其他细节的对比,下表是再Pascal VOC 2012的结果:
下表是再Citycapes数据集上的实验结果:
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
图像语义分割(10)-DeepLabV3+: 用于图像语义分割的带有空洞可分离卷积的编解码结构相关推荐
- 图像语义分割_图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积...
论文地址 :Rethinking Atrous Convolution for Semantic Image Segmentation 论文代码:Github链接 1. 摘要 文章主要的工作: 使用空 ...
- 线性插值改变图像尺寸_【图像分割模型】实例分割模型—DeepMask
这是专栏<图像分割模型>的第11篇文章.在这里,我们将共同探索解决分割问题的主流网络结构和设计思想. 本文介绍了用于实例分割任务的模型结构--DeepMask. 作者 | 孙叔桥 编辑 | ...
- 制作用于图像语义分割训练的标签数据【图像分割】【labelme】
制作用于图像语义分割训练的标签数据 *写在前面 一.使用labelme制作json数据 1.安装labelme 2.利用labelme制作json数据 二.将json数据转化为图像数据 1.单个jso ...
- 用于图像语义分割的GAU与PPM
简单记录一下用于图像语义分割的2个模块 1. GAU(Global Attention Upsample, 全局注意力上采样模块) 全局注意力上采样模块 (GAU)通过全局池化将高层特征作为低层特征的 ...
- python遥感影像地物分类_基于轻量化语义分割网络的遥感图像地物分类方法与流程...
本发明属于图像处理 技术领域: ,特别涉及一种地物分类方法,可用于土地利用分析.环境保护以及城市规划. 背景技术: :遥感图像地物分类,旨在取代繁琐的人工作业,利用地物分类方法,得到输入遥感图像的地物 ...
- BiSeNet:用于实时语义分割的双边分割网络-7min精简论文阅读系列-Leon
BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation BiSeNet:用于实时语义分割的双边分割网络 ...
- BCPNet:用于实时语义分割的双向上下文传播网络
论文地址:https://arxiv.org/pdf/2005.11034.pdf 代码地址:暂无 空间细节和上下文相关性是语义分割的两类关键信息.一般来说,空间细节最可能存在于浅层,而上下文关联最可 ...
- pytorch 三维点分类_用于RGBD语义分割的三维图神经网络(2017ICCV,已开源)
3D Graph Neural Networks for RGBD Semantic Segmentation(2017ICCV, citation:78) 开源地址:https://github.c ...
- ENet:一种用于实时语义分割的深层神经网络结构
摘要: 实时执行像素语义分割的能力在移动应用程序中至关重要.最近针对这一任务的深层神经网络的缺点是需要大量的浮点运算,并且运行时间长,这阻碍了其可用性.在本文中,我们提出了一种新的深度神经网络体系结构 ...
- CFPNet:用于实时语义分割的通道特征金字塔
论文地址:CFPNet: Channel-wise Feature Pyramid for Real-Time Semantic Segmentation 代码地址: https://github.c ...
最新文章
- 我拍了拍 Redis,没想到被移出了群聊......
- 一分钟理解softmax函数(超简单)
- Mybatis一级缓存,二级缓存的实现就是这么简单
- Lightweight Render Pipeline
- VMware Fusion 静态ip
- java mvc返回js_Java的学习(39)springboot
- 在JAVA语言程序中main_在Java程序main方法中,正确的参数是
- c语言支持默认参数吗,嵌入式C语言可以带“默认参数”的函数吗
- CentOS 7 Apache服务的安装与配置(转)
- Multi-thread提高C++性能的编程技术笔记:单线程内存池+测试代码
- Linux学习笔记 -- 日志管理
- 史上最详细金卡介绍以及金卡制作教程(附风暴数码CID转换码链接)
- PS的钢笔,路径,选取,描边(虚线)
- oracle 11g crsd ocssd,[Oracle 11g r2(11.2.0.4.0)]集群守护进程gipc介绍
- Ubuntu16.04建立共享文件夹
- Highcharts 写 venn图 (韦恩图),以及解决项目中venn的报错
- 从零开始的单片机学习(四)
- NLP中文分词工具比较
- 什么是长尾词,长尾关键词的SEO秘密有哪些?
- 关于填报《国家自然科学基金资助项目结题报告》的说明
热门文章
- mac os 使用记录
- Codeforces Round #419 Div. 1
- python-16: time 模块 之一
- spring教程(一):简单实现(转)
- tarjan 割点 割边
- Java学习笔记--反射API
- IOS 拉伸图片(封装)
- java.lang.IllegalStateException: No output folder
- 类__slots__与__dict__用法
- hibernate Restrictions 用法