目标检测概述
本节定位
图像分类只能回答:
- 这张图大概是什么
但很多真实任务需要更具体的问题:
图里有什么,而且它在哪里?
这就是目标检测的核心。
学习目标
- 理解目标检测和图像分类的差别
- 理解边界框、类别和置信度三要素
- 通过可运行示例理解 IoU 这类核心指标直觉
- 建立检测任务和后续 YOLO / 检测实战之间的连接感
一、目标检测到底在做什么?
检测任务通常同时输出:
- 类别
- 边界框位置
- 置信度
例如:
- 一张街景图里有两辆车、一位行人
- 每个对象都要标出位置
这比整图分类复杂很多。
二、为什么分类模型不够用?
因为同一张图里可能:
- 有多个目标
- 目标大小不同
- 目标位置不同
图像分类只给整张图一个标签,
无法表达这些信息。
三、先看一个最小 IoU 例子
IoU 是检测里非常核心的概念,
因为它回答:
- 预测框和真实框到底重合得有多好
def iou(box_a, box_b):
ax1, ay1, ax2, ay2 = box_a
bx1, by1, bx2, by2 = box_b
inter_x1 = max(ax1, bx1)
inter_y1 = max(ay1, by1)
inter_x2 = min(ax2, bx2)
inter_y2 = min(ay2, by2)
inter_w = max(0, inter_x2 - inter_x1)
inter_h = max(0, inter_y2 - inter_y1)
inter_area = inter_w * inter_h
area_a = (ax2 - ax1) * (ay2 - ay1)
area_b = (bx2 - bx1) * (by2 - by1)
union = area_a + area_b - inter_area
return inter_area / union if union > 0 else 0.0
gt_box = (10, 10, 30, 30)
pred_box = (15, 15, 32, 32)
print("IoU =", round(iou(gt_box, pred_box), 4))
3.1 为什么这个指标特别重要?
因为检测不只是“有没有发现目标”,
还要看:
- 框得准不准
四、最容易踩的坑
4.1 误区一:检测只是分类加个框
框本身就是很难的回归问题。
4.2 误区二:只看分类分数
位置误差同样关键。
4.3 误区三:多目标场景按单目标想
多目标会带来:
- 重叠
- 遮挡
- 重复预测
小结
这节最重要的是建立一个检测判断:
目标检测是在同时解决“是什么”和“在哪里”两个问题,因此它天然比分类更复杂,也更接近真实视觉应用。
练习
- 自己换两组框坐标,看看 IoU 怎么变。
- 为什么说检测比分类更贴近真实视觉任务?
- 如果一个检测框分类对了但位置偏很多,这次预测能算好吗?为什么?
- 想一想:多目标场景为什么会比单目标场景难很多?