在理解了如何搭建神经网络的骨架(nn.Module)后,我们迎来了计算机视觉中最核心的操作:卷积(Convolution)。卷积层是 CNN 能够识别图像特征(如边缘、纹理、形状)的关键所在。

1. 什么是卷积运算?

卷积运算并不是深奥的数学逻辑,在直观上可以理解为一种**“滑动窗口的加权求和”**。

  • 卷积核 (Kernel/Filter):一个小的矩阵(如 3 *3或 5*5),存储着特定的权值。
  • 计算过程:卷积核在输入图像上按设定的步长滑动。每滑动到一个位置,将卷积核的数值与图像对应位置的像素值逐元素相乘再相加,得到输出矩阵中的一个值。

2. 卷积过程中的三大要素

文件通过动态图和矩阵演示,强调了影响卷积输出的几个关键配置:

① 步长 (Stride)

  • 定义:卷积核每次移动的格子数。
  • 影响:步长越大,输出特征图的尺寸越小。常见的步长为 1 或 2。

② 填充 (Padding)

  • 定义:在原始图像的边缘补充一圈像素(通常补 0)。
  • 作用
    1. 防止图像边缘的信息在多次卷积后丢失。
    2. 控制输出特征图的大小,使其与输入保持一致。

③ 通道 (Channels)

  • 输入通道:彩色图像通常有 3 个通道 (RGB)。
  • 卷积核深度:卷积核的深度必须与输入通道数一致。每个通道独立卷积后求和,生成一个特征图。

3. 为什么卷积如此有效?

相比于全连接网络,卷积具有两个核心优势:

  1. 局部感知 (Locality):卷积核每次只关注图像的一小部分,这模拟了人类视觉对局部特征(如一个眼睛或一个轮廓)的敏感性。
  2. 权值共享 (Weight Sharing):同一个卷积核在整张图上滑动。这意味着如果它学会了识别“垂直边缘”,那么无论这个边缘出现在图片的左上角还是右下角,它都能将其检测出来。

4. 卷积计算的数学直观

假设输入矩阵为 I,卷积核为 K,输出的一个点可以表示为:

Output_{i,j} = \sum_{m} \sum_{n} I(i+m, j+n) \cdot K(m, n)

这种简单的乘加运算,在经过数百万次的重复后,就能提取出极其复杂的语义特征。


5. 总结:从原理到代码

在 PyTorch 中,我们通过 nn.Conv2d 来调用这一原理。你需要指定的参数正是我们上面讨论的:

  • in_channels:输入通道。
  • out_channels:输出通道(即卷积核的个数)。
  • kernel_size:卷积核大小。
  • stride:步长。
  • padding:填充。

更多推荐