要给机器人或车选一个检测器,论文里是一排 COCO AP,名字从 YOLO26、RF-DETR 到 SAM 3。这个数是怎么算出来的?该选哪一类?权重能不能商用?检测分数来自把预测框和真值一对一配对,再在多个 IoU 阈值上平均 precision;2026 年真正的选择,是在要自己标数据、速度快的闭集实时模型,和不用重训、但更慢的开放词表(vocabulary)或可提示模型(如 SAM 3)之间取舍;许可证常常在 AP 之前就替你做了决定。
待审核草稿。 这一篇还没有经过站主审阅,事实、取舍和措辞都可能修改;引用前请回到文中链接的一手资料核对。
检测器输出什么,IoU 怎么算
前置知识是 ViT 和 CLIP:现在的检测器多用 Transformer 骨干,开放词表检测靠图文对齐。
一个检测器对每张图输出一组预测:框 $(x_1,y_1,x_2,y_2)$、类别和分数。实例分割再给每个实例一张掩码,视频模型再给一个跨帧的 ID。框和真值重合得好不好,用 IoU(intersection over union)衡量:
$$ \mathrm{IoU}(A,B)=\frac{|A\cap B|}{|A\cup B|}. $$
例如真值 G1 = (0, 0, 10, 10),预测 P1 = (1, 0, 11, 10):交集是 x 方向 [1, 10]、y 方向 [0, 10],面积 $9\times10=90$;并集 $100+100-90=110$;IoU $=0.818$。
手算 AP:3 个真值、5 个预测
教学数据:一张图、一个类别、3 个真值,模型给了 5 个预测。
| 框 | 坐标 (x1, y1, x2, y2) | 分数 | 和哪个真值重叠最多 | IoU |
|---|---|---|---|---|
| G1 | (0, 0, 10, 10) | 真值 | — | — |
| G2 | (20, 0, 30, 10) | 真值 | — | — |
| G3 | (40, 0, 50, 10) | 真值 | — | — |
| P1 | (1, 0, 11, 10) | 0.95 | G1 | 0.818 |
| P2 | (0, 1, 10, 11) | 0.90 | G1 | 0.818 |
| P3 | (22, 1, 32, 11) | 0.80 | G2 | 0.563 |
| P4 | (60, 0, 70, 10) | 0.60 | 无 | 0 |
| P5 | (41, 1, 51, 10) | 0.40 | G3 | 0.743 |
COCO 官方评测代码(pycocotools 的 cocoeval.py)的配对规则:预测按分数从高到低排,每个预测去拿还没被占用、IoU 达到阈值 $t$ 且最大的那个真值;拿不到就是误检(FP)。没被拿走的真值是漏检,拉低 recall。
取 $t=0.5$。P1 拿走 G1;P2 也和 G1 重叠,但 G1 已被占,P2 是重复框,记 FP;P3 拿 G2;P4 是背景,FP;P5 拿 G3。
| 按分数第 k 个 | 结果 | 累计 TP | 累计 FP | precision | recall |
|---|---|---|---|---|---|
| P1 | TP | 1 | 0 | 1.00 | 0.33 |
| P2 | FP | 1 | 1 | 0.50 | 0.33 |
| P3 | TP | 2 | 1 | 0.67 | 0.67 |
| P4 | FP | 2 | 2 | 0.50 | 0.67 |
| P5 | TP | 3 | 2 | 0.60 | 1.00 |
AP 是 precision–recall 曲线下的面积。先把曲线“削平”:每个点的 precision 换成它右边(recall 更高处)出现过的最大值。于是 recall 在 1/3 以内 precision 是 1.0,到 2/3 是 0.667,到 1 是 0.6:
$$ \mathrm{AP}_{50}=\tfrac13\times1.0+\tfrac13\times0.667+\tfrac13\times0.6=0.756. $$
cocoeval.py 不直接算面积,而是在 recall = 0, 0.01, …, 1 这 101 个点上取削平后的 precision 再平均;这个例子同样得到 0.756。
COCO 的主指标 AP 还要在 10 个 IoU 阈值 0.50, 0.55, …, 0.95 上再平均,多类别时再对类别平均(常叫 mAP):
| IoU 阈值 | 算 TP 的预测 | AP |
|---|---|---|
| 0.50、0.55 | P1、P3、P5 | 0.756 |
| 0.60、0.65、0.70 | P1、P5 | 0.467 |
| 0.75、0.80 | P1 | 0.333 |
| 0.85、0.90、0.95 | 无 | 0 |
10 个数平均是 0.358(101 点版本 0.359)。P3 在 0.5 时算命中,但在 10 个阈值里只占 2 个:AP@[.5:.95] 奖励(reward)框得准。cocoeval.py 的默认设置还有:每张图最多算 100 个预测,并按面积分小(< 32² 像素)、中(32²–96²)、大(> 96²)三档另报。每次只改一个条件再算(我用一个按 cocoeval.py 逻辑写的小脚本复算过):
| 改一个条件 | 结果 | 说明什么 | 不能据此推出 |
|---|---|---|---|
| 用 NMS 删掉重复框 P2 | AP50 升到 0.917 | 重复框会实打实扣分 | NMS 总是对的(见下一节) |
| 不删 P2,只把它的分数降到 0.30 | AP50 同样是 0.917 | 排在所有 TP 之后的误检不扣 AP | AP 高说明部署时误检少(部署要定一个分数阈值,看的是那一点的 precision) |
| 把 P3 改成 (21, 0, 31, 10),IoU 0.818 | AP50 不变,平均 AP 从 0.358 升到 0.489 | AP@[.5:.95] 看定位精度 | AP50 一样的两个模型定位一样好 |
重复框:NMS 还是一对一匹配
传统检测器会对同一个物体给出好几个框。非极大值抑制(NMS)在推理后处理:按分数排序,保留最高的,删掉和它 IoU 超过阈值(例如 0.5)的其他框,再重复。P1 和 P2 的 IoU 是 0.681,P2 被删,AP50 从 0.756 升到 0.917。
NMS 的问题也在这里:如果 P2 其实框的是站在 G1 身后、和它 IoU 0.68 的另一个人,NMS 就删掉了一个真阳性。阈值是手调的,拥挤场景里很难两头顾。
DETR(2020)把检测写成集合预测,摘要说这样做“effectively removing the need for many hand-designed components like a non-maximum suppression procedure …”,即不再需要 NMS 这类手工设计的组件。具体做法是:解码器固定输出 $N$ 个槽位(论文用 $N=100$),训练时用 Hungarian 算法在预测和真值(不够 $N$ 个就补“无物体” $\varnothing$)之间找一对一配对:
$$ \hat\sigma=\arg\min_{\sigma}\sum_{i=1}^{N}\mathcal L_{\rm match}\big(y_i,\hat y_{\sigma(i)}\big),\qquad \mathcal L_{\rm match}=-\mathbb 1_{\{c_i\neq\varnothing\}}\,\hat p_{\sigma(i)}(c_i)+\mathbb 1_{\{c_i\neq\varnothing\}}\,\mathcal L_{\rm box}\big(b_i,\hat b_{\sigma(i)}\big). $$
$c_i$ 是真值类别,$\hat p_{\sigma(i)}(c_i)$ 是配上的那个槽位给这个类别的概率,$\mathcal L_{\rm box}$ 是 L1 损失和 generalized IoU 损失的加权和。没配上的槽位被训练去预测 $\varnothing$,所以模型自己学会不出重复框。放到上面的例子里:G1 只会配给 P1、P2 中代价更低的一个,另一个被推向“无物体”。这和跟踪那篇用的是同一个 Hungarian 算法,只是那里用来在运行时配轨迹,这里用来在训练时分配监督目标。

