卷积填充和池化
本文最后更新于 2026年9月27日 晚上
一、卷积
“卷积”可以简单理解成:用一个小的窗口(卷积核)在数据上滑动,每到一个位置就把窗口内的数据和窗口权重对应相乘再相加,得到一个新的值。 在图像处理里,它常用来提取边缘、纹理、形状等特征。卷积核的权重不是人为写死的,而是通过网络训练学习得到的。
卷积的计算过程:
| 情况 | 输入通道 | 卷积核形状 | 输出通道 | 说明 |
|---|---|---|---|---|
| 单通道单卷积核 | $1$ | $1 \times K_h \times K_w$ | $1$ | 最基础的二维卷积 |
| 单通道多卷积核 | $1$ | $C_{out} \times 1 \times K_h \times K_w$ | $C_{out}$ | 用多个不同的卷积核分别对同一个输入通道做卷积,得到多个输出通道,提取多种特征 |
| 多通道单卷积核 | $C_{in}$ | $C_{in} \times K_h \times K_w$ | $1$ | 每个输入通道一个核,结果相加融合成一个通道 |
| 多通道多卷积核 | $C_{in}$ | $C_{out} \times C_{in} \times K_h \times K_w$ | $C_{out}$ | 每个输出通道有自己独立的一组核,提取多种特征 |
| 批量多通道多卷积核 | $N \times C_{in}$ | $C_{out} \times C_{in} \times K_h \times K_w$ | $N \times C_{out}$ | 每个样本独立计算,共享卷积核 |
- $N$:Batch size,即批次大小(一次输入网络的样本数量)。
- $C_{in}$:Input channels,即输入通道数(例如RGB图像为3,深层特征图可能为512)。
- $C_{out}$:Output channels,即输出通道数(也就是卷积核的数量,决定了输出特征图的深度)。
- $K_h$:Kernel height,即卷积核的高度。
- $K_w$:Kernel width,即卷积核的宽度。
为了更好理解,如图展示了单通道多卷积的一个示例图(含有偏置值):



