第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,擅长目标检测领域,拥有多项竞赛经历,拥有软件著作权,核心期刊等经历。

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

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

相关推荐
allione6 小时前
AI时代测试方向AI for Testing和Testing for AI
人工智能·ai测试
武子康6 小时前
GPT-Red:自动化红队如何形成 Agent 安全数据飞轮(4 个闭环 + 6 类评测指标 + 5 类风险误读)
人工智能·openai·agent
阿里云大数据AI技术6 小时前
DataWorks Data Agent 实战课堂(二):一句话搞定数据集成+处理,实现端到端数据流水线
人工智能·agent
Days20506 小时前
AI漫剧vs传统动漫vs真人短剧
人工智能
武子康6 小时前
从恶意 Dataset 到横向移动:一套可落地的 Dataset Processing Threat Model(资产边界 + 威胁枚举 + 5 层控制)
人工智能·安全
redreamSo6 小时前
一天涨 1800 星的 GitHub 榜首:AI 编程瓶颈变成了 token
人工智能·开源·github
wp123_16 小时前
实测数据对飙:COILCRAFT XFL4020-222MEC vs TONEVEE MVL4020-2R2M,2.2µH功率电感参数全解读
人工智能
本末倒置1836 小时前
从 PDF 到向量检索:一个最简单的本地 RAG 入库案例
人工智能
QYR-分析6 小时前
智能化自动化浪潮下,机器人末端执行器行业赛道发展全景解析
人工智能·机器人·自动化