关注上方深度学习技术前沿”,选择“星标公众号”

资源干货,第一时间送达!

空洞卷积(Dilated Convolution)

简介

空洞卷积也叫扩张卷积或者膨胀卷积,简单来说就是在卷积核元素之间加入一些空格(零)来扩大卷积核的过程。

空洞卷积的简单原理。下图是常规卷积和空洞卷积的动图对比:

常规卷积

空洞卷积

假设以一个变量a来衡量空洞卷积的扩张系数,则加入空洞之后的实际卷积核尺寸与原始卷积核尺寸之间的关系:K = K + (k-1)(a-1)

其中k为原始卷积核大小,a为卷积扩张率(dilation rate),K为经过扩展后实际卷积核大小。除此之外,空洞卷积的卷积方式跟常规卷积一样。我们用一个扩展率a来表示卷积核扩张的程度。比如说a=1,2,4的时候卷积核核感受野如下图所示:

在这张图像中,3×3 的红点表示经过卷积后,输出图像是 3×3 像素。尽管所有这三个扩张卷积的输出都是同一尺寸,但模型观察到的感受野有很大的不同。当a=1,原始卷积核size为3 * 3,就是常规卷积。a=2时,加入空洞之后的卷积核:size=3+(3-1) * (2-1)=5,对应的感受野可计算为:(2^(a+2))-1=7。a=3时,卷积核size可以变化到3+(3-1)(4-1)=9,感受野则增长到(2^(a+2))-1=15。有趣的是,与这些操作相关的参数的数量是相等的。我们「观察」更大的感受野不会有额外的成本。因此,扩张卷积可用于廉价地增大输出单元的感受野,而不会增大其核大小,这在多个扩张卷积彼此堆叠时尤其有效。

论文《Multi-scale context aggregation by dilated convolutions》的作者用多个扩张卷积层构建了一个网络,其中扩张率 a 每层都按指数增大。由此,有效的感受野大小随层而指数增长,而参数的数量仅线性增长。这篇论文中扩张卷积的作用是系统性地聚合多个比例的形境信息,而不丢失分辨率。这篇论文表明其提出的模块能够提升那时候(2016 年)的当前最佳形义分割系统的准确度。请参阅论文了解更多信息。

为什么要增大感受野?

这里涉及到语义分割的一些发展历程,之前FCN率先提出以全卷积方式来处理像素级别的分割任务时,包括后来奠定语义分割baseline地位的U-Net,网络结构中存在大量的池化层来进行下采样,大量使用池化层的结果就是损失掉了一些信息,在解码上采样重建分辨率的时候肯定会有影响。特别是对于多目标、小物体的语义分割问题,以U-Net为代表的分割模型一直存在着精度瓶颈的问题。而基于增大感受野的动机背景下就提出了以空洞卷积为重大创新的deeplab系列分割网络。如下图所示:

如何计算CNN的感受野

感受野(Receptive Field)是CNN中最重要的基础概念之一。深入理解感受野对于一些任务的网络结构设计和优化有着重要意义,比如语义分割模型的空洞卷积,其中就涉及到对感受野的深刻理解。

所谓感受野,是指输出特征图上某个像素对应到输入空间中的区域范围。所以感受野可以理解为特征图像素到输入区域的映射。先来回顾一个从输入到特征图的计算过程:

其中n_in为输入size,p为padding大小,f为卷积核size,s为卷积步长。假设输入大小为5 * 5,f=3 * 3,padding为1 * 1,卷积步长为2 * 2,那么输出特征图size根据公式可计算为3 * 3。如下图所示:

然后我们继续对3 * 3的特征图执行卷积,卷积参数同第一次卷积一样,可得输出特征图size为2 * 2。我们把输入、两次卷积过程和对应特征图放到一起看一下:

可以看到两次卷积的特征图分别对应到输入空间的感受野大小,第一次卷积对应关系如图中绿色线条所示,感受野大小为3 * 3,第二次卷积对应关系如图中黄色线条所示,感受野大小为7 * 7。所以关键问题是特征图和输入空间的对应关系中,感受野的大小是如何计算的?

下面我们给出感受野大小的计算公式:

其中RF_l+1为当前特征图对应的感受野大小,也就是我们要计算的目标感受野,RF_l为上一层特征图对应的感受野大小,f_l+1为当前卷积层卷积核大小,最后一项连乘项则表示之前卷积层的步长乘积。

根据感受野的计算公式我们来看上图中两次卷积的感受野计算过程:

原始输入size为5 * 5,第一层卷积核为3 * 3,输入步长为1,输入层初始化感受野为1 * 1,根据公式计算可得第一层卷积后的特征图对应的输入空间的感受野大小为1+(3-1) * 1=3。

第一层卷积输出特征图的感受野size为3,第二层卷积核size为3,卷积步长为2,则第二层的的感受野size计算为3+(3-1) * 2 * 1=7。所以我们可以看到当前层特征图的感受野大小对应到输入空间与前层的感受野和卷积步长以及当前层的卷积核大小密切相关。当步长大于1时,感受野的大小会呈现指数级增长。

注意:感受野还有一点比较重要的是,对于一个卷积特征图而言,感受野中每个像素并不是同等重要的,越接近感受野中间的像素相对而言就越重要。

