第11讲 | 目标检测任务:边界框、IoU、类别与置信度
素材来源:B站视频《第11讲〈目标检测任务:边界框、IoU、类别与置信度〉》,UP主:Ai学术叫叫兽。本文为学习笔记式原创整理,适合科研小白按步骤复习和实操。
很多同学刚接触目标检测时,会把它理解成:
text
识别图片里有什么东西。
这个理解只说对了一半。
分类任务回答的是:
text
图里有什么?
目标检测要同时回答三个问题:
text
这个东西在哪里?
这个东西是谁?
模型有多确定?

- List item
所以本讲的核心关键词是:
text
边界框 bbox
类别 class
置信度 confidence
IoU
一、先区分:分类 vs 目标检测
| 任务 | 输入 | 输出 | 例子 |
|---|---|---|---|
| 图像分类 | 一张图片 | 一个类别 | 这张图是猫 |
| 目标检测 | 一张图片 | 多个框 + 类别 + 置信度 | 图中左上角有猫,右侧有人 |
目标检测输出通常长这样:
text
box_1: [x1, y1, x2, y2], class=cat, confidence=0.93
box_2: [x1, y1, x2, y2], class=person, confidence=0.88
box_3: [x1, y1, x2, y2], class=car, confidence=0.76
这里最重要的是:检测不是只判断类别,还要定位位置。
二、边界框:目标在哪里?
边界框 bounding box,简称 bbox,就是把目标用一个矩形框住。
常见坐标格式有两类:
| 格式 | 含义 | 常见场景 |
|---|---|---|
xyxy |
左上角和右下角:x1, y1, x2, y2 |
计算 IoU、可视化、后处理 |
xywh |
中心点和宽高:x_center, y_center, w, h |
YOLO 标签、模型预测 |
1. xyxy 格式
text
x1, y1:左上角坐标
x2, y2:右下角坐标
例子:
text
[100, 80, 240, 220]
表示这个框从 (100, 80) 到 (240, 220)。
2. xywh 格式
text
x_center, y_center:框中心点
w, h:框宽和高
例子:
text
[170, 150, 140, 140]
表示中心点在 (170, 150),宽高都是 140。
二者可以互相转换:
text
x1 = x_center - w / 2
y1 = y_center - h / 2
x2 = x_center + w / 2
y2 = y_center + h / 2

科研小白要特别注意:不同代码、不同数据集、不同模型可能使用不同框格式。格式没对齐,训练和评估都会错。
三、YOLO 标签格式:从标注文件开始理解检测
YOLO 常见标签格式是:
text
class_id x_center y_center width height
并且后面四个值通常是归一化到 0~1 的比例值。
例如:
text
0 0.512 0.438 0.240 0.180
含义是:
| 字段 | 解释 |
|---|---|
0 |
类别编号 |
0.512 |
框中心点 x,占图像宽度的比例 |
0.438 |
框中心点 y,占图像高度的比例 |
0.240 |
框宽,占图像宽度的比例 |
0.180 |
框高,占图像高度的比例 |
如果图像大小是 640x480,那么像素坐标大约是:
text
x_center = 0.512 * 640 = 327.68
y_center = 0.438 * 480 = 210.24
w = 0.240 * 640 = 153.6
h = 0.180 * 480 = 86.4
这一步必须会。很多训练失败不是模型问题,而是标签格式、归一化、类别编号错了。
四、类别:这个框里是谁?
类别 class 表示框住的目标属于哪个类别。
如果数据集有 3 类:
text
0: crack
1: scratch
2: pit
那么一条标签:
text
1 0.5 0.5 0.2 0.3
表示:
text
这张图中有一个 scratch,框中心在图像中间附近,宽约 20%,高约 30%。
科研小白常见错误:
| 错误 | 后果 |
|---|---|
| 类别编号从 1 开始 | YOLO 通常要求从 0 开始,类别会整体错位 |
data.yaml 类别顺序和标注不一致 |
训练出来类别名对不上 |
| 标注里有超出类别数的 id | 训练可能报错或指标异常 |
五、置信度:模型有多确定?
置信度 confidence 可以先理解为:
text
模型认为这个框里有目标,并且类别判断可靠的程度。
推理时你经常会看到:
text
person 0.91
car 0.84
cat 0.62
一般会设置一个阈值,例如:
text
confidence >= 0.25 才保留
阈值太低,会保留很多误检;阈值太高,可能漏掉真实目标。
| 阈值设置 | 结果 |
|---|---|
| 太低 | 框很多,误检多 |
| 合适 | 误检和漏检相对平衡 |
| 太高 | 框少,但漏检多 |
所以调 confidence 阈值时,不能只看框多不多,要结合 Precision、Recall 和错例图一起看。
六、IoU:两个框重合得好不好?

