深度学习目标检测全解析
·
一、目标检测到底要解决什么问题?
简单说,目标检测要完成两个核心任务:
- 分类:判断图片里有哪些物体(比如 “人”“车”“狗”);
- 定位:找到每个物体在图片中的位置(用边界框标记)。
但实际应用中会遇到很多难点:
- 目标种类多、数量不固定(一张图可能有 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 筛选出 “最优的框”:
- 设定置信度阈值(如 0.5),过滤掉置信度低的框;
- 按置信度从高到低排序;
- 选置信度最高的框 A,加入最终结果;
- 剩下的框和 A 算 IoU,删掉 IoU > 阈值(如 0.5)的框(避免重复标注同一个目标);
- 重复 3-4 步,直到没有候选框。
总结
目标检测是计算机视觉的核心任务,从数据集标注到模型评估,每个环节都有细节要注意:
- 入门选 VOC 数据集练手,做真实场景用 COCO;
- 标注格式要和框架匹配(YOLO 用 TXT,VOC 用 XML);
- 评估重点看 mAP,实时场景优先选 One-Stage(如 YOLO),高精度场景选 Two-Stage(如 Faster R-CNN)。
更多推荐


所有评论(0)