空洞卷积主要有三个作用:

  1. 扩大感受野。但需要明确一点,池化也可以扩大感受野,但空间分辨率降低了,相比之下,空洞卷积可以在扩大感受野的同时不丢失分辨率,且保持像素的相对空间位置不变。简单而言,空洞卷积可以同时控制感受野和分辨率。

  2. 获取多尺度上下文信息。当多个带有不同dilation rate的空洞卷积核叠加时,不同的感受野会带来多尺度信息,这对于分割任务是非常重要的。

  3. 可以降低计算量,不需要引入额外的参数,如上图空洞卷积示意图所示,实际卷积时只有带有红点的元素真正进行计算。

重磅!深度学习技术前沿-微信群已成立

扫码添加群助手可申请加入 深度学习技术前沿 微信群,旨在交流深度学习方面的学习、科研、工程项目等内容,并且还会在群中分享求职内推资料。后续还会根据大家的研究方向细分技术交流群。

一定要备注:研究方向+学校/公司+姓名(如图像分割+浙大+李四),按照格式备注,可更快被通过且邀请进群。

???? 长按识别,即可加群

???? 长按识别,即可关注

【必懂概念】一文详解什么是空洞卷积?相关推荐

  1. 一文详解决策树算法模型

    AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...

  2. 一文详解自动驾驶的动态驾驶任务(DDT) | 自动驾驶系列

    文章版权所有,未经授权请勿转载或使用 本系列上篇文章<一文详解自动驾驶的运行设计域(ODD)>解读了什么是自动驾驶ODD,本篇文章依据SAE J3016详细解读自动驾驶DDT.DDT fa ...

  3. ELKElasticSearch5.1基础概念及配置文件详解【转】

    1. 配置文件 elasticsearch/elasticsearch.yml 主配置文件 elasticsearch/jvm.options jvm参数配置文件 elasticsearch/log4 ...

  4. OpenCV-Python实战(12)——一文详解AR增强现实

    OpenCV-Python实战(12)--一文详解AR增强现实 0. 前言 1. 增强现实简介 2. 基于无标记的增强现实 2.1 特征检测 2.2 特征匹配 2.3 利用特征匹配和单应性计算以查找对 ...

  5. 从基础到进阶,一文详解RocketMQ事务消息,看完不会跪键盘

    本文转载自:从基础到进阶,一文详解RocketMQ事务消息,看完不会跪键盘 事务消息是RocketMQ提供的非常重要的一个特性,在4.x版本之后开源,可以利用事务消息轻松地实现分布式事务.本文对Roc ...

  6. 一文详解 ChatGPT:背后的技术,数据,未来发展

    文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链(Chain of Thought,COT) 基于人类反馈的强化 ...

  7. Storm概念、原理详解及其应用(一)BaseStorm

    本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordc ...

  8. 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列 1

    一文详解自动驾驶的运行设计域(ODD)| \n 自动驾驶系列 2021年4月30日,SAE发布了第四版J3016<驾驶自动化分级>,这是即2014年1月16日.2016年9月30日.201 ...

  9. 云服务器CentOS8.2安装部署Docker一文详解

    目录 前言 一.Docker简介 二.安装部署以及测试Docker 1.安装Docker 1.1查看系统版本 1.2移除旧依赖 1.3安装方法 1.4设置存储库 ​编辑 1.5安装Docker引擎 1 ...

最新文章

  1. echarts中legend如何换行
  2. Linux环境下安装 JDK1.8 和 Tomcat8
  3. apollo报:系统出错,请重试或联系系统负责人
  4. 使用SAFE栈进行F# Web开发
  5. 重载跟重写--笔记2
  6. MySQL命令行导入导出sql文件
  7. Java关键字this与super的用法详解
  8. Atitit 企业文化之道 ---假日文化 attilax总结
  9. CSS 字体 font-family属性
  10. 手机号码归属地查询接口大全(七种)
  11. html页面导出word文档
  12. iPhone各种机型尺寸、屏幕分辨率
  13. 《Unity3d实战就业路线》
  14. 增量学习二十年发展如何?用一篇综述看懂增量学习
  15. Linux下安装GitHub
  16. 如何搭建一个自己的音乐播放器-使用腾讯云轻量应用服务器搭建YesPlayMusic网易云播放器
  17. 3-10秒极速制作炫酷词云图-MagicCloud词云图一键制作软件简化版
  18. jar 打包java文件
  19. hashCode()方法是什么,hashCode相同代表什么
  20. 深度挖掘:FIashGet下载隐藏链接[转]

热门文章

  1. 查询整个数据库中某个特定值所在的表和字段的方法
  2. WinWordControl控件的使用注意
  3. 华3r2900g3服务器配置信息,H3C UniServer R2900 G3
  4. 图像处理基础知识及matlab,MATLAB图像处理基础知识
  5. python count()方法
  6. smoteenn算法_类别不平衡问题之SMOTE算法(Python imblearn极简实现)
  7. list.sort(reverse=true) 和 list.reverse() 排序上有什么区别吗?
  8. transforms.compose()
  9. numpy.where用法详解,对2维数组判断解释的比较清楚的
  10. 指定eclipse启动使用的jdk,路径有空格的情况