空洞卷积


链接:https://www.zhihu.com/question/54149221
 

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

一个简单的例子,[动态图来源:vdumoulin/conv_arithmetic]:

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

 

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

 

不过光理解他的工作原理还是远远不够的,要充分理解这个概念我们得重新审视卷积本身,并去了解他背后的设计直觉。以下主要讨论 dilated convolution 在语义分割 (semantic segmentation) 的应用。

重新思考卷积: Rethinking Convolution

在赢得其中一届ImageNet比赛里VGG网络的文章中,他最大的贡献并不是VGG网络本身,而是他对于卷积叠加的一个巧妙观察。

This (stack of three 3 × 3 conv layers) can be seen as imposing a regularisation on the 7 × 7 conv. filters, forcing them to have a decomposition through the 3 × 3 filters (with non-linearity injected in between).

这里意思是 7 x 7 的卷积层的正则等效于 3 个 3 x 3 的卷积层的叠加。而这样的设计不仅可以大幅度的减少参数,其本身带有正则性质的 convolution map 能够更容易学一个 generlisable, expressive feature space。这也是现在绝大部分基于卷积的深层网络都在用小卷积核的原因。

然而 Deep CNN 对于其他任务还有一些致命性的缺陷。较为著名的是 up-sampling 和 pooling layer 的设计。这个在 Hinton 的演讲里也一直提到过。

主要问题有:

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

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

空洞卷积的拯救之路:Dilated Convolution to the Rescue

题主提到的这篇文章 MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS 可能(?) 是第一篇尝试用 dilated convolution 做语义分割的文章。后续图森组和 Google Brain 都对于 dilated convolution 有着更细节的讨论,推荐阅读:Understanding Convolution for Semantic Segmentation Rethinking Atrous Convolution for Semantic Image Segmentation

对于 dilated convolution, 我们已经可以发现他的优点,即内部数据结构的保留和避免使用 down-sampling 这样的特性。但是完全基于 dilated convolution 的结构如何设计则是一个新的问题。

潜在问题 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] 循环结构。

第三个特性是,我们需要满足一下这个式子: M_i=\max[M_{i+1}-2r_i,M_{i+1}-2(M_{i+1}-r_i),r_i]

其中 r_i 是 i 层的 dilation rate 而 M_i 是指在 i 层的最大dilation rate,那么假设总共有n层的话,默认 M_n=r_n 。假设我们应用于 kernel 为 k x k 的话,我们的目标则是 M_2 \leq 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 如何实现,如何设计,跟分割或其他应用的关联是我们可以重新需要考虑的问题。

标题:Neural Machine Translation in Linear Time

来源:arxiv

作者:deepmind

问题:提出了新型的source--target网络结构ByteNet,并通过两个扩张卷积神经网络(Dilated Convolution)堆叠实现,完成了机器翻译任务,并且将时间复杂度控制在线性范围。

相关工作:

1、扩张卷积神经网络

Dilated Convolution network最近很火,2016ICLR上才被提出,本身是用在图像分割领域,但立马被deepmind拿来应用到语音(WaveNet)和nlp领域,且均取得不错的效果。

Dilated Convolution的产生是为了解决全卷积网络(FCN)在图像分割领域的问题,图像分割需要输入和输出在像素的shape保持一致,但由于池化层的存在导致FCN需要通过上采样扩增size,但是上采样并不能将丢失的信息无损的找回所以存在不足。

Dilated Convolution想法很粗暴,既然池化的下采样操作会带来信息损失,那么就把池化层去掉。但是池化层去掉随之带来的是网络各层的感受野变小,这样会降低整个模型的预测精度。Dilated convolution的主要贡献就是,如何在去掉池化下采样操作的同时,而不降低网络的感受野。

 

