1. 任务定义与输入输出

目标检测旨在从图像或视频帧中找出目标的类别定位其在图像中的位置。典型输出是一组带有类别与置信度的边界框(bounding boxes):

  • kkk 个检测结果可写作:(Bk,,ck,,sk)\left(B_k,, c_k,, s_k\right)(Bk,,ck,,sk)
    其中 Bk=(x,y,w,h)B_k=(x,y,w,h)Bk=(x,y,w,h)(xmin⁡,ymin⁡,xmax⁡,ymax⁡)(x_{\min},y_{\min},x_{\max},y_{\max})(xmin,ymin,xmax,ymax)ck∈1,…,Cc_k\in{1,\dots,C}ck1,,C 为类别,sk∈[0,1]s_k\in[0,1]sk[0,1] 为置信度。

与相关任务的区别:

  • 分类(Classification):整图只有一个标签,无位置信息。
  • 定位(Localization):整图一个目标的类别与位置。
  • 语义分割(Semantic Segmentation):像素级类别,不区分同类实例。
  • 实例分割(Instance Segmentation):像素级且区分不同实例(常由检测结果进一步精化得到)。

2. 基本评价指标与度量

2.1 IoU(Intersection over Union)

两个框 BBBB′B'B 的重叠度:
IoU(B,B′)=∣B∩B′∣∣B∪B′∣. \mathrm{IoU}(B,B')=\frac{|B\cap B'|}{|B\cup B'|}. IoU(B,B)=BBBB.

2.2 精确率与召回率

给定阈值(如 IoU≥τ\mathrm{IoU}\ge \tauIoUτ)判定真阳性(TP)/假阳性(FP)/假阴性(FN):
Precision=TPTP+FP,Recall=TPTP+FN. \mathrm{Precision}=\frac{TP}{TP+FP},\qquad \mathrm{Recall}=\frac{TP}{TP+FN}. Precision=TP+FPTP,Recall=TP+FNTP.

2.3 AP 与 mAP

AP(Average Precision) 是精确率-召回率曲线下的面积:
AP=∫01p(r) dr  ≈  ∑n(Rn−Rn−1) Pn \mathrm{AP} = \int_0^1 p(r)\,dr \;\approx\; \sum_{n} (R_n - R_{n-1})\,P_n AP=01p(r)drn(RnRn1)Pn

mAP 是对所有类别 AP 取均值。常见设定:

  • VOCAP50\mathrm{AP}_{50}AP50τ=0.5\tau=0.5τ=0.5)。
  • COCOAP\mathrm{AP}APτ∈0.50,0.55,…,0.95\tau\in{0.50,0.55,\dots,0.95}τ0.50,0.55,,0.95 的平均,即 AP[.5:.95]\mathrm{AP}_{[.5:.95]}AP[.5:.95],并细分小/中/大目标。

3. 典型检测流水线

  1. 前向预测:网络输出候选框、类别分布、置信度等。
  2. 后处理:阈值筛选 + 非极大值抑制(NMS) 去冗余。
  3. 评估:与标注做匹配,计算 IoU、AP/mAP。

标准 NMS核心思想:在同一类别内,按置信度从高到低遍历,每次取最高分框,抑制与其 IoU 超过阈值的其它框。常见变体:Soft-NMS(软抑制)、DIoU-NMS(考虑中心距离)等。

4. 模型家族概览

4.1 Two-Stage:以 Faster R-CNN 为代表

  • Stage 1:区域建议网络(RPN)产生候选区域(RoIs)。
  • Stage 2:对每个 RoI 做特征对齐(RoI Pooling/Align)、分类与精修回归。
    特点:精度高、速度相对慢、适合离线或对精度要求更高的场景。

