填充(Padding)是卷积神经网络(CNN)中一种技术,通过在输入特征图的边缘添加像素,以控制输出特征图的空间维度。填充的主要目的是:
- 控制输出大小:通过填充可以在一定程度上保留输入特征图的边缘信息,从而控制输出特征图的空间维度。
- 保留边界信息:在没有填充的情况下,卷积操作会导致输出特征图的尺寸逐渐减小,导致边界信息丢失。填充有助于缓解这个问题。
- 保持输入输出尺寸一致:有时希望卷积后的特征图与输入特征图保持相同的尺寸,填充可以帮助实现这一目的。
填充的类型
-
有效填充(Valid Padding):
- 也称为"不填充"(No Padding)。
- 卷积操作不会在输入特征图的边缘添加任何额外的像素。
- 输出特征图的尺寸会随着卷积操作逐渐减小。
-
相同填充(Same Padding):
- 也称为"填充"(Padding)。
- 在输入特征图的边缘添加适当数量的像素,使得输出特征图的尺寸与输入特征图相同。
- 填充的大小由卷积核的尺寸和步长决定。
填充大小的计算
假设输入特征图的尺寸为 H in × W in H_{\text{in}} \times W_{\text{in}} Hin×Win,卷积核的大小为 k H × k W k_H \times k_W kH×kW,步长为 s H × s W s_H \times s_W sH×sW,输出特征图的尺寸为 H out × W out H_{\text{out}} \times W_{\text{out}} Hout×Wout,填充的大小为 p H × p W p_H \times p_W pH×pW。计算填充大小的一般公式如下:
对于高度方向的填充:
p
H
=
⌊
(
H
out
−
1
)
×
s
H
+
k
H
−
H
in
2
⌋
p_H = \left\lfloor \frac{(H_{\text{out}} - 1) \times s_H + k_H - H_{\text{in}}}{2} \right\rfloor
pH=⌊2(Hout−1)×sH+kH−Hin⌋
对于宽度方向的填充:
p
W
=
⌊
(
W
out
−
1
)
×
s
W
+
k
W
−
W
in
2
⌋
p_W = \left\lfloor \frac{(W_{\text{out}} - 1) \times s_W + k_W - W_{\text{in}}}{2} \right\rfloor
pW=⌊2(Wout−1)×sW+kW−Win⌋
在实际应用中,常用以下公式简化填充计算:
p H = ⌊ k H − 1 2 ⌋ p_H = \left\lfloor \frac{k_H - 1}{2} \right\rfloor pH=⌊2kH−1⌋
p W = ⌊ k W − 1 2 ⌋ p_W = \left\lfloor \frac{k_W - 1}{2} \right\rfloor pW=⌊2kW−1⌋
例子
假设输入特征图尺寸为 28 × 28 28 \times 28 28×28,卷积核大小为 3 × 3 3 \times 3 3×3,步长为 1 × 1 1 \times 1 1×1,使用相同填充。根据公式计算填充大小:
p H = p W = ⌊ 3 − 1 2 ⌋ = 1 p_H = p_W = \left\lfloor \frac{3 - 1}{2} \right\rfloor = 1 pH=pW=⌊23−1⌋=1
因此,在输入特征图的四边各添加一列像素,填充后的输入特征图尺寸变为 30 × 30 30 \times 30 30×30,经过卷积操作后,输出特征图的尺寸仍然为 28 × 28 28 \times 28 28×28。