1、简介

Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。


Deep CNN 对于其他任务还有一些致命性的缺陷。较为著名的是 up-sampling 和 pooling layer 的设计。
主要问题有:

  • Up-sampling / pooling layer (e.g. bilinear interpolation) is
    deterministic. (参数不可学习)
  • 内部数据结构丢失;空间层级化信息丢失。
  • 小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。)

在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就良好的避免了这些问题。

在图像分割领域,图像输入到CNN(典型的网络比如FCN[3])中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积操作,deconv可参见知乎答案如何理解深度学习中的deconvolution networks?),之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺寸。在先减小再增大尺寸的过程中,肯定有一些信息损失掉了,那么能不能设计一种新的操作,不通过pooling也能有较大的感受野看到更多的信息呢?答案就是dilated conv。

下面看一下dilated conv原始论文[4]中的示意图:

(a)图对应3x3的1-dilated conv,和普通的卷积操作一样,
(b)图对应3x3的2-dilated conv,实际的卷积kernel size还是3x3,但是空洞为1,也就是对于一个7x7的图像patch,只有9个红色的点和3x3的kernel发生卷积操作,其余的点略过。也可以理解为kernel的size为7x7,但是只有图中的9个点的权重不为0,其余都为0。 可以看到虽然kernel size只有3x3,但是这个卷积的感受野已经增大到了7x7(如果考虑到这个2-dilated conv的前一层是一个1-dilated conv的话,那么每个红点就是1-dilated的卷积输出,所以感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的conv)
©图是4-dilated conv操作,同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。

dilated的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。

2、空洞卷积存在的问题

潜在问题 1:The Gridding Effect

假设我们仅仅多次叠加 dilation rate 2 的 3 x 3 kernel 的话,则会出现这个问题:

我们发现我们的 kernel 并不连续,也就是并不是所有的 pixel 都用来计算了,因此这里将信息看做 checker-board 的方式会损失信息的连续性。这对 pixel-level dense prediction 的任务来说是致命的。

潜在问题 2:Long-ranged information might be not relevant.

我们从 dilated convolution 的设计背景来看就能推测出这样的设计是用来获取 long-ranged information。然而光采用大 dilation rate 的信息或许只对一些大物体分割有效果,而对小物体来说可能则有弊无利了。如何同时处理不同大小的物体的关系,则是设计好 dilated convolution 网络的关键。

3、通向标准化设计:Hybrid Dilated Convolution (HDC)

对于上个 section 里提到的几个问题,图森组的文章对其提出了较好的解决的方法。他们设计了一个称之为 HDC 的设计结构。

第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。

第二个特性是,我们将 dilation rate 设计成锯齿状结构,例如 [1, 2, 5, 1, 2, 5] 循环结构。

第三个特性是,我们需要满足一下这个式子:


一个简单的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案)

而这样的锯齿状本身的性质就比较好的来同时满足小物体大物体的分割要求(小 dilation rate 来关心近距离信息,大 dilation rate 来关心远距离信息)。

这样我们的卷积依然是连续的也就依然能满足VGG组观察的结论,大卷积是由小卷积的 regularisation 的 叠加。

以下的对比实验可以明显看出,一个良好设计的 dilated convolution 网络能够有效避免 gridding effect.

4、多尺度分割的另类解:Atrous Spatial Pyramid Pooling (ASPP)

在处理多尺度物体分割时,我们通常会有以下几种方式来操作:

然仅仅(在一个卷积分支网络下)使用 dilated convolution 去抓取多尺度物体是一个不正统的方法。比方说,我们用一个 HDC 的方法来获取一个大(近)车辆的信息,然而对于一个小(远)车辆的信息都不再受用。假设我们再去用小 dilated convolution 的方法重新获取小车辆的信息,则这么做非常的冗余。

基于港中文和商汤组的 PSPNet 里的 Pooling module (其网络同样获得当年的SOTA结果),ASPP 则在网络 decoder 上对于不同尺度上用不同大小的 dilation rate 来抓去多尺度信息,每个尺度则为一个独立的分支,在网络最后把他合并起来再接一个卷积层输出预测 label。这样的设计则有效避免了在 encoder 上冗余的信息的获取,直接关注与物体之间之内的相关性。

5、总结

