卷积神经网络中的填充(Padding)策略与计算
字数 1441 2025-11-05 08:31:58
卷积神经网络中的填充(Padding)策略与计算
1. 问题背景
在卷积神经网络中,卷积层通过滑动滤波器(卷积核)提取特征。但卷积操作会逐渐缩小特征图的尺寸(例如,输入尺寸为 \(n \times n\),卷积核为 \(k \times k\),输出尺寸会变为 \((n-k+1) \times (n-k+1)\))。同时,边缘像素的参与计算次数远少于中心像素,导致信息丢失。
填充(Padding) 正是为了解决这两个问题:
- 保持特征图尺寸不变(避免网络过快收缩);
- 增加边缘像素的利用率。
2. 填充的常见策略
(1)无效填充(Valid Padding)
- 即不进行填充(Padding=0),卷积核仅在输入特征图内滑动。
- 输出尺寸公式:
\[ \text{输出尺寸} = \lfloor \frac{n - k + 1}{\text{步长(stride)}} \rfloor \]
- 例如:输入为 \(5 \times 5\),卷积核 \(3 \times 3\),步长=1,输出为 \(3 \times 3\)。
(2)相同填充(Same Padding)
- 目标:使输出尺寸与输入尺寸相同(当步长=1时)。
- 填充量计算:
设输入尺寸为 \(n\),卷积核尺寸为 \(k\),步长为 \(s\),填充量为 \(p\),则输出尺寸为:
\[ \text{输出尺寸} = \lfloor \frac{n + 2p - k}{s} \rfloor + 1 \]
令输出尺寸等于输入尺寸 \(n\)(步长=1时),解方程:
\[ n = \frac{n + 2p - k}{1} + 1 \implies p = \frac{k-1}{2} \]
- 要求卷积核尺寸为奇数(如3、5、7),才能对称填充。例如 \(k=3\) 时,\(p=1\)。
(3)全填充(Full Padding)
- 目标:使输入像素的每个部分都能被卷积核“完全覆盖”(即卷积核边缘与输入边缘对齐时仍计算)。
- 填充量 \(p = k-1\),输出尺寸会大于输入尺寸。
- 实际应用较少,多见于信号处理。
3. 填充的具体操作
以 Same Padding 为例(步长=1,卷积核 \(3 \times 3\)):
- 计算填充量:\(p = (3-1)/2 = 1\)。
- 在输入特征图四周各补一圈0(若 \(p=2\) 则补两圈,依此类推)。
- 卷积核在填充后的图上滑动,输出尺寸与输入相同。
示例:
- 输入:\(5 \times 5\) 矩阵,卷积核 \(3 \times 3\),步长=1。
- 填充后:在原矩阵上下左右各加1行/列0,变为 \(7 \times 7\)。
- 卷积输出:\((7-3+1) \times (7-3+1) = 5 \times 5\),与输入尺寸一致。
4. 填充的代码实现(以Python为例)
在深度学习框架中,填充通常通过参数直接指定:
import torch.nn as nn
# 定义卷积层:Same Padding(当kernel_size=3, stride=1时,padding=1)
conv_layer = nn.Conv2d(
in_channels=3,
out_channels=64,
kernel_size=3,
stride=1,
padding=1 # 直接设置填充量
)
框架会自动计算填充后的尺寸,并补零操作。
5. 总结与扩展
- 填充的选择:
- 需要保持分辨率时(如图像分割、生成模型)常用 Same Padding。
- 关注特征提取而非尺寸时(如分类网络末端)可用 Valid Padding。
- 填充的变体:反射填充(Reflection Padding)、重复填充(Replication Padding)等,常用于图像处理边缘平滑。
通过填充策略,卷积神经网络能更灵活地平衡特征图的尺寸控制与信息保留。