IoU,全称 Intersection over Union,中文常叫交并比。
它用来衡量两个框的重合程度:
text
IoU = 交集面积 / 并集面积
text
预测框 A
真实框 B
交集:A 和 B 重叠的区域
并集:A 和 B 覆盖的总区域
IoU 范围是 0~1:
| IoU | 含义 |
|---|---|
0 |
完全不重叠 |
0.5 |
有一定重合,检测任务常用门槛之一 |
1 |
两个框完全重合 |
手算 IoU 的步骤
假设两个框都是 xyxy 格式:
text
box_a = [x1a, y1a, x2a, y2a]
box_b = [x1b, y1b, x2b, y2b]
交集区域:
text
inter_x1 = max(x1a, x1b)
inter_y1 = max(y1a, y1b)
inter_x2 = min(x2a, x2b)
inter_y2 = min(y2a, y2b)
交集宽高:
text
inter_w = max(0, inter_x2 - inter_x1)
inter_h = max(0, inter_y2 - inter_y1)
面积:
text
inter_area = inter_w * inter_h
area_a = (x2a - x1a) * (y2a - y1a)
area_b = (x2b - x1b) * (y2b - y1b)
union_area = area_a + area_b - inter_area
IoU = inter_area / union_area
七、实操:用 Python 计算 IoU
python
def box_iou_xyxy(box_a, box_b):
x1a, y1a, x2a, y2a = box_a
x1b, y1b, x2b, y2b = box_b
inter_x1 = max(x1a, x1b)
inter_y1 = max(y1a, y1b)
inter_x2 = min(x2a, x2b)
inter_y2 = min(y2a, y2b)
inter_w = max(0, inter_x2 - inter_x1)
inter_h = max(0, inter_y2 - inter_y1)
inter_area = inter_w * inter_h
area_a = max(0, x2a - x1a) * max(0, y2a - y1a)
area_b = max(0, x2b - x1b) * max(0, y2b - y1b)
union_area = area_a + area_b - inter_area
if union_area == 0:
return 0.0
return inter_area / union_area
gt_box = [100, 100, 300, 300]
pred_box = [150, 150, 350, 350]
iou = box_iou_xyxy(gt_box, pred_box)
print(f"IoU = {iou:.4f}")
如果你用 PyTorch/torchvision,也可以直接用官方函数:
python
import torch
from torchvision.ops import box_iou
boxes1 = torch.tensor([[100, 100, 300, 300]], dtype=torch.float32)
boxes2 = torch.tensor([[150, 150, 350, 350]], dtype=torch.float32)
ious = box_iou(boxes1, boxes2)
print(ious)
注意:box_iou 默认输入是 xyxy 格式。
八、检测结果为什么会有很多重复框?
模型推理时,经常会对同一个目标预测出多个相近的框。
比如:
text
car 0.92
car 0.88
car 0.81
这些框位置很接近,实际上可能都指向同一辆车。
这时就需要后处理:NMS,非极大值抑制。
NMS 的直观逻辑:
text
先保留置信度最高的框
再删除和它 IoU 过高的重复框
继续处理剩下的框
虽然本讲重点不是 NMS,但你要知道:IoU 不只用于评估,也常用于去掉重复预测框。
九、目标检测新手检查清单
| 检查项 | 为什么重要 |
|---|---|
| 图片和标签是否一一对应 | 文件名错位会直接毁掉训练 |
| 类别 id 是否从 0 开始 | 类别编号错会导致训练异常 |
框是否归一化到 0~1 |
YOLO 标签常用归一化格式 |
| 框有没有超出图像范围 | 越界框会影响训练质量 |
xyxy 和 xywh 是否混用 |
格式混乱会导致框位置错误 |
| 训练前是否可视化标签 | 这是发现标注问题最快的方法 |
最小可视化思路:
text
随机抽 20 张训练图
把标签框画上去
确认类别名、框位置、框大小都正确
再开始训练
十、今天的学习任务
如果你是科研小白,今天只做 5 件事:
- 手写一个
xywh -> xyxy转换函数。 - 手算两个框的 IoU。
- 用 Python 跑一遍 IoU 计算代码。
- 打开自己的 YOLO 标签,确认类别 id 是否从 0 开始。
- 随机可视化 20 张图片的标注框。
完成这 5 步,你对目标检测的理解会从"看框"变成"懂框"。
十一、三句话复盘
- 目标检测回答三个问题:在哪里、是谁、多确定。
- 边界框负责定位,类别负责识别,置信度负责筛选。
- IoU 衡量两个框的重合程度,是评估、匹配和后处理的基础。
写在最后
学术因方向、个人实验和写作能力以及具体创新内容的不同而无法做到一通百通,关注UP:Ai学术叫叫兽
在所有资料中留下联系方式以便在科研之余为家人们答疑解惑,本up主获得过国奖,发表多篇SCI,擅长目标检测领域,拥有多项竞赛经历,拥有软件著作权,核心期刊等经历。
因为经历过所以更懂小白的痛苦!
因为经历过所以更具有指向性的指导!
祝所有科研工作者都能够在自己的领域上更上一层楼!