Dilated Convolution 个人认为想法简单,直接且优雅,并取得了相当不错的效果提升。他起源于语义分割,大部分文章也用于语义分割,具体能否对其他应用有价值姑且还不知道,但确实是一个不错的探究方向。有另外的答主提到WaveNet, ByteNet 也用到了 dilated convolution 确实是一个很有趣的发现,因为本身 sequence-to-sequence learning 也是一个需要关注多尺度关系的问题。则在 sequence-to-sequence learning 如何实现,如何设计,跟分割或其他应用的关联是我们可以重新需要考虑的问题。

空洞卷积(dilated convolution)理解相关推荐

  1. 膨胀卷积(空洞卷积 dilated convolution)

    学习的B站大佬的视频大部分图片来自于课中,文章结尾有大佬视频链接,以及阅读<深度学习之pytorch物体检测实战>,刚开始学习可能有些错误,希望大佬指正 1.空洞卷积了解 空洞卷积最初是为 ...

  2. casual Convolution因果卷积、空洞卷积dilated convolution、Hybrid Dilated Convolution (HDC)

    1.因果卷积 2.空洞因果卷积 3.HDC https://blog.csdn.net/qq_26369907/article/details/97624028 https://blog.csdn.n ...

  3. 【扩张卷积or空洞卷积】如何理解Dilated Convolutions(空洞卷积)

    文章来源:https://blog.csdn.net/alxe_made/article/details/88594550 1. 扩张卷积的提出 Multi-Scale Context Aggrega ...

  4. 总结-空洞卷积(Dilated/Atrous Convolution)、gridding问题以及解决方案、训练技巧BN和PReLU、CReLU

    这里有个可视化.直观的图:https://github.com/vdumoulin/conv_arithmetic https://zhuanlan.zhihu.com/p/50369448 http ...

  5. 膨胀卷积dilated convolution 相关

    [时间]2019.03.10 [题目]膨胀卷积dilated convolution 相关及keras实现 1.Dilated Convolution 2.Dilated Convolutions 空 ...

  6. 如何理解扩张卷积(dilated convolution)

    原理 扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(reception field).相比原来的正常卷积操作,扩张 ...

  7. 深度学习之空洞卷积(Dilated/Atrous Convolution)

    空洞卷积 Convolution with holes 是在标准的卷积映射(convolution map )里注入空洞,以此来增加感受野( reception field),捕获多尺度上下文信息. ...

  8. 对Dilated Convolution理解

    "微信公众号" 本文同步更新在我的微信公众号里,地址:https://mp.weixin.qq.com/s/erRlLajvOYmwcfZApNOzIw 本文同步更新在我的知乎专栏 ...

  9. 空洞卷积(Dilated Convolutions)

    在深度学习中,我们常见的就是卷积神经网络.这篇博客来给大家介绍一下空洞卷积跟普通卷积的区别. 空洞卷积的应用处:空洞卷积(dilated convolution)是针对图像语义分割问题中下采样会降低图 ...

最新文章

  1. 大一就会这么多,还在问有没有前途? | 每日趣闻
  2. JavaScript常用代码
  3. cpio.gz文件解压方法
  4. matlab特征点数量,特征点检测效果评估(matlab代码)
  5. 使用 .NET CLI 构建项目脚手架
  6. MacOS安装pip失败,提示:SyntaxError: invalid syntax
  7. JAVA 程序执行进行计时,用于验证程序执行的时间
  8. angularJs关于指令的一些冷门属性
  9. Cadence PCB SI
  10. ORA-39181: Only partial table data may be exported due to fine grain access control on OE.PURCHAS
  11. mysql跳过安全_几年了,作为一个码农终于把MySQL日记看懂了!
  12. malware analysis、Sandbox Principles、Design Implementation
  13. mysql systemctl开机启动_Linux 开机启动项命令:chkconfig 和 systemctl
  14. SpringBoot中是如何创建WebServer的?
  15. C++11常见编译与链接错误解决总结
  16. pm2 启动 Node + TS 项目
  17. Java 判断字符串仅包含半角字符
  18. UVALive4987(dp+贪心)
  19. 〖Python APP 自动化测试实战篇⑩〗- app自动化总结与展望
  20. springboot ruoyi

热门文章

  1. Thinkpad E550/E450/T450/T450S黑苹果制作
  2. 物联网协议-CoAP协议简介
  3. html源码画螺旋,1.6 绘制螺旋线 - HTML5 Canvas 实战
  4. linux oracle 失败怎么办,Linux开机报错unable to load selinux policy怎么办?
  5. Nice UI - Hacked.io
  6. Windows XP 上使用pyqt5 + pyinstaller
  7. 推土机距离_推土机工程师指南
  8. JAVA服务端的解码
  9. ios屏幕尺寸和分辨率
  10. Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)