视频封面

视频元信息

  • 课程来源:吴恩达深度学习专项课程(Deep Learning Specialization)—— 卷积神经网络(CNN)第三周
  • 课程主题:目标检测(Object Detection)—— 锚框(Anchor Boxes)
  • 视频时长:约 9 分 36 秒
  • 语言:中英双语(官方字幕)

内容摘要(TL;DR)

本节讲解目标检测中的锚框(Anchor Boxes) 机制。当多个物体的中心点落在同一个网格单元时,单一输出向量无法同时表示两个目标。锚框通过预定义多个不同形状的边界框,让每个网格单元可以输出多个检测结果。本节还介绍了锚框的标签编码方式、IOU 匹配规则、算法的局限性以及如何选择锚框。


一、问题引入:同一网格单元中的多目标冲突 [00:25]

1.1 问题的提出

在目标检测中,通常将图像划分为网格(如 3×3 或 19×19),每个网格单元负责检测中心点落在其中的物体。

notice that the midpoint of the pedestrian and the midpoint of the car are in almost the same place, and both of them fall into the same grid cell.

问题场景:当行人和汽车的中心点几乎位于同一位置,同时落入同一个网格单元时,该网格单元的输出向量 Y 无法同时输出两个检测结果。

考点: 这是锚框机制要解决的核心问题——一个网格单元需要检测多个物体。

1.2 原有输出格式的局限

在引入锚框之前,每个网格单元的输出向量 Y 为 8 维:

分量 含义
Pc 是否有物体(0/1)
Bx, By 物体中心点坐标
Bh, Bw 边界框的高和宽
C1, C2, C3 类别概率(行人、汽车、摩托车)

易错点: 当检测 3 个类别时,Y 输出这个向量,它无法输出 2 个检测结果,所以必须在两个检测结果中选一个输出。

理解:这就像一个人只能填一张表格,但面前有两个物体需要登记,信息必然丢失。


二、锚框的核心思想 [00:55]

2.1 什么是锚框

what you're going to do is predefined two different shapes called anchor boxes.

锚框(Anchor Boxes) 是预先定义的、具有不同形状(高宽比)的边界框模板。

  • 一般可以使用 5 个甚至更多锚框
  • 为简化说明,本节使用 2 个锚框

2.2 输出向量的扩展

引入锚框后,输出向量从 8 维扩展为 16 维(2 个锚框 × 8):

锚框 1 对应的 8 个输出: Pc, Bx, By, Bh, Bw, C1, C2, C3

锚框 2 对应的 8 个输出: Pc, Bx, By, Bh, Bw, C1, C2, C3

重点: 输出向量本质上是将原来的 8 维向量重复两次,分别对应两个锚框。

2.3 物体与锚框的匹配

  • 行人的形状更接近锚框 1 → 用前 8 个数编码:Pc=1,边界框参数,类别为行人
  • 汽车的形状更接近锚框 2 → 用后 8 个数编码:Pc=1,边界框参数,类别为汽车

理解:锚框的作用类似于给每个网格单元配备了多个"专用检测器",每个检测器负责一种特定形状的物体。


三、训练标签的编码规则 [02:48]

3.1 无锚框时的做法

for each object in the training set image, it was assigned to the grid cell that corresponds to that object's midpoint.

  • 每个物体分配给包含其中心点的网格单元
  • 输出 Y 的维度为 3×3×8

3.2 有锚框时的做法

each object is assigned to the same grid cell as before... but it is assigned to a grid cell and anchor box with the highest IOU with the object's shape.

关键步骤:

  1. 物体仍然分配给包含其中心点的网格单元
  2. 同时,将该物体分配给与其形状 IOU 最高 的锚框
  3. 最终物体被编码为 (网格单元, 锚框) 的组合

重点: 物体分配的目标是"网格单元 + 锚框"的配对,而不仅仅是网格单元。

3.3 输出维度的变化

配置 输出维度
无锚框(3×3 网格,3 类别) 3×3×8
有锚框(2 个锚框) 3×3×16
等价视角 3×3×2×8

推导:16 = 2 个锚框 × 8 维向量;也可以理解为 3×3 网格中每个格子有 2 个锚框,每个锚框输出 8 维。

拓展: 如果有更多类别(如 20 类),Y 的维度会更高。例如 COCO 数据集有 80 类,每个锚框的输出维度为 5 + 80 = 85 维(5 为 Pc + 4 个边界框参数)。


四、具体示例:标签 Y 的构造 [05:00]

4.1 场景一:行人和汽车同时存在

对于下方中间那个网格单元(箭头所指):

锚框 1 部分(行人):

  • Pc = 1(有物体)
  • Bx, By, Bh, Bw = 行人的边界框参数
  • C1, C2, C3 = 1, 0, 0(行人类别)

锚框 2 部分(汽车):

  • Pc = 1(有物体)
  • Bx, By, Bh, Bw = 汽车的边界框参数
  • C1, C2, C3 = 0, 1, 0(汽车类别)

4.2 场景二:只有汽车,没有行人

  • 锚框 2 部分保持不变(仍编码汽车)
  • 锚框 1 部分:Pc = 0,其余参数为 don't cares(不关心)

