【深度学习】卷积、反卷积以及dilated convolution

1. 卷积

卷积(Convolutional):卷积在图像处理领域被广泛的应用,像滤波、边缘检测、图片锐化等,都是通过不同的卷积核来实现的。在卷积神经网络中通过卷积操作可以提取图片中的特征,低层的卷积层可以提取到图片的一些边缘、线条、角等特征,高层的卷积能够从低层的卷积层中学到更复杂的特征,从而实现到图片的分类和识别。

在这里插入图片描述

2. 反卷积

反卷积:反卷积也被称为转置卷积,反卷积其实就是卷积的逆过程。大家可能对于反卷积的认识有一个误区,以为通过反卷积就可以获取到经过卷积之前的图片,实际上通过反卷积操作并不能还原出卷积之前的图片,只能还原出卷积之前图片的尺寸。通常卷积神经网络无非是卷积+池化的堆叠,池化过程必定存在部分信息被丢弃的问题,且容易造成小物体信息无法重建等问题。比如连续4个2 * 2大小的pooling之后,任何小于 2 4 2^4 24大小的图片都无法被重建。
反卷积的作用主要体现在三个方面:

  • unsupervised learning :重构图像
  • CNN可视化:将conv得到的feature map还原到像素空间,观察特定的feature map对应原始图片的哪些区域
  • upsampling:上采样

卷积的意义在于从输入图像中提取特征,并且卷积之后因为pooling的存在使得特征图尺寸越来越小。卷积过程中,一般特征图的尺寸会越来越小(特征图个数会增加),而反卷积过程中,一般输入尺寸较小,而输出尺寸相对要大。
在这里插入图片描述

举个例子:

对于4*4大小的输入,kernel_size=3 * 3,padding=0,stride =0,则输出大小为尺寸2 * 2的特征图。 将输入展开为16 * 1的向量,记做 X X X;输出的特征图展开得到4 * 1的向量,记做 Y Y Y,如何刻画由A到B的转化C呢??

这样刻画: C 1 X = Y C_1X=Y C1X=Y这个 C 1 C_1 C1就代表卷积操作,根据矩阵乘法可得: C 1 C_1 C1的尺寸为4 * 16。也就是
在这里插入图片描述
而反卷积是什么了?

同样举上面的例子,假设输入 X X X为2 * 2(4 * 1的向量),经过反卷积之后得到大小为4 * 4(向量大小为16 * 1)的输出 Y Y Y,那么反卷积过程可以描述为:

Y = C 2 T X Y=C_2^TX Y=C2TX

其中 C 2 C_2 C2的尺寸为4 * 16。对比两个公式,以及最后中间变换过程可得知,C1与C2是同一矩阵,卷积与反卷积的差异在于整个过程中是否转置。

3. casual conv

什么叫因果卷积呢?就是$ t$时刻的输出仅仅依赖于{ 1 , 2 , 3 , . . . , t − 1 , t 1,2,3,...,t-1,t 1,2,3,...,t1,t}时刻的输入,如下图:

causal conv
但是可以看到的是,输出的感受野仅仅是5=(#layers+kernel_length-1),这一点使得如果需要考虑很久之前的信息,那么就要求整个网络的深度增加,随之而来的是计算开销、梯度消失、训练复杂等问题。所以有下面的Dilated CONV。

4. dilated conv

膨胀卷积、带洞卷积的作用在于,不增加参数和模型复杂度的前提下,指数倍的扩大感受野大小。通过更大的dilation膨胀因子可以使得最高层能够利用输入层中更大范围的信息。

要如何理解dilated conv呢??

dilated conv

图a代表3x3大小的1-dilated conv,卷积过程与普通卷积一致
图b代表3x3大小的2-dilated conv,实际上可以理解为7x7大小的patch,但是仅仅有其中标识红点的9个点与3x3大小的卷积核进行内积操作。也可以理解为kernel_size=7x7
图c代表3x3大小的4-dilated conv,可理解为15x15大小的patch,但是仅仅有其中标识红点的9个点与3x3大小的卷积核进行内积操作。

空洞卷积的目的在于:模型层数不增加的前提下,最后一层能够获得更大的感受野!

打个比方:
一般的卷积经过三层大小为3x3的kernel后,顶层获得的感受野大小为7x7。(这里不考虑卷积后的pooling,因为pooling会按pooling大小扩大感受野)
而在空洞卷积中,顶层获得的感受野是以指数递增的。怎么理解呢???
假设三层dilated-conv,kernel_size大小均为3x3,膨胀系数分别为1,2,4,每一层可获得的感受野大小可以用如下公式计算:
计算实际的kernel_size:(n-1)*(k+1)+k,n是膨胀系数。
计算可获得的感受野大小: F i + 1 = ( 2 i + 2 − 1 ) ∗ ( 2 i + 2 − 1 ) F_{i+1}=(2^{i+2}-1) *( 2^{i+2}-1) Fi+1=(2i+21)(2i+21),这个公式来源于论文multi-scale context aggregation by dilated convolutions

按上述的公式计算:
第一层:n=1,k=3,实际的kernel大小为:(1-1)x(3+1)+3=3,证实膨胀系数为1的膨胀卷积等价于一般的卷积操作。
第二层:n=2,k=3,实际的kernel大小为:(2-1)x(3+1)+3=7,实际卷积核大小为7x7
第三层:n=4,k=3,实际的kernel大小为:(4-1)x(3+1)+3=15,实际卷积核大小为15x15

注意到上面:

第一层的感受野为: F 1 = F 1 + 0 = ( 2 0 + 2 − 1 ) ∗ ( 2 0 + 2 − 1 ) = 3 ∗ 3 F_1=F_{1+0}=(2^{0+2}-1)*(2^{0+2}-1)=3 * 3 F1=F1+0=(20+21)(20+21)=33
第二层的感受野为: F 2 = F 1 + 1 = ( 2 1 + 2 − 1 ) ∗ ( 2 1 + 2 − 1 ) = 7 ∗ 7 F_2=F_{1+1}=(2^{1+2}-1)*(2^{1+2}-1)=7 * 7 F2=F1+1=(21+21)(21+21)=77
第三层的感受野为: F 3 = F 1 + 2 = ( 2 2 + 2 − 1 ) ∗ ( 2 2 + 2 − 1 ) = 15 ∗ 15 F_3=F_{1+2}=(2^{2+2}-1)*(2^{2+2}-1)=15 * 15 F3=F1+2=(22+21)(22+21)=1515

观察到貌似该层的实际的卷积核大小等于其感受野大小!但是不能把这个当做结论,因为通常来说,卷积之后会有池化,根据池化层的size扩大感受野!!
dilated conv

5.dilated conv改进

空洞卷积存在它自身的问题:

  • The Gridding effect: dilated rate =2 多次叠加的话,kernel并不连续,也即并不是所有的像素点都用来计算了。这对于pixel-level dense prediction任务而言,是致命的。
  • Long-ranged information might be not relevant. 仅采用大的dilation rate或许仅仅对一些大物体分割有效,对小物体分割可能效果并不好。

改进方式请参见简书中关于dilated conv的改进


参考文献:

  1. 彻底搞懂CNN中的卷积和反卷积
  2. 卷积、反卷积和空洞卷积的图片示意
  3. 卷积、反卷积 、空洞卷积
  4. 深度理解反卷积
  5. 如何理解反卷积
  6. 卷积、反卷积动图演示
  7. WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
  8. Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)
  9. dilated conv感受野大小计算
  10. 计算dilated conv感受野的网站
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值