选哪个配置?GroundingDINO两大配置SwinT vs 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
GroundingDINO 这个零样本开放词汇目标检测框架的仓库里,躺着两个配置文件:SwinT_OGC 和 SwinB_cfg,到底该用哪个?先给结论:实时、资源受限选 SwinT;高精度离线选 SwinB。下面是判断逻辑、实测数据和最短可运行的验证命令,看完可以直接做决定。
先立判断:精度、速度、资源的三维取舍
多数实时场景下 SwinT 就够用,SwinB 只留给真正追求更高精度且显存富余的场景。
两套配置的骨架其实完全一样:相同的 Transformer 编解码层数、900 个检测查询、同一个 BERT 文本编码器,差异只在骨干网络——SwinT 用 224×224 输入、ImageNet-1K 预训练;SwinB 用 384×384 输入、ImageNet-22K 预训练。所以选配置这件事,本质是三个维度上做取舍:
- 精度:SwinB 在不同基准上领先约 3~8 AP;
- 速度:SwinB 单张推理耗时约为 SwinT 的 2 倍;
- 资源:SwinB 参数量约为 SwinT 的 4 倍,显存需求接近翻倍。
关键差异一览:两套配置只有5个地方不同
把与决策无关的参数全部剥掉,两个配置文件只差这 5 处:
| 参数 | SwinT_OGC | SwinB_cfg |
|---|---|---|
| backbone | swin_T_224_1k | swin_B_384_22k |
| 输入分辨率 | 224×224 | 384×384 |
| 参数量级 | 约99M | 约398M |
| 显存需求(推理) | 8GB+ | 16GB+ |
| 单张推理耗时 | 100~150ms(RTX 3060) | 200~300ms(RTX 3090) |
其余参数(enc_layers=6、dec_layers=6、nheads=8、num_queries=900、文本编码器等)逐项相同,这意味着两套配置可以无缝切换,上层应用代码一行都不用改。
实测AP:精度差距到底有多大
精度差距是真实的但有限:COCO 零样本上 SwinB 只领先约 2.8 AP,数据越多、经过微调后差距才越拉越大。
- COCO 零样本:SwinT 46.7 AP,SwinB 约 49.5 AP;
- COCO 微调:SwinT 56~57 AP,SwinB 62~63 AP,差距约 6 AP;
- ODinW 零样本:22.3 vs 26.1 AP;
- ODinW 少样本:38.9 vs 46.4 AP,差距约 7.5 AP,是 SwinB 优势最明显的设置;
- ODinW 全样本:62.6 vs 70.7 AP,差距接近 8 AP。
场景对号入座:如果你是……就选……
💡 别只盯着基准数字,先对号自己的场景:
- 如果你在跑实时视频(监控、机器人导航、直播分析)→ 选SwinT,100~150ms/张 的耗时预算才谈得上帧率;
- 如果你在离线处理图像且追求最高精度(遥感解译、高精度标注)→ 选SwinB,6~8 AP 的提升通常值回票价;
- 如果你的显存不足 16GB→ 只能SwinT,SwinB 推理最低就要 16GB 显存起步;
- 如果你在快速做原型或论文跑 baseline→ 先用SwinT,等结论对精度敏感时再换 SwinB 出最终数字;
- 如果你有 3090/A100 级服务器资源且任务长期运行→SwinB值得上,显存溢价的摊薄成本很低。
零样本检测效果最快验证:10行命令跑通两套配置
在仓库根目录用官方 demo 脚本 demo/inference_on_a_image.py 直接跑,把两套官方权重放进 weights/ 目录,连仓库自带的示例图都能拿来试手感:
# SwinT配置 python demo/inference_on_a_image.py \ --config_file groundingdino/config/GroundingDINO_SwinT_OGC.py \ --checkpoint_path weights/groundingdino_swint_ogc.pth \ --image_path .asset/cat_dog.jpeg \ --text_prompt "cat . dog ." \ --output_dir outputs # SwinB配置:把 config_file 与 checkpoint_path 换成SwinB版本再跑一遍跑完打开 outputs/pred.jpg 就是检测结果,两套配置的差别肉眼可见。需要量化评估时,用 demo/test_ap_on_coco.py 在完整数据集上算 COCO AP。
进阶选项:资源受限时真正落地的两个省显存手段
资源紧张时不必罗列一堆优化方法,先做这两件就够:
- 混合精度推理(FP16/BF16):两套配置都适用,显存大约减半,速度几乎不掉,是性价比最高的第一步;
- TensorRT 量化(针对 SwinT):目标若是端侧部署,SwinT 量化到 INT8 后耗时预算还能再压缩一截,SwinB 量化的收益和工程成本都不划算。
总结:一句话选择建议与三步学习路径
⚡ 一句话:要实时、要省资源就 SwinT;拿资源换精度就 SwinB;仍拿不准,就把两套权重在同一批 10 张图上各跑一遍,让结果替你说话。
学习路径建议:
- 先跑通 demo/inference_on_a_image.py,熟悉输入输出格式;
- 对照阅读 groundingdino/config/ 下的两个配置文件,结合上文架构图理解文图交叉注意力链路;
- 想深挖时,再进入 groundingdino/models/ 阅读核心模型实现。
【免费下载链接】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),仅供参考