分享语义分割领域的一篇经典论文DeepLabv3,由谷歌发表于CVPR2017。开源代码地址:

  • Tensorflow版本:https://github.com/tensorflow/models/tree/master/research/deeplab
  • Pytorch版本:https://github.com/open-mmlab/mmsegmentation/tree/master/configs/deeplabv3

1.动机

在使用CNN处理图像分割任务时,有2个难点:

(1)若使用连续的池化操作或步长大于1的卷积操作来提取全局上下文特征,会丢失细节信息,从而影响图像分割效果。

(2)如何对不同尺寸的目标提取特征。

作者指出,使用空洞卷积能有效地解决上述2个问题。在使用空洞卷积时,作者增加了一些工程上的优化,并且对空洞卷积的串行、并行结构进行了实验,提出了DeepLabv3网络用于语义分割任务。

2.使用空洞卷积提取特征

空洞卷积的计算示意图如下:

图1

空洞卷积相当于对卷积核进行上采样操作,用rate控制上采样率,rate=1时的空洞卷积是普通卷积。通过控制rated的值,可以控制卷积操作的感受野。

空洞卷积并不增加可学习参数的情况,因此,使用空洞卷积时,仍然可以使用原始模型在ImageNet数据集上的预训练权重。

**定义output_stride为网络输入图像尺寸与输出feature map尺寸的比值。**在用于分类任务的CNN中,全连接层或全局池化层之前的feature map尺寸一般为输入图像尺寸的1/32,因此output_stirde=32。

若想让网络输出的feature map的output_stride=16,可以将原网络中最后一个下采样操作(比如池化或者步长为2的卷积)的步长设置为1,然后将后续的卷积替换为rate=2的空洞卷积。这样既可以让网络有比较大的输出feature map,还能保证足够大的感受野,同时仍可复用原模型中的权重。

3.空洞卷积的串联

图2

复制多次ResNet中的block4,将它们串联的网络后面,如图2(a)所示。在该结构中,每个block有3个3×33 \times 33×3卷积,除末尾的block以外,每个block中最后1个卷积的步长为2,这样的网络结构能够增加感受野,将整张图像的信息总结为尺寸很小的feature map。这种结构的缺点是丢失了细节信息

在图2(b)中,作者使用了空洞卷积,用空洞卷积来补偿不使用下采样导致的无法提取全局特征的问题。从Block3以后,每当需要进行一次下采样操作时,均通过让rate变为原来2倍的空洞卷积代替下采样操作。

Multi-Grid空洞卷积Block 为了进一步增加感受野,作者引入了Multi-Grid的概念。定义Multi_Grid =(r1,r2,r3)\text { Multi\_Grid }=\left(r_1, r_2, r_3\right) Multi_Grid =(r1​,r2​,r3​)为unit rate,每个Block中3个空洞卷积的rate为图2(b)中的rate值与Multi_Grid相乘。比如:若Multi_Grid =(1,2,4)\text { Multi\_Grid }=\left(1, 2, 4\right) Multi_Grid =(1,2,4),对于上图Block4中的3个卷积操作,rate分别为2⋅(1,2,4)=(2,4,8)2 \cdot(1,2,4)=(2,4,8)2⋅(1,2,4)=(2,4,8)。

4.空洞卷积的并联

图3

空洞卷积的并联结构(Atrous Spatial Pyramid Pooling,简称ASPP)是由论文《Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs》提出的。ASPP可以提取多个尺度的特征,以提高图像分割性能。

若想要进一步提取图像的全局上下文特征,不断增加空洞卷积的rate是不可取的,当rate很大时,会导致相当一部分权重作用于feature map的padding区域,这样降低了特征提取的效率。因此作者在原始ASPP的基础上,增加了1个额外的global average pooling(全局平均池化)操作,global average pooling的输出经过256通道的1×11 \times 11×1卷积和BN操作,将输出的feature map上采样至合适的尺寸,便于与ASPP中其他空洞卷积输出的feature map进行concat操作。