3\times 3的卷积核为例,传统卷积核在做卷积操作时,是将卷积核与输入张量中“连续”的3\times 3的patch逐点相乘再求和(如上图a,红色圆点为卷积核对应的输入“像素”,绿色为其在原输入中的感知野)。而dilated convolution中的卷积核则是将输入张量的3\times 3patch隔一定的像素进行卷积运算。如上图b所示,在去掉一层池化层后,需要在去掉的池化层后将传统卷积层换做一个“dilation=2”的dilated convolution层,此时卷积核将输入张量每隔一个“像素”的位置作为输入patch进行卷积计算,可以发现这时对应到原输入的感知野已经扩大(dilate)为7\times 7;同理,如果再去掉一个池化层,就要将其之后的卷积层换成“dilation=4”的dilated convolution层,如上图c所示。这样一来,即使去掉池化层也能保证网络的感受野,从而确保图像语义分割的精度。

 

上图是WaveNet里的Dilated Convolution的示意图,理解起来更容易,卷积的的输入像素的间距由1-2-4-8,虽然没有池化层,但是随着层数越深覆盖的原始输入信息依旧在增加。

 

主要内容:

(1)网络结构ByteNet

ByteNet的核心分别是蓝色网络为target network, 红色网络为source network,相比其他encode-decode网络的区别在于,不再仅仅通过一个encode vector或者attention vector连接两个网络,而是将source network每一个输出都作为target vector对应位置上的输入。

上图示例是以Dilated Convolution实现,实际本文提出的ByteNet的两个部分target network和source network均可以用RNN实现。

本文就一个公式,理解起来就是当前预测词的输出概率由已预测词和当前token的source network encode vector决定。

以下为本文的几个关键知识点

(2)Dynamic Unfolding

target网络的结束标志是以生成结束符EOS为标志,但由网络结构可以看到,target network的当前token的source vector输入长度和source input length是一致,由于翻译任务的长度存在变化,所以EOS出现位置可能长于source input length,因此byteNet当超出source input length时,target network的输出只有已解码词决定。

(3)Masked One-dimensional Convolutions

为了避免在解决的时候卷积过程引入为解码词信息,引入Masked One-dimensional Convolutions,即卷积核只与当前token之前的输入进行卷积操作。

(4)Residual Blocks

 

卷积网络使用残差卷积网络。残差卷积网络的特点就是卷积层的最终输出由卷积结果和输入相加而得,因而变相理解为每一层只拟合输入和输出的残差,因而得名残差网络

 

(5)Sub-Batch Normalization

batch normalization是为了保持隐层的输出分布不发生漂移,而进行正规化操作,比如限定输出分布服从正态分布。好处是防止过拟合,防止梯度弥散,加大搜索跳出局部最小,保证源控件和目标空间一致(官方)

标准的batch normalization会平均所有token的隐层输出,这会导致在target网络中要将未来时间步的考虑进来操作,这不符合时序关系,所以作者对BN层进行了改进,提出了sub batch normalization,大致意思,batch normalization分为两步,在全部训练完之前只用batch个sample里当前token以前的结果,训练完后再用所有结果一起normalization操作。

(6)Bag of Character n-Grams

为了提高模型的信息容量,输入的每个token的vector不再单独是单独的词向量,而是相邻的n-grams的词的词向量求和。考虑到没有RNN模型特征融合的那么好而做的弥补吧。

实验结果:

(1)模型性能对比

作者还实验了将target network和source network分别用RNN实现,在上图实验列表里名为Recurrent ByteNet,注意和seq2seq的区别,seq2seq是取encode 网络的最后一个hidden state的输出作为decode网络的输入,而ByteNet中target network解码每个词的输入是由对应位置的source network输出决定,对应到RNN即source network第n个timeStep的输出作为target network第n个timestep的输入。

resolution preserving表示需要开辟额外空间保存历史信息。

Time代表时间复杂度,RP代表resolution preserving,Paths代表source网络从输入到输出的路径长度,Patht代表target网络从输入到输出的路径长度。Path越短代表反向传播的层数越少,网络越容易收敛,因为网络越浅越不容易出现梯度扩散。

