【免费下载链接】DART
Detect Anything in Real Time: Real-time object detection using frontier object detection models.
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.py | 7–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 上验证):
| 依赖 | 版本 |
|---|---|
| Python | 3.11+ |
| torch | 2.7.0+(CUDA 12.6+) |
| tensorrt | 10.9.0+(构建引擎必需) |
| numpy | < 2.0 |
| pycocotools | 评测必需(Windows 可装pycocotools-windows) |
需要的文件
| 文件 | 说明 | 获取方式 |
|---|---|---|
sam3.pt | SAM3 权重 | 首次运行自动下载 |
val2017/ | COCO 验证集图像(5000 张) | 从 COCO 官网下载 |
instances_val2017.json | COCO 验证集标注 | 从 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)
| 配置 | 分辨率 | AP | AP50 | AP_S | AP_L | ms/图 |
|---|---|---|---|---|---|---|
| 完整 TRT FP16 | 1008 | 55.8 | 73.4 | 40.3 | 70.7 | 225 |
| 完整 TRT FP16 | 644 | 39.1 | 63.9 | 12.4 | 65.4 | 105 |
分辨率从 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 |
|---|---|---|---|---|
| 1 | 53 | 8 | 16.3 | 18.7 |
| 2 | 53 | 11 | 15.5 | 17.6 |
| 4 | 53 | 19 | 13.8 | 15.8✅ |
| 8 | 53 | 35 | 11.5 | 12.5 |
⚡4 类 @ 1008px正好落在 15+ FPS;若降到 644px,所有测试类别数都能超过 30 FPS。
🎚️ 速度与精度的权衡选项
想要更快?DART 提供三条正交的"降档"路径,可按需组合:
1. 换轻量学生骨干(最快)
蒸馏出的学生骨干可替换 ViT-H,实现 3–5× 骨干加速。质量换速度一览:
| 模型 | 骨干参数量 | COCO AP | 流水线 FPS |
|---|---|---|---|
| ViT-H Pruned-16 | 220M | 53.6 | 37.6 |
| RepViT-M2.3 | 8.2M | 38.7 | 55.8 |
| TinyViT-21M | 21M | 30.1 | 57.8 |
| EfficientViT-L2 | 9.2M | 21.7 | 62.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=M | enc-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 FP16 | scripts/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.
相关推荐
Atmosphere 1.8.0 适配 Switch 19.0.0:4 个步骤完成升级,附 2 条回退路径
Atmosphere 1.8.0 适配 Switch 19.0.0:4 个步骤完成升级,附 2 条回退路径 周五晚上把 Switch 固件升到了 19.0.0,
固件嵌入式操作系统系统编程yolov8-face 项目实战:使用 WIDER Face 官方评估协议评测人脸检测 AP 的完整指南
yolov8 face 项目实战:使用 WIDER Face 官方评估协议评测人脸检测 AP 的完整指南 本篇技术指南聚焦于 yolov8 face 仓库中的
人工智能计算机视觉深度学习从Model Card到评测框架:如何完整复现Agents-A1-4B-FP8官方Agent评测全流程
从Model Card到评测框架:如何完整复现Agents A1 4B FP8官方Agent评测全流程 Agents A1 4B FP8 是 InternSci
大模型多模态模型量化AI Agent工具调用本地部署
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考