目标检测全解析
一、目标检测的核心任务与挑战
1. 核心任务:“分类 + 定位” 双任务
目标检测本质是多任务学习,需同时完成两个目标:
- 类别预测:判断图像中每个物体属于哪个类别(如 “人”“车”“狗”);
- 位置定位:用边界框(Bounding Box)标记物体在图像中的具体位置。
例如,在一张街景图中,目标检测模型需输出 “汽车(x=100,y=200,w=150,h=100)”“行人(x=400,y=350,w=80,h=180)” 这类结果,既包含类别,也包含位置信息。
2. 三大核心挑战
目标检测面临的场景复杂,主要挑战包括:
- 目标种类与数量繁多:现实场景中物体类别多样(如 COCO 数据集包含 80 类),且单张图像可能包含多个目标;
- 目标尺度不均:同一物体在图像中可能呈现不同大小(如远处的小汽车与近处的大汽车);
- 外部环境干扰:物体可能被遮挡(如行人被树木遮挡)、存在图像噪声,或处于复杂背景中,影响检测精度。
二、目标检测常用数据集
数据集是模型训练与评估的基础,目前主流的目标检测数据集有以下 3 类:
数据集 | 图像数量 | 类别数量 | 目标标注数量 | 特点 |
---|---|---|---|---|
PASCAL VOC | VOC 2007:9963 张VOC 2012:23080 张 | 4 大类(如动物、交通工具)20 小类(如猫、汽车、自行车) | VOC 2007:24640 个VOC 2012:54900 个 | 入门级数据集,标注规范,常用于算法 baseline 验证 |
MS COCO | 约 20 万张 | 80 类(如人、狗、飞机、沙发) | 超过 50 万个 | 规模大、类别多,平均每张图含 7.2 个目标,更贴近真实场景,是当前主流评测基准 |
三、目标检测的标注格式(Ground Truth)
“Ground Truth”(真值标注)是人工标注的物体类别与边界框信息,不同数据集采用不同的标注格式,核心是用坐标描述边界框位置,常见格式有 3 种:
1. YOLO 格式(TXT 文件)
- 坐标定义:
(x, y, w, h)
,其中:x, y
:边界框中心点的横、纵坐标(归一化到 0~1,与图像宽高无关);w, h
:边界框的宽、高(同样归一化到 0~1)。
- 示例:若图像尺寸为 1000×800px,“狗” 的边界框标注为
Dog 0.1 0.75 0.15 0.125
,对应实际像素坐标为:- 中心点:(1000×0.1=100, 800×0.75=600);
- 宽高:(1000×0.15=150, 800×0.125=100)。
2. VOC 格式(XML 文件)
- 坐标定义:
(Xmin, Ymin, Xmax, Ymax)
,其中:(Xmin, Ymin)
:边界框左上角像素坐标;(Xmax, Ymax)
:边界框右下角像素坐标(非归一化,与图像分辨率相关)。
- 示例:“马” 的标注为
Horse 700 300 900 550
,表示左上角 (700,300)、右下角 (900,550)。
3. COCO 格式(JSON 文件)
- 坐标定义:
(Xmin, Ymin, W, H)
,其中:(Xmin, Ymin)
:边界框左上角像素坐标;W, H
:边界框的宽、高(非归一化)。
- 示例:“人” 的标注为
Person 400 400 100 500
,表示左上角 (400,400)、宽 100px、高 500px。
四、目标检测的核心评估指标
评估指标是判断模型性能的关键,目标检测需同时衡量 “分类准确性” 与 “定位准确性”,常用指标如下:
1. IoU(交并比):衡量定位准确性
IoU(Intersection over Union)是边界框重叠程度的度量,计算模型预测框与 Ground Truth 框的 “交集面积” 与 “并集面积” 的比值,公式为:\(IoU = \frac{Area_{交集}}{Area_{并集}}\)
- 取值范围:0~1,IoU 越接近 1,定位越准确;
- 应用场景:过滤低质量预测框(如设定 IoU>0.5 为 “有效定位”),区分 TP(真阳性)与 FP(假阳性)。
例如:
- IoU=0.9:预测框与真值框几乎完全重叠,定位准确;
- IoU=0.3:重叠度低,定位误差大。
2. TP/FP/TN/FN:分类与定位的综合判断
结合 “类别置信度” 与 “IoU”,将检测结果分为 4 类,是后续计算 Precision、Recall 的基础:
指标 | 定义 | 目标检测场景解释 |
---|---|---|
TP(真阳性) | 真值为正样本,预测也为正样本 | 预测类别正确,且 IoU > 设定阈值(如 0.5) |
FP(假阳性) | 真值为负样本,预测为正样本 | 两种情况:①类别预测错误;②类别正确但 IoU < 阈值(定位错误) |
TN(真阴性) | 真值为负样本,预测也为负样本 | 图像中无目标,模型也未检测出目标(无实际意义,通常忽略) |
FN(假阴性) | 真值为正样本,预测为负样本 | 图像中有目标,但模型未检测到(漏检) |
3. Precision(精确率)与 Recall(召回率)
Precision(查准率):衡量 “预测为正的结果中,真正为正的比例”,反映模型避免误检的能力:\(Precision = \frac{TP}{TP + FP}\)
- 例如:Precision=0.8,表示模型预测的 100 个目标中,80 个是真实存在的。
Recall(查全率):衡量 “所有真实正样本中,被模型正确检测出的比例”,反映模型避免漏检的能力:\(Recall = \frac{TP}{TP + FN}\)
- 例如:Recall=0.9,表示图像中 100 个真实目标,模型检测出 90 个。
权衡关系:Precision 与 Recall 通常呈负相关 —— 提高 Precision 可能导致 Recall 下降(如严格过滤预测框,减少误检但增加漏检),反之亦然。
4. P-R 曲线与 AP(平均精度)
- P-R 曲线:以 Recall 为横轴、Precision 为纵轴绘制的曲线,曲线越 “靠近右上角”,模型性能越好;
- AP(Average Precision):P-R 曲线下的面积,综合衡量模型在不同 Recall 阈值下的 Precision 表现,取值范围 0~1,AP 越高,模型分类与定位的综合性能越好。
AP 计算方法:11 点插值法(VOC 数据集标准)
- 取 11 个 Recall 阈值:\(R = [0, 0.1, 0.2, ..., 0.9, 1.0]\);
- 对每个 Recall 阈值r,取 Recall≥r时的最大 Precision 值;
- 计算这 11 个 Precision 值的平均值,即为 AP。
示例:若 11 个 Precision 值为\([1, 0.666, 0.4285, 0.4285, 0.4285, 0, 0, 0, 0, 0, 0]\),则:\(AP = \frac{1 + 0.666 + 0.4285×3 + 0×6}{11} ≈ 26.84\%\)
5. mAP(mean Average Precision):多类别综合指标
当数据集包含多个类别时,mAP 是 “每个类别 AP 的算术平均值”,公式为:\(mAP = \frac{AP_1 + AP_2 + ... + AP_n}{n}\)其中n为类别数,mAP 是目标检测算法的核心评测指标(如 COCO 数据集用 mAP@0.5 衡量模型性能)。
五、目标检测的主流算法
目标检测算法主要分为Two-Stage(两阶段) 和One-Stage(单阶段) 两大类,核心区别在于是否生成 “候选区域”(Proposal)。
1. Two-Stage(两阶段算法):精度优先
Two-Stage 算法分两步完成检测,先生成 “可能包含目标的候选区域”,再对候选区域进行分类与定位修正,精度高但速度较慢。
经典算法发展线
- R-CNN:首个基于深度学习的 Two-Stage 算法,用 Selective Search 生成候选区域,再用 CNN 提取特征并分类,但速度慢(重复计算特征);
- Fast R-CNN:引入 ROI Pooling,共享 CNN 特征计算,大幅提升速度;
- Faster R-CNN:用 RPN(Region Proposal Network)替代 Selective Search,端到端生成候选区域,成为 Two-Stage 算法的标杆;
- Cascade R-CNN:多阶段修正边界框,进一步提升定位精度。
核心流程
输入图像 → CNN 提取特征 → RPN 生成候选区域 → ROI Pooling 统一特征尺寸 → 分类 + 位置回归 → NMS 过滤冗余框 → 输出结果。
2. One-Stage(单阶段算法):速度优先
One-Stage 算法无需生成候选区域,直接在特征图上预测目标的类别与位置,速度快但精度略低于 Two-Stage,适合实时场景(如自动驾驶、视频监控)。
经典算法
- YOLO 系列(You Only Look Once):将图像划分为网格,每个网格预测多个边界框,速度极快(YOLOv5 可达到实时检测),是当前工业界应用最广的算法之一;
- SSD 系列(Single Shot MultiBox Detector):在不同尺度的特征图上检测目标,解决小目标检测问题;
- RetinaNet:引入 Focal Loss,解决正负样本不平衡问题,提升 One-Stage 算法的精度。
核心流程
输入图像 → CNN 提取多尺度特征 → 直接预测类别与边界框 → NMS 过滤冗余框 → 输出结果。
3. 关键技术:NMS(非极大值抑制)
无论是 Two-Stage 还是 One-Stage 算法,最终都会输出大量候选框,NMS(Non-maximum Suppression)用于过滤冗余框,保留最优结果,步骤如下:
- 设定置信度阈值(如 0.5),过滤低置信度候选框;
- 按置信度降序排列候选框;
- 选取置信度最高的框 A 加入输出列表,计算其他框与 A 的 IoU;
- 删除 IoU > 阈值(如 0.5)的候选框(与 A 重叠度高,视为同一目标);
- 重复步骤 3~4,直到候选框为空。