A5 · DETECTION

从 dense feature 到结构化预测

用 anchor、IoU、matching、loss 与 NMS 审计检测系统的对象关系。

Box geometryMatching invariantsDetection evaluation

Review Lab,不是作业答案。阅读现有实现,先预测,再运行小实验并解释证据;原始仓库快照是代码事实来源。

阶段 01

边界框的几何

让坐标约定、面积与 IoU 在 tiny boxes 上完全确定。

为什么需要它

大多数检测 bug 先表现为几何约定错,而不是网络不够强。

开始前应该已经会回答

  • 能手算两个方框交并面积
  • 知道像素闭区间约定影响 +1

输入、输出与契约

输入
boxes [N,4]
输出
IoU [N,M]
不变量
  • IoU ∈ [0,1]
  • 无交集时 intersection 为 0
不成立的假设
  • 混用 xyxy 与 xywh
  • 宽高为负仍继续计算

用最小例子检查

手算 [0,0,2,2] 与 [1,1,3,3] 的 IoU,并注明坐标约定。

如果你看到……

IoU 大于 1

优先检查:union/intersection 或负宽高

相同框 IoU 不是 1

优先检查:面积约定

预测 → 实验 → 证据

先预测
相同框 IoU=1,完全分离=0,部分重叠介于两者。
做实验
建立三组 boxes 作为 geometry regression。
留证据
  • 坐标 convention
  • 手算值
  • 实现值

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先画平面

提示 2

clamp intersection

提示 3

独立测试 area

闭卷检查 · 边界框的几何

  • 三个边界 case 通过
  • 约定写入 contract
  • 矩阵轴可解释
阶段 02

匹配与损失

把 anchors 分成 positive/negative/ignore,并分别计算分类和回归损失。

为什么需要它

错误 matching 会让模型从矛盾标签学习。

开始前应该已经会回答

  • 会解释 threshold 区间
  • 能区分 classification 与 box target

输入、输出与契约

输入
anchors, GT boxes/classes
输出
matched targets + losses
不变量
  • 回归只作用于 positive
  • 每个 target 规则确定
不成立的假设
  • 让 ignore 样本进入分类损失
  • 按预测分数而非 GT 匹配

用最小例子检查

给 4 个 anchors 的 IoU [0.8,0.55,0.3,0.05],按给定阈值手工分类。

如果你看到……

box loss 被大量背景主导

优先检查:positive mask

正样本数量为 0

优先检查:阈值与 best-match 规则

预测 → 实验 → 证据

先预测
提高 positive threshold 通常减少正样本并提高匹配质量,但可能降低 recall。
做实验
固定预测,只改变 matching threshold,记录样本数与 loss 组成。
留证据
  • positive/ignore/negative count
  • loss components
  • threshold

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先只输出 labels

提示 2

再检查 regression targets

提示 3

最后接 loss

闭卷检查 · 匹配与损失

  • 匹配可手推
  • loss mask 正确
  • 能解释阈值取舍
阶段 03

非极大值抑制

让 score sorting 与 IoU suppression 产生确定候选集合。

为什么需要它

NMS 是离散决策,不属于训练网络本身,却直接改变 precision/recall。

开始前应该已经会回答

  • 会手推三框 NMS
  • 能区分 class-aware/class-agnostic

输入、输出与契约

输入
boxes + scores
输出
kept indices
不变量
  • 先保留高分候选
  • suppression 只比较指定类别策略
不成立的假设
  • 按输入顺序处理
  • 把 NMS threshold 当置信度 threshold

用最小例子检查

三个框中两个高度重叠,第三个独立;写出不同 IoU threshold 的保留集合。

如果你看到……

低分框压掉高分框

优先检查:排序方向

不同类别互相删除

优先检查:NMS 是否应 class-aware

预测 → 实验 → 证据

先预测
降低 NMS IoU threshold 会更激进抑制,可能提高 precision、降低 recall。
做实验
固定模型输出 sweep 两个 NMS threshold。
留证据
  • kept count
  • precision/recall
  • 类别策略

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先排序

提示 2

每轮只保留一个最高分

提示 3

打印被谁抑制

闭卷检查 · 非极大值抑制

  • toy trace 正确
  • 阈值效果可解释
  • 结果确定
阶段 04

检测器的证据

用错误类型而非单一 mAP 解释检测器。

为什么需要它

mAP 聚合了分类、定位、漏检与重复框,不能单独定位 bug。

开始前应该已经会回答

  • 会区分 FP/FN/localization error
  • 知道 confidence threshold 改变 operating point

输入、输出与契约

输入
predictions + GT + evaluation config
输出
metric + error evidence
不变量
  • 坐标尺度一致
  • metric 配置与类别集合记录
不成立的假设
  • 只看一张好图
  • 在不同 NMS/score threshold 下直接比 mAP

用最小例子检查

挑一张图手工标注每个 prediction 属于 TP/duplicate/localization/background。

如果你看到……

可视化看似对但 mAP 低

优先检查:坐标缩放、类别 id、evaluation config

很多重复框

优先检查:NMS 与 matching

预测 → 实验 → 证据

先预测
若主要问题是定位,放宽 evaluation IoU 会显著改善;若是分类则不会。
做实验
在两个 evaluation IoU 下分解错误,并查看代表样本。
留证据
  • metric config
  • error counts
  • representative evidence

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先验证坐标反变换

提示 2

再拆分类与定位

提示 3

最后调 threshold

闭卷检查 · 检测器的证据

  • metric 可复现
  • 至少三类错误有证据
  • 提出针对机制的下一实验

复盘与迁移