论文的消融(ablation)也说明了这一点:对第一层解码器的输出做 NMS 有帮助,到最后几层反而略微降低 AP,因为 NMS 删掉了真阳性。DETR 的短板是收敛慢;Deformable DETR 作者报告训练轮数少 10 倍,之后 RT-DETR、D-FINE、DEIM 和 RF-DETR 把这条线做到了实时。
YOLO 这条线在 2026 年也去掉了 NMS。YOLO26 论文(2026-06-02)用双头:一对多的头在训练时提供密集监督,一对一的头在推理时直接输出、不需要 NMS;训练中损失权重逐步移向一对一的头。双头分配的做法沿用自 YOLOv10。
闭集实时、开放词表、可提示:三类怎么选
| 类别 | 输入 | 输出 | 代表(作者报告) | 适合什么 |
|---|---|---|---|---|
| 闭集实时 | 图像;类别在训练时定死 | 固定类别的框(可加掩码) | YOLO26:COCO 40.9–57.5 mAP,T4 TensorRT 1.7–11.8 ms;RF-DETR:Nano 48.0 AP,2XL 是第一个过 60 AP 的实时检测器 | 类别固定、有标注、延迟预算紧 |
| 开放词表检测 | 图像 + 文字类别名 | 框 | Grounding DINO:COCO 零样本 52.5 AP;YOLOE-26x:LVIS minival 40.6 AP(文字提示) | 新类别没有标注时先摸底 |
| 可提示概念分割 | 图像或视频 + 名词短语或示例框 | 所有匹配实例的掩码和 ID | SAM 3:COCO 框 AP 56.4、LVIS 框 AP 53.6(README);H200 上一张有 100 多个目标的图约 30 ms | 自动标注、长尾(long tail)概念、在视频里找“所有的 X” |
开放词表这条线的前身包括 GLIP、OWL-ViT / OWLv2、YOLO-World 和 YOLOE。SAM 3(2025-11-20)把它和分割合在一起:给一个短名词短语(如“黄色校车”)或示例框,返回图像或视频里所有匹配实例的掩码和 ID。它由一个 DETR 式检测器和一个带记忆的视频跟踪器组成,共用一个骨干;一个 presence head 单独判断“这个概念在不在图里”,把识别和定位拆开(论文摘要)。
数字要连着条件看。同一个 SAM 3,在 COCO 上框 AP 56.4(论文表 1 把它列为零样本结果);在 RF100-VL 的 100 个多领域数据集上,零样本平均只有 15.2 AP,其中医学类 2.6;用每类约 10 个标注实例微调(10-shot)后平均 36.5,全量微调 61.6(论文 v2 表 36、37,作者报告)。论文附录 B 自己写明:零样本时难以泛化到细粒度的领域外概念(如飞机型号、医学术语),热成像这类小众领域尤其如此;提示只能是简单名词短语,长的指代描述要配一个多模态大模型。
怎么选,下面是设计上的取舍,不是哪篇论文的结论:
- 类别固定、能标数据、延迟预算紧:微调一个闭集实时模型,先查许可证。
- 新类别、还没有标注:用开放词表模型或 SAM 3 摸底和预标注,但一定在自己的验证集上量;RF100-VL 说明零样本在某些领域可能接近 0。需要上车或上机器人时,可以用这些标注再训一个小的闭集模型。
- 视频里要“所有的 X”并带 ID:SAM 3 或 SAM 3.1。
Benchmark 现在各管什么
| Benchmark | 测什么 | 2025–2026 的角色 |
|---|---|---|
| COCO(2014) | 80 类检测和分割,AP@[.5:.95] | 每篇检测论文仍然报,但只是其中一列;RF-DETR 论文认为专用检测器在架构、学习率调度和数据增强上对 COCO 隐式过拟合(overfitting) |
| LVIS(2019) | 1000 多类的长尾实例分割;只在 1–10 张训练图里出现的类叫 rare | 开放词表的主考场:看 rare 类 AP(APr),因为这些类几乎没有框标注 |
| ODinW13 | ELEVATER 的 35 个“野外”检测集中常用的 13 个 | 零样本和少样本迁移;SAM 3 零样本 61.0 |
| RF100-VL(2025) | 100 个多领域检测集,分零样本、少样本、全量 | 越来越常和 COCO 并列;Grounding DINO、Qwen2.5-VL 在难的医学集上零样本低于 2% |
| SA-Co(2025-11) | 概念分割,含负样本(negative example)提示,指标 cgF1 | SAM 3 引入;SA-Co/Gold 掩码 cgF1 人类 72.8、SAM 3 54.1(README) |
注意 RF-DETR 和 RF100-VL 都出自 Roboflow 及合作者,“COCO 不够用”这个论点和他们的产品方向一致;论点本身有数据支持,但读的时候要知道这层关系。
排行榜也变了。Papers with Code 据报道在 2025 年 7 月停止服务,2026-10-15 访问 paperswithcode.com 会被重定向到 Hugging Face 的 Trending Papers;据报道,原来的 SOTA 榜没有被继承。同一天,Hugging Face 的 49 个 “official benchmark” 数据集里没有一个是检测 benchmark。Roboflow 维护一个 COCO val 排行榜,会自己重跑各家模型推理,但它也是 RF-DETR 的出品方(方法说明)。结论:别指望一张公共榜替你选型,在自己的数据上量。
能不能商用:常见 checkpoint 的许可证
下表是 2026-10-15 读到的仓库或 Hugging Face 许可证,只是阅读记录,不是法律意见。代码和权重的许可证可能不同,训练数据还有自己的条款。
| 模型 | 许可证 | 要注意什么 |
|---|---|---|
| SAM、SAM 2 / 2.1 | Apache-2.0 | SA-1B 数据集本身是研究用许可 |
| SAM 3、SAM 3.1 | 自定义 SAM License(2025-11-19) | 免版税、允许修改;禁止 ITAR、军事和武器用途;下载需申请 |
| RF-DETR Nano / S / M / L 及分割模型 | Apache-2.0 | — |
| RF-DETR Atto / Femto / Pico / XL / 2XL | PML 1.0 | 部署前读 PML 条款 |
| YOLO11、YOLO26(含 YOLOE-26) | AGPL-3.0 或 Ultralytics Enterprise | 按 AGPL-3.0 的条件用,或另购 Enterprise 许可 |
| YOLOv12(非 Ultralytics 团队)、YOLOE(清华) | AGPL-3.0 | 按 AGPL-3.0 的条件用 |
| YOLO-World | GPL-3.0 | 可另行申请商业许可 |
| RT-DETR、D-FINE、DEIM | Apache-2.0 | D-FINE 提醒:用 Objects365 预训练(pre-training)的权重可能受该数据集条款约束 |
| DEIMv2 | 自定义 DEIMv2 License(2026) | 条款区分商用和非商用,部署前读 |
| Grounding DINO、OWL-ViT / OWLv2 | Apache-2.0 | — |
| Grounding DINO 1.5、DINO-X | 只提供 API | 拿不到权重 |
| Florence-2、GLIP | MIT | — |
| DINOv3(DEIMv2 用的骨干) | 自定义 DINOv3 License | Meta 博客称允许商用;禁止 ITAR 和军事用途 |
各行出处:SAM、SAM 2、SAM 3、RF-DETR、YOLO26 文档、YOLO11 文档、YOLOv12、D-FINE、DEIMv2、Grounding DINO 1.5 API、DINO-X API、Florence-2、DINOv3。
截至 2026-10
- YOLO27 还只是预告。 Ultralytics 文档写明“no launch date has been set”,权重和代码未公开,初步数字可能变(文档,公司自报)。YOLO26 的文档模型表后来加了语义分割和深度头,论文摘要里没有。
- SAM 3.1(2026-03-27) 加入多目标联合跟踪,见跟踪那篇。2026-10-15 检索(retrieval)没有找到 “SAM 4”,也可能只是还没被索引。
- 同一模型,不同来源的数字可能不同。 SAM 3 的 SA-Co 概念数,README 写 27 万、论文 v2 写 20.7 万;引用时注明来源版本。
- DEIMv2 的新许可证何时替换了原许可证,目前查不到。
下一篇:冻结骨干与几何基础模型,讲 DINOv3、Depth Anything 3 和 VGGT 这些检测器背后的骨干与三维模型。
本页术语 9
- 词表 vocabulary
- 模型能输出的所有 token 的集合
- 奖励 reward
- RL 里指导策略更新的标量信号
- 消融 ablation
- 去掉一个组件再测一次,用来判断它到底有没有贡献
- 长尾 long tail
- 出现频率很低但总量可观的那部分情况
- 微调 fine-tuning
- 在预训练权重上继续训练以适配具体任务
- 过拟合 overfitting
- 训练集越来越好,没见过的数据反而变差
- 负样本 negative example
- 被训练目标用来与正样本区分的候选;不一定等价于用户明确不喜欢
- 预训练 pre-training
- 先用大量数据学习通用表示和能力,再适配具体任务
- 检索 retrieval
- 从外部语料里找出相关内容