
SAM 3 发布后迅速成为视觉语言模型的热门话题,但一个实际问题随之而来:它每次只处理一个文本提示,要检测 N 个类别就要跑 N 遍完整推理,80 类 COCO 检测根本不可能实时。有没有办法在不改任何模型权重的前提下,把 SAM 3 直接变成一个实时多类检测器?DART(Detect Anything in Real Time)给出了一个工程思路:利用 SAM 3 视觉骨干与文本提示无关这一特性,将骨干计算从 O(N) 降到 O(1),再通过批量解码和 TensorRT 部署,在 RTX 4080 上以 COCO 80 类 55.8 AP 的精度实现实时检测(4 类 15.8 FPS),80 类场景累计加速超过 25 倍。本文将介绍 DART 的核心思路、性能表现、部署方式和上手方法。
项目信息
SAM 3 是一个视觉语言模型,接受一张图像和一个文本提示,输出对应类别的分割掩码和检测框。它的能力很强——开放词表、无需训练即可检测任意类别。但它的推理流程是单提示设计:每个类别需要独立运行一次完整的骨干网络 + 编码解码器。
这意味着检测 N 个类别的计算量是单类的 N 倍。具体来说,在 RTX 4080 上,SAM 3 的 ViT-H/14 骨干(439M 参数)消耗了单次推理 78% 的时间(112ms 中的 87ms)。检测 3 个类别需要 336ms,80 个类别则完全无法实时。
DART 的核心观察是:SAM 3 的视觉骨干输出与文本提示无关。无论检测"人"还是"车",骨干提取的图像特征完全相同。这意味着对同一张图像,骨干只需计算一次,所有类别共享结果。
DART 采用逐层叠加的优化策略,不修改任何模型权重。以下是在 1008x1008 分辨率、3 个类别条件下的加速效果:
优化层级 | 内容 | 骨干 | 编码解码器 | 延迟 (ms) | 加速比 |
|---|---|---|---|---|---|
0 | 原始方式(N 次完整推理) | Nx | Nx | 336 | 1x |
1 | 骨干共享 | 1x | Nx | 162 | 2.1x |
2 | + 批量解码 + 仅检测模式 | 1x | 1x | 112 | 3.0x |
3 | + 图结构重组 + TRT 骨干 | TRT | 1x | 78 | 4.3x |
4 | + TRT 编码解码器 + 帧间流水线 | TRT | TRT | 60 | 5.6x |
3 个类别达到 5.6 倍加速,80 个类别累计加速超过 25 倍。
每一层的关键技术点:

