目标检测核心 20% — 一切围绕”框 + 类 + 分数”

一句话:检测模型有几十种,但输出永远是三元组(框、类别、置信度),评估永远靠 IoU 阈值的 mAP。搞懂这两件事,换任何模型都只需重新读一遍后处理。


🎯 这 20% 能解决哪些问题

常见困惑本质本页答案
mAP 0.5 和 mAP 0.5:0.95 差在哪IoU 阈值是否严格见「IoU 与 mAP」
同一物体被框了三次NMS 没调好见「NMS 与它的替代」
小目标总是检不到特征图分辨率不足见「三类范式」与「小目标四招」
训练集 mAP 95%,现场一塌糊涂数据与场景不匹配见「数据比模型重要」
边缘设备跑不动未量化/未剪枝见「部署五步」

一、三类范式

graph LR
    A["两阶段<br/>R-CNN 系列<br/>先提候选再分类"] --> B["单阶段<br/>YOLO/SSD/RetinaNet<br/>直接回归"]
    B --> C["Anchor-free<br/>FCOS/CenterNet"]
    B --> D["端到端集合预测<br/>DETR 系列"]
范式代表优点代价
两阶段Faster R-CNN精度高,小目标友好慢
单阶段YOLO 系列、RetinaNet快,易部署密集小目标弱
Anchor-freeFCOS、CenterNet超参少,框更灵活需调中心/尺寸头
集合预测DETR、RT-DETR无需 NMS,流程简洁收敛慢、显存高

锚框(anchor)的作用与代价:预置不同尺度/长宽比的参考框,让网络回归偏移量。代价是要为数据集调 anchor 尺寸(用 k-means 聚类标注框)。


二、IoU 与 mAP

[ \text{IoU} = \frac{|A \cap B|}{|A \cup B|} ]

指标含义
mAP@0.5IoU ≥ 0.5 视为命中,按类平均
mAP@0.5:0.95IoU 从 0.5 到 0.95 每 0.05 取一次再平均,最严格
AP_small / medium / large按目标面积分组,暴露小目标弱点

常见误区:

  • 只看 mAP@0.5 → 框定位很粗也能高分,实际用起来”框不准”。
  • 平均掩盖类别差异 → 一定要打印逐类 AP,长尾类往往惨不忍睹。
  • 训练集与验证集同分布 → mAP 虚高,务必留不同摄像头/不同场景的测试集。

三、NMS 与它的替代

方法做法适用
硬 NMS剔除与最高分框 IoU > 阈值者默认方案
Soft-NMS按 IoU 衰减分数而非直接删密集人群
可学习 NMS / DETR模型内部去重端到端
按类 NMS每类独立做 NMS多类别必做

调参直觉:阈值 0.5–0.7。阈值太低 → 相邻物体被误删;太高 → 重复框残留。


四、数据比模型重要

环节关键实践
标注规范遮挡多少算标、截断物体标不标、同类合并规则,先写清
一致性双人标注 10% 抽样交叉校验,IoU 一致性 > 0.7
难例专门收集漏检/误检场景,做”难例集”
增广马赛克、随机缩放、色彩抖动、模糊、亮度变化
负样本加入纯背景图,降低误检

小目标四招:提高输入分辨率、切片推理(SAHI 式滑窗)、特征金字塔加层、专门采集小目标数据。


五、部署五步

步骤动作收益
1固定输入尺寸,导出 ONNX跨框架
2FP16 / INT8 量化(需校准集)2–4 倍加速
3算子融合与层剪枝10–30% 提速
4批处理与异步流水提升吞吐
5后处理移出 Python消除瓶颈

常被忽略:后处理(解码 + NMS)在 CPU 上可能比推理还慢。用向量化实现或放进推理引擎。


六、六个高频坑

坑表现纠正
类别不平衡长尾类 AP 接近 0重采样、focal loss
框抖动视频中框剧烈跳动时序平滑(卡尔曼/EMA)
置信度不可校准0.9 的框经常错温度缩放校准
忽略空场景无目标时也硬框加背景类 / 阈值+二次判定
训练分辨率与推理不一致效果骤降保持 letterbox 一致
类别名顺序错全类错乱用同一份 labels 文件校验

📋 一页速查

问题答案
检测输出是什么框 + 类 + 分数
首选评估指标mAP@0.5:0.95 + 逐类 AP
重复框怎么去NMS,按类独立做
小目标怎么救高分辨率 + 切片 + 加层
落地提速关键INT8 量化 + 后处理移出 Python
最常被忽略的检查逐类 AP 与跨场景测试集

🔗 相关链接

主题链接
计算机视觉概览计算机视觉
图像处理图像处理核心 20%
图像生成图像生成核心 20%
视频分析视频分析核心 20%
深度学习深度学习