其实已经实现过非常多的卷积神经网络了,起初的时候卷积的工作原理也搞的很清楚,但是随着工程/科研的日常,这些非常理论的卷积工作细节我却淡忘了,所幸之前学习过程中留有笔记(吴恩达老师视频),在此整理,希望温故而知新。
1.从形态学到卷积算子
这是一个提取垂直边缘/水平边缘的算子。带给我们最初的理解,卷积核的梯度(形态)会在图像中相似的纹理产生高的响应,这也是为什么卷积可以提取出来垂直边缘/水平边缘的纹理的原因。
2. 卷积核如何工作
相信大家已经非常了解这个图了吧。卷积核滑动的gif图像。
吴恩达老师视频中,对于一个7x7的图像,使用stride=2的3x3卷积,输出一张3x3的feature map。stride=2 就是卷积在7x7的图像中每次滑动的步长,这里stride=2,表示水平方向和垂直方向步长都是2,这是一种默认说法。
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。
4.更进一步:卷积核的channel
刚刚一节是说输入图像增加了一个channel,6x6x3 -> 4x4 ,那么卷积核的channel又是什么那?刚才章节说的其实就是卷积channel维度是1的情况,如果是2,就是下面图的效果(先忽略我的标注)。
最后把output的两个 4x4的feature map结合到一起,就是4x4x2的output了~~至此卷积的工作过程到此为止结束了!如果对你有帮助,不妨点一个赞~哈哈
5.拓展: 卷积核产生的计算量
对于章节三中的卷积,参数量是多少?众所周时,卷积核是共享参数的。针对3x3x3的输入块,3x3x3的卷积有
- 27 次乘法
- 26次加法(27个数相加,26次加法)
- 4x4个output
所以最终
对于章节四