如图3所示,ASPP包含如下结构:

(1)1个1×11 \times 11×1卷积和3个3×33 \times 33×3的空洞卷积,rate的值分别是(6,12,18)(6,12,18)(6,12,18);

(2)global average pooling提取全局特征

ASPP的所有分支的输出feature map先进行concat,然后经过1×11 \times 11×1卷积和BN操作,最后再经过1个1×11 \times 11×1卷积输出分割结果。

此外,相比于原始的ASPP,作者在ASPP的卷积中加入了BN结构,以提高网络的分割性能。

5.实验结果

5.1 训练

以下为作者在PASCAL VOC2012分割数据集上的训练设置。

网络结构 以在ImageNet数据集上预训练过的ResNet为基础,增加额外的Block并使用空洞卷积。

学习率设置 使用poly学习率衰减策略,每次迭代的学习率是初始学习率乘以(1−iter max_iter )power \left(1-\frac{\text { iter }}{\text { max\_iter }}\right)^{\text {power }}(1− max_iter  iter ​)power ,power的值为0.9。

BN的学习 为了提高BN中参数的学习效果,需要令batch size大一些,因此刚开始训练时,令output_stride=16,减少网络的显存占用,以提高训练的batch size,这里batch size为16。当训练完30K次迭代后,固定BN的参数,令output_stride=8,此时网络中某些feature map的尺寸会大一些,因此会占用更多的显存。之所以要使用output_stride=8继续训练,是因为若使用output_stride=16一直训练,会导致网络的输出比较粗糙,会降低分割性能。需要特别指出的是,output_stride值为16到8的切换,是通过用空洞卷积代替下采样操作实现的,而空洞卷积只是在普通卷积的卷积核中增加0,因此仍然可以复用普通卷积的可学习参数,不会引入额外的可学习参数。

上采样网络输出 当output_stride=8时,上采样网络的输出结果,使其与ground truth的尺寸一致,然后再计算损失,这样可以最大限度地保留ground turth的细节;而不是对ground truth下采样使其与网络输出结果尺寸一致。

数据增强 在训练时使用了随机缩放、水平随机翻转进行数据增强。

5.2 结果

串联结构在PASCAL VOC2012验证集上的结果如下图所示(在训练时令output_stride=16)

图4

并联结构在PASCAL VOC2012验证集上的结果如下图所示(在训练时令output_stride=16)

图5

在OS=8且使用MS和Flip时,并联结构的性能(79.77%)高于串联结构(79.35%),因此作者使用并联结构与其他语义分割算法对比。

在训练时先令output_stride=16,然后改变output_stride的值为8,针对困难样本使用了bootstrapping方法,在PASCAL VOC2012测试集上的结果如下图所示。图中的DeepLabv3-JFT表示使用了ImageNet和JFT-300M这2个数据集的预训练权重。

图6

关于实验设置细节、消融实验以及在其他数据集测试的详细内容,请参考原文。

  • 如果你对计算机视觉领域的目标检测、跟踪、分割、轻量化神经网络、Transformer、3D视觉感知、人体姿态估计兴趣,欢迎关注公众号【CV51】

  • 欢迎关注我的个人主页,这里沉淀了计算机视觉多个领域的知识:https://www.yuque.com/cv_51

