跳到主要内容

目标检测概述

本节定位

图像分类只能回答:

  • 这张图大概是什么

但很多真实任务需要更具体的问题:

图里有什么,而且它在哪里?

这就是目标检测的核心。

学习目标

  • 理解目标检测和图像分类的差别
  • 理解边界框、类别和置信度三要素
  • 通过可运行示例理解 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 误区三:多目标场景按单目标想

多目标会带来:

  • 重叠
  • 遮挡
  • 重复预测

小结

这节最重要的是建立一个检测判断:

目标检测是在同时解决“是什么”和“在哪里”两个问题,因此它天然比分类更复杂,也更接近真实视觉应用。


练习

  1. 自己换两组框坐标,看看 IoU 怎么变。
  2. 为什么说检测比分类更贴近真实视觉任务?
  3. 如果一个检测框分类对了但位置偏很多,这次预测能算好吗?为什么?
  4. 想一想:多目标场景为什么会比单目标场景难很多?