CNN |填充介绍
简单卷积层的问题
- 对于灰度 (nxn) 图像和 (fxf) 滤波器/核,卷积运算产生的图像尺寸为(n – f + 1) x (n – f + 1) 。
例如,对于 (8 x 8) 图像和 (3 x 3) 滤波器,卷积运算后产生的输出大小为 (6 x 6)。因此,每次执行卷积操作时,图像都会缩小。这对在图像减少到零之前可以执行此类操作的次数设置了上限,从而阻止我们构建更深的网络。 - 此外,角落和边缘的像素使用量远低于中间的像素。
例如,
显然,像素 A 在一次卷积运算中被触及,像素 B 在 3 次卷积运算中被触及,而像素 C 在 9 次卷积运算中被触及。一般来说,中间的像素比角落和边缘的像素更常用。因此,图像边缘的信息没有像中间的信息一样被保留。为了克服这些问题,我们使用填充。
填充输入图像
填充只是向我们的输入图像添加零层的过程,以避免上述问题。
- 这可以防止收缩,因为如果 p = 添加到图像边界的零层数,那么我们的 (nxn) 图像在填充后变为 (n + 2p) x (n + 2p) 图像。因此,应用卷积操作(使用 (fxf) 滤波器)输出 (n + 2p – f + 1) x (n + 2p – f + 1) 个图像。例如,向 (8 x 8) 图像添加一层填充并使用 (3 x 3) 过滤器,我们将在执行卷积运算后得到 (8 x 8) 输出。
- 这通过将原始图像边缘的像素置于填充图像的中间来增加它们的贡献。因此,保留了边界信息以及图像中间的信息。
填充类型
- 有效填充:这意味着根本没有填充。输入图像保持其有效/未改变的形状。
所以,[(n x n) image] * [(f x f) filter] —> [(n – f + 1) x (n – f + 1) image]
其中*表示卷积操作。
- Same Padding :在这种情况下,我们添加“p”个填充层,以便输出图像与输入图像具有相同的尺寸。
所以,[(n + 2p) x (n + 2p) image] * [(f x f) filter] —> [(n x n) image]
这给出了p = (f – 1) / 2 (因为 n + 2p – f + 1 = n)。
因此,如果我们使用(3 x 3)过滤器,则必须将 1 层零添加到边框以实现相同的填充。类似地,如果使用 (5 x 5) 过滤器,则必须将 2 层零附加到图像的边界。
- 有效填充:这意味着根本没有填充。输入图像保持其有效/未改变的形状。