引用量超6000的语义分割经典论文DeepLabv3解读相关推荐

  1. 语义分割经典论文总结

    语义分割论文系列总结 1.0经典论文总结 1.1 FCN 1.2 Parse-Net 1.3 U-Net 1.4 Deeplab系列(v1,v2,v3,v3+) 1.5 Non-local 在语义分割 ...

  2. 推荐系统 | 引用量超过1000的52篇经典论文

    52篇论文已下载打包,微信扫码,备注"52篇论文",即可免费领取 注:数字表示引用量 1012-Ontological user profiling in recommender ...

  3. 综述 | 语义分割经典网络及轻量化模型盘点

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 基于图像的语义分割又被理解为密集的像素预测,即将每个像素进行分类, ...

  4. 一文看尽9篇语义分割最新论文(GPSNet/Graph-FCN/HMANet等)

    前言 恰逢 2020年,本文再次更新近期值得关注的最新语义分割论文.这次分享的paper将同步推送到 github上,欢迎大家 star/fork(点击阅读原文,也可直接访问): https://gi ...

  5. 【语义分割】论文代码资料汇总

    语义分割的资料总结 1.Github一份丰富的论文清单 from hangdong1587,这份清单中包含了一下几个部分: 语义分割基础论文 基于多边形的分割 基于U-net的分割 前景分割 语义分割 ...

  6. 语义分割系列论文 ParseNet

    语义分割系列论文 ParseNet 核心思想--Global Context 理论感受野的大小(Receptive Field) 实际感受野的大小 此文章如何扩大感受野? 疑点(读者可以忽略本节) 总 ...

  7. 干货 | 语义分割综述论文总结与推荐

    添加几篇 19-20 年的综述 Evolution of Image Segmentation using Deep Convolutional Neural Network: A Survey 这篇 ...

  8. 【损失函数合集】超详细的语义分割中的Loss大盘点

    前言 前两天介绍了一下Contrastive Loss,Triplet Loss以及Center Loss.今天正好是周六,时间充分一点我就来大概盘点一下语义分割的常见Loss,希望能为大家训练语义分 ...

  9. 制作自己的segnet数据集_语义分割【论文解读】经典网络SegNet 值得仔细反复阅读...

    摘要: 提出了一种新颖而实用的深度全卷积神经网络结构用于语义像素分割称为SegNet.这个核心的可训练分割引擎包括一个编码器网络,一个相应的解码器网络,以及一个像素级的分类层.编码器网络的架构与VGG ...

最新文章

  1. 笔记 | PyTorch安装及入门教程
  2. 如何在一个背景图像上,做半透明的图。
  3. 【转】Usage of sendBroadcast()
  4. git remote: HTTP Basic: Access denied
  5. web 应用开发最佳实践之一:避免大型、复杂的布局和布局抖动
  6. python发邮件主机找不到_Python 使用QQ邮箱发邮件
  7. python 全部缩进一行_Python开发工具:缩进规则的使用
  8. Angular 导致公司损失数十亿美元!
  9. 嵌入式学习流程(参考一)
  10. 编写一个UNIX文件系统
  11. 【大数据实验2】hadoop配置、测试和实例
  12. html js打开一个新页面跳转,js页面跳转
  13. linux ubuntu18.04下载,正确下载Ubuntu 18.04.2 ISO的方法
  14. java对接银联商务扫码支付(银联商务扫码支付文档)
  15. 风过无痕 思念的回廊
  16. 分享一款基于aui框架的图文发布界面
  17. Unity3D之日常操作-Aspose.Words.dll-U3D读写word_文本内容写入
  18. ubuntu 16.04 开机开启小键盘数字键
  19. 【诗词】八声甘州·摘青梅荐酒 (羡青山有思,白鹤忘机。)
  20. 使用Linux命令删除Android的一些垃圾文件

热门文章

  1. Springboot中new出来的实例中含有@Autowired注入时的Spring Bean为NULL
  2. 热图(Heatmap)绘制(matplotlib与seaborn)
  3. calipso是什么意思_fub是什么意思_fub怎么读_fub翻译_用法_发音_词组_同反义词_小而胖的人-新东方在线英语词典...
  4. Java——线程让步_yield()方法
  5. Photoshop——APP设计规范
  6. 如何挑选数字电源集成电路?
  7. 【生成PDF】Java如何根据前台Echarts图表生成PDF,并下载
  8. cmt obm odm 代工模式oem_作为经销商如果你不懂什么是OEM、ODM、OBM?代工、贴牌是什么?那就把这些记住!...
  9. 【Linux】新唐NUC977系统编译及烧写流程
  10. 软件工程学生考试系统