
视频元信息
- 系列:吴恩达深度学习专项课程 · 卷积神经网络(CNN)· 目标检测
- 课程编号:p135 / 30 - 3.5
内容摘要(TL;DR)
本视频讲解如何让目标检测输出更精确的边界框,核心是 YOLO(You Only Look Once)算法:将图像划分为网格,对每个网格单元应用图像分类与定位算法,输出 8 维标签向量(PC、BX、BY、BH、BW、C1、C2、C3)。采用卷积实现共享计算,速度极快,可支持实时检测。视频还详细讲解了边界框坐标的编码方式。
一、滑动窗口的局限:边界框不够精确 [00:00]
上一节学到的滑动窗口的卷积实现虽然计算效率更高,但存在一个问题:
它无法输出最精确的边界框。
- 滑动窗口只是在预设的一组位置上跑分类器,这些位置之间的间隔由步幅决定。
- 结果就是:没有一个框能完美匹配汽车的真实位置,只能选一个"最接近"的框。
- 真实标注(ground truth)中的完美边界框甚至不是正方形——它往往是一个略宽的矩形,具有横向的宽高比。
理解:滑动窗口的问题本质在于"离散采样"——框的位置和长宽比都被限制在有限的候选集合里,无法自由回归出任意形状的框。
核心问题:有没有办法让算法输出更精确的边界框?
二、YOLO 算法概述 [00:54]
YOLO = You Only Look Once(你只看一次)
考点:YOLO 的提出者 —— Joseph Redmon、Santosh Divvala、Ross Girshick、Ali Farhadi。这是一个常被考查的知识点。
基本思路:把图像划分成网格,对每个网格单元应用之前学过的图像分类与定位算法。
- 示例中假设输入图像为 100×100。
- 为便于讲解,使用 3×3 网格;实际实现中会用更细的网格,比如 19×19。
三、标签定义:8 维向量 Y [02:03]
对每个网格单元,定义一个 8 维标签向量 Y:
| 分量 | 含义 |
|---|---|
| PC | 该网格单元中是否有目标(0 或 1) |
| BX, BY | 目标中心点相对网格单元的坐标 |
| BH, BW | 边界框的高度、宽度(相对网格单元) |
| C1, C2, C3 | 类别标签(行人、汽车、摩托车) |
易错点:类别数不含背景类。 视频中识别 3 类目标(行人、汽车、摩托车)+ 背景类,但 C1、C2、C3 只对应这 3 个前景类,背景通过 PC=0 表示,不单独占一个类别分量。
网格单元的标注规则
- 左上角网格:没有目标 → Y = [0, ?, ?, ?, ?, ?, ?, ?],PC=0,其余为 don't care。
- 中间网格:虽然覆盖了两辆车的一部分,但两辆车的中心点都不在它里面 → 同样视为无目标,PC=0。
- 左侧绿色圈出的网格:包含左车的中心点 → PC=1,写入 BX、BY、BH、BW,类别为汽车 → [1, BX, BY, BH, BW, 0, 1, 0]。
- 右侧网格:包含右车的中心点 → 同样有完整标签。
关键规则:
考点:目标归属规则 —— YOLO 取每个目标的中心点(midpoint),将目标分配给包含该中心点的那个网格单元。即使目标跨越多个网格,也只归属到一个网格。
四、输出体积与网络训练 [04:58]
- 3×3 网格,每个网格一个 8 维向量 → 总输出体积为 3×3×8。
- 输出体积中每个 1×1×8 的位置,对应一个网格单元的 8 维目标向量。
- 没有目标的网格,其向量为 don't care。
训练过程:
- 输入:100×100×3 的图像 X。
- 网络:常规 CNN,包含卷积层、最大池化层等,最终映射到 3×3×8 的输出体积。
- 目标标签:Y 为 3×3×8 的体积。
- 使用反向传播训练网络,学习从输入 X 到输出体积 Y 的映射。
理解:这本质上是一个"多任务学习"——每个网格单元同时做三件事:判断有无目标(二分类)、回归边界框坐标(回归)、分类目标类别(多分类)。
五、测试阶段的推理 [07:07]
测试时:
- 输入图像 X,前向传播得到输出 Y(3×3×8)。
- 对 3×3 的每个位置,读取输出:
- 该位置是否有目标?(读 PC)
- 如果有,是什么类别?(读 C1、C2、C3)
- 该网格内目标的边界框是什么?(读 BX、BY、BH、BW)
前提假设:每个网格单元中最多只有一个目标。 如果网格单元中有多个目标,算法会出问题——这个问题后续视频会处理。
六、更细的网格:19×19 [07:49]
实际使用中,采用更细的网格,如 19×19:
- 输出体积变为 19×19×8。
- 网格更细 → 多个目标落入同一网格单元的概率更小。
- 再次强调:目标按中心点归属网格,每个目标只分配给一个网格单元。
思考:网格越细,定位精度越高,但计算量也越大,且每个网格单元的训练样本可能变得不均衡(大量无目标的网格)。这是实际工程中需要权衡的点。
七、YOLO 的两大优势 [08:42]
优势一:可输出任意宽高比的精确边界框
- 类似图像分类与定位算法,显式输出边界框坐标。
- 不受滑动窗口步幅限制,可输出任意宽高比的框,坐标更精确。
优势二:卷积实现,计算共享,速度极快
考点:YOLO 是单次卷积实现,不是对每个网格单独跑算法。
- 不是在三三得九的网格上跑 9 次算法,也不是在 19×19 网格上跑 361 次。
- 而是一次卷积实现,所有网格单元的计算共享大量计算量。
- 因此运行速度非常快,可用于实时目标检测。
八、边界框编码方式(BX, BY, BH, BW)[10:16]
以右侧汽车所在的网格单元为例,讲解坐标编码。
约定:
- 网格单元左上角为 (0, 0)。
- 网格单元右下角为 (1, 1)。
各参数含义:
| 参数 | 含义 | 取值范围 |
|---|---|---|
| BX | 中心点 x 坐标(相对网格单元) | 0 到 1 之间 |
| BY | 中心点 y 坐标(相对网格单元) | 0 到 1 之间 |
| BH | 边界框高度(相对网格单元高度) | 可大于 1 |
| BW | 边界框宽度(相对网格单元宽度) | 可大于 1 |
示例中:BX ≈ 0.4,BY ≈ 0.3,BW ≈ 0.9,BH ≈ 0.5。
易错点:BX、BY 必须在 0 到 1 之间。 因为按定义,中心点必然落在该网格单元内;若中心点超出边界,它就会被分配给相邻的网格单元。
但 BH、BW 可以大于 1。 当边界框超出网格单元范围时(例如一个很大的目标),其高度或宽度相对于网格单元的比例就会超过 1。
更高级的参数化方式【拓展】
考点:YOLO 论文中还有其他参数化方式,效果更好。
视频提到,YOLO 研究论文中还有更复杂的参数化方法:
- 使用 Sigmoid 函数确保 BX、BY 落在 0 到 1 之间。
- 使用 指数参数化(exponential parameterization) 确保 BH、BW 非负(≥ 0)。
理解:直接回归坐标容易出现数值不稳定或越界,用 Sigmoid/指数变换可以把输出约束到合法范围,这是目标检测中坐标回归的常见技巧。
不过视频中讲解的简单编码方式已经足够合理、可以正常工作。
九、关于 YOLO 论文的阅读建议 [13:30]
重要提醒:YOLO 论文是较难读的论文之一。
吴恩达老师分享了自己的亲身经历:
- 第一次读 YOLO 论文时,非常难理解。
- 甚至请了几位非常优秀的研究员朋友帮忙,他们理解某些细节也很吃力。
- 所以如果读论文时感到困难,这是正常的,不必气馁。
思考:读论文遇到困难是常态,即使是资深研究者也需要借助开源代码、联系作者等方式来理解细节。这是一个很实用的心态建设。
关键标签 / 关键词
YOLO #YouOnlyLookOnce #目标检测 #边界框预测 #BoundingBox #滑动窗口 #图像分类与定位 #网格划分 #8维标签向量 #PC #BX #BY #BH #BW #卷积实现 #实时检测 #吴恩达深度学习 #CNN #JosephRedmon #Sigmoid #参数化
生成时间:2026-10-11 00:12:59 生成平台:VideoNote www.xygy.top