首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >别人都在介绍 SAM 3,这个项目直接把它变成实时检测器:80 类 25 倍加速

别人都在介绍 SAM 3,这个项目直接把它变成实时检测器:80 类 25 倍加速

原创
作者头像
CoovallyAIHub
发布2026-03-24 16:23:52
发布2026-03-24 16:23:52
980
举报

导读

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 的核心思路、性能表现、部署方式和上手方法。


项目信息

  • 论文:Detect Anything in Real Time: From Single-Prompt Segmentation to Multi-Class Detection(简称 DART)
  • 作者:Mehmet Kerem Turkcan(Columbia University)
  • 论文链接:https://arxiv.org/abs/2603.11441
  • 代码:https://github.com/mkturkcan/DART(2026-03-11 创建,持续更新中)
  • 协议:SAM License

一、SAM 3 的实时化瓶颈在哪?

SAM 3 是一个视觉语言模型,接受一张图像和一个文本提示,输出对应类别的分割掩码和检测框。它的能力很强——开放词表、无需训练即可检测任意类别。但它的推理流程是单提示设计:每个类别需要独立运行一次完整的骨干网络 + 编码解码器。

这意味着检测 N 个类别的计算量是单类的 N 倍。具体来说,在 RTX 4080 上,SAM 3 的 ViT-H/14 骨干(439M 参数)消耗了单次推理 78% 的时间(112ms 中的 87ms)。检测 3 个类别需要 336ms,80 个类别则完全无法实时。

DART 的核心观察是:SAM 3 的视觉骨干输出与文本提示无关。无论检测"人"还是"车",骨干提取的图像特征完全相同。这意味着对同一张图像,骨干只需计算一次,所有类别共享结果。

二、四级加速:从 O(N) 到实时

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 倍。

每一层的关键技术点:

  • 骨干共享:对同一张图像只运行一次 ViT-H,所有类别复用特征图。计算复杂度从 O(N) 降为 O(1)。
  • 批量多类解码:将 N 个类别的文本嵌入堆叠成一个批次,一次前向传播完成所有类别的检测。同时跳过掩码生成(仅输出框和分数),进一步减少计算。
  • TensorRT FP16 部署:将骨干和编码解码器分别导出为两个独立的 TRT FP16 引擎,通过 GPU 张量直接通信。骨干使用重组的显式注意力计算(Q·K^T -> Scale -> Softmax -> V,实值 RoPE(Rotary Position Embedding)),FP16 与 FP32 的余弦相似度 >0.999。
  • 帧间流水线:视频场景下,第 t+1 帧的骨干计算与第 t 帧的编码解码在不同 CUDA 流上并行执行,帧率提升 9-15%。
图片来源于原论文
图片来源于原论文

三、性能数据:COCO val2017 上的表现

完整模型

在 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,适合对速度要求更高的场景。

图片来源于原论文
图片来源于原论文

四、上手使用:从一条命令开始

环境安装

代码语言:javascript
复制
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+(可选)。

单张图像检测

最简单的用法——指定图像和目标类别:

代码语言:javascript
复制
python demo_multiclass.py \
  --image x.jpg \
  --classes person car bicycle dog \
  --fast --detection-only

--fast启用批量推理 + FP16 + 早退策略,--detection-only跳过掩码生成,只输出检测框和置信度。模型权重(sam3.pt)首次运行时自动从 HuggingFace 下载。

完整 TensorRT 部署

要达到论文中的 15.8 FPS,需要分别导出骨干和编码解码器的 TRT 引擎:

代码语言:javascript
复制
# 导出骨干引擎
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 多目标跟踪:

代码语言:javascript
复制
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.mp4

ByteTrack 集成提供跨帧目标 ID 持续追踪,Kalman 滤波器开销约 0.1ms/帧。

五、总结与思考

DART 的核心贡献不是一个新模型,而是一套将 SAM 3 转化为实时多类检测器的工程方案。几个值得关注的点:

  • 无需训练:不修改 SAM 3 的任何权重,纯工程优化。DART 的方法思路也可适用于其他具有类似骨干结构的视觉语言模型。
  • 开放词表:继承 SAM 3 的能力,检测类别通过文本指定,切换类别只需重新计算文本嵌入(毫秒级),无需重建 TRT 引擎。
  • 适用场景分级:完整 ViT-H 骨干(55.8 AP,4 类 15.8 FPS)适合精度优先的场景;剪枝骨干(47.6 AP,骨干延迟 26.6ms)平衡精度和速度;蒸馏轻量骨干(RepViT 38.7 AP,骨干延迟 13.9ms)适合速度优先的部署。
  • 硬件要求:目前的性能数据基于 RTX 4080(16GB 显存),80 类 1008px 的编码解码器引擎构建在 16GB 显卡上需要分块处理。
  • 局限性:检测精度完全依赖 SAM 3 的预训练质量;FPS 随类别数增加而下降(4 类 15.8 FPS → 8 类 12.5 FPS);蒸馏骨干在精度上有明显损失(ViT-H 55.8 AP → RepViT 38.7 AP)。

对于需要开放词表实时检测的场景,DART 提供了一个可以直接使用的方案。对于 CV 工程师来说,它的分层优化思路(骨干共享 → 批量解码 → TRT 部署 → 帧间流水线)本身也是值得参考的加速工程模板。

图片来源于原论文
图片来源于原论文

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 一、SAM 3 的实时化瓶颈在哪?
  • 二、四级加速:从 O(N) 到实时
  • 三、性能数据:COCO val2017 上的表现
    • 完整模型
    • 速度与精度的权衡
    • 蒸馏骨干:更小更快
  • 四、上手使用:从一条命令开始
    • 环境安装
    • 单张图像检测
    • 完整 TensorRT 部署
    • 视频检测与跟踪
  • 五、总结与思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档