(2)语言模型实验

1、任务:字符生成预测,数据集为Hutter Prize version of the Wikipedia dataset

 

ByteNet Decoder采用RNN实现,在交叉熵的评价指标上取得了state of the art结果。

 

2、任务:机器翻译。数据集为WMT English to German translation task

 

简评:

1、虽然Dilated Convolution在某些实验任务上取得了不错的实验结果,但不能否认带池化层的卷积网络的优势,池化层存在特征选择的意义保留了强特征,从下采样的角度出发它降低了卷积网络的计算复杂度,因为随着卷积层的增加,通道个数也是呈倍数增加,如果不对应降低feature map的size,随着层数越深计算量就会变得相当大。

2、但是没有池化层的Dilated Convolution使得卷积网络更适用于语音和文本,因为池化层的ave或者max操作要从全局出发,使得模型必须fix输入的规模。对于输入长度存在波动的语音和文本非常不方便。但是去掉池化层后使得前馈操作变得更灵活。

3、本文的网络结构相比传统的seq2seq模型,优势在于训练时source network和target network均可并行计算,在预测时source network可并行计算。另外它在长输入问题上的优势应该更大。该网络可能将目前局限于两三句输入的自动摘要任务扩展到一个文档的输入。
参考文献:

Fisher Yu and Vladlen Koltun. Multi-scale context aggregation by dilated convolutions. ICLR, 2016.

Oord A, Dieleman S, Zen H, et al. WaveNet: A generative model for raw audio[J]. arXiv preprint arXiv:1609.03499, 2016.

 

作者:谭旭
链接:https://www.zhihu.com/question/54149221/answer/192025860
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

简单讨论下dilated conv,中文可以叫做空洞卷积或者扩张卷积。首先介绍一下dilated conv诞生背景[4],再解释dilated conv操作本身,以及应用。

首先是诞生背景,在图像分割领域,图像输入到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损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在图像需要全局信息或者语音文本需要较长的sequence信息依赖的问题中,都能很好的应用dilated conv,比如图像分割[3]、语音合成WaveNet[2]、机器翻译ByteNet[1]中。简单贴下ByteNet和WaveNet用到的dilated conv结构,可以更形象的了解dilated conv本身。

ByteNet

WaveNet

 

下面再阐述下deconv和dilated conv的区别:

deconv的具体解释可参见如何理解深度学习中的deconvolution networks?,deconv的其中一个用途是做upsampling,即增大图像尺寸。而dilated conv并不是做upsampling,而是增大感受野。

可以形象的做个解释:

对于标准的k*k卷积操作,stride为s,分三种情况:

(1) s>1,即卷积的同时做了downsampling,卷积后图像尺寸减小;

(2) s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小;

(3) 0<s<1,fractionally strided convolution,相当于对图像做upsampling。比如s=0.5时,意味着在图像每个像素之间padding一个空白的像素后,stride改为1做卷积,得到的feature map尺寸增大一倍。

而dilated conv不是在像素之间padding空白的像素,而是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。

当然将普通的卷积stride步长设为大于1,也会达到增加感受野的效果,但是stride大于1就会导致downsampling,图像尺寸变小。大家可以从以上理解到deconv,dilated conv,pooling/downsampling,upsampling之间的联系与区别,欢迎留言沟通交流。

 

[1] Kalchbrenner, Nal, et al. "Neural machine translation in linear time." arXiv preprint arXiv:1610.10099 (2016).

[2] Oord, Aaron van den, et al. "Wavenet: A generative model for raw audio." arXiv preprint arXiv:1609.03499 (2016).

[3] Long J, Shelhamer E, Darrell T, et al. Fully convolutional networks for semantic segmentation[C]. Computer Vision and Pattern Recognition, 2015.

[4] Yu, Fisher, and Vladlen Koltun. "Multi-scale context aggregation by dilated convolutions." arXiv preprint arXiv:1511.07122 (2015).

preview

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值