4.2 One-Stage:以 SSD / RetinaNet / YOLO 系列为代表

  • 直接在密集特征图上预测类别与框回归。
  • RetinaNet提出 Focal Loss 解决正负样本极度不平衡:
    FL(pt)=−αt(1−pt)γlog⁡(pt), \mathrm{FL}(p_t)=-\alpha_t(1-p_t)^\gamma\log(p_t), FL(pt)=αt(1pt)γlog(pt),
    其中 ptp_tpt 是对真实类别的预测概率,γ\gammaγ 通常取 222
    特点:结构简洁、推理快,适合实时场景。

4.3 Transformer 检测器:以 DETR 为代表

  • 视图像特征为序列,用 Transformer 编解码器与集合匹配(Hungarian Matching)输出固定数量的“查询框”。
  • 端到端、无需 NMS(理想状态),但对训练数据与收敛策略较敏感,后续有多种改进(更快收敛、更强多尺度)。

4.4 Anchor-Based 与 Anchor-Free

  • Anchor-Based:在每个位置预设若干长宽比/尺度的锚框(anchors),预测相对偏移量。
  • Anchor-Free:直接预测关键点/中心点与宽高(如 FCOS、CenterNet、YOLOX 等),减少超参,易泛化。

4.5 多尺度特征金字塔(FPN)

  • 自上而下融合不同分辨率特征(如 P3∼P7P_3\sim P_7P3P7),兼顾小/中/大目标。

5. 预测框的参数化与解码

以常见的 anchor-based 回归为例,预测相对锚框 (pw,ph)(p_w,p_h)(pw,ph) 的偏移 (tx,ty,tw,th)(t_x,t_y,t_w,t_h)(tx,ty,tw,th),解码为图像坐标:
x=σ(tx)+cx,y=σ(ty)+cy,w=pwetw,h=pheth, x=\sigma(t_x)+c_x,\quad y=\sigma(t_y)+c_y,\quad w=p_w e^{t_w},\quad h=p_h e^{t_h}, x=σ(tx)+cx,y=σ(ty)+cy,w=pwetw,h=pheth,
其中 (cx,cy)(c_x,c_y)(cx,cy) 是栅格位置偏移,σ(⋅)\sigma(\cdot)σ() 为 Sigmoid。
Anchor-free 常直接预测 (x,y,w,h)(x,y,w,h)(x,y,w,h) 或中心偏移与对数宽高。

6. 损失函数与标签分配(Assignment)