易错点: 当某个锚框没有对应物体时,Pc=0,其余参数可以随意填写(don't care),因为损失函数不会计算这些无效分量。

思考:这种"don't care"的设计使得网络在训练时不会因为无物体锚框的参数而产生梯度,从而提高训练效率。


五、算法的局限性 [06:53]

5.1 无法处理的情况

锚框算法的两个主要局限:

  1. 同一网格单元中有 3 个或更多物体 时,算法无法很好地处理
  2. 同一网格单元中有 2 个物体但形状相同(对应同一个锚框)时,算法也无法处理

5.2 实际影响

  • 这些情况在实际中 很少发生,尤其是在使用 19×19 网格时
  • 161 个网格单元中,两个物体中心点重合的概率很低
  • 即使发生,对性能影响也不大

理解:锚框机制本质上是一种"以空间换表达"的策略——通过增加输出维度来提升表达能力,但并非万能。


六、锚框的真正价值:让学习算法更专业化 [07:38]

6.1 更好的动机

maybe even better motivation or even better results that anchor boxes gives you is it allows your learning algorithm to specialize better.

核心价值: 锚框让学习算法能够 专业化(specialize)。

6.2 专业化机制

  • 数据集中有 高瘦物体(如行人)和 宽扁物体(如汽车)
  • 锚框允许:
    • 部分输出单元专门检测宽扁物体(如汽车)
    • 部分输出单元专门检测高瘦物体(如行人)

重点: 这是锚框比"解决多目标冲突"更重要的实际价值。

思考:这与神经网络中"不同神经元学习不同特征"的思想一致——通过结构设计引导网络分工,提高整体效率。


七、如何选择锚框 [08:34]

7.1 手工选择(传统方法)

  • 选择 5 到 10 种不同形状的锚框
  • 覆盖你预期检测的物体类型
  • 包含高瘦型和宽扁型

7.2 K-means 聚类(进阶方法)

use a K-means algorithm to group together the type of object shapes you tend to get.

方法:

  • 使用 K-means 算法对训练集中物体形状进行聚类
  • 选择最具代表性的锚框形状
  • 适用于检测数十种物体类别的场景

拓展: 这一方法在 YOLO v2 论文中被正式提出("Dimension Clusters"),通过 K-means 聚类自动选择锚框尺寸,显著提升了检测精度。K-means 的距离度量通常使用 1 - IOU 而非欧氏距离。

7.3 选择建议

  • 手工选择时,确保形状多样性
  • 覆盖高瘦和宽扁两类极端形状
  • 锚框数量与计算成本权衡(越多越慢)

八、关键概念解释

8.1 IOU(Intersection over Union,交并比)

定义: 两个边界框的交集面积除以并集面积。

公式: IOU = 交集面积 / 并集面积

作用:

  • 判断两个边界框的重叠程度
  • 在锚框匹配中,选择与物体形状 IOU 最高的锚框

理解:IOU 是目标检测中最常用的相似度度量,取值范围 [0, 1],值越大表示两个框越重合。

8.2 锚框与边界框的区别

概念 含义
锚框(Anchor Box) 预定义的形状模板,固定不变
边界框(Bounding Box) 模型预测的实际物体位置,可调整

思考:锚框是"先验知识",边界框是"预测结果"。网络学习的是从锚框到真实边界框的偏移量。

8.3 网格单元与锚框的关系

  • 网格单元:负责检测中心点落在其中的物体
  • 锚框:负责检测特定形状的物体
  • 组合:一个网格单元 + 一个锚框 = 一个检测槽位

重点: 输出维度 = 网格数 × 锚框数 × 每锚框输出维度


九、易错点与注意事项

锚框使用中的常见陷阱:

  1. 锚框数量选择:太少无法覆盖物体形状多样性,太多增加计算量
  2. IOU 阈值设置:匹配锚框时需合理设置 IOU 阈值
  3. don't care 参数:Pc=0 时其余参数不参与损失计算,但需正确设置
  4. 维度计算错误:输出维度 = 锚框数 × (5 + 类别数)
  5. 锚框形状与数据不匹配:锚框形状应基于训练数据分布选择

易错点: 不要混淆"网格单元分配"和"锚框分配"——物体先分配到网格单元,再分配到锚框,是两个独立的步骤。


十、本节总结

  1. 锚框解决的问题:同一网格单元中多个物体的检测冲突
  2. 核心机制:预定义多个形状模板,扩展输出向量维度
  3. 标签编码:物体分配给"网格单元 + 最高 IOU 锚框"的组合
  4. 输出维度:从 3×3×8 变为 3×3×16(2 个锚框)
  5. 真正价值:让学习算法专业化,分别检测不同形状的物体
  6. 锚框选择:手工选择或 K-means 聚类
  7. 局限性:无法处理 3 个以上物体或同形状多物体的情况

下节预告: 下一节将把之前学到的所有内容整合起来,形成完整的 YOLO 算法。


关键标签 / 关键词

锚框 Anchor Boxes 目标检测 Object Detection YOLO IOU 交并比 网格单元 Grid Cell 边界框 Bounding Box K-means 深度学习 吴恩达 CNN 计算机视觉 多目标检测 标签编码 损失函数


生成时间:2026-10-11 00:47:37 生成平台:VideoNote www.xygy.top