CNN 卷积工作过程详解

时间:2024-04-11 07:40:45

其实已经实现过非常多的卷积神经网络了,起初的时候卷积的工作原理也搞的很清楚,但是随着工程/科研的日常,这些非常理论的卷积工作细节我却淡忘了,所幸之前学习过程中留有笔记(吴恩达老师视频),在此整理,希望温故而知新。

1.从形态学到卷积算子

CNN 卷积工作过程详解CNN 卷积工作过程详解
这是一个提取垂直边缘/水平边缘的算子。带给我们最初的理解,卷积核的梯度(形态)会在图像中相似的纹理产生高的响应,这也是为什么卷积可以提取出来垂直边缘/水平边缘的纹理的原因。

2. 卷积核如何工作

相信大家已经非常了解这个图了吧。卷积核滑动的gif图像。

CNN 卷积工作过程详解
吴恩达老师视频中,对于一个7x7的图像,使用stride=2的3x3卷积,输出一张3x3的feature map。stride=2 就是卷积在7x7的图像中每次滑动的步长,这里stride=2,表示水平方向和垂直方向步长都是2,这是一种默认说法。
CNN 卷积工作过程详解

3.卷积核工作细节

其实大部分的人理解就是上一章节内容,那么卷积核究竟是如何工作的那?
如下图,对于一个6x6x3的RGB图像,注意比上一章节多了一个通道,也就是现在主流的RGB图像。

  • 假设
    6x6x3 -> 4x4
    那么卷积核尺寸(stride=1)是多少?应该如何设计?

答案是:这个卷积核应该是3x3x3的(no padding)。可能这有些想不通,没事,咱们继续往下走,对于输入的一个patch(3x3x3的块)会和卷积核做卷积,卷积核有3x3x3=27个参数(no bias),所以有27次输入块与卷积核对应元素的相乘和26次相加(维度3x3x3变成了1)。
点乘之后就是一个数字,所以这一个块卷积之后的结果只是一个数字!
输出的feature map的channel自然就是就是1。

CNN 卷积工作过程详解

4.更进一步:卷积核的channel

刚刚一节是说输入图像增加了一个channel,6x6x3 -> 4x4 ,那么卷积核的channel又是什么那?刚才章节说的其实就是卷积channel维度是1的情况,如果是2,就是下面图的效果(先忽略我的标注)。
CNN 卷积工作过程详解
最后把output的两个 4x4的feature map结合到一起,就是4x4x2的output了~~至此卷积的工作过程到此为止结束了!如果对你有帮助,不妨点一个赞~哈哈

5.拓展: 卷积核产生的计算量

对于章节三中的卷积,参数量是多少?众所周时,卷积核是共享参数的。针对3x3x3的输入块,3x3x3的卷积有

  • 27 次乘法
  • 26次加法(27个数相加,26次加法)
  • 4x4个output
    所以最终
    =(27+26)×4×4×1(convchannel) 计算量 = (27+26)\times4\times4\times1(conv\,channel)
    对于章节四
    =(27+26)×4×4×2(convchannel) 计算量 = (27+26)\times4\times4\times2(conv\,channel)