两个目标检测模型到底差在哪?DnD 给了一个简单到令人惊讶的答案
一个尴尬的问题
你训练了两个目标检测模型。模型 A 的 mAP 是 42.3,模型 B 的 mAP 是 41.8。你知道 A 比 B 好 0.5 个点。
然后呢?
这 0.5 个点到底意味着什么?是 A 多找到了一些 B 漏掉的物体?还是 A 的定位更准?还是 A 的误检更少?它们犯的是同样的错误还是不同的错误?有没有可能 B 其实发现了某些 A 完全看不到的东西?
mAP 回答不了这些问题。TIDE 误差分析也回答不了。因为它们都是各自评估每个模型,然后把两个独立的报告并排放在一起。就像两个学生的成绩单——你知道总分差 5 分,但不知道他们是不是在同一道题上丢的分。
CVPR 2026 Workshop 上的这篇论文提出了一个朴素到几乎让人怀疑"这也算贡献?"的方法,但仔细想想,它填补了一个真实存在的空白。
DnD:检测差异法
核心思想极其简单:既然两个模型面对的是同一组真实标注(Ground Truth),那就直接比较它们各自匹配到了哪些标注。
具体来说,给定两个模型 M1 和 M2,用和 mAP 完全相同的匹配算法,分别把它们的预测和真实标注配对。然后,基于共享的真实标注集合,定义四个子集:
- B(Both):两个模型都检测到的物体
- M1(Only M1):只有 M1 检测到的物体
- M2(Only M2):只有 M2 检测到的物体
- N(Neither):两个模型都漏掉的物体
这四个集合构成了一个完整的韦恩图。B 是交集,M1 和 M2 是差集,N 是补集。
就这么简单。但这个简单的定义立刻解锁了传统方法做不到的事情。
为什么 mAP 做不到?
mAP 的计算过程是这样的:对每个模型,独立地运行匹配算法,计算精确率-召回率曲线,然后算曲线下面积。两个模型的 mAP 是各自独立算出来的,它们之间没有任何关联。
打个比方:两个医生分别给同一批病人做诊断。mAP 相当于分别统计两个医生的诊断准确率,然后比较数字。但你不知道的是——他们误诊的是同一批病人吗?有没有病人 A 误诊了但 B 诊断对了?有没有两人都漏诊的?
DnD 做的就是把两个医生的诊断结果放在一起,逐个病人对比。
和 TIDE 的互补
TIDE 是目前分析目标检测误差的主流工具。它定义了六种误差类型(分类错误、定位错误、两者皆错、重复检测、背景误检、漏检),并计算修复每种误差能带来多少 mAP 提升。
TIDE 很有用,但它仍然是"各自分析"。模型 A 的 TIDE 报告说"分类错误导致 mAP 损失 3.2",模型 B 的报告说"分类错误导致 mAP 损失 2.8"。你知道两者都有分类问题,但不知道是不是在同一张图、同一个物体上犯了分类错误。
DnD 的巧妙之处在于:它把 TIDE 的误差类型嫁接到了自己的集合定义上。对于两个模型都漏掉的物体集合 N,可以进一步用 TIDE 分析每个模型漏掉的原因——是分类错了?定位偏了?还是完全没检测到?
这样,N 集合中的误差就可以用一个标准的混淆矩阵来展示:行是 M1 的误差类型,列是 M2 的误差类型。对角线上的元素表示两个模型犯了相同类型的错误,非对角线元素则揭示了更微妙的故事——比如"同一个物体,M1 是分类错误,M2 是定位错误"。
实验:当 ViTDet 其实看到了 ConvNext 没看到的东西
论文的第一个实验比较了 Mask R-CNN 的两个骨干网络:ConvNext-v2-B 和 ViTDet-B。
传统指标显示 ConvNext-v2 的 mAP 更高(42.3 vs 40.9),mAR 也更好(53.8 vs 47.6)。TIDE 分析说 ViTDet 的主要问题是漏检太多。看起来 ConvNext-v2 全面碾压。
但 DnD 揭示了一个被掩盖的事实:ViTDet 确实检测到了一些 ConvNext-v2 完全没看到的物体(M2 集合非空)。虽然 ConvNext-v2 的独占检测 M1 远大于 M2,但 M2 的存在说明 ViTDet 不是简单的"弱化版 ConvNext"——它有不同的"视野"。
这个发现有什么用?如果你在做模型集成,两个模型看到不同的东西恰恰是好事。如果你在做知识蒸馏,M2 集合就是学生模型应该向老师学习的那部分。如果你在做可解释性分析,M2 中的实例就是最值得用 ODAM 热力图仔细看的案例——"为什么这个模型看到了,那个没看到?"
第二个实验:同一个模型,干净数据 vs 加噪数据
DnD 不只能比较两个模型,还能比较同一个模型在不同条件下的表现。
论文用 Mask R-CNN(FAN-S 骨干)分别在 MS-COCO 和加了高斯噪声的 COCO-C 上评估。DnD 直接告诉你:加噪后,模型丢失了哪些检测、保留了哪些、甚至——出乎意料地——新发现了哪些。
是的,有些物体在干净图像上没被检测到,加了噪声反而被检测到了。这听起来反直觉,但 DnD 的集合定义让这种异常无处藏身。噪声可能恰好改变了特征分布,使得某些原本处于决策边界附近的物体越过了阈值。
引导可解释性:在值得看的地方看
论文最精彩的主张是:DnD 最大的价值不是它本身的分析,而是它为可解释性方法提供的导航。
目标检测的可解释性方法(如 ODAM)可以生成热力图,告诉你模型关注了图像的哪些区域。但一个在 COCO val2017 上跑的模型可能产生超过 10 万个预测——你不可能逐个看热力图。
DnD 提供了自然的子集筛选:
- 看 M2 中的实例:为什么模型 B 看到了 A 没看到的?
- 看 N 集合中两个模型误差类型不同的实例:为什么同一个物体,一个分类错了,一个定位偏了?
- 看 B 集合中置信度差异大的实例:两个模型都检测到了,但一个很确信,一个很犹豫——为什么?
这些子集的规模远小于全量预测,而且每一个都是"有故事"的案例。可解释性方法用在这里,才真正"where it matters"。
局限性
论文坦承了两个局限:
- 目前只支持两个模型的比较。三个以上模型需要链式比较。扩展到多模型的集合论定义是未来工作。
- 只从真实标注的视角定义。DnD 本质上是在分析类无关的召回率,只考虑了假阴性(漏检),没有直接处理假阳性(误检)。要完整关联 mAP,需要直接匹配两个模型的预测,但这在数学上不太好定义。
为什么一个"简单"的方法值得发论文?
读到这里你可能会想:这不就是集合运算吗?交集、差集、补集,大一数学课的内容。
没错。但好的研究不总是发明新数学,有时候是找到正确的视角。
目标检测领域有 mAP 这个标准指标已经很多年了,TIDE 也有好几年了。但没有人正式提出"既然两个模型共享同一组真实标注,那就直接在标注层面做集合比较"这个思路。大家习惯了各自评估、并排比较的模式,就像习惯了用成绩单比较学生,从没想过把试卷放在一起逐题对比。
DnD 的贡献不在于技术复杂度,而在于填补了一个被忽视的分析空白,并且用一种与现有评估体系(mAP 匹配算法、TIDE 误差类型)完全兼容的方式来实现。代码已开源在 github.com/JohannesTheo/differences-in-detection,可以直接和 pycocotools 配合使用。
有时候,最简单的那个问题,恰恰是最值得回答的。
基于论文:Differences in Detection: Explainability Where it Matters (arXiv:2606.07503, CVPR 2026 Workshop)