视频封面

视频元信息

  • 所属课程:吴恩达深度学习专项课程(Deep Learning Specialization)
  • 章节:卷积神经网络(CNN)第一周 1.2 边缘探测示例
  • 语言:中英字幕(原声英文)

内容摘要(TL;DR)

本节以边缘检测为动机,详细演示了卷积运算的完整计算过程。通过一个 6×6 灰度图像与 3×3 垂直边缘检测滤波器进行卷积,得到 4×4 输出矩阵,并解释为何该滤波器能有效检测图像中的垂直边缘。核心要点是:卷积是 CNN 的基本构建块。


一、背景引入:从边缘到物体 [00:01]

在之前的视频中已经提到,神经网络的早期层可能检测边缘,稍后的层检测物体的部分,更后面的层则可能检测完整物体(如人脸)。

本节核心目标:展示如何在图像中检测边缘。

以一张包含建筑物和行人的图片为例:

  • 垂直边缘:建筑物上的垂直线、行人的轮廓线,这些会在垂直边缘检测器的输出中被检测到 [00:41]
  • 水平边缘:例如栏杆处强烈的水平线,也会在相应输出中被检测到 [01:08]

理解:边缘检测是 CNN 理解图像的第一步——先找轮廓,再组合成局部部件,最后形成完整物体。这体现了 CNN 从低级特征到高级特征的层次化特征提取思想。


二、卷积运算的基本设置 [01:26]

2.1 输入图像

给定一个 6×6 灰度图像:

  • 因为是灰度图,所以是 6×6×1 矩阵,而非 6×6×3(RGB 三通道分开存储)[01:26]

2.2 滤波器(Filter / Kernel)

构造一个 3×3 矩阵,在 CNN 术语中称为 filter(滤波器):

1   1   1
0   0   0
-1  -1  -1
  • 有时研究论文中称其为 kernel(核),本课程统一使用 filter 术语 [02:07]

易错点:符号混淆 数学中星号 * 是卷积的标准符号,但在 Python 中 * 也表示乘法或逐元素乘法。这个星号有双重用途(overload),需要根据上下文区分。[02:31]


三、卷积运算的逐步计算 [03:08]

3.1 输出维度

6×6 矩阵与 3×3 矩阵卷积,输出为 4×4 矩阵(可视为 4×4 图像)。

推导:输出维度 = 输入维度 − 滤波器维度 + 1 = 6 − 3 + 1 = 4

3.2 计算过程详解

第 1 步:计算输出左上角元素

将 3×3 滤波器覆盖到输入图像的左上角 3×3 区域,进行逐元素乘积后求和:

  • 第一列:3×1 + 1×1 + 2×1 = 6
  • 第二列:0×0 + 5×0 + 7×0 = 0
  • 第三列:1×(-1) + 8×(-1) + 2×(-1) = -11
  • 求和:6 + 0 + (-11) = -5 [04:08]

第 2 步:向右滑动一格

滤波器右移一步,覆盖新的 3×3 区域:

  • 0×1 + 5×1 + 7×1 + 1×0 + 2×0 + 2×0 + 2×(-1) + 9×(-1) + 5×(-1) = -4 [05:03]

第 3 步:继续右移

  • 得到 0 [05:10]

第 4 步:右移到最右

  • 2 + 9 + 5 = 16(左列),中间列为 0,右列 (4+1+3)×(-1) = -8
  • 16 - 8 = 8 [05:19]

第 5 步:下移一行

滤波器向下移动一行,重复逐元素乘积求和:

  • 得到 -10 [05:54]

第 6 步:继续滑动

  • 右移一格得 -2,再得 2,再得 3……依次完成所有元素 [06:04]

最终输出(4×4 矩阵):

-5   -4    0    8
-10  -2    2    3
...  ...  ...  ...
...  ...  ...  -16

右下角的 -16 来自图像右下角的 3×3 区域 [06:20]

3.3 矩阵视角

  • 左侧矩阵 → 可解释为图像
  • 中间矩阵 → 可解释为滤波器
  • 右侧矩阵 → 可解释为另一张图像

思考:图像和滤波器本质上都只是不同维度的矩阵,CNN 的运算全部建立在矩阵运算之上。


四、编程实现中的卷积函数 [07:02]

