这篇博客分为两部分:
- 卷积的计算
- 两种特殊卷积的介绍:可分离卷积、空洞卷积
- 卷积的细节计算
首先是第一部分,卷积的计算。
参考资料:https://zhuanlan.zhihu.com/p/268179286
一、单通道单卷积核
这计算公式很简单,为方便描述,可以把卷积核以及卷积核扫描到图像的区域当作两个矩阵(但实际计算并不是矩阵乘法,不要搞混咯)。
具体计算的方式是:
- 将对应位置的元素相乘
- 将得到的所有乘积做一个求和
- 加上偏差bias
[左边是初始图片,右边是卷积核及其bias。]
右边是卷积核,左边红色框起来的部分是卷积核扫描到的位置,计算过程如下:
也就是:
二、单通道多卷积核
虽然卷积核多了起来,但计算一样简单:
- 按照“单通道单卷积核”的方式依次计算出各个卷积核对应的feature map
- 有多少个卷积核就输出多少个通道(每个通道的feature map为对应卷积核求出来的那一层feature map)
文字不好理解,见下图:
[左边是初始图片,右边是卷积核及其bias。]
结果:输出是一个3*3*2的feature map。
三、多通道单卷积核
对于多通道图像的卷积核,需要强调一点:
因为输入是三个通道,所以在进行卷积的时候,对应的每一个卷积核都必须要有三个通道才能进行卷积。
如上图,是一个多通道图像和一个卷积核。
具体计算:
- 图像的每个通道与卷积核中的一个通道对应。
- 按照“单通道单卷积核”的算法求出每个通道卷积后的值,有一点不同的是,此时的计算不需要加上bias。bias将在最后求和的阶段加上。
- 将每个通道的计算结果中、对应位置的值加起来,并加上bias,得到输出的feature map。
- 输出的feature map是单通道的。
结果如图:
四、多通道多卷积核
具体计算:
- 按“多通道单卷积核”的算法算出每个卷积核对应的feature map。
- 最后的输出的是一个多通道的feature map,多少个卷积核就是多少通道。
见下图:
结果:
总结(原文作者总结得很好啦,这里仅作摘抄):
(1)原始输入有多少个通道,其对应的一个卷积核就必须要有多少个通道,这样才能与输入进行匹配,也才能完成卷积操作。
(2)用k个卷积核对输入进行卷积处理,那么最后得到的特征图一定就会包含有k个通道。
最后还有个摘抄:
第二部分:介绍可分离卷积和空洞卷积
参考资料:
- https://blog.csdn.net/u013289254/article/details/99341428
一、可分离卷积
这部分原作者介绍得很清晰,仅作摘抄(来自参考文献1):
可分离卷积(空间可分离卷积,深度可分离卷积)都是可以用来减少计算量的。
空间可分离卷积:将卷积分解为两项单独的操作。下图中,一个卷积核为 3x3 的 Sobel 卷积核拆分成了一个 3x1 卷积核和一个 1x3 卷积核。
二、空洞卷积
参考资料:https://zhuanlan.zhihu.com/p/50369448
第三部分:卷积的细节计算
一、卷积层尺寸的计算
- 计算输出后的feature map的尺寸:
- 这条公式其实在查阅文档的时候也有提到,比如Pytorch文档中关于Conv2d部分的介绍,就有提到这条公式。