Processing math: 100%

Deep Learning Note: 4-2 卷积神经网络:填充和步长

1. 填充

  在上面的例子中,使用 6×6 的图像与 3×3 的过滤器卷积,得到一个 4×4 的矩阵,这是因为在 6×6 的图像中,3×3 的过滤器有 4×4 个可以放置的位置。

  更一般地,将 n×n 的图像与 f×f 的过滤器相卷积,结果的大小为:

(nf+1)×(nf+1)

  由此会带来两个问题:其一是每次卷积都会导致图像的尺寸变小,如果图像很小、进行卷积的次数很多,最后可能只会剩下一个像素;其二是图像边缘的像素参加的运算少于图像中间的像素,导致图像边缘的信息被丢弃,例如图像最左上角的像素只参加了一次卷积计算,而图像中间的像素会被多个位置的过滤器覆盖到,会参加多次卷积计算。

  解决以上问题的一个方法是,在计算卷积之前,对原图像进行填充(Padding),即在图像边缘补充一些数据,从而增大图像的尺寸。如在 6×6 的图像四周各填充宽度 1 个像素的值全为 0 的边缘,得到 8×8 的图像,此时再与 3×3 的过滤器卷积,会得到一个 6×6 的图像,与原图像尺寸相同。

  记填充的宽度为 p,则卷积得到的矩阵大小为:

(n+2pf+1)×(n+2pf+1)

  对于填充的宽度,通常有两种选择:

  • Valid:不使用填充,使用 n×n 的图像与 f×f 的过滤器相卷积,得到 (nf+1)×(nf+1) 的结果。
  • Same:通过填充使得输出尺寸与输入尺寸相等,此时填充宽度 p=f12

  在计算机视觉领域,f 通常是奇数,一方面可以保证使用 Same 填充时填充宽度 p 是整数,对原图片的填充是对称的;另一方面奇数宽度的过滤器具有一个中心点,可以表示过滤器的位置,在计算机视觉问题中,有时有一个这样的点会很方便。

2. 步长

  步长(Stride)指的是在计算卷积时,过滤器在原图像上移动的步进长度,之前例子中使用的步长都是 1,即过滤器每次移动 1 个像素。对于如图 1 所示的例子,使用步长为 2 的卷积:

图 1

图 1

  首先将过滤器放置在图像左上角,计算卷积值为 91,如图 2:

图 5

图 2

  由于使用的步长为 2,将过滤器水平左移 2 个像素,计算卷积值为 100,如图 3:

图 3

图 3

  以此类推,计算完第一行后,将过滤器垂直下移 2 个像素,再从头开始计算,如图 4:

图 4

图 4

  最终的结算结果如图 5:

图 5

图 5

  在上面的例子中,一个 7×7 的图像卷积一个 3×3 的过滤器,步长为 2,结果的大小为 3×3

  更一般地,将 n×n 的矩阵与 f×f 的矩阵相卷积,填充为 p,步长为 s,结果的大小为:

n+2pfs+1×n+2pfs+1

  如果在步进之后,发现剩余图像(加上填充)的尺寸小于过滤器尺寸,不足以进行卷积,则直接跳过,因此上式中对计算结果向下取整。

3. 互相关和卷积

  在数学和信号处理等领域中,对卷积有着不同的定义。在进行卷积时,先对核矩阵(过滤器)进行水平和垂直翻转,在使用翻转后的矩阵进行计算(逐元素相乘并求和),即对于:

[237462669874348389783663421834324198][345102197]

  先将其中 3×3 的矩阵沿水平和垂直方向翻转,得到:

[725904113]

  然后使用上面翻转后的矩阵参与计算。这种计算方式满足结合律,即 (AB)C=A(BC),这在一些信号处理的场景非常有用。

  而我们使用的卷积方式并没有对过滤器进行翻转,严格来说,这种方式计算的是互相关(Cross Correlation),但在深度学习中,通常将这种计算方式称为“卷积”。深度学习中不会用到卷积的结合律,省略翻转的步骤,并不会影响神经网络的性能。