在实际编程中,大多数语言不会用星号表示卷积,而是有专门的函数:

框架 函数名
课程编程练习 conv_forward
TensorFlow tf.nn.conv2d
Keras Conv2D

所有对计算机视觉有良好支持的深度学习框架,都会提供实现卷积运算的函数。[07:44]


五、为什么这能做垂直边缘检测? [07:53]

5.1 简化示例

构造一个简化的 6×6 图像:

  • 左半部分全部为 10(较亮的像素强度)
  • 右半部分全部为 0(较暗的像素强度)

可视化后:左半亮、右半暗,中间有一条明显的垂直边缘(从白到黑的过渡)[08:31]

5.2 卷积计算验证

用之前的 3×3 滤波器(左亮、中 0、右暗)进行卷积:

输出为 0 的位置(中间区域):

  • 左列:10 + 10 + 10 = 30
  • 中间列:0 + 0 + 0 = 0
  • 右列:-10 - 10 - 10 = -30
  • 结果:30 + 0 - 30 = 0 [09:05]

输出为 30 的位置(边缘处):

  • 左列:10 + 10 + 10 = 30
  • 中间列:0 + 0 + 0 = 0
  • 右列:-0 - 0 - 0 = 0
  • 结果:30 + 0 + 0 = 30 [09:29]

5.3 输出图像解读

将输出矩阵可视化为图像:

  • 中间亮区对应检测到的垂直边缘
  • 检测到的边缘看起来"很粗",这仅仅是因为示例使用了极小的 6×6 图像
  • 如果使用 1000×1000 的图像,边缘检测效果会非常好 [10:08]

5.4 核心直觉

垂直边缘检测的核心直觉: 垂直边缘就是一个 3×3 区域,其左侧是亮像素,右侧是暗像素,中间是什么并不重要。 当图像中间区域恰好满足"左亮右暗"的模式时,滤波器就会认为这里存在垂直边缘。[10:38]

理解:滤波器本质上是一个"模式匹配器"——它定义了要找的模式(左亮右暗),卷积运算则是在图像上滑动并量化每个位置与模式的匹配程度。


六、关键要点总结

  1. 卷积是 CNN 的基本构建块(fundamental building block)
  2. 6×6 图像与 3×3 滤波器卷积 → 4×4 输出
  3. 卷积计算 = 滤波器在图像上滑动,每个位置做逐元素乘积求和
  4. 特定的滤波器(1,1,1 / 0,0,0 / -1,-1,-1)可实现垂直边缘检测
  5. 检测原理:寻找"左亮右暗"的局部模式
  6. 实际编程中使用专门的卷积函数,而非星号运算符

七、【拓展】补充背景与注意事项

7.1 其他类型的边缘检测滤波器

  • 水平边缘检测:将垂直滤波器旋转 90°,即
    1   0  -1
      1   0  -1
      1   0  -1
    
  • Sobel 滤波器:给中间行/列更大权重,抗噪性更好
  • Scharr 滤波器:Sobel 的改进版

思考:在 CNN 中,滤波器的数值不是手工设计的,而是通过反向传播学习得到的。这正是深度学习相比传统计算机视觉的优势——不需要人工设计特征。

7.2 容易踩坑的点

  • 符号混淆:数学中的 *(卷积)≠ Python 中的 *(乘法),阅读代码时务必注意
  • 术语不统一:filter = kernel,不同教材/论文叫法不同
  • 维度计算:输出尺寸 = 输入尺寸 − 滤波器尺寸 + 1(无 padding、stride=1 时)
  • 灰度 vs 彩色:灰度图是 6×6×1,彩色图是 6×6×3,通道数不同

7.3 与后续内容的衔接

本节展示的是单通道、无 padding、步长为 1 的最基础卷积。后续课程将扩展到:

  • Padding(填充)——保持输出尺寸
  • Strided convolution(步长卷积)——压缩输出尺寸
  • 多通道卷积(3D 卷积)
  • 多滤波器(输出多通道特征图)

关键标签 / 关键词

卷积运算 边缘检测 CNN 滤波器 Kernel 垂直边缘 深度学习 吴恩达 计算机视觉 特征提取 逐元素乘积 conv_forward tf.nn.conv2d


生成时间:2026-10-10 22:44:48 生成平台:VideoNote www.xygy.top