尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

GroundingDINO 零样本目标检测配置选择指南:SwinT 与 SwinB 选型,10 分钟一步选对

GroundingDINO 零样本目标检测配置选择指南:SwinT 与 SwinB 选型,10 分钟一步选对 GroundingDINO 零样本目标检测配置选择指南SwinT 与 SwinB 选型10 分钟一步选对【免费下载链接】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选型速览如果你只有 8GB 显存、要做实时推理或边缘部署直接选SwinT配置在 GroundingDINO_SwinT_OGC.py权重groundingdino_swint_ogc.pth如果你有 16GB 显存、追求极限精度、且不用在意推理耗时再考虑SwinB配置在 GroundingDINO_SwinB_cfg.py权重groundingdino_swinb_cogcoor.pth。两者上层架构完全一致切换只需改一行配置路径。GroundingDINO 是一个用自然语言就能定位目标的目标检测模型ECCV 2024你输入 cat . dog 这样的短语它就能在图像里框出对应的猫和狗无需任何标注数据——这就是零样本目标检测的核心卖点。官方提供了 SwinT 和 SwinB 两套配置区别主要在骨干网络选错代价不小小卡跑 SwinB 会 OOM大卡跑 SwinT 则可能白白浪费精度余量。显存只有 8GB 时该选 SwinT 还是 SwinB假设你的场景是这样的一块 8GB 显卡想给监控视频加一层人车的文本引导检测。这时你打开仓库 groundingdino/config/ 目录会发现两个配置文件名字很像参数却差一个量级。先记住一条经验法则SwinT 是能跑起来的配置SwinB 是跑得更好的配置。两者的 Transformer 解码器、查询数量、文本编码器全部相同差异只在一处——图像骨干网络backbone负责把原始像素变成特征图的模块SwinT用swin_T_224_1k224×224 输入、ImageNet-1K 预训练轻量SwinB用swin_B_384_22k384×384 输入、ImageNet-22K规模约为 1K 的 22 倍预训练更大更贵。输入分辨率从 224 提到 384意味着特征图面积约为原来的3 倍显存占用和计算量随之膨胀。这就是为什么 8GB 卡跑 SwinT 推理通常没问题跑 SwinB 却很吃力——不是你代码写得不好是配置选错了。GroundingDINO SwinT 与 SwinB 配置逐项对比打开两个文件你会看到除第 3 行backbone外其余 40 多行参数几乎逐行相同。这正是官方设计的用意同一套上层代码换配置即换骨干。核心差异清单如下项目SwinT_OGCSwinB_cfg对你的实际影响backboneswin_T_224_1kswin_B_384_22kSwinB 输入分辨率 384小目标特征更细预训练数据ImageNet-1KImageNet-22KSwinB 见过的类别概念更丰富开放词更稳参数规模约99M约398M差约 4 倍直接决定显存与加载时间推理速度量级快慢约 1 倍实时场景差距明显推荐显存8GB推理16GB推理低于此值大概率 OOM对应权重groundingdino_swint_ogc.pthgroundingdino_swinb_cogcoor.pth配置与权重必须配对共享的关键参数两套一致无需关心hidden_dim256、num_queries900每张图最多 900 个检测查询、enc_layers6/dec_layers6、nheads8、num_feature_levels44 层多尺度特征金字塔、文本编码器bert-base-uncased。所以上层应用代码、推理脚本、后处理逻辑完全通用这就是配置可无缝切换的含义。性能与硬件账本COCO、ODinW 与显存一次算清选配置本质是一道性价比题。把精度、显存、速度放在一起看数据来自官方 README 与论文结果COCO 2017 val 上的零样本与微调表现模型骨干零样本 AP微调 APGroundingDINO-TSwin-T46.756.9~57.2GroundingDINO-BSwin-B~49.562~63ODinW野外多域数据集更贴近真实开放场景上的表现设置SwinT APSwinB AP差距零样本22.326.13.8少样本38.946.47.5全样本62.670.78.1几个读数建议零样本差距其实不大COCO 上约 2~3 个 APSwinB 的优势更多体现在给了数据之后——微调后领先 5~8 个 AP。如果你的业务是纯零样本、不做微调SwinT 的精度损失非常有限性价比很高。如果要做领域微调且部署端算力充足SwinB 的天花板明显更高。硬件账本实测量级供预算参考项目SwinTSwinB推理最小显存8GB16GB训练最小显存12GB24GB参考 GPURTX 3060/3070RTX 3090/A100单图推理耗时约100~150ms3060约200~300ms3090系统内存16GB32GB一句话总结SwinB 用约 2 倍显存、2 倍耗时换 2~8 个不等的 AP这笔账值不值取决于你的场景是实时流水线还是离线高精度。最快切换配置的方法改一行路径 一条命令切换成本极低核心就是换--config_file并配上对应权重。在代码里加载模型时参考 demo/inference_on_a_image.py 的load_model逻辑最小写法from groundingdino.util.slconfig import SLConfig from groundingdino.models import build_model # 选 SwinT args SLConfig.fromfile(groundingdino/config/GroundingDINO_SwinT_OGC.py) # 想升级精度改成下面这行即可 # args SLConfig.fromfile(groundingdino/config/GroundingDINO_SwinB_cfg.py) model build_model(args)命令行方式直接用仓库自带的 demo 脚本跑一张图# 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 cat_dog.jpg \ --text_prompt cat . dog \ --output_dir outputs换 SwinB 时把两个参数分别替换为GroundingDINO_SwinB_cfg.py和groundingdino_swinb_cogcoor.pth即可。文本提示词用.分隔多个类别脚本会输出带框结果到outputs/pred.jpg。验证配置是否跑通仓库还提供了 COCO 评测脚本 demo/test_ap_on_coco.pypython demo/test_ap_on_coco.py \ --config_file groundingdino/config/GroundingDINO_SwinT_OGC.py \ --checkpoint_path weights/groundingdino_swint_ogc.pth \ --coco_path /path/to/coco --batch_size 4建议在正式切换前先拿 2~3 张你业务中最难的本地图像跑一遍肉眼对比漏检和小目标表现比看平均 AP 更能说明问题。资源受限时怎么办SwinB 显存优化清单如果精度必须上 SwinB但硬件又不够用按下面顺序尝试代价从小到大混合精度推理/训练用torch.cuda.amp跑 FP16/BF16显存和速度都能改善零代码风险。降低批大小 梯度累积训练时batch_size1起步用累积步数模拟大 batch精度损失很小。梯度检查点以约 20~30% 的额外计算时间换显存适合训练微调阶段。推理期导出加速转为 ONNX 或 TensorRT 部署SwinT 尤其适合做 INT8 量化。多卡拆分torch.distributed或张量并行把模型拆到多卡是 24GB 卡训练 SwinB 的最后手段。降级兜底以上都不满足时退回 SwinT 是当前架构下最务实的选择——零样本场景下它的精度损失本来就不大。零样本检测选型决策矩阵与上手路径决策矩阵按你的实际情况对号入座决策因素倾向 SwinT倾向 SwinB推理显存16GB16GB~24GB实时性视频流、≥10 FPS 要求离线批处理是否微调纯零样本有标注数据、要冲精度部署端边缘设备 / 单机消费卡服务器 / 云 GPU目标特征中大目标为主小目标、密集场景多三格命中左边就选 SwinT两格以上命中右边再上 SwinB拿不准时先 SwinT 起步跑通后再升级切换成本只有一行配置。建议的上手路径用 demo/inference_on_a_image.py 跑通 SwinT熟悉提示词写法与阈值--box_threshold/--text_threshold调节用 demo/test_ap_on_coco.py 在自己数据上各测一轮 SwinT / SwinB建立本地基线如需定制深入 groundingdino/models/ 目录核心模型在groundingdino.py文本-视觉融合逻辑在bertwarper.py与transformer.py确认 SwinT 不够用后再按上节清单为 SwinB 规划显存预算。选型没有标准答案但有一条清晰的判断链先问显存再问实时性最后问精度——绝大多数情况下前两个问题就能帮你把 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),仅供参考
返回列表