• 如何理解空洞卷积(dilated convolution)
  • 『计算机视觉』空洞卷积

1. Background    
  文章原文可在作者主页阅览:Fisher Yu主页 
  这篇文章实则是作者将何恺明(Kaiming He)博士残差网络Deep Residual Networks与其之前研究的Dilated Convolution相结合的结果。前者是发表于CVPR2016上的《Deep Residual Learning for Image Recognition》的成果,后者是发表于ICLR2016会议上的《Multi-Scale Context Aggregation by Dilated Convolutions》的理论研究。论文链接分别是: 
  Deep Residual Learning for Image Recognition 
  Multi-Scale Context Aggregation by Dilated Convolutions 
2. Introduction  
  作者先提出,之前的卷积神经网络(Convolutional Networks)都是通过不断降低图像精度,直到图像被一个仅保留微弱空间信息的特征map表示(一般最后卷积层输出仅为7×7),最后通过计算类别概率来分类图像。这样情况下,尽管前面卷积网络做的很好,但是整个网络却不能获取一个十分精确的结果,例如一个很小的目标对解析图片信息十分重要,但是却被前面卷积网络因为过多降维和其体积很小而直接忽略掉了。 
  此外,图像分类的深度网络大多数还作为其他需要更多详细场景理解的任务的预训练模型,而很高的空间分辨率损失对这些任务而言是非常不利的。 
  所以卷积神经网络应用在图像分类中,维护图片空间一定的分辨率是一个很重要的任务。现有算法有以下的做法: 
  up-convolutions,skip connections 和 other post-hoc measures。 
  但是上面的方法会造成图片变形,所以本文提出使用Dilated Convolutions方法来解决这个问题。Dilated Convolutions的好处就是既能保持原有网络的感受野(Receptive Field),同时又不会损失图像空间的分辨率(224×224输入的最后卷积层输出特征map是28×28)。 
3. Dilated Convolutions  
  Dilated Convolutions是为了在我们不使用池化层和striding前提下,能够保证与原深度网络诸如FCN每一层同样的感受野,同时图像输出的特征map尺寸不会变小。 
  实现过程如下图(摘自论文《Multi-Scale Context Aggregation by Dilated Convolutions》):

  上面实现过程总结来说就是,假设网络输入为28×28,我们使用padding和stride=1的卷积,卷积filter尺寸都是3×3。 
  (a) 输入28*28基础上3×3卷积,也就是经过1-dilated处理,感受野为 3×3,该操作和其他正常卷积操作一样,没有区别; 
  (b) 在(a)输出的基础上进行 3×3卷积,经过2-dilated处理,也就是隔一个像素进行与filter点乘最后相加作为中心像素的特征值,所以感受野变为 7×7; 
  (c) 在(b)的输出基础上进行 3×3卷积,经过4-dilated处理,也就是隔三个像素进行预filter点乘最后相加作为中心像素的特征值,所以感受野变为 15×15; 
  整个感受野的变化如上图绿色区域所示。并且我们看出,由于filter卷积过程stride=1以及依靠padding,最后每层输出的特征map尺寸都依旧保持为28×28,和原图同样的大小。但是我们可以看到,网络无需借助池化层也能增大后续网络的感受野。 
  总结来说,Dilated Convolution可以不降低特征map的尺寸而增大卷积感受野。而之前例如FCN使用pooling下采样来增大感受野,但随后又不得不通过Deconvolution或者upsampling来增大特征map尺寸,这样先减后增的操作会让图片特征损失很多信息。 
4. Dilated Residual Networks  
  好了,有了上面Dilated Convolutions的理解,我们对于这种扩张卷积思想(暂且称谓它为扩张卷积)如何应用到残差网络就很清晰了。实际上,我要指出,扩张卷积可以应用到任何CNN上,从而达到保护网络的空间分辨率。至于作者为什么应用和撰写将其扩展到残差网络,自然是因为残差网络是当前表现最好的网络之一。 
  原始的残差网络卷积层是经过了5次striding处理达到降采样的目的,如下图,每一种颜色对应同一尺度大小的特征map输出。(图片摘自文章《Deep Residual Learning for Image Recognition》,仅显示网络部分结构)

  输出的特征也就是发生了5次尺度的变化,所以结果对于224×224分辨率输入,最后卷积层输出为7×7。每一层卷积忽略bias不写的算法表达式如下:

  但是最终特征map输出仅为7×7,最直接增加特征map分辨率的方法就是直接移除层间的subsampling(striding)操作,但是这样操作不能达到原网络每一层同一感受野,显然为了高分辨率而降低感受野是非常不可取的行为。这里就体现了扩张卷积的优点了,就是保持原有网络的感受野并且还能提高图片空间分辨率。 
  这里由于前面三种类型层()对原始输入进行了总共8倍的降采样,28×28分辨率足够识别图片场景的结构,并且保存了大多数的图片信息去帮助我们正确解析原始图像的像素级信息。 
  所以本文是在前三层网络输出28×28特征map之后改变原始网络结构(即改变)。前后变化如下图:

  首先作者移除这两层中striding操作,然后对分别进行2-dilated和4-dilated convolutions操作,如下:

  原始ResNet中两层网络分辨率分别相对于输出降了2倍和4倍,也就是从28×28降到了14×14和7×7。但是经过扩张卷积操作特征map的尺度没有发生任何改变,并且感受野和原ResNet对应层一样。最终DRN的输出为28×28。 
