卷积神经网络中的填充(Padding)策略与计算
字数 1441 2025-11-05 08:31:58

卷积神经网络中的填充(Padding)策略与计算

1. 问题背景

在卷积神经网络中,卷积层通过滑动滤波器(卷积核)提取特征。但卷积操作会逐渐缩小特征图的尺寸(例如,输入尺寸为 \(n \times n\),卷积核为 \(k \times k\),输出尺寸会变为 \((n-k+1) \times (n-k+1)\))。同时,边缘像素的参与计算次数远少于中心像素,导致信息丢失。
填充(Padding) 正是为了解决这两个问题:

  1. 保持特征图尺寸不变(避免网络过快收缩);
  2. 增加边缘像素的利用率。

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\)):

  1. 计算填充量:\(p = (3-1)/2 = 1\)
  2. 在输入特征图四周各补一圈0(若 \(p=2\) 则补两圈,依此类推)。
  3. 卷积核在填充后的图上滑动,输出尺寸与输入相同。

示例

  • 输入:\(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)等,常用于图像处理边缘平滑。

通过填充策略,卷积神经网络能更灵活地平衡特征图的尺寸控制与信息保留。

卷积神经网络中的填充(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为例) 在深度学习框架中,填充通常通过参数直接指定: 框架会自动计算填充后的尺寸,并补零操作。 5. 总结与扩展 填充的选择 : 需要保持分辨率时(如图像分割、生成模型)常用 Same Padding。 关注特征提取而非尺寸时(如分类网络末端)可用 Valid Padding。 填充的变体 :反射填充(Reflection Padding)、重复填充(Replication Padding)等,常用于图像处理边缘平滑。 通过填充策略,卷积神经网络能更灵活地平衡特征图的尺寸控制与信息保留。