在 COCO val2017(5000 张图像、80 类)上的检测精度:
配置 | 分辨率 | AP | AP50 | AP75 | AP_S | AP_M | AP_L |
|---|---|---|---|---|---|---|---|
Full TRT FP16 | 1008 | 55.8 | 73.4 | 61.5 | 40.3 | 59.8 | 70.7 |
剪枝 16 子块 | 1008 | 47.6 | 63.5 | 52.7 | 32.5 | 51.8 | 62.0 |
Full TRT FP16 | 644 | 39.1 | 63.9 | 39.9 | 12.4 | 44.4 | 65.4 |
剪枝 16 子块 | 644 | 32.8 | 54.5 | 33.4 | 9.9 | 37.9 | 56.7 |
55.8 AP 的成绩在开放词表检测器中具有竞争力。作为参考,以下是论文中报告的与其他开放词表检测器的对比:
方法 | 骨干 | 训练数据 | AP |
|---|---|---|---|
GLIP-L | Swin-L | Objects365+GoldG | 49.8 |
Grounding DINO-T | Swin-T | Objects365+GoldG | 48.1 |
Grounding DINO-L | Swin-L | Objects365+GoldG+Cap4M | 52.5 |
YOLO-World-L | YOLOv8-L | Objects365+GoldG | 44.9 |
YOLO-World-X | YOLOv8-X | Objects365+GoldG | 46.7 |
DART(1008px) | ViT-H/14 | 无额外训练 | 55.8 |
需要注意的是,上述对比方法虽在 Objects365 等大规模检测数据上训练,但对 COCO 是零样本迁移;而 DART 完全不做检测训练,直接继承 SAM 3 的预训练权重(SAM 3 的预训练数据规模远大于上述方法),因此该对比仅供参考。
在 RTX 4080 上(1008px,FP16),不同配置的推理速度:
配置 | 模式 | 类别数 | 流水线 FPS | 骨干延迟 (ms) |
|---|---|---|---|---|
完整 ViT-H 骨干 | TRT FP16 | 4 | 15.8 | 53.2 |
ViT-H 剪枝 16 块 | TRT FP16 | 3 | 37.6 | 26.6 |
RepViT-M2.3 蒸馏骨干 | TRT FP16 | 3 | 55.8 | 13.9 |
注:完整骨干数据来自论文 Table 2,剪枝/蒸馏骨干数据来自 GitHub README。
不同类别数下 FPS 不可直接对比(类别越多 FPS 越低)。
DART 支持用轻量级骨干替换 ViT-H,通过适配器蒸馏(仅需 COCO train2017 的 118K 无标签图像,单卡 RTX 4080 训练不到 2 小时)实现:
骨干 | 参数量 | COCO AP | 骨干延迟 (ms) |
|---|---|---|---|
ViT-H(剪枝 16 块) | 220M | 47.6 | 26.6 |
RepViT-M2.3 | 8.2M | 38.7 | 13.9 |
TinyViT-21M | 21M | 30.1 | 12.2 |
EfficientViT-L2 | 9.2M | 21.7 | 10.7 |
EfficientViT-L1 | 5.3M | 16.3 | 10.4 |
其中 RepViT-M2.3 以仅 8.2M 参数实现 38.7 AP,骨干延迟降到 13.9ms,适合对速度要求更高的场景。

conda create -n dartsam3 python=3.11 -y
conda activate dartsam3
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
pip install tensorrt
pip install -e .系统要求:Python 3.11+、PyTorch 2.7.0+(CUDA 12.6+)、TensorRT 10.9.0+(可选)。
最简单的用法——指定图像和目标类别:
python demo_multiclass.py \
--image x.jpg \
--classes person car bicycle dog \
--fast --detection-only--fast启用批量推理 + FP16 + 早退策略,--detection-only跳过掩码生成,只输出检测框和置信度。模型权重(sam3.pt)首次运行时自动从 HuggingFace 下载。
要达到论文中的 15.8 FPS,需要分别导出骨干和编码解码器的 TRT 引擎:
# 导出骨干引擎
PYTHONIOENCODING=utf-8 python scripts/export_hf_backbone.py \
--image x.jpg --imgsz 1008
# 导出编码解码器
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
# 使用 TRT 引擎推理
python demo_multiclass.py --image x.jpg \
--classes person car bicycle dog \
--trt hf_backbone_1008_fp16.engine \
--trt-enc-dec enc_dec_fp16.engine \
--checkpoint sam3.pt --fast --detection-only \
-o x_annotated.jpg支持视频输入,并可通过 --track启用 ByteTrack 多目标跟踪:
python demo_video.py --video input.mp4 \
--classes person car bicycle \
--checkpoint sam3.pt \
--trt hf_backbone_1008_fp16.engine \
--trt-enc-dec enc_dec_fp16.engine \
--track --imgsz 1008 -o output.mp4ByteTrack 集成提供跨帧目标 ID 持续追踪,Kalman 滤波器开销约 0.1ms/帧。
DART 的核心贡献不是一个新模型,而是一套将 SAM 3 转化为实时多类检测器的工程方案。几个值得关注的点:
对于需要开放词表实时检测的场景,DART 提供了一个可以直接使用的方案。对于 CV 工程师来说,它的分层优化思路(骨干共享 → 批量解码 → TRT 部署 → 帧间流水线)本身也是值得参考的加速工程模板。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。