☰
DART COCO评测与基准复现:55.8 AP、15.8 FPS 官方协议完整流程
2026/10/27 1:40:28 网站建设 项目流程

【免费下载链接】DART

Detect Anything in Real Time: Real-time object detection using frontier object detection models.

项目地址:https://gitcode.com/gh_mirrors/dart38/DART
点击查看免费下载

DART(Detect Anything in Real Time)是一个免训练框架,把前沿模型 SAM3 变成实时多类别开放词汇目标检测器,在 COCO val2017 上达成55.8 AP、单卡15.8 FPS。本文带你完整复现这套 COCO 检测评测与速度基准。


🧩 什么是 DART:免训练实时目标检测

传统检测器要么"开集"(只能识别训练时见过的固定类别),要么"闭集"(速度太慢)。DART 的思路很巧妙:不重新训练,而是把 SAM3 的视觉骨干拆出来,配合 TensorRT 推理,实现:

  • 开放词汇:想检测什么,用文字告诉它(person、car、dog……),无需改模型。
  • 实时:单张 RTX 4080 上,4 个类别 @ 1008px 可达15.8 FPS。
  • 高精度:完整 ViT-H 骨干 @ 1008px,COCO 80 类官方协议55.8 AP。

整个推理链路由两个独立的 TensorRT FP16 引擎组成,通过 GPU 张量通信:

组件职责构建脚本延迟 (1008px)
骨干(Backbone, ViT-H/14)提取图像特征scripts/export_hf_backbone.py~53 ms
编码器-解码器(Enc-Dec, 6+6 层)结合文本与特征出框sam3/trt/export_enc_dec.py7–41 ms

💡 文本编码器仍留在 PyTorch 里并缓存到 GPU——切换检测类别只需重算文本(毫秒级),不用重建引擎。


🎯 理解 55.8 AP 的官方评测协议

很多"看着挺准"的分数,其实被 NMS、置信度过滤这些后处理"美化"了。DART 复现的是对齐 SAM3 官方管线的评测协议,核心脚本是 scripts/eval_coco_official.py,其设计与 SAM3 官方的 sam3/eval/coco_eval_offline.py 保持一致。

与"普通评测"的 4 个关键区别

#做法说明
1不跑 NMS原始预测直接提交给 COCOeval(nms_threshold=1.0)
2不做置信度过滤提交全部检测(confidence=0.0)
3不设最大检测数上限交给 COCOeval 内部处理maxDets=[1,10,100]
4不四舍五入分数与框保留完整浮点精度

这四条正是 scripts/eval_coco_official.py#L244-L248 里predict(...)调用的关键:

