
视频元信息
- 课程来源:吴恩达深度学习专项课程(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.
关键步骤:
- 物体仍然分配给包含其中心点的网格单元
- 同时,将该物体分配给与其形状 IOU 最高 的锚框
- 最终物体被编码为 (网格单元, 锚框) 的组合
重点: 物体分配的目标是"网格单元 + 锚框"的配对,而不仅仅是网格单元。
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 无法处理的情况
锚框算法的两个主要局限:
- 同一网格单元中有 3 个或更多物体 时,算法无法很好地处理
- 同一网格单元中有 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 网格单元与锚框的关系
- 网格单元:负责检测中心点落在其中的物体
- 锚框:负责检测特定形状的物体
- 组合:一个网格单元 + 一个锚框 = 一个检测槽位
重点: 输出维度 = 网格数 × 锚框数 × 每锚框输出维度
九、易错点与注意事项
锚框使用中的常见陷阱:
- 锚框数量选择:太少无法覆盖物体形状多样性,太多增加计算量
- IOU 阈值设置:匹配锚框时需合理设置 IOU 阈值
- don't care 参数:Pc=0 时其余参数不参与损失计算,但需正确设置
- 维度计算错误:输出维度 = 锚框数 × (5 + 类别数)
- 锚框形状与数据不匹配:锚框形状应基于训练数据分布选择
易错点: 不要混淆"网格单元分配"和"锚框分配"——物体先分配到网格单元,再分配到锚框,是两个独立的步骤。
十、本节总结
- 锚框解决的问题:同一网格单元中多个物体的检测冲突
- 核心机制:预定义多个形状模板,扩展输出向量维度
- 标签编码:物体分配给"网格单元 + 最高 IOU 锚框"的组合
- 输出维度:从 3×3×8 变为 3×3×16(2 个锚框)
- 真正价值:让学习算法专业化,分别检测不同形状的物体
- 锚框选择:手工选择或 K-means 聚类
- 局限性:无法处理 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