
GroundingDINO双配置选型速查指南【免费下载链接】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一个用自然语言就能框出任意目标的开放集检测模型跑通准备正式接入自己的业务翻 README 时却卡住了官方给了两套配置、两个权重文件SwinT 和 SwinB 到底差在哪精度差多少我这张 12G 显存的卡该下哪个参数不敢改报错不知从哪查起。花十分钟读完你手里会有三样东西两份配置文件逐行对照后的差异清单、官方标注的精度与结构硬指标以及一棵什么场景选哪个的决策树外加可直接复制的最小运行代码。01 速览卡SwinT与SwinB一句话结论对比项GroundingDINO-TGroundingDINO-B为什么重要配置文件GroundingDINO_SwinT_OGC.pyGroundingDINO_SwinB_cfg.py配置文件决定模型结构必须与权重配套COCO box AP官方标注48.4zero-shot/ 57.2微调56.7微调直接反映检测精度上限训练数据规模3 个数据集7 个数据集数据越多开放集能力越强一句话定位轻量、快、省显存默认首选更准代价是更慢、更吃资源决定你的硬件与耗时预算 赶时间只记四条两份配置文件逐行 diff唯一的差异在第 3 行backbone其余 42 行完全一致。SwinB 更准的根源只有两个骨干网络更大Swin-B vs Swin-T 见过的训练数据更多。官方 README 示例、COCO zero-shot 评测脚本默认都是 SwinT新环境从它开始最省心。精度不够再升 SwinB而不是反过来从 B 往 T 砍——T 的权重就是为 OGC 预训练数据训的。02 逐项拆解SwinT与SwinB配置差异在哪2.1 backbone 一行改动预训练尺度与语料对比项SwinTSwinB为什么重要backbone 取值swin_T_224_1kswin_B_384_22k一个字符串决定整个骨干结构骨干预训练输入尺寸224384训练时感受的物理分辨率不同骨干预训练语料ImageNet-1kImageNet-22k22k 类目的视觉词汇量更大这行代码是整个选型的开关build_swin_transformer拿到这个字符串后去参数表里取对应的embed_dim、depths、num_heads、window_size来实例化网络。也就是说T 还是 B不是在几十个参数上微调而是整套结构整体切换。2.2 Swin 结构参数怎么定的对比项Swin-TSwin-B为什么重要embed_dim嵌入维度96128每个特征 token 的信息量上限depths四个阶段层数[2, 2, 6, 2][2, 2, 18, 2]第三阶段 18 层 vs 6 层是体量差距的大头num_heads注意力头数[3, 6, 12, 24][4, 8, 16, 32]头数翻倍意味着更多并行特征子空间window_size窗口大小712单次注意力能看到的局部区域大小这四行参数定义在 swin_transformer.py 的build_swin_transformer里。注意第三阶段的深度差18 vs 6窗口注意力的单块计算量随窗口面积增长12 比 7 的面积大近 3 倍叠加 3 倍的层数B 版本的骨干计算量远超 T——这是更准但更慢的直接来源。2.3 两个配置完全一致的部分对比项SwinTSwinB为什么重要enc_layers / dec_layers6 / 66 / 6Transformer 编解码器深度相同hidden_dim / nheads / dim_feedforward256 / 8 / 2048256 / 8 / 2048检测头容量相同num_queries900900默认最多输出 900 个框文本编码器bert-base-uncasedbert-base-uncased语言理解能力完全同源max_text_len256256长提示词都会被截断到 256 token结论很明确检测头、查询机制、文本编码两边完全一样。所以调参经验阈值、提示词写法在两个模型间是通用的切换配置时不需要重新摸索推理侧逻辑。03 关键差异深挖backbone 如何影响检测行为参数过完了但为什么换一行 backbone 字符串行为就变了先看模型整体架构文本分支和图像分支在这里汇合图像分支的质量由 backbone 决定。一张图看懂 T 和 B 在骨干里的走法关键代码只有这一小段它决定了字符串 → 具体网络的映射# 来自 groundingdino/models/GroundingDINO/backbone/swin_transformer.py model_para_dict { # T 版本嵌入维度 96第三阶段仅 6 层窗口 7 swin_T_224_1k: dict( embed_dim96, depths[2, 2, 6, 2], num_heads[3, 6, 12, 24], window_size7 ), # B 版本嵌入维度 128第三阶段 18 层窗口 12 swin_B_384_22k: dict( embed_dim128, depths[2, 2, 18, 2], num_heads[4, 8, 16, 32], window_size12 ), } # 配置文件里的 backbone 字符串就是这里的 key差异从哪来一句话T 版用小窗口、浅层换速度B 版用大窗口、深层换特征表达力。对检测行为的具体影响是——B 版在细粒度、小目标和复杂背景上更稳因为它在 Stage3 用 3 倍层数和近 3 倍的窗口面积做了更充分的局部上下文整合。而推理时的分辨率demo 里统一 resize 到长边 800、上限 1333见 demo/inference_on_a_image.py 的load_image两者相同所以速度差距基本全部来自骨干本身。04 数据与决策GroundingDINO 精度与结构指标对照硬指标SwinTSwinB来源 / 备注COCO box APzero-shot48.4—README Checkpoints 表官方标注COCO box AP微调57.256.7同上注意 B 版训练数据含 COCO训练数据集数量3 个O365/GoldG/Cap4M7 个另含 COCO/OpenImage/ODinW-35/RefCOCOREADME Checkpoints 表骨干第三阶段层数618源码model_para_dict推理速度 / 显存占用官方未公布数值官方未公布数值需在相同硬件自测结构上 B 显著更重速度一行留白是刻意的仓库没有给出官方 FPS 和显存数字任何精确值都只能来自你自己的实测。结构参数已经说明了量级关系——第三阶段层数 3 倍、窗口面积约 3 倍——把这两项乘起来B 的骨干耗时远大于 T这是可以放心预支的结论。两个容易纠结的分支补充说明一是想微调自己的数据集——两边都支持但 SwinB 权重本身已在 COCO 等 7 个数据集训过迁移起点更高二是先 A/B 再定——因为推理侧代码和提示词格式完全通用同一套业务代码只换-c和-p两个参数就能横评切换成本几乎为零建议真跑一次再拍板。05 落地手册最低环境要求与最小可运行示例5.1 环境要求项目要求来源Python3.9environment.yamlPyTorch2.0.1 CUDA 11.8同上timm / transformers0.9.7 / 4.33.2同上GPU推荐 CUDA须设置CUDA_HOME也支持纯 CPU 模式README Install/News 章节5.2 安装# 克隆仓库 git clone https://gitcode.com/GitHub_Trending/gr/GroundingDINO cd GroundingDINO # 按 README 顺序安装依赖含 C/CUDA 扩展编译需 CUDA_HOME pip install -r requirements.txt pip install -e .两个权重文件groundingdino_swint_ogc.pth、groundingdino_swinb_cogcoor.pth请从 README 的 Checkpoints 表对应的官方发布页下载放到本地后把路径填进下面的命令。5.3 最小可运行示例# 命令行方式官方 demo 脚本把 {GPU ID} 换成 nvidia-smi 里看到的编号 CUDA_VISIBLE_DEVICES0 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 . \ --box_threshold 0.3 --text_threshold 0.25 # 想换 SwinB把 -c 换成 SwinB 配置、-p 换成 swinb 权重即可# Python 方式加载、预测、可视化各一行搞定 from groundingdino.util.inference import load_model, load_image, predict, annotate import cv2 # 配置文件与权重路径换成自己的 SwinB 也只需改这两个参数 model load_model( groundingdino/config/GroundingDINO_SwinT_OGC.py, weights/groundingdino_swint_ogc.pth ) image_source, image load_image(.asset/cat_dog.jpeg) # 官方示例默认阈值box 0.35text 0.25README Running with Python boxes, logits, phrases predict( modelmodel, imageimage, captioncat . dog ., box_threshold0.35, text_threshold0.25 ) cv2.imwrite(out.jpg, annotate(image_source, boxes, logits, phrases))5.4 调优建议参数建议区间调高的副作用调低的副作用box_threshold0.25–0.4官方默认 0.3/0.35召回下降漏检变多框变多混入低质量框text_threshold0.2–0.3提示词与框的匹配更严框变少标签串里混入弱相关词提示词写法多类别用.分隔官方建议—类别混在一个词组里时文本相似度会互相稀释5.5 常见坑 NameError: name _C is not definedREADME 明确点名的高频报错。原因是 C/CUDA 扩展没编好或环境不干净官方建议重新克隆仓库并从头走一遍安装步骤有 CUDA 的机器务必先echo $CUDA_HOME确认变量已指向 nvcc 所在工具链。想在没有 GPU 的机器上跑支持。README News2023/03/27宣布支持 CPU-only命令行加--cpu-only即可SwinT 在 CPU 上的可行性明显高于 SwinB这也是一条隐性的选型理由。框很多很乱或者想要的目标没框出来先按官方 Tips 检查类别之间用.分隔提示词结尾建议带句点get_grounding_output会自动补再逐步调box_threshold。仍不满足时可改用--token_spans指定短语级检测精确到某几个词。提示词很长却没完全生效两份配置都是max_text_len 256超过 256 token 的文本会被截断长句请压缩成类别词 句点的短格式。收束两份配置唯一的代码差异是第 3 行backbone字符串T 与 B 是整套结构切换不是参数微调。SwinB 的精度优势来自两个可验证的来源更大的 Swin-B 骨干Stage3 层数 18 vs 6、窗口 12 vs 7和 7 个训练数据集对 3 个。检测头、900 个查询、bert-base-uncased 文本编码、256 token 上限两边完全一致调参经验和推理代码可以直接迁移。默认从 SwinT 起步显存充足且精度不够再上 SwinB横评成本只换-c与-p两个参数。延伸材料README.mdCheckpoints 与 COCO 评测命令、demo/inference_on_a_image.py参数完整定义、groundingdino/util/inference.pypredict 接口实现。如果这篇帮你在 T 和 B 之间做出了选择欢迎点赞、收藏、关注下一篇我们拆token_spans短语级检测让 GroundingDINO 只框你要的那几个词。【免费下载链接】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),仅供参考