YOLO 网格预测
搞懂 YOLO 网格预测:Grid 分工、置信度与训练/测试逻辑
很多人学习 YOLO 时,都会被几个问题反复困扰:
- YOLO 的 Grid 网格明明很小,为什么能框出超大的物体?
- 训练时靠真实框分配网格,那测试时没有标注框怎么办?
- 置信度到底是什么?为什么模型会自动输出高低分?
- YOLO 网格和 Faster R-CNN 的 Anchor 锚框有什么本质区别?
这些问题如果想不通,后面学习 YOLOv5、YOLOv8、RT-DETR、DINO 等现代检测器都会非常痛苦。
本文从零开始,用最直观的大白话彻底讲透 YOLOv1 的核心思想。
一、先纠正 3 个致命误区
误区1:Grid 网格是用来框物体的
这是最常见的错误理解。
很多人看到 YOLO 把图片划分成很多小网格,就会认为:
网格有多大,预测框就只能有多大。
实际上完全不是这样。
Grid 的作用从来不是画框。
Grid 本质上只是一个:
任务分工系统(Task Assignment System)
它只负责回答一个问题:
这个物体应该由谁负责预测?
而不是:
这个物体应该框多大?
因此:
- Grid ≠ 检测框
- Grid ≠ Anchor
- Grid ≠ Bounding Box
Grid 只是一个逻辑工位。
误区2:网格很小,所以只能检测小物体
这也是初学者非常容易产生的误解。
例如:
YOLOv1 输入:
448×448
划分:
7×7 Grid
则每个 Grid 大约:
64×64
很多人会想:
Grid只有64×64
那它最多检测64×64的目标?
错。
原因在于:
CNN 的感受野(Receptive Field)远大于 Grid。
例如:
Grid:
只负责预测
CNN:
看的是整张图
可以理解成:
一个工位坐在办公室角落
但监控屏幕能看到整个公司
因此:
一个 Grid 完全可以预测:
- 横跨多个 Grid 的目标
- 覆盖整张图片的目标
- 比自己大几十倍的目标
Grid 小,不代表视野小。
误区3:测试时模型靠真实框分配网格
很多人以为:
训练:
中心点属于哪个Grid
测试:
也要先找到中心点
这其实是不可能的。
因为测试时:
没有GT框
没有中心点
没有标签
模型根本拿不到任何真实信息。
因此:
测试阶段不存在:
人为分配
而是:
模型自主预测
这一点非常重要。
二、YOLO Grid 的唯一核心作用
一句话概括:
Grid 存在的意义就是分工与去重。
如果没有 Grid 会怎样?
假设整张图所有位置都能自由预测。
例如:
图片里有一只狗
那么:
位置A预测狗
位置B预测狗
位置C预测狗
位置D预测狗
最终可能产生:
几十个重复框
例如:
Dog 0.91
Dog 0.89
Dog 0.88
Dog 0.87
Dog 0.85
全部框住同一只狗。
模型会变得非常混乱。
YOLO 的解决方案
YOLO规定:
哪个Grid包含目标中心点
哪个Grid负责预测
例如:
狗
+----+----+----+
| | | |
+----+----+----+
| | ● | |
+----+----+----+
| | | |
+----+----+----+
中心点落在中间 Grid。
那么:
中间Grid:
负责预测
其他Grid:
不允许预测
这样:
一个目标
一个负责人
避免重复预测。
三、训练阶段到底发生了什么?
很多人以为:
模型先找到物体
再决定谁负责
实际上完全相反。
训练阶段:
先人为决定谁负责
再训练模型学习
Step1:计算中心点
假设标注框:
xmin=100
ymin=120
xmax=300
ymax=320
计算中心点:
cx=(100+300)/2=200
cy=(120+320)/2=220
Step2:计算属于哪个 Grid
图片:
448×448
划分:
7×7
单个 Grid:
64×64
则:
row = 220 / 64
col = 200 / 64
得到:
第3行第4列
于是:
负责Grid = (3,4)
注意:
这里完全是数学计算。
不是模型判断出来的。
Step3:给 Grid 打标签
负责 Grid:
Confidence=1
其他 Grid:
Confidence=0
例如:
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
只有一个正样本。
Step4:回归框坐标
负责 Grid 学习:
x
y
w
h
其中:
x,y
表示中心点偏移
w,h
表示目标尺寸
同时学习:
类别
例如:
Dog
Step5:损失函数反向传播
损失函数会持续惩罚:
负责 Grid
如果:
置信度低
框不准
类别错
就会产生较大损失。
背景 Grid
如果:
乱输出高置信度
同样会被惩罚。
经过大量训练后:
模型逐渐学会:
看到狗的特征
输出高置信度
看到背景
输出低置信度
四、YOLOv1 的置信度到底是什么?
这是很多教程讲错的地方。
很多人以为
Confidence=P(Object)
实际上不准确。
YOLOv1原论文定义:
Confidence=P(Object)×IoU
即:
目标存在概率×预测框质量
例如:
情况1
有目标:
P(Object)=1
IoU=0.9
则:
Confidence=0.9
情况2
有目标但框很差:
P(Object)=1
IoU=0.3
则:
Confidence=0.3
情况3
没有目标:
P(Object)=0
则:
Confidence=0
因此:
YOLOv1 的置信度实际上同时考虑:
- 有没有目标
- 框得准不准
五、测试阶段没有GT怎么办?
这是 YOLO 最反直觉的地方。
训练时:
知道GT
测试时:
什么都不知道
怎么办?
答案:
全预测
再筛选
第一步
所有 Grid 同时预测。
例如:
7×7
共49个Grid
全部输出:
Bounding Box
Confidence
Class
第二步
模型自动产生高低分
训练好的模型会形成规律:
目标中心附近Grid
高置信度
背景Grid
低置信度
例如:
0.01
0.02
0.95
0.03
0.01
第三步
置信度过滤
例如:
Threshold=0.5
保留:
Confidence > 0.5
删除:
Confidence < 0.5
第四步
NMS
多个重叠框:
0.95
0.91
0.88
保留最高:
0.95
其余删除。
最终得到唯一结果。
六、为什么小 Grid 能框超大目标?
关键原因:
Grid负责预测
Bounding Box负责描述目标
两者不是一回事。
YOLO预测:
(x,y,w,h)
其中:
x,y
中心点位置
w,h
目标宽高
例如:
Grid大小
64×64
但预测:
w=400
h=350
完全允许。
因此:
小Grid
可以预测大目标
没有任何冲突。
七、YOLOv1 与 Faster R-CNN 本质区别
| 特性 | Faster R-CNN | YOLOv1 |
|---|---|---|
| 预测单元 | Anchor | Grid |
| 框来源 | Anchor微调 | 直接回归 |
| 标签分配 | IoU匹配 | 中心点分配 |
| 检测方式 | Two-Stage | One-Stage |
| 推理速度 | 较慢 | 极快 |
| 重复预测 | 较多 | 较少 |
| 结构复杂度 | 高 | 低 |
八、现代 YOLO 其实已经不一样了
这一点特别重要。
很多人学完 YOLOv1 去看 YOLOv8:
直接懵掉
因为现代 YOLO 已经发生巨大变化。
YOLOv2~YOLOv7
采用:
Anchor-Based
即:
预设Anchor
预测偏移量
更接近 Faster R-CNN。
YOLOv8 / YOLO11 / YOLO12
采用:
Anchor-Free
即:
不再使用传统Anchor
预测方式已经和 YOLOv1 完全不同。
但核心思想仍然保留:
密集预测
端到端训练
一次前向完成检测
九、全文终极总结(面试背诵版)
Grid 的作用
仅负责分工与去重
不负责画框
训练阶段
GT框
↓
计算中心点
↓
分配负责Grid
↓
打标签
↓
损失函数训练
测试阶段
所有Grid预测
↓
置信度筛选
↓
NMS去重
↓
最终结果
为什么小Grid能预测大目标
Grid决定谁负责
Bounding Box决定框多大
二者互不限制。
置信度本质
YOLOv1:
Confidence
=
P(Object)
×
IoU
不是简单的:
P(Object)
一句话彻底理解 YOLO
Grid 不是用来框物体的,而是用来给物体分配“负责人”的;真正决定目标位置和大小的是网络回归出来的 Bounding Box,而不是网格本身。
更多推荐


所有评论(0)