一、目标检测到底要解决什么问题?

简单说,目标检测要完成两个核心任务:

  1. 分类:判断图片里有哪些物体(比如 “人”“车”“狗”);
  2. 定位:找到每个物体在图片中的位置(用边界框标记)。

但实际应用中会遇到很多难点:

  • 目标种类多、数量不固定(一张图可能有 1 只猫 + 3 个人);
  • 尺度差异大(远处的小物体和近处的大物体);
  • 外部干扰多(遮挡、模糊、光线差等)。

二、常用数据集:VOC、COCO 怎么选?

做目标检测离不开标注好的数据集,最经典的两个是 VOC 和 COCO,它们的差异直接影响后续模型训练和评估:

数据集 类别数量 图片数量 目标数量 特点
PASCAL VOC 4 大类(如 “人”“动物”)+20 小类 VOC2007:9963 张VOC2012:23080 张 VOC2007:24640 个VOC2012:54900 个 标注简洁,适合入门练手
MS COCO 80 类(更细分,如 “猫”“狗”“沙发”) 约 20 万张 超 50 万个 目标密度高(平均每张 7.2 个),贴近真实场景

三、标注格式:YOLO、VOC、COCO 的坐标怎么换算?

标注数据是 “告诉模型什么是对的”,不同框架用的格式不同,核心是边界框坐标的表示方式,这里一定要注意 “是否归一化”:

1. YOLO 格式(TXT 文件)

  • 用「中心点坐标 + 宽高」表示:(x, y, w, h)
  • 所有值都是归一化后的(除以图片宽高),范围在 0~1 之间。
  • 例:一张 1000×800 的图中,狗的框是 (100,600,150,100),归一化后就是 (0.1, 0.75, 0.15, 0.125)。

2. VOC 格式(XML 文件)

  • 用「左上角 + 右下角坐标」表示:(Xmin, Ymin, Xmax, Ymax)
  • 直接用像素值,不归一化。
  • 例:人在图中的左上角是 (400,400),右下角是 (500,900),就标注为 (400,400,500,900)。

3. COCO 格式(JSON 文件)

  • 用「左上角坐标 + 宽高」表示:(Xmin, Ymin, W, H)
  • 也是像素值,不归一化,和 VOC 的区别是 “用宽高代替右下角坐标”。

四、评估指标:IoU、AP、mAP 到底怎么算?

训练完模型,怎么判断它好不好用?这就需要一套标准化的评估指标,这里从基础到复杂一步步说:

1. 最基础:IoU(交并比)

判断 “模型预测的框” 和 “真实的框” 重合度的指标,公式很简单:IoU = 两个框的交集面积 / 两个框的并集面积

  • IoU 越接近 1,说明预测越准;
  • 通常设定阈值(如 0.5):IoU>0.5 算 “预测对”,<0.5 算 “预测错”。

2. 分类结果:TP、FP、TN、FN

先明确 “正样本” 是 “有目标的区域”,“负样本” 是 “无目标的区域”,再看预测结果:

指标 含义 目标检测中的解释
TP(真阳性) 真实有目标,模型也预测有 IoU > 阈值,预测对了
FP(假阳性) 真实无目标,模型预测有 IoU < 阈值,误把背景当目标
TN(真阴性) 真实无目标,模型也预测无 背景预测正确(一般不关注)
FN(假阴性) 真实有目标,模型没预测到 漏检了目标

3. 核心评估:Precision(精确率)& Recall(召回率)

  • Precision(精确率):模型预测为 “有目标” 的结果中,真正对的比例 → 反映 “不瞎标” 的能力,Precision = TP / (TP + FP)
  • Recall(召回率):真实存在的目标中,模型能找到的比例 → 反映 “不漏检” 的能力,Recall = TP / (TP + FN)

这两个指标通常是 “trade-off”:精确率高了,召回率可能低(比如模型只敢预测最确定的目标,会漏检);召回率高了,精确率可能低(比如模型把疑似目标都标出来,会多标错)。

4. 综合评估:AP(平均精度)& mAP(平均精度均值)

  • AP:针对单个类别,用 “P-R 曲线下的面积” 来综合 Precision 和 Recall(常用 “11 点法” 计算:取 Recall 为 0、0.1…1.0 共 11 个点,对应每个点的最高 Precision,再求平均);
  • mAP:所有类别的 AP 取算术平均 → 衡量模型在所有类别上的综合表现,是目标检测的 “黄金指标”。

举个例子:如果模型在 “猫” 类的 AP 是 85%,“狗” 类的 AP 是 75%,那 mAP 就是 (85%+75%)/2 = 80%。

五、主流算法:Two-Stage vs One-Stage

目标检测算法主要分两大派,核心区别是 “是否先找候选框”:

1. Two-Stage(两阶段):精准优先

2. One-Stage(单阶段):速度优先

3. 补充:Anchor-Based vs Anchor-Free

  • Anchor-Based:提前预设一批 “锚框”(不同大小、长宽比),模型在锚框基础上调整 → 如 Faster R-CNN、YOLO v3-v5;
  • Anchor-Free:不用预设锚框,直接从特征中找目标中心或关键点 → 如 CornerNet、FCOS(更灵活,适合不规则目标)。

六、最后:非极大值抑制(NMS)

不管哪种算法,最后都会输出一堆候选框,需要用 NMS 筛选出 “最优的框”:

  1. 设定置信度阈值(如 0.5),过滤掉置信度低的框;
  2. 按置信度从高到低排序;
  3. 选置信度最高的框 A,加入最终结果;
  4. 剩下的框和 A 算 IoU,删掉 IoU > 阈值(如 0.5)的框(避免重复标注同一个目标);
  5. 重复 3-4 步,直到没有候选框。

总结

目标检测是计算机视觉的核心任务,从数据集标注到模型评估,每个环节都有细节要注意:

  • 入门选 VOC 数据集练手,做真实场景用 COCO;
  • 标注格式要和框架匹配(YOLO 用 TXT,VOC 用 XML);
  • 评估重点看 mAP,实时场景优先选 One-Stage(如 YOLO),高精度场景选 Two-Stage(如 Faster R-CNN)。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