统一设定:
- 输入大小:$3 \times 3$
- 卷积核大小:$2 \times 2$
- 步长:$S = 1$
- 填充:$P = 0$
- 偏置:$b = 0$
- 输出大小:$(3 - 2 + 1) \times (3 - 2 + 1) = 2 \times 2$
1.1 单通道输入,单卷积核(输出 1 通道)
输入单通道:
$$
X = \begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{bmatrix}
$$
卷积核:
$$
K = \begin{bmatrix}
1 & 0 \\
0 & -1
\end{bmatrix}
$$
滑动计算:
- 左上角:$1 \times 1 + 2 \times 0 + 4 \times 0 + 5 \times (-1) = -4$
- 右上角:$2 \times 1 + 3 \times 0 + 5 \times 0 + 6 \times (-1) = -4$
- 左下角:$4 \times 1 + 5 \times 0 + 7 \times 0 + 8 \times (-1) = -4$
- 右下角:$5 \times 1 + 6 \times 0 + 8 \times 0 + 9 \times (-1) = -4$
输出:
$$
Y = \begin{bmatrix}
-4 & -4 \\
-4 & -4
\end{bmatrix}
$$
1.2 单通道输入,多卷积核(输出多通道)
输入同上 $X$,现在用两个卷积核:
$$
K_1 = \begin{bmatrix}
1 & 0 \\
0 & -1
\end{bmatrix}, \quad
K_2 = \begin{bmatrix}
0 & 1 \\
1 & 0
\end{bmatrix}
$$
- 用 $K_1$ 计算得到 $Y_1 = \begin{bmatrix} -4 & -4 \\ -4 & -4 \end{bmatrix}$
- 用 $K_2$ 计算:
- 左上:$1 \times 0 + 2 \times 1 + 4 \times 1 + 5 \times 0 = 6$
- 右上:$2 \times 0 + 3 \times 1 + 5 \times 1 + 6 \times 0 = 8$
- 左下:$4 \times 0 + 5 \times 1 + 7 \times 1 + 8 \times 0 = 12$
- 右下:$5 \times 0 + 6 \times 1 + 8 \times 1 + 9 \times 0 = 14$
得到:
$$
Y_2 = \begin{bmatrix}
6 & 8 \\
12 & 14
\end{bmatrix}
$$
两个输出通道堆叠,最终输出形状为 $2 \times 2 \times 2$。
1.3 多通道输入,单卷积核(输出 1 通道)
输入有两个通道:
$$
X_1 = \begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{bmatrix}, \quad
X_2 = \begin{bmatrix}
9 & 8 & 7 \\
6 & 5 & 4 \\
3 & 2 & 1
\end{bmatrix}
$$
卷积核也对应两个通道:
$$
K_1 = \begin{bmatrix}
1 & 0 \\
0 & -1
\end{bmatrix}, \quad
K_2 = \begin{bmatrix}
0 & 1 \\
1 & 0
\end{bmatrix}
$$
分别计算:
- $X_1$ 与 $K_1$ 卷积得到 $Y_1 = \begin{bmatrix} -4 & -4 \\ -4 & -4 \end{bmatrix}$
- $X_2$ 与 $K_2$ 卷积:
- 左上:$9 \times 0 + 8 \times 1 + 6 \times 1 + 5 \times 0 = 14$
- 右上:$8 \times 0 + 7 \times 1 + 5 \times 1 + 4 \times 0 = 12$
- 左下:$6 \times 0 + 5 \times 1 + 3 \times 1 + 2 \times 0 = 8$
- 右下:$5 \times 0 + 4 \times 1 + 2 \times 1 + 1 \times 0 = 6$
得到:
$$
Y_2 = \begin{bmatrix}
14 & 12 \\
8 & 6
\end{bmatrix}
$$
两个通道结果相加:
$$
Y = Y_1 + Y_2 = \begin{bmatrix}
-4+14 & -4+12 \\
-4+8 & -4+6
\end{bmatrix}
= \begin{bmatrix}
10 & 8 \\
4 & 2
\end{bmatrix}
$$
输出为单通道 $2 \times 2$。
1.4 多通道输入,多卷积核(输出多通道)
输入仍为两个通道 $X_1, X_2$,现在要输出两个通道。
输出通道 1 使用:
$$
K_{1,1} = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}, \quad
K_{2,1} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}
$$
计算得到(就是上面第 3 节的结果):
$$
Y^{(1)} = \begin{bmatrix} 10 & 8 \\ 4 & 2 \end{bmatrix}
$$
输出通道 2 使用另外两个卷积核:
$$
K_{1,2} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}, \quad
K_{2,2} = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}
$$
$X_1$ 与 $K_{1,2}$ 卷积:
- 左上:$1 \times 0 + 2 \times 1 + 4 \times 1 + 5 \times 0 = 6$
- 右上:$2 \times 0 + 3 \times 1 + 5 \times 1 + 6 \times 0 = 8$
- 左下:$4 \times 0 + 5 \times 1 + 7 \times 1 + 8 \times 0 = 12$
- 右下:$5 \times 0 + 6 \times 1 + 8 \times 1 + 9 \times 0 = 14$
得到 $\begin{bmatrix} 6 & 8 \\ 12 & 14 \end{bmatrix}$
$X_2$ 与 $K_{2,2}$ 卷积:
- 左上:$9 \times 1 + 8 \times 0 + 6 \times 0 + 5 \times (-1) = 4$
- 右上:$8 \times 1 + 7 \times 0 + 5 \times 0 + 4 \times (-1) = 4$
- 左下:$6 \times 1 + 5 \times 0 + 3 \times 0 + 2 \times (-1) = 4$
- 右下:$5 \times 1 + 4 \times 0 + 2 \times 0 + 1 \times (-1) = 4$
得到 $\begin{bmatrix} 4 & 4 \\ 4 & 4 \end{bmatrix}$
相加得到输出通道 2:
$$
Y^{(2)} = \begin{bmatrix} 6+4 & 8+4 \\ 12+4 & 14+4 \end{bmatrix}
= \begin{bmatrix} 10 & 12 \\ 16 & 18 \end{bmatrix}
$$
最终输出两个通道,堆叠为形状 $2 \times 2 \times 2$:
$$
Y = \left\lbrace
\begin{bmatrix} 10 & 8 \\ 4 & 2 \end{bmatrix},
\begin{bmatrix} 10 & 12 \\ 16 & 18 \end{bmatrix}
\right\rbrace
$$
1.5 批量输入
如果输入是一个批次,比如 $N=2$,则对每个样本独立执行上述计算,最后把结果堆叠起来。卷积核在同一批次内共享,不随样本变化。
总结
| 情况 | 输入通道 | 卷积核数量 | 输出通道 | 关键操作 |
|---|---|---|---|---|
| 单通道单卷积核 | 1 | 1 | 1 | 一个核滑动求和 |
| 单通道多卷积核 | 1 | $C_{out}$ | $C_{out}$ | 多个核分别对同一输入卷积 |
| 多通道单卷积核 | $C_{in}$ | 1 组(含 $C_{in}$ 个核) | 1 | 每个通道分别卷积后相加 |
| 多通道多卷积核 | $C_{in}$ | $C_{out}$ 组(每组 $C_{in}$ 个核) | $C_{out}$ | 每个输出通道独立融合所有输入通道 |
| 批量 | $N \times C_{in}$ | 同上 | $N \times C_{out}$ | 每个样本独立计算,共享卷积核 |
二、填充
填充(padding)就是可以保持卷积前后特征图的大小一致。他就是将输入的形状变大,如 图2-1 所示。