5. 图像分类和目标标定  
  图像分类和目标标定在经过上面卷积操作得到特征map之后,分别进行下面的最后处理:

  对于图像分类,操作和ResNet中一样,进行global average pooling,然后再经过1×1×n卷积得到最终n类得分,从而判断图片中目标的分类。 
  而对于Localization预测,作者直接对(28×28)输出进行1×1×n的卷积来替代global average pooling操作。这样每一类包含一张对应激活的预测map。对于map中每个像素标签,表示这个像素属于该类目标的概率。 
  DRNs时为了图像分类而设计的网络,同时能够输出高分辨率的激活maps。实验表明,DRNs在图像分类上比原始ResNet表现要出色。此外,DRNs可以直接由输入而生成高分辨率的输出maps,其中无需对其增加任何其他层,无需多余参数和再训练模型从而很好的预测目标位置。 
6. Degridding 

  但是从上图第三列我们会发现,最终输出maps会产生很差的网格状态(gridding artifacts)。作者主要通过Removing max pooling和Adding layers等操作一定程度上改善了最终输出结果。最终三种类型网络格局如下:

7. Experiments  
  图像分类实验结果如下表,效果比原始ResNet要好。

  目标位置预测实验结果如下图,效果比原始ResNet也要好。

补充:空洞卷积

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

Standard Convolution with a 3 x 3 kernel (and padding)

Dilated Convolution with a 3 x 3 kernel and dilation rate 2

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),(c)图是4-dilated conv操作,同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。

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

空洞卷积存在的问题

潜在问题 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 网络的关键。

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

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

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

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

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

其中 是 i 层的 dilation rate 而 是指在 i 层的最大dilation rate,那么假设总共有n层的话,默认 。假设我们应用于 kernel 为 k x k 的话,我们的目标则是,这样我们至少可以用 dilation rate 1 即 standard convolution 的方式来覆盖掉所有洞。

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

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

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

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

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

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

image

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

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

总结

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

推荐阅读

图森组和 Google Brain 都对于 dilated convolution 有着更细节的讨论,推荐阅读:

  • Understanding Convolution for Semantic Segmentation
  • Rethinking Atrous Convolution for Semantic Image Segmentation

参考

空洞卷积

Dilated Residual Networks相关推荐

  1. 语义分割--Dilated Residual Networks 之转载

    Dilated Residual Networks CVPR2017 http://vladlen.info/publications/dilated-residual-networks/ 这里转载了 ...

  2. 语义分割--Dilated Residual Networks

    DRN:Dilated Residual Networks 收录:CVPR2017(IEEE Conference on Computer Vision and Pattern Recognition ...

  3. DRN:Dilated Residual Networks(论文解读十四)

    Title:Dilated Residual Networks From:CVPR2017 Note data:2019/06/12 Abstract:提出一种有利于分类任务的扩张残差网络DRN. C ...

  4. 论文笔记——Dilated Residual Networks(DRN)

    论文下载: https://arxiv.org/pdf/1705.09914.pdf 论文代码: http://vladlen.info/publications/dilated-residual-n ...

  5. 语义分割--Full-Resolution Residual Networks for Semantic Segmentation in Street Scenes

    Full-Resolution Residual Networks for Semantic Segmentation in Street Scenes CVPR2017 Theano/Lasagne ...

  6. Identity Mappings in Deep Residual Networks

    论文地址:Identity Mappings in Deep Residual Networks 译文地址:http://blog.csdn.net/wspba/article/details/607 ...

  7. Residual Networks

    本文介绍一下2015 ImageNet中分类任务的冠军--MSRA何凯明团队的Residual Networks.实际上,MSRA是今年Imagenet的大赢家,不单在分类任务,MSRA还用resid ...

  8. 残差网络(Residual Networks, ResNets)

    1. 什么是残差(residual)? "残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.""如果回归模型正确的话, 我们可以将残差看作误差的观测值." ...

  9. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 2 Residual Networks

    吴恩达deeplearning.ai课程作业,自己写的答案. 补充说明: 1. 评论中总有人问为什么直接复制这些notebook运行不了?请不要直接复制粘贴,不可能运行通过的,这个只是notebook ...

最新文章

  1. 科普丨机器学习和人类学习的区别到底是什么?
  2. 执行phpize Cannot find config.m4
  3. ArcGIS Engine 开发中用到的一些命名空间和类
  4. CRC生成多项式应该怎样定
  5. 【收藏】误删idea 的.iml文件后的处理方法
  6. python博客开发教程_Django 博客开发教程 12 - 评论
  7. 计算火车运行时间(pta)
  8. WordPress程序备受喜爱的原因:十八般武艺
  9. python文件传输模块_[宜配屋]听图阁 - python 使用poster模块进行http方式的文件传输到服务器的方法...
  10. FPGA复位激励编写(方法三)
  11. CodeForces - 808B Average Sleep Time
  12. grub.conf解析
  13. CarMaker与NS3联合仿真平台--安装
  14. 飞机大战java实训报告_java飞机大战实训报告.docx
  15. S7-1200做智能IO设备
  16. STM32F103实现CMSIS-DAP
  17. excel不能复制粘贴怎么回事
  18. Python4班平均成绩统计_郑州十一中2020届高考成绩简析(含新疆内高班)
  19. 计算机主板电池拆卸,台式机主板电池怎么拆
  20. css div颜色渐变效果

热门文章

  1. 计算机无法打开这个应用,win10照片应用打不开提示“无法打开这应用”如何解决...
  2. 王者荣耀 -- 上单及装备
  3. not within a switch statement_【实用教程】Switch无法登录关联任天堂账号怎么办
  4. RRC协议学习—系统信息(SI)
  5. 【资源分享】一个超级方便的看电子书方法推荐
  6. 苹果春季发布会看点汇总
  7. 拿到外卖后秒退单,一连12天吃霸王餐的女子栽了!
  8. LinkedList面试要点总结
  9. 能骑能健身的折叠电动车,短途出行新利器,五轮健身电踏车D1 Pro体验
  10. ChaosBlade:混沌工程简介(一)