显存只有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 | 单张推理耗时 |
|---|---|---|---|
| SwinT | 48.4 | 57.2 | 约100–150ms(RTX 3060) |
| SwinB | — | 56.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 秒定案清单
不用纠结,逐条对号入座:
- 如果你有视频流或边缘设备的实时要求,选 SwinT;如果是离线单图批量处理且显存宽裕,选 SwinB。
- 如果显存小于 12G,直接 SwinT,B 版不用考虑;如果 3090 起步且精度是 KPI,选 SwinB。
- 如果你在做原型或论文复现,先跑 SwinT 把流程跑通,精度不够再切 SwinB,别一上来就上重武器。
- 如果你的场景是小目标、密集遮挡,选 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),仅供参考