
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/GroundingDINOGroundingDINO 是 ECCV 2024 的开放集目标检测模型你输入一句自然语言描述比如 a cat and a dog它直接在图像上画出对应的框不受预定义类别限制。仓库提供了两套官方配置——SwinT 和 SwinB两者的差异比大多数人想象的更小。这篇文章把两边并排放给你一个可以直接照做的选型结论。读完你将得到5 行对比表一眼判断两套配置差在哪含官方 COCO 精度数字显存与速度代价的明确说法并区分哪些是官方数据、哪些是经验估算两份可复制的最小运行代码外加 3 个最常踩的坑先说结论该选哪个默认选 SwinT单图推理、demo、数据标注、产品集成等绝大多数场景SwinT 的精度COCO 零样本 48.4已经够用显存更友好、速度更快。只有精度是硬指标——刷榜、密集小目标、复杂场景——才值得付出 SwinB 的代价它的 COCO AP 是 56.7官方给出的最佳数字。项目SwinTSwinB配置文件GroundingDINO_SwinT_OGC.pyGroundingDINO_SwinB_cfg.py官方权重文件名groundingdino_swint_ogc.pthgroundingdino_swinb_cogcoor.pthCOCO box AP官方48.4 零样本 / 57.2 微调56.7单卡推理显存约 2–4 GB估算约 6–10 GB估算相对推理速度快参考值约 2–3 倍于 SwinB慢表中显存与速度没有官方公开值是单卡、800 长边输入的经验估算只用于量级判断别拿去做容量规划。两份配置一行差异只改了一个 backbone把两份.py逐行对比会发现 43 个参数只有第 3 行不同- backbone swin_T_224_1k backbone swin_B_384_22k其余全部相同。差异全部集中在骨干网络backbone即从图像中提取视觉特征的底层网络里。在 swin_transformer.py 中build_swin_transformer函数把每种变体写死成参数字典model_para_dict { swin_T_224_1k: dict( embed_dim96, depths[2, 2, 6, 2], num_heads[3, 6, 12, 24], window_size7 ), swin_B_384_22k: dict( embed_dim128, depths[2, 2, 18, 2], num_heads[4, 8, 16, 32], window_size12 ), }逐项拆开这四个参数参数swin_T_224_1kswin_B_384_22k含义embed_dim96128特征向量宽度越大表达力越强、计算越多depths[2,2,6,2][2,2,18,2]四个阶段各自的块数SwinB 第三阶段直接翻了 3 倍num_heads[3,6,12,24][4,8,16,32]各阶段多头注意力头数window_size712局部注意力窗口边长见下预训练设定ImageNet-1k224 分辨率ImageNet-22k 大规模预训练384 分辨率名字里的 1k/22k 指类别数224/384 指训练分辨率Swin Transformer 用窗口注意力把特征图切成互不重叠的小窗口只在窗口内算注意力让计算量近似线性增长。窗口从 7 加大到 12单个窗口覆盖的上下文变大全局信息聚合更好但窗口内注意力代价随面积平方增长——这是 SwinB 更贵的两个主因之一另一个是第三阶段 18 个块堆出的深度。参数逐项看骨架不同其余完全一致相同部分覆盖了哪些模块骨干之后两套配置一字不差Transformer 主干enc_layers6、dec_layers6、hidden_dim256、nheads8、dim_feedforward2048查询机制num_queries900——模型最多输出 900 个框的上限query_dim4文本编码器bert-base-uncasedmax_text_len256use_text_enhancerTrue跨模态融合use_fusion_layerTrue图中 Feature Enhancer 模块、use_text_cross_attentionTrue、fusion_droppath0.1DN-DETR 去噪训练dn_labelbook_size2000等一组噪声参数推论很直接选 SwinT 还是 SwinB 是纯骨干网络选择推理阶段不需要为两套模型准备两套调参经验。名字里的数字怎么读swin_T_224_1k 规模 TTiny 224 训练分辨率 ImageNet-1k 预训练swin_B_384_22k 规模 BBase 384 分辨率 22k 类大规模预训练。注意pretrain_img_size只影响绝对位置编码的插值参考推理时你喂多大的图都行不需要把图裁成 224 或 384。精度与开销官方数字和估算分开放指标SwinTSwinB来源COCO box AP48.4零样本/ 57.2微调56.7官方README 权重表训练数据O365、GoldG、Cap4M额外加 COCO、OpenImage、ODinW-35、RefCOCO官方权重文件体积约 1.3 GB约 2.9 GB估算按参数量推算单卡推理显存800 长边2–4 GB6–10 GB估算相对速度基准约 0.4–0.5 倍估算两点必须说清楚SwinB 的 56.7 不是单靠骨干涨出来的。它的训练数据比 SwinT 宽得多结构收益和数据收益纠缠在一起无法完全拆分。官方提供了零样本评测脚本 demo/test_ap_on_coco.pyREADME 写明 SwinT 跑出来的结果应该在48.5左右可用作你本地环境的验证基准。选型决策表按你的场景挑场景建议理由Web 演示、以图检索、批量标注SwinT精度够用迭代最快线上多路并发服务SwinT吞吐参考值高 2–3 倍估算刷基准、精度优先SwinB56.7 是官方最高数字遥感、医疗等密集小目标SwinB更大窗口 更深网络利好小目标经验推断无 GPU 的机器SwinT --cpu-onlySwinB 在 CPU 上慢到不实用估算上手最小可运行推理 先 clone 仓库git clone https://gitcode.com/GitHub_Trending/gr/GroundingDINO进入目录后pip install -e .再下载对应权重放到weights/。两套模型 API 完全一样只改配置和权重两个路径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, captioncat . dog ., box_threshold0.35, text_threshold0.25, ) cv2.imwrite(out.jpg, annotate(image_source, boxes, logits, phrases))也可以直接跑命令行 demopython 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 outputs \ -t a cat and a dog切换 SwinB 时把两处路径换成GroundingDINO_SwinB_cfg.py和groundingdino_swinb_cogcoor.pth即可其余代码零改动。常见坑与调参建议⚠️ 三个最常翻车的地方SwinB 权重文件名不是swinb.pth官方叫groundingdino_swinb_cogcoor.pth文件名猜错会直接加载失败。caption 用 . 分隔短语例如chair . person . dog .API 会自动补句末点号把中文长句整句塞进去效果会明显变差bert-base-uncased对中文分词不友好。想降显存groundingdino/util/inference.py 的load_image里写死了RandomResize([800], max_size1333)把 800 调小到 640 能明显省显存精度略降属于经验推断或者给 demo 脚本加--cpu-only。推理阈值调参方向很固定参数默认值框太多太杂时漏检时box_threshold0.35API 默认提到 0.4–0.5降到 0.2–0.25text_threshold0.25提到 0.35降到 0.2收尾结论不变多数场景用 SwinT精度优先或密集小目标才上 SwinB。两份配置只差一行 backbone推理 API 完全共用切换成本就是改两个路径试错代价很低。下一步先按上面的最小示例把 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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考