为什么CNN中的卷积核一般都是奇数
为什么CNN中的卷积核一般都是奇奇数*奇数,没有偶数*偶数的?
咱们经常见到的多为 3 * 3、5*5;怎么从来没有见过 4*4,6*6 之类的卷积核?无论奇数 or 偶数,都是能够做卷积的呀
之前学习的时候真的没有想过这些问题,再复习时,觉得全是 Why?说明之前还是没有搞明白
从AlexNet模型的11*11、5*5、3*3,还有VGG开始统一卷积核为3*3,再到之后的模型,都没有用过 偶数*偶数的卷积核,说明它是有问题的,或者是没有 奇数*奇数的方便
这一串的问题,原因有两个:
1.保证了 锚点 刚好在中间
锚点也就是卷积核滑动时的一个参考点(相对于图像来说,自己理解的,不保证正确,没找到相关资料)。奇数过滤器的锚点正好在中心位置,避免了位置信息发生偏移,如果卷积核是偶数*偶数时,这时候就没有办法确定了锚点了。让谁是锚点,卷积核上下左右移动之后,位置信息都会发生偏移。
2. same convolution,偶数卷积核会出现问题
说点题外话
做卷积时会出现两种问题
1)图像越来越小;
2)图像边界信息丢失,即有些图像角落和边界的信息发挥作用较少
所以有时候我们会在图像的周围填补 0 ,一来减缓图像变小的速度,二来,保证边界信息不丢失。甚至有时候会让输入输出的大小一样,也就是 same convolution 比如下图的VGG模型,卷积时输入输出的大小是保持不变的,只有在池化层是才会缩减一半。
卷积之后的尺寸大小计算公式为:
输入图片大小 W×W
Filter大小 F×F
步长strides S
padding的像素数 P
输出大小为NxN
于是我们可以得出
这里写一下我的理解:公式中Padding 为啥要乘以 2 ,我的理解为 在周围填 0 的话,左右(上下)两边都填补 0 才有意义,保证是对称的
做same convolution,步长S=1 Padding P = (F-1)/ 2,也即是:需要在原图边长基础上padding F-1个 0 (这个应该很好理解),当卷积核为偶数时,P就不能保证平均分配到卷积两边 。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:为什么CNN中的卷积核一般都是奇数 - Python技术站