dilated convolution(空洞卷积/扩张卷积)

论文链接:https://arxiv.org/abs/1511.07122
关于dilated conv的更细的讨论,推荐阅读:
Understanding Convolution for Semantic Segmentation
Rethinking Atrous Convolution for Semantic Image Segmentation

dilated conv诞生背景:
在图像分割中:
图像输入到CNN(如FCN)中,FCN先对图像进行conv再做pooling,降低图像尺寸的同时增大感受野;
但是图像分割预测是pixel方式的输出,所以需要upsampling(一般采用deconv反卷积操作)到原来的图像尺寸进行预测。
之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键:pooling减小图像尺寸增大感受野;upsampling扩大图像尺寸。但是在先减小再增大尺寸的过程中,会有信息损失掉,所以思考怎样不通过pooling也能有较大的感受野看到更多的信息——dilated conv

dilated/Atrous Convolution或者Convolution with holes:
在标准的卷积图中注入空洞,以此来增加感受野。相比于正常的卷积,空洞卷积多了一个hyper-parameter称之为dilation rate(指kernel的间隔数量,正常的卷积空洞率是1)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(a)3×3的1-dilated conv(和普通卷积一样)
(b)3×3的2-dilated conv(卷积核为3×3,空洞为1.即对一个7×7的patch,只有9个红点和3×3的卷积核发生卷积操作;或者理解为卷积核尺寸为7×7,图中只有9个红点的权重不为0)如果考虑到这个2-dilated conv的前一层是一个1-dilated conv的话,那么每个红点就是1-dilated的卷积输出,所以感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的conv
©3×3的4-dilated conv(逻辑同(b)).同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。
对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。

重新思考卷积
VGG网络的文章中提出了7×7的卷积层可以由3个3×3的卷积层叠加。这样可以减少参数,且本身带有正则性质的卷积图更容易学一个通用,表达性好的特征空间。(这是现在绝大部分基于卷积的深层网络都在用小卷积核的原因)。

但是Deep CNN对于其他任务存在一些缺陷。主要问题有:
1、Up-sampling/pooling layer(例如双线性插值)是确定性的(即不可学习)。
2、内部数据结构丢失,空间层级化信息丢失
3、小物体信息无法重建(若有4个pooling层,则任何小于2^4=16pixel的物体信息将理论上无法重建)
dilated convolution 的设计很好的避免了这些问题

dilated的好处:
不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在图像需要全局信息或者语音文本需要较长的sequence信息依赖的问题中,都能很好的应用dilated conv

空洞卷积的拯救之路:Dilated Convolution to the Rescue
潜在问题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)
第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。第二个特性是,我们将 dilation rate 设计成 锯齿状结构,例如 [1, 2, 5, 1, 2, 5] 循环结构。第三个特性是,我们需要满足一下这个式子:
在这里插入图片描述
其中ri是 i 层的 dilation rate 而Mi是指在 i 层的最大dilation rate,那么假设总共有n层的话,默认Mn=rn。假设我们应用于 kernel 为 k x k 的话,我们的目标则是M2≤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)
在处理多尺度物体分割时,我们通常会有以下几种方式来操作:
在这里插入图片描述
然仅仅(在一个卷积分支网络下)使用 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 如何实现,如何设计,跟分割或其他应用的关联是我们可以重新需要考虑的问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值