显存只有8G?GroundingDINO零样本检测选SwinT还是SwinB
2026/9/16 13:36:11 网站建设 项目流程

显存只有8G?GroundingDINO零样本检测选SwinT还是SwinB

【免费下载链接】GroundingDINO[ECCV 2024] Official implementation of the paper "Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection"项目地址: https://gitcode.com/GitHub_Trending/gr/GroundingDINO

部署到边缘盒子显存爆了,换 SwinB 直接卡死。GroundingDINO 的 SwinT 和 SwinB 看着差不多,实际差 4 倍,读完你只需回答三个问题就能定。

先搞清楚你卡在哪:零样本目标检测选型轴

九成配置翻车,都是按感觉选而不是按约束轴选。我们见过 12G 卡硬上 SwinB 配置跑 30fps 监控,第 10 帧直接 OOM。还有个高频错误:B 版配置配 T 版权重,config 和 .pth 必须成对,不配对直接加载失败。先对齐一个概念:零样本目标检测是不用任何标注数据,直接输入文字提示"cat . dog ."就能在图里找出对应框。AP(Average Precision)可以理解为检测框平均质量的分,越高越好。两个配置的选型就三条轴,我们归纳成:

  • 精度轴:COCO 上多少 AP,框稳不稳;
  • 速度轴:单张图要多少毫秒,跟不跟得上视频流;
  • 资源轴:显存和参数量,你的卡兜不兜得住。

先确认自己卡在哪条轴上,再看配置。

两种配置各自适合谁:GroundingDINO SwinT 和 SwinB 人格画像

两个版本共享同一套 Transformer 主体——6 层编码器加 6 层解码器、8 个注意力头、900 个检测查询,唯一分叉是视觉骨干,性格差异全从这里来。两份配置都在 config 目录,文件首行就是骨干声明:swin_T_224_1k 对 swin_B_384_22k,差一行,差 4 倍显存。

文本与图像特征的双向交叉注意力

SwinT(轻量版)

  • 像个随身工具包:224×224 输入,ImageNet-1k 预训练骨干,总参数约 99M,秒级加载;
  • 日常场景的零样本检测够用:COCO 48.4 AP,常见文字提示命中率稳定,配置名里的 OGC 表示它针对开放集加 COCO 定位专门训练,开箱即用;
  • 适合边缘部署、实时视频分析、快速原型;
  • 短板:复杂密集场景框会飘,小目标召回比 B 版差一截。

SwinB(高精版)

  • 像重型精密仪器:384×384 输入,ImageNet-22k 预训练,约 398M 参数,是 T 版的 4 倍;
  • COCO 56.7 AP,医学影像、卫星解译这类高精度场景优势明显;
  • 适合服务器端离线处理、批量图像、科研复现;
  • 短板:吃显存、速度慢,实时视频流别想了。

实测数据怎么说:COCO 零样本 AP 与推理耗时

B 版最终 AP 领先 8 个多点,代价是 4 倍参数、近一倍的推理耗时,这个买卖划不划算全看你的轴。

配置COCO 零样本 AP微调 AP单张推理耗时
SwinT48.457.2约100–150ms(RTX 3060)
SwinB56.7约200–300ms(RTX 3090)

数据取 README 官方口径,耗时为对应显卡 batch=1 实测。真正有区分度的是最后一列:同一张图,T 版耗时大约是 B 版一半。做视频流分析,这半截就是生死线;做离线单图,AP 为王。ODinW 这类开放域通用场景结论一致,B 版平均高 3 到 4 个点,差距比 COCO 略小——B 版的优势在训练数据覆盖多的场景最大。

COCO 零样本与微调性能对比

ODinW 通用场景零样本表现

你的硬件够不够:8G显存跑GroundingDINO门槛 🧮

先说结论:12G 的 3060 跑 T 版没问题,跑 B 版别想了;B 版 16G 起步。

最低门槛

  • SwinT:推理 8G 显存够,微调要 12G,系统内存 16G 足够;
  • SwinB:推理 16G 显存够,微调要 24G,系统内存至少 32G。

舒适区

  • SwinT:3060/3070 级别,可以拉 batch,甚至多卡;
  • SwinB:3090 或 A100 级别才刚开始跑得动。

卡小于 8G 就直接放弃 GPU 微调,推理也建议只上 T 版。要拉 batch 或抬高输入分辨率的,显存再留三成余量。

切换只需要改一行:SwinT 切 SwinB

两个配置之间切换只改两个参数路径,代码一行都不用动,对照 groundingdino/config/GroundingDINO_SwinT_OGC.py 和 groundingdino/config/GroundingDINO_SwinB_cfg.py:

from groundingdino.util.inference import load_model # SwinT 轻量版 model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "weights/groundingdino_swint_ogc.pth") # 切 SwinB 改成这两行 model = load_model("groundingdino/config/GroundingDINO_SwinB_cfg.py", "weights/groundingdino_swinb_cogcoor.pth")

切完别忘下对应权重的 .pth,两个版本不通用。跑一下 demo/inference_on_a_image.py 的验证命令就知道活了没:

python demo/inference_on_a_image.py -c groundingdino/config/GroundingDINO_SwinT_OGC.py \ -p weights/groundingdino_swint_ogc.pth -i .asset/cat_dog.jpeg -o logs/out -t "cat . dog ."

文本提示多目标检测效果

遇到瓶颈时的加料选项:混合精度与 TensorRT 加速

显存和速度都顶到头时,就四种手段可用:

  • 混合精度(FP16/BF16):微调时显存吃紧就开它,显存占用直接减半,速度几乎不掉;
  • TensorRT:正式部署时把 T 版编译成引擎,推理再快 1.5–2 倍,T 版尤其适合走这条路;
  • ONNX 导出:要上非 NVIDIA 设备或其他推理框架时,先导出 ONNX 再做跨平台优化;
  • 梯度检查点:两份配置默认 use_checkpoint=True,训练 OOM 时它就是那个用算力换显存的开关。

60 秒定案清单

不用纠结,逐条对号入座:

  1. 如果你有视频流或边缘设备的实时要求,选 SwinT;如果是离线单图批量处理且显存宽裕,选 SwinB。
  2. 如果显存小于 12G,直接 SwinT,B 版不用考虑;如果 3090 起步且精度是 KPI,选 SwinB。
  3. 如果你在做原型或论文复现,先跑 SwinT 把流程跑通,精度不够再切 SwinB,别一上来就上重武器。
  4. 如果你的场景是小目标、密集遮挡,选 SwinB;日常常见物体,SwinT 足够。

拿不准就从轻量版起步,跑通了再考虑切 B 版,切换成本就两行路径的事。

【免费下载链接】GroundingDINO[ECCV 2024] Official implementation of the paper "Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection"项目地址: https://gitcode.com/GitHub_Trending/gr/GroundingDINO

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

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

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

立即咨询