results = predictor.predict( state, confidence_threshold=0.0, # No filtering — submit all detections nms_threshold=1.0, # No NMS — let COCOeval handle overlaps )

这样做的好处是分数"干净"、可复现,且与官方直接可比;代价是每图会提交大量原始框(脚本内部仅保留 top-100 以防 OOM,不影响官方口径)。

评测会输出哪些指标

COCO 检测的标准 12 项指标,DART 至少给出前 9 项:

指标含义
mAP (AP)IoU 0.50→0.95 的平均精度(最核心)
mAP50 / mAP75分别在 IoU=0.5 / 0.75 的精度
AP_S / AP_M / AP_L小 / 中 / 大目标分别的精度
AR1 / AR10 / AR100每图最多取 1/10/100 框时的召回率

⚙️ 评测环境准备:引擎构建清单

复现前先准备好"料"。以下是官方推荐环境(在 RTX 4080 16GB、Windows 11 上验证):

依赖版本
Python3.11+
torch2.7.0+(CUDA 12.6+)
tensorrt10.9.0+(构建引擎必需)
numpy< 2.0
pycocotools评测必需(Windows 可装pycocotools-windows)

需要的文件

文件说明获取方式
sam3.ptSAM3 权重首次运行自动下载
val2017/COCO 验证集图像(5000 张)从 COCO 官网下载
instances_val2017.jsonCOCO 验证集标注从 COCO 官网下载

第 1 步:构建共享编码器-解码器引擎(一次性)

python -m sam3.trt.export_enc_dec --checkpoint sam3.pt \ --output enc_dec.onnx --max-classes 4 --imgsz 1008 python -m sam3.trt.build_engine --onnx enc_dec.onnx \ --output enc_dec_fp16.engine --fp16 --mixed-precision none

⚠️ enc-dec 引擎务必用--mixed-precision none——自动检测启发式是针对骨干的,用在编码器-解码器上是错的。

第 2 步:构建 ViT-H 完整骨干引擎(55.8 AP 对应配置)

PYTHONIOENCODING=utf-8 python scripts/export_hf_backbone.py \ --image x.jpg --imgsz 1008

产物为hf_backbone_1008_fp16.engine,即 55.8 AP 评测所用的骨干。

💡 Windows 用户:所有脚本前都加PYTHONIOENCODING=utf-8,否则会因控制台无法编码 Unicode 字符报错。


📊 一步步复现 COCO 检测 AP

方式 A:官方协议一键评测(推荐,复现 55.8 AP)

PYTHONIOENCODING=utf-8 python scripts/eval_coco_official.py \ --images-dir D:/val2017 \ --ann-file D:/coco2017labels/coco/annotations/instances_val2017.json \ --checkpoint sam3.pt \ --configs "full_1008=trt:hf_backbone_1008_fp16.engine;encdec:enc_dec_1008_c16_fp16.engine;imgsz:1008"

--configs用key:val;key:val描述单组配置,一次可跑多组做对比:

Key作用
trt:<engine>骨干 TRT 引擎(省略则用 PyTorch 骨干)
encdec:<engine>编码器-解码器引擎(覆盖默认)
imgsz:<int>推理分辨率
mask:<spec>/skip:<ids>剪枝规格(见下文权衡章节)

脚本会先做 3 次预热,再遍历全部 5000 张图,最后打印汇总表并落盘coco_eval_official_results.json。

官方结果对照(Full TRT FP16)

配置分辨率APAP50AP_SAP_Lms/图
完整 TRT FP16100855.873.440.370.7225
完整 TRT FP1664439.163.912.465.4105

分辨率从 1008 降到 644,速度近翻倍,但小目标 AP_S 从 40.3 掉到 12.4——高分辨率对小物体至关重要。

方式 B:80 类一站式建引擎 + 文本缓存

如果你要在全部 80 个 COCO 类别上跑,可先用 scripts/build_coco_engine.py 一次性完成「导出 ONNX → 构建 TRT FP16 引擎 → 缓存 80 类文本嵌入」:

python scripts/build_coco_engine.py --checkpoint sam3.pt --imgsz 1008

产物:enc_dec_coco.onnx、enc_dec_coco_fp16_80.engine、text_cache_coco.pt。80 个类别名定义在 sam3/coco_classes.py,与 pycocotools 的 category ID 严格对齐。

💡 80 类 @ 1008px 单次会 OOM,官方建议用--max-classes 16分块,预测器会自动把 80 类拆成 5 轮 × 16 类。

其他两个评测脚本

  • 实例分割 mIoU(GT 框引导,对齐 EfficientSAM3 官方口径):scripts/eval_cocoseg.py
  • 全部蒸馏学生骨干:scripts/eval_all_students.py

⚡ 复现 15.8 FPS 速度基准

"15.8 FPS" 指的是4 个类别 @ 1008px 的流水线(pipelined)推理。视频管线会自动用跨帧流水线:骨干处理第 $t{+}1$ 帧时,编码器-解码器并行处理第 $t$ 帧,把每帧延迟压到max(骨干, 编解码)。

三类速度基准脚本

场景脚本
顺序 vs 流水线对比scripts/benchmark_video.py
类别数 × 各骨干扫描scripts/benchmark_class_scaling.py
全部学生骨干scripts/benchmark_all_students.py

FPS 随类别数变化(1008px · RTX 4080 · TRT FP16)

类别数骨干 (ms)编解码 (ms)顺序 FPS流水线 FPS
153816.318.7
2531115.517.6
4531913.815.8✅
8533511.512.5

⚡4 类 @ 1008px正好落在 15+ FPS;若降到 644px,所有测试类别数都能超过 30 FPS。


🎚️ 速度与精度的权衡选项

想要更快?DART 提供三条正交的"降档"路径,可按需组合:

1. 换轻量学生骨干(最快)

蒸馏出的学生骨干可替换 ViT-H,实现 3–5× 骨干加速。质量换速度一览:

模型骨干参数量COCO AP流水线 FPS
ViT-H Pruned-16220M53.637.6
RepViT-M2.38.2M38.755.8
TinyViT-21M21M30.157.8
EfficientViT-L29.2M21.762.5

2. 块级剪枝(保留 ViT-H 质量)

用 scripts/analyze_block_importance.py 评估每个 block 的重要性,再删除最不重要的整块(比子块掩码提速更明显,因为 TRT 能彻底消除这些块):

PYTHONIOENCODING=utf-8 python scripts/eval_coco_official.py \ --images-dir D:/val2017 \ --ann-file D:/coco2017labels/coco/annotations/instances_val2017.json \ --checkpoint sam3.pt \ --pruned-checkpoint distilled/pruned_16blocks.pt \ --configs "pruned16_1008=trt:hf_backbone_1008_pruned_fp16.engine;encdec:enc_dec_1008_c16_fp16.engine;imgsz:1008"

整块删除 16 个 block 约提速 1.8×,AP 仅降约 2.2。

3. 降分辨率

644px 比 1008px 快约 2.5×,但代价集中在小目标(见上文对照表)。


⚠️ 常见问题排查

现象原因与解法
控制台 Unicode 报错Windows 下所有脚本加PYTHONIOENCODING=utf-8
AssertionError: num_classes=N exceeds max_classes=Menc-dec 引擎--max-classes建小了,用更大的值重建
推理检测框全错推理--imgsz必须与导出/构建时一致
骨干 cos < 0.5(FP16 精度崩)走 HF 导出路径 scripts/export_hf_backbone.py,它把注意力重构成 TRT 能正确 pattern-match 的规范形式,cos > 0.999
换 GPU / 升级 TRT 后引擎失效TRT 引擎绑定 GPU 架构与 TRT 版本,ONNX 才是可移植的——在目标机上用 sam3/trt/build_engine.py 重建

🔎 想确认自己 GPU 的 FP16 表现,可跑python scripts/compare_backbone.py --checkpoint sam3.pt --image x.jpg直接对比。


📁 关键文件速查

用途路径
官方协议 COCO 检测评测scripts/eval_coco_official.py
标准 pycocotools COCO 评测scripts/eval_coco.py
实例分割 mIoU 评测scripts/eval_cocoseg.py
全部学生骨干评测scripts/eval_all_students.py
COCO 80 类引擎 + 文本缓存一键构建scripts/build_coco_engine.py
视频速度基准(顺序 vs 流水线)scripts/benchmark_video.py
类别数 × 骨干扫描基准scripts/benchmark_class_scaling.py
全部学生骨干基准scripts/benchmark_all_students.py
骨干导出 → ONNX → TRT FP16scripts/export_hf_backbone.py
编码器-解码器 ONNX 导出sam3/trt/export_enc_dec.py
从 ONNX 构建 TRT 引擎sam3/trt/build_engine.py
官方评测协议参考实现sam3/eval/coco_eval_offline.py
COCO 80 类名称定义sam3/coco_classes.py
项目主文档README.md

✅ 小结

  • DART把 SAM3 变成免训练、开放词汇、实时的多类别检测器,官方协议下55.8 AP(COCO val2017,80 类)+15.8 FPS(4 类 @ 1008px)。
  • 复现关键在于对齐官方协议:不跑 NMS、不做置信度过滤、不设检测上限、保留全精度——用 scripts/eval_coco_official.py 一条命令即可。
  • 速度调优有三条正交路径:换轻量学生骨干、块级剪枝、降分辨率,可自由组合出你需要的精度/速度甜点。

📦 如需从源码构建,仓库地址为https://gitcode.com/gh_mirrors/dart38/DART(pip install -e .会自动装好依赖)。

【免费下载链接】DART

Detect Anything in Real Time: Real-time object detection using frontier object detection models.

项目地址:https://gitcode.com/gh_mirrors/dart38/DART
点击查看免费下载

相关推荐

上一篇:ChatTTS-ui实战指南:5分钟掌握本地语音合成与Web界面部署
下一篇:Inno Setup中文汉化终极指南:3步让你的安装程序说中文

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询