一文看懂普通卷积、转置卷积以及空洞卷积

风格不统一 提交于 2019-12-17 18:56:59

一文看懂普通卷积、转置卷积以及空洞卷积 convolution、 transposed convolution、dilated convolution
本文希望尽量以图说话,简明扼要地分享干货。

  1. 首先是普通卷积,下图可能是一张比较经典的展示。其计算公式为:

其中f为kernel的尺寸,p为padding的大小,s为步长的大小。
在这里插入图片描述
2
2.接下来介绍转置卷积transposed convolution
又名逆卷积/deconvolution。
这里要sorry一下,忘记了之前是从哪个网页找的一张老外手写的图片。把转置卷积计算过程写的很清楚。把这个计算过程很直观的介绍给了我们,这样我们就不用再很迷茫地考虑什么转置过程啊,之类的。其计算公式:o=s(i−1)+k−2p
在这里插入图片描述
下图相当于把上图过程总结了下。
在这里插入图片描述
3. Dilated convolution空洞卷积
首先需要清除的是所谓dilated指的是对卷积核的操作。这样可以在参数数量不变的同时,具有更大的感受野。
在这里插入图片描述
假设原始特征为feat0,首先使用扩张率为1的空洞卷积生成feat1,feat1上一点相对feat0感受野为33(如图a);
然后使用扩张率为2的空洞卷积处理feat1生成feat2(如图b),使第一次空洞卷积的卷积核大小等于第二次空洞卷积的一个像素点的感受野,图b即feat1上一个点综合了图a即feat0上3
3区域的信息,则生成的feat2感受野为7*7,即整个图b深色区域;

第三次处理同上,第二次空洞卷积的整个卷积核大小等于第三次空洞卷积的一个像素点的感受野,图c即feat2上每个点综合了feat0上77的信息(感受野),则采用扩张率为3的空洞卷积,生成的feat3每一个点感受野为1515。

相比较之下,使用stride为1的普通3*3卷积,三层之后感受野仅仅为(kernel-1)*layer+1=7。

可以简单理解为通过dilated,产生了新的kernel,再用这个kernel去做普通卷积。具体计算过程可以参考:https://blog.csdn.net/zw__chen/article/details/85007519。如下图。
在这里插入图片描述
dilated后的kernel_size:(d-1)*(k+1)+k。膨胀系数为d。
膨胀卷积输出图像尺寸计算公司:
在这里插入图片描述
或(相当于在普通卷积基础上增加了一项):
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!