两份权重先下哪个?GroundingDINO 的 SwinT 和 SwinB 选型与跑通实战
2026/9/16 14:30:30 网站建设 项目流程

两份权重先下哪个?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

装完 GroundingDINO 你会遇到两个 .pth 权重和两套配置文件,不确定先跑哪个。这个开放集检测模型接收"图片 + 一句话",直接输出框和类别文字;SwinT 与 SwinB 的核心差别只在骨干网络和输入分辨率。本文先把最小可跑流程讲通,再讲清楚 GroundingDINO 配置该怎么选。

GroundingDINO 最小安装步骤:装完就能跑一次推理

git clone https://gitcode.com/GitHub_Trending/gr/GroundingDINO && cd GroundingDINO export CUDA_HOME=/usr/local/cuda # 指向你的 CUDA 目录;没有 GPU 就跳过 pip install -e . mkdir -p weights # 放下载好的权重文件

权重文件名为groundingdino_swint_ogc.pth(SwinT)和groundingdino_swinb_cogcoor.pth(SwinB),官方下载地址见 README 的 Checkpoints 表格,下载后丢进weights/即可。

from groundingdino.util.inference import load_model, load_image, predict, annotate import cv2 model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "weights/groundingdino_swint_ogc.pth") image_source, image = load_image(".asset/cat_dog.jpeg") boxes, logits, phrases = predict(model, image, "cat . dog .", box_threshold=0.35, text_threshold=0.25) cv2.imwrite("out.jpg", annotate(image_source, boxes, logits, phrases))

类别之间建议用.分隔,和 README 示例保持一致。想换 SwinB,不改代码,把load_model里两个路径换成 SwinB 配置和 cogcoor 权重就行。下面这张图展示了文本驱动定位的效果,包括"指代式"表达(如 the left lion):

SwinT 和 SwinB 配置文件到底差在哪

先说一个关键事实:逐行对比 groundingdino/config/GroundingDINO_SwinT_OGC.py 和 groundingdino/config/GroundingDINO_SwinB_cfg.py,唯一实质差异就是backbone一行——swin_T_224_1kswin_B_384_22k。其余hidden_dim = 256num_queries = 900num_feature_levels = 4等参数完全相同。

对比项SwinTSwinB
骨干网络Swin-TSwin-B
输入分辨率224×224384×384
骨干预训练数据ImageNet-1KImageNet-22K
参数量级约 172M(论文口径)约 230M
推理显存(经验值)6–8GB 可跑12GB 以上更稳妥
相对速度基准约慢 2–3 倍(分辨率像素量约为 3 倍)
官方 COCO box AP48.4(zero-shot)/ 57.2(fine-tune)56.7

架构上三个关键模块各管一段(见 groundingdino/models/GroundingDINO/groundingdino.py):特征增强器做文本-图像双向交叉注意力,让文本特征和图像特征互相补充;语言引导查询选择根据文本内容生成 900 个跨模态查询,决定"往哪找";跨模态解码器迭代精修框的位置,用对比损失保证框和词匹配、定位损失保证框贴边。

基准数据怎么说:ODinW 零样本成绩怎么读

ODinW 覆盖 35 个检测数据集,是开放集检测常用的零样本基准,官方表在.asset/ODinW.png

  • Grounding-DINO-T(172M)Zero-Shot AP 平均 20.0、中位 9.5:当时超过同量级的 GLIP-T(19.6),说明"小模型 + 文本接地"这条路走得通。
  • 同模型 Full-Shot AP 平均 70.7、中位 76.2:当 35 个数据集都有标注数据可微调时,它对其它方法的领先幅度反而拉大,说明它吃标注的能力强。
  • 论文里 Grounding DINO L(Swin-L,341M)Zero-Shot 平均 26.1、中位 18.4:这是该框架的能力上限参照,SwinB 权重(COCO 56.7 AP)介于 T 和 L 之间。
  • Few-Shot AP 中位 51.1:少量样本场景下稳定性也好,适合"手头只有几十张标注"的业务。

按场景对号入座:你的部署该用哪个配置

你的情况推荐配置一句话理由
实时视频流(要帧率)SwinT224 输入 + 小骨干,推理约快 2–3 倍,帧率瓶颈主要在这
边缘 / 移动 / CPU 部署SwinT显存占用低,且官方 demo 支持--cpu-only纯 CPU 模式
快速原型验证SwinT权重小、下载快,48.4 的零样本 AP 足以验证想法是否成立
高精度质检(医学影像、工业检测、需微调)SwinB384 输入对小目标和细节更友好,微调起点 56.7 AP 留有余量

前提说明:显存和速度是经验值,具体以你机器的nvidia-smi实测为准;如果你的目标本来就大且文本提示写得好,SwinT 的精度损失未必明显。

GroundingDINO 性价比调参:4 个值得动的参数

两份配置默认值一致,以下按"改成多少 → 换来什么 → 代价是什么":

  1. num_queries:900 → 500–600。换来解码更快、输出框更少、后处理省算力;代价是密集场景会漏检——模型按 900 训练,减少查询属于降级使用,不是无损。
  2. num_feature_levels:4 → 3。换来每层注意力少算一个特征金字塔层级,推理提速;代价是小目标召回下降,目标偏小的数据集别动。
  3. use_checkpoint:True → False(配置里默认开着)。换来速度明显提升(梯度检查点只影响前向/反向的重复计算开销);代价是显存峰值上升,小卡上可能 OOM。
  4. hidden_dim:256 → 384。换来更强的特征表达能力;代价最大——权重形状全变,预训练权重无法直接加载,必须重训,显存也更高。只建议自研模型时用。

三句话决策:SwinT 还是 SwinB

  1. 默认选 SwinT:显存 ≤8GB、要实时、或只是验证想法,就用swint_ogc.pth起步,跑通 demo/inference_on_a_image.py 再谈其它。
  2. 只有两种情况升级到 SwinB:你要在自己的领域数据上微调,或者目标小、细节关键且能拿出 12GB 以上显存。
  3. 两者切换零成本:只改配置文件和权重两个路径,代码、prompt、阈值全部通用。
  4. 先跑一次默认配置拿到基线,确认瓶颈是速度、显存还是漏检,再回头查上一节的参数表,不要一上来就改参数。

【免费下载链接】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),仅供参考

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

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

立即咨询