6.1 边框回归损失

  • Smooth L1(Huber)
    SmoothL1(x)={0.5βx2,∣x∣<β,∣x∣−0.5β,otherwise. \mathrm{SmoothL1}(x) = \begin{cases} \frac{0.5}{\beta}x^2, & |x| < \beta, \\[6pt] |x| - \frac{0.5}{\beta}, & \text{otherwise.} \end{cases} SmoothL1(x)= β0.5x2,xβ0.5,x<β,otherwise.

  • IoU 系损失(直接优化几何重叠):

    • GIoU=IoU−∣C∖(A∪B)∣∣C∣\mathrm{GIoU}= \mathrm{IoU}-\frac{|C\setminus(A\cup B)|}{|C|}GIoU=IoUCC(AB),损失 1−GIoU1-\mathrm{GIoU}1GIoU
    • DIoU=IoU−ρ2(b,b′)c2\mathrm{DIoU}= \mathrm{IoU}-\frac{\rho^2(\mathbf{b},\mathbf{b}')}{c^2}DIoU=IoUc2ρ2(b,b),考虑框中心距离。
    • CIoU=IoU−ρ2c2−αv\mathrm{CIoU}= \mathrm{IoU}-\frac{\rho^2}{c^2}-\alpha vCIoU=IoUc2ρ2αv,进一步约束宽高比,其中
      v=4π2(arctan⁡ ⁣(w′h′)−arctan⁡ ⁣(wh)) ⁣2 v = \frac{4}{\pi^2} \left( \arctan\!\left( \tfrac{w'}{h'} \right) - \arctan\!\left( \tfrac{w}{h} \right) \right)^{\!2} v=π24(arctan(hw)arctan(hw))2

6.2 分类与目标性损失

  • 多数方法采用交叉熵/二值交叉熵,或 Focal Loss 缓解极端不平衡。
  • One-stage 常显式预测 “目标性/对象ness” 分支,与框回归共享定位监督(部分方法将目标性回归为与 GT 的 IoU)。

6.3 标签分配策略

  • 阈值法:按 IoU 与阈值(如 0.50.50.5)划正负,常用于 Two-Stage。
  • ATSS:自适应选择每个 GT 附近 top-kkk anchors,再用 IoU 动态阈值划分正样本。
  • SimOTA / Task-Aligned:将分类分数与 IoU 融合做代价,动态选择正样本集合。
  • DETR 的集合匹配:求解匈牙利匹配最小化代价:
    Lmatch=∑i[−log⁡p^σ(i)(ci)+λL1∥bi−b^σ(i)∥1−λiou IoU(bi,b^σ(i))] \mathcal{L}_{\text{match}} = \sum_i \left[ -\log \hat{p}_{\sigma(i)}(c_i) + \lambda_{\text{L1}} \|\mathbf{b}_i - \hat{\mathbf{b}}_{\sigma(i)}\|_1 - \lambda_{\text{iou}} \, \mathrm{IoU}(\mathbf{b}_i, \hat{\mathbf{b}}_{\sigma(i)}) \right] Lmatch=i[logp^σ(i)(ci)+λL1bib^σ(i)1λiouIoU(bi,b^σ(i))]

6.4 多任务总损失

一般形式:
L=λclsLcls+λboxLbox+λobjLobj \mathcal{L} = \lambda_{\text{cls}} \mathcal{L}_{\text{cls}} + \lambda_{\text{box}} \mathcal{L}_{\text{box}} + \lambda_{\text{obj}} \mathcal{L}_{\text{obj}} L=λclsLcls+λboxLbox+λobjLobj

7. 后处理:NMS 与其变体

经典 NMS(按类别进行):

  1. 过滤置信度 <θscore<\theta_{\text{score}}<θscore 的预测;
  2. 取最高分框,加入结果集;
  3. 去除与之 IoU >θNMS>\theta_{\text{NMS}}>θNMS 的其余框;
  4. 重复直到候选为空。

Soft-NMS:不直接删除重叠框,而是按 IoU 衰减分数,更平滑,改善重叠目标召回。
DIoU-NMS:在排序/抑制时增加中心距离因素,提升密集场景表现。
Class-agnostic NMS:在长尾或类别重叠强的场景有时更稳健。

8. 数据与增强

8.1 标注与格式

  • VOC:XML;COCO:JSON;YOLO:TXT(每行:类、归一化中心与宽高)。
  • 数据划分建议:按图像层面实例层面统计分布,避免泄漏(例如视频帧跨集)。

8.2 常用增强

  • 几何:随机伸缩、翻转、旋转、仿射、随机裁剪/缩放,多尺度训练。
  • 颜色:亮度/对比度/饱和度/色相扰动。
  • 组合:MixUpMosaicCopy-Paste,对小目标与长尾类别有效。
  • 正负样本平衡:采样策略、Focal Loss、OHEM/Top-K 负样本。

9. 训练与调参要点

  • Anchor 设计:对 GT 框聚类(kkk-means/k-means++)得到尺度与纵横比组;Anchor-free 可省略。
  • 学习率策略:Warmup + 余弦退火/多段式;必要时用 EMA 稳定评估。
  • 批大小与累计:受显存限制可用梯度累积;同步 BN 或 GN 视平台选择。
  • 正负比/质心先验:控制正负样本比与中心区域先验(FCOS/YOLOX)。
  • 损失权重:调 λcls,λbox,λobj\lambda_{\text{cls}},\lambda_{\text{box}},\lambda_{\text{obj}}λcls,λbox,λobj;尝试 GIoU/DIoU/CIoU。
  • 收敛诊断:观察分类/回归/obj 三支损失与 PR 曲线的变化;做消融(单独关闭某些增强或模块)。

10. 推理与部署

  • 导出与加速:ONNX → TensorRT;算子融合、算子替换(激活/Conv+BN 折叠);半精度/INT8 量化。
  • 后处理优化:在引擎内实现 Batched NMS;合理设置 θscore\theta_{\text{score}}θscoreθNMS\theta_{\text{NMS}}θNMS
  • 延迟与吞吐权衡:小分辨率/轻量主干获得更低延迟;多尺度或 TTA 牺牲延迟换精度。
  • 边端部署:选择轻量主干(MobileNet、ShuffleNet、RepVGG Tiny 等)与小头部;静态输入尺寸减少引擎分支。

11. 常见挑战与策略

  • 小目标:提高输入分辨率、强化高分辨率层(P2/P3P_2/P_3P2/P3)、专用数据增强(Copy-Paste)、更密集先验。
  • 密集/遮挡:Soft/DIoU-NMS、更强的上下文(FPN/双向 FPN/PAN)、大感受野。
  • 长尾分布:重加权/重采样,类平衡损失(CB Loss)、focal-like 策略。
  • 域偏移:更贴近部署分布的增强、风格迁移、UDA/自训练。
  • 开放词汇/零样本:与视觉-语言模型(如 CLIP)对齐,文本提示驱动检测(Open-Vocabulary/Promptable/Refer-Detection)。
  • 视频检测:时序特征聚合、跨帧跟踪(MOT)、测试时时序 NMS。

12. 从零到一的实践路线

  1. 选定数据与评估协议(如 COCO 风格,目标场景的 IoU 阈值与 mAP 指标)。

  2. 先跑一个强健基线(如单一分辨率 + FPN + GIoU/CIoU + 标准 NMS)。

  3. 消融实验:逐个加入增强(Mosaic/MixUp)、ATSS/SimOTA、改损失(Focal/CIoU)。

  4. 错误分析

    • 看 PR 曲线与不同 IoU 阈值的 AP;
    • 统计误检类型(背景→前景、类间混淆)、漏检位置(边缘/拥挤区域/小目标)。
  5. 针对性改进:后处理阈值、特征金字塔层权重、Anchor/Stride、输入分辨率、类重加权等。

  6. 工程化:导出推理引擎(TensorRT/NCNN/OpenVINO)、量化/蒸馏、批量离线推理或在线实时部署。

13. 你需要记住的最小公式清单

  • IoU:,IoU=∣B∩B′∣∣B∪B′∣,,\mathrm{IoU}=\frac{|B\cap B'|}{|B\cup B'|},,IoU=BBBB,
  • Precision/Recall:,P=TPTP+FP,;R=TPTP+FN,,\mathrm{P}=\frac{TP}{TP+FP},;\mathrm{R}=\frac{TP}{TP+FN},,P=TP+FPTP,;R=TP+FNTP,
  • AP(离散近似):,AP≈∑n(Rn−Rn−1)Pn,,\mathrm{AP}\approx \sum_n (R_n-R_{n-1})P_n,,APn(RnRn1)Pn,
  • Focal Loss:,FL(pt)=−αt(1−pt)γlog⁡(pt),,\mathrm{FL}(p_t)=-\alpha_t(1-p_t)^\gamma\log(p_t),,FL(pt)=αt(1pt)γlog(pt),
  • GIoU/DIoU/CIoU:以 1−(G/DI/CI)IoU1-\mathrm{(G/DI/CI)IoU}1(G/DI/CI)IoU 为回归损失
  • 总损失:L=λclsLcls+λboxLbox+λobjLobj\mathcal{L} = \lambda_{\text{cls}} \mathcal{L}_{\text{cls}} + \lambda_{\text{box}} \mathcal{L}_{\text{box}} + \lambda_{\text{obj}} \mathcal{L}_{\text{obj}}L=λclsLcls+λboxLbox+λobjLobj

更多推荐