Grounding DINO 实战部署指南一句话提示词完成开放式目标检测【免费下载链接】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/GroundingDINOGrounding DINO 是一款开放式目标检测模型输入一句自然语言就能在图片中定位任意物体无需针对固定类别重新训练。本指南面向想在本地跑通它、并接入自己标注或监控流程的开发者。一、装好 Grounding DINO3 条命令 1 个权重文件环境搭建是整个流程里最容易被卡住的一步。核心只有两件事编译 C/CUDA 扩展、下载预训练权重。1.1 先确认 CUDA_HOME 是否已设置项目安装时会编译MsDeformAttngroundingdino/models/GroundingDINO/csrc/ 目录中的 CUDA 算子因此需要找到 CUDA 工具链路径echo $CUDA_HOME # 若输出为空说明未设置 which nvcc # 例如输出 /usr/local/cuda/bin/nvcc export CUDA_HOME/usr/local/cuda # 与 nvcc 所在目录对齐没有 GPU 也可以装此时扩展按 CPU 模式编译后续推理加--cpu-only参数即可只是速度会明显变慢。1.2 三条命令完成安装git clone https://gitcode.com/GitHub_Trending/gr/GroundingDINO cd GroundingDINO pip install -e .pip install -e .会先装好依赖PyTorch、transformers、supervision 等见 requirements.txt再就地编译扩展。如果你之后遇到NameError: name _C is not defined说明扩展没编译成功——重新克隆一份再走一遍完整安装流程即可不要在旧目录上修补。1.3 下载预训练权重两个规格怎么选从项目发布的 checkpoints 页下载对应.pth文件放入weights/目录。两个官方规格对比如下模型Backbone训练数据规模COCO box AP配套配置文件GroundingDINO-SwinT轻量约 1.2GBSwin-TO365、GoldG、Cap4M48.4零样本/ 57.2微调groundingdino/config/GroundingDINO_SwinT_OGC.pyGroundingDINO-SwinB高精度Swin-B上述基础上再加 COCO、ODinW-35、RefCOCO 等56.7groundingdino/config/GroundingDINO_SwinB_cfg.py日常试用选 SwinT 就够显存占用低追求召回精度再换 SwinB。配置文件和权重必须成对使用混搭会报错。安装完成后跑通第一次推理才算真正落地。二、跑通第一次推理一条命令出结果框2.1 组装推理命令项目自带单图推理脚本 demo/inference_on_a_image.py最短可用命令如下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 output/ \ -t cat . dog . \ --box_threshold 0.35 --text_threshold 0.25五个参数的作用-c模型配置文件、-p权重文件、-i输入图片、-o输出目录会存原图和标注图、-t文本提示词。CPU 机器在末尾追加--cpu-only。2.2 提示词怎么写才有用模型约定用英文句号.分隔不同的类别名例如cat . dog .或person . traffic light .。两个实用技巧类别词单独成段别写成完整长句句号分隔能避免 token 粘连导致的误检若只想锁定句子中某个短语比如two dogs with a stick .里的dogs可用--token_spans指定该短语的 token 起止位置此时text_threshold会被自动忽略。2.3 模型到底输出了什么理解输出结构后面接项目才不迷路。模型对每张图默认产出900 个候选框每个框附带与提示词中所有 token 的相似度分数。推理脚本做了两步筛选先按box_threshold过滤框保留最高相似度超线的框再按text_threshold从相似度向量中还原出文本标签。所以最终你拿到的是「框 置信度 短语」三元组。整个检测过程是文本编码器和视觉主干在跨模态解码器里对齐完成的官方示例图也是一张猫狗同框照片正好验证多类别提示词效果命令能跑通后下一步是把它变成你代码里可复用的函数。三、接入自己的项目4 个函数 2 个阈值3.1 推理 API 就 4 个函数核心接口集中在 groundingdino/util/inference.pyload_model、load_image、predict、annotate四个函数覆盖全流程。模型只在进程启动时加载一次之后每次检测都是毫秒级的前向推理from groundingdino.util.inference import load_model, load_image, predict, annotate model load_model(groundingdino/config/GroundingDINO_SwinT_OGC.py, weights/groundingdino_swint_ogc.pth) image_source, image load_image(test.jpg) boxes, logits, phrases predict(model, image, person . car ., box_threshold0.35, text_threshold0.25) annotate(image_source, boxes, logits, phrases) # 返回标注好的图其中load_image内部把图片短边缩放到 800、长边封顶 1333 并做了标准化你拿到的image是可以直接喂给predict的张量。3.2 两个关键阈值的调节方法参数作用默认值调节建议box_threshold框的保留线候选框最高相似度须超过它才输出0.3~0.35降到 0.25 提召回误检变多升到 0.45 提精度text_threshold文本还原线相似度超过它的词会被拼进标签0.25一般保持比 box 阈值略低或相近经验法则是两者保持相近数值、先动box_threshold观察框的数量变化再微调text_threshold修正标签文字。3.3 实战给一批图片预标注省掉 80% 手工框选假设你有一百张原始图片想先让模型打一遍草标再人工修正脚本骨架如下保存为batch_annotate.py即可运行import json from pathlib import Path from groundingdino.util.inference import load_model, load_image, predict model load_model(groundingdino/config/GroundingDINO_SwinT_OGC.py, weights/groundingdino_swint_ogc.pth) for img in Path(raw/).glob(*.jpg): _, tensor load_image(str(img)) boxes, logits, phrases predict(model, tensor, car . truck . person ., box_threshold0.35, text_threshold0.25) record [{box: boxes[i].tolist(), score: round(float(logits[i]), 3), label: phrases[i]} for i in range(len(boxes))] img.with_suffix(.json).write_text(json.dumps(record, indent2))每张图片旁会生成一个 JSON存的是归一化框坐标、置信度和类别可以直接导入标注工具作为初稿。推理跑顺了之后如果想给别人用还有两种交付方式。四、两种交付方式Web 界面或 Docker 容器4.1 五分钟起一个 Gradio 页面不想写前端直接跑项目自带的 demo/gradio_app.pypip install gradio python demo/gradio_app.py --share--share会生成一个可分享的公网临时链接方便团队成员在浏览器里上传图片、调阈值、看结果无需装任何环境。4.2 Docker 一键容器化项目根目录提供了 Dockerfile基镜像是pytorch/pytorch:2.1.2-cuda12.1内部自动克隆代码、下载 SwinT 权重并编译扩展docker build -t groundingdino . docker run --gpus all groundingdino容器启动后会执行 docker_test.py 做一次模型加载自检打印DONE!即环境可用。多台机器、CI 流水线场景下这是环境一致性最好的方案。五、选型与调优SwinT 还是 SwinB阈值怎么定5.1 按显存和精度选规格显存 6GB 左右或跑批量任务用 SwinT显存 16GB 以上且对漏检敏感质检、安防场景换 SwinB 权重与对应配置文件AP 可提升约 8 个点代价是显存和耗时都上升一个量级。5.2 提示词工程比调阈值更值得花时间实践中检测不准多半不是阈值问题而是提示词没覆盖到目标措辞。例如想检测自行车写bicycle . bike .双词兜底比把阈值从 0.35 调到 0.3 更有效小物体鸟、昆虫可适当把图像长边放大或降低box_threshold一档。5.3 性能基准参考在 COCO 上SwinT 零样本达到 48.4 AP、微调后 57.2 APSwinB 达 56.7 AP是当时零样本检测第一梯队的水位。完整榜单对比见下图到这里安装、推理、接入、交付、调优五个环节就都通了。如果后续还想扩展建议三个方向结合 Grounded SAM把检测框转成分割掩码用于更精细的编辑与统计参考项目内 demo/image_editing_with_groundingdino_stablediffusion.ipynb把检测结果接进 Stable Diffusion 做图像编辑关注 Grounding DINO 1.5 官方 API 版本能力与易用性都有升级。【免费下载链接】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),仅供参考