第11讲 | 目标检测任务:边界框、IoU、类别与置信度

第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 标签常用归一化格式
框有没有超出图像范围 越界框会影响训练质量
xyxyxywh 是否混用 格式混乱会导致框位置错误
训练前是否可视化标签 这是发现标注问题最快的方法

最小可视化思路:

text 复制代码
随机抽 20 张训练图
把标签框画上去
确认类别名、框位置、框大小都正确
再开始训练

十、今天的学习任务

如果你是科研小白,今天只做 5 件事:

  1. 手写一个 xywh -> xyxy 转换函数。
  2. 手算两个框的 IoU。
  3. 用 Python 跑一遍 IoU 计算代码。
  4. 打开自己的 YOLO 标签,确认类别 id 是否从 0 开始。
  5. 随机可视化 20 张图片的标注框。

完成这 5 步,你对目标检测的理解会从"看框"变成"懂框"。


十一、三句话复盘

  1. 目标检测回答三个问题:在哪里、是谁、多确定。
  2. 边界框负责定位,类别负责识别,置信度负责筛选。
  3. IoU 衡量两个框的重合程度,是评估、匹配和后处理的基础。

写在最后

学术因方向、个人实验和写作能力以及具体创新内容的不同而无法做到一通百通,关注UP:Ai学术叫叫兽

在所有资料中留下联系方式以便在科研之余为家人们答疑解惑,本up主获得过国奖,发表多篇SCI,擅长目标检测领域,拥有多项竞赛经历,拥有软件著作权,核心期刊等经历。

因为经历过所以更懂小白的痛苦!
因为经历过所以更具有指向性的指导!

祝所有科研工作者都能够在自己的领域上更上一层楼!

相关推荐
AI情绪识别开源1 小时前
检信AI高一分班分科智选评估系统 v2.0测试报告
开发语言·数据结构·人工智能·科技
陆枫Larry1 小时前
修复问题复盘prompt 分享
人工智能
yyk333241 小时前
OpenCV中运动目标检测
opencv·目标检测·目标跟踪
晚风醉蝶2 小时前
DeepSeek 大模型落地应用与场景实践指南
大数据·人工智能
武子康2 小时前
把生产 Agent 事故 Trace 变成可重放的回归测试集
人工智能·llm·agent
xierui1231232 小时前
Midjourney V8.2Edit 更新:如何设计可编辑、可追溯的 AI图片生产流水线
人工智能·midjourney
9000AI2 小时前
AI真正重构的,是企业市场能力的生产关系:9000AI创始人李家旺谈组织智能、关键结果节点与流量产能
人工智能
心易行者2 小时前
从零搭建完整Web应用:7步走完全流程,配合web应用托管零门槛上线
人工智能·python·ai编程
一个处女座的程序猿2 小时前
Agent之Human-Agent Teaming:Cumora(面向人类与 AI Agent 协作的聊天应用)的简介、安装和使用方法、案例应用之详细攻略
人工智能·agent·cumora