0%

卷积计算中的填充与步长

在了解了卷积计算的原理后,我们很自然的就会面对一个问题:源图像经过卷积操作后得到的输出图像通常变小了
我们设输入图像的大小为$n*n$​,过滤器的大小为$f*f$,那我们得到的输出矩阵的大小将为

同时因为矩阵边缘的信息参与卷积的次数较少,会导致边缘信息的丢失。为了解决这一问题,我们要在卷积计算中引入填充方法(padding)

如上图,输入图像的大小、$6*6$,过滤器的大小为$3*3$,通过计算可知输出图像应为$4*4$
为了维持图像大小不变,我们可以在输入图像外加一圈$0$像素点(通常用$0$进行padding)让输入图像的大小转换为$8*8$,通过计算$(8-3+1)*(8-3+1)=6*6$可知我们维持了图像大小不变

通过padding我们不仅可以维持输入输出图像大小相等,还让边缘信息向内移动,参与了更多次的卷积运算,更充分的利用的边缘信息

由此我们引出了两种卷积方式:
Vaild:指不对输入图像做padding操作
Same:指对输入图像做padding操作使得输入图像与输出图像大小相等
为了使输入输出图像大小相等,我们设需要padding的圈数为$p$

由此我们引出了过滤器的大小选择问题,在实际应用中我们通常使用奇数维的过滤器,首先是因为$p=\frac{f-1}{2}$,为了保证$p\in N$,所以$f=2*k+1$,这样可以避免不对称的padding。还有一个原因是奇数维的过滤器会有一个中心点,在很多问题中过滤器的中心点是有意义的

在上述讨论中我们都默认过滤器在输入图像上的滑动都是以$1$为单位的,但在实际操作中一次跨$2$格也是允许并且有意义的。我们将每次滑动的格数叫做步长$s$

左侧$7*7$​的输入图像与$3*3$的过滤器进行$s=2$​的卷积后得到的输出图像为$3*3$​,由此我们可以得到新的输出图像大小为

因为不能保证$n+2p-f$是$s$的整数倍,所以我们采用向下取整的策略,即只有当过滤器完全处在输入图像内部时,才做卷积运算