GroundingDINO 零样本目标检测:给一句自然语言,就把图里的东西框出来
2026/9/16 18:08:54 网站建设 项目流程

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 就是为此而生的零样本目标检测工具,输入图片和自然语言提示,直接返回对应物体的边界框。

能力速览:GroundingDINO 能做什么

  • 输入图片 + 类别名提示(cat . dog .)→ 得到所有实例的边界框;多类别用点号分隔,一次推理全部框出。
  • 输入整句参考表达 + token 位置 → 得到句中指代对象的精确位置,例如"左边那只狮子"。
  • 输出检测框 → 配合 Stable Diffusion / GLIGEN,得到只改写指定区域的编辑图。
  • 边界也说清:它只出框不出 mask;仓库只提供推理代码,训练代码未开源,微调要自己备数据。

5分钟安装与验证:GroundingDINO 怎么跑起来

装的东西:克隆仓库后执行安装,会顺带编译 CUDA 版注意力扩展,并下载 Swin-T OGC 权重。装之前确认CUDA_HOME指向与 PyTorch 匹配的 CUDA 版本,否则按纯 CPU 模式编译,后面速度感人。

git clone https://gitcode.com/GitHub_Trending/gr/GroundingDINO && cd GroundingDINO && pip install -e . ; mkdir -p weights && cd weights && wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth

验证就一条命令(以 Swin-T 配置为例,图片换成你自己的):

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 outputs -t "cat . dog ."

看到outputs/pred.jpg里原图上画出彩色框、框角标着cat (0.9xx)这样的标签,就说明整条流水线通了。

三个典型工作流:批量检测、精确定位与局部编辑

场景一:批量检测已知几类物品

场景一句话:盘点一张照片里同时出现的猫、狗和椅子。关键做法:提示词写成点号分隔的类别列表cat . dog . chair .,跑 推理脚本;脚本默认按 box_threshold 0.3 过滤,输出的每个框都带命中的词和分数。效果:一次推理得到所有实例的框与标签,直接落盘成标注图。

场景二:用整句话精确定位某个短语

场景一句话:图中有多只动物,只想框出"戴红帽子的那个人"。关键做法:把完整句喂给模型,再用--token_spans按 token 下标切出目标短语,例如"a cat and a dog""cat"[2, 5];指定 token_spans 后 text_threshold 自动失效,只按该短语打分。效果:同一张图、同一句话,可以只输出"那只猫"而不带出"那只狗"。

场景三:检测框驱动的局部图像编辑

场景一句话:只想把图里的狗换成金毛,狮子保持原样。关键做法:先让 GroundingDINO 框出目标,把框和类别喂给 Stable Diffusion 或 GLIGEN 做局部改写,仓库的 图像编辑 notebook 里是完整流程。效果:只改检测到的区域,背景和其他物体基本不动。

关键参数怎么调:box_threshold 与 text_threshold 调优

  • box_threshold(默认 0.3):决定哪些框保留,分数低于它直接丢弃。漏检多就往 0.2 调,误框多往 0.4~0.5 调;杂背景场景普遍比干净图更吃低阈值。
  • text_threshold(默认 0.25):决定哪些词算"命中标签"。调太低会把无关词混进标签,一般跟着 box_threshold 微调即可,不用单独大动。
  • token_spans:不填就走默认打分逻辑;填了则只检测指定短语,且与 text_threshold 互斥,二选一。

容易踩的坑

  • 现象:import 时抛NameError: name '_C' is not defined→ 原因:CUDA_HOME未设置或安装步骤跳步,CUDA 扩展没编译 → 解法:重设环境变量后重新 clone 并严格走完全部安装步骤,官方 README 点名了这个错。
  • 现象:输出标签串词、框对不上 → 原因:提示词格式不对,不同类别间要用.分隔且句尾要有句号 → 解法:照cat . dog .的写法来,模型会自动补末尾句号,但类别间的点号自己得加。
  • 现象:纯 CPU 跑一张图要等半天,或 GPU 显存吃紧 → 原因:Swin-B 权重约两倍显存,大图高分辨率也会爆 → 解法:资源有限就用--cpu-only顶一下、降分辨率,正式用回 Swin-T。

想再深入,可以从 groundingdino/models/ 读 feature enhancer 与跨模态 decoder 的实现,弄清 900 个框如何跟 256 个文本维度互相打分。下一步自然的延伸是把检测框接上 SAM 转成 mask,做开放词表的实例分割。

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

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

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

立即咨询