图中红色的方块即为卷积核的大小,则如果使用越大的卷积核进行卷积操作那么将会得到越小的输出特征图,最终则需要对原始输入填充更大的范围来保持输出特征图的大小不变。当然,如果是多通道的话,则对应在每个通道都这样填充即可。
2.1 形状计算
用W表示输入特征图的宽度,F表示卷积核的宽度,S表示卷积核每次移动的步长,P表示填充的范围(即多少圈),那么此时卷积后的特征图的宽度为:
$$
H = \left\lceil \frac{W + 2P - F + 1}{S} \right\rceil = \left\lfloor \frac{W + 2P - F}{S} \right\rfloor + 1 \tag{2-1}
$$
其中 $\lceil x \rceil$ 表示对 $x$ 向上取整,$\lfloor x \rfloor$ 表示对 $x$ 向下取整。公式(2-1)中的两种计算方法都行。
例如,对于 图2-1 中的示例来说,$W = 5$,$F = 3$,$S = 1$,$P = 1$,则卷积后输出特征图的大小为:
$$
H = \left\lceil \frac{5 + 2 \times 1 - 3 + 1}{1} \right\rceil = \left\lfloor \frac{5 + 2 \times 1 - 3}{1} \right\rfloor + 1 = 5
$$
这里也有一个快速计算的技巧,如果输入 $W = w$,填充范围 $P = p$,卷积核的宽度 $F = 2p + 1$,步长 $S = s$,则输出 $H = \left\lfloor \frac{w}{s} \right\rfloor$。
另外:
当卷积窗口为矩形时(高度为 $K_h$,宽度为 $K_w$),输出特征图的高度 $H_{out}$ 和宽度 $W_{out}$ 需要分别独立计算:
$$
H_{out} = \left\lfloor \frac{H_{in} + 2P_h - K_h}{S_h} \right\rfloor + 1
$$
$$
W_{out} = \left\lfloor \frac{W_{in} + 2P_w - K_w}{S_w} \right\rfloor + 1
$$
或者使用向上取整形式:
$$
H_{out} = \left\lceil \frac{H_{in} + 2P_h - K_h + 1}{S_h} \right\rceil
$$
$$
W_{out} = \left\lceil \frac{W_{in} + 2P_w - K_w + 1}{S_w} \right\rceil
$$
公式解释
- $H_{in}$:输入特征图的高度
- $W_{in}$:输入特征图的宽度
- $K_h$:卷积核的高度
- $K_w$:卷积核的宽度
- $P_h$:高度方向的填充(Padding)
- $P_w$:宽度方向的填充(Padding)
- $S_h$:高度方向的步长(Stride)
- $S_w$:宽度方向的步长(Stride)
- $\lfloor \cdot \rfloor$:向下取整符号
- $\lceil \cdot \rceil$:向上取整符号
核心逻辑:
高度和宽度完全独立计算,互不影响。矩形卷积核仅仅是 $K_h \neq K_w$ 的特例,只要分别代入各自维度的参数($K, P, S$)即可求出对应的输出尺寸。若需要保持输出与输入尺寸相同(当 $S_h=S_w=1$ 时),需满足 $P_h = \frac{K_h - 1}{2}$ 且 $P_w = \frac{K_w - 1}{2}$(要求核的高宽均为奇数)。
三、池化
池化操作可以看作是使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。例如最大池化(Max Pooling)会给出相邻矩形区域内的最大值作为该位置的输出。除此之外还有最小池化(Min Pooling)和平均池化(Average Pooling)等。如 图3-1 所示即为最大池化。

最大池化就是给定一个固定大小的滑动窗口,然后选择窗口中的最大值来代替整个区域作为输出,最后再依次对整个特征图进行池化操作就得到池化后的特征输出。同时可以发现,池化操作输出维度的计算同卷积操作一样,但对于池化操作来说其并没有权重参数。
3.1 池化作用
- 减少参数量:如果池化选择
F=1 , S=1则特征图的大小会缩为原来的一半,计算方式仍使用 公式2-1。 - 防止过拟合:由于在卷积网络中输入的特征图都具有较高的像素,以实现对某一类特征元素的精确刻画。但是这样一来也会带来一个弊端,即容易造成模型的过拟合现象。原因在于如果某些层的特征图分辨率很高,那么就会造成这些层的特征容错能力降低低。因此,如果只用一个像素值来表示该像素值周围的值,那么理论上便能够缓解模型过拟合现象。对于到底使用还是不使用池化操作就不是一个必要选择了,不过主流的做法还是会使用池化层。
注:池化之后的图片在视觉上也是我们看到的马赛克。