OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  GroundingDINO — 将文本与目标检测结合的开集检测模型

GroundingDINO — 将文本与目标检测结合的开集检测模型

 
  vibrant ·  2026-04-22 11:00:25 · 12 次点击  · 0 条评论  

:sauropod: Grounding DINO

PWC PWC \
PWC PWC

IDEA-CVR, IDEA-Research

Shilong Liu, Zhaoyang Zeng, Tianhe Ren, Feng Li, Hao Zhang, Jie Yang, Chunyuan Li, Jianwei Yang, Hang Su, Jun Zhu, Lei Zhang:email:.

[论文] [演示] [BibTex]

Grounding DINO 的 PyTorch 实现与预训练模型。详情请参阅论文 Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection

  • 🔥 Grounded SAM 2 现已发布,它将 Grounding DINO 与 SAM 2 结合,用于开放世界场景下的任意对象跟踪。
  • 🔥 Grounding DINO 1.5 现已发布,这是 IDEA Research 的 功能最强 的开放世界目标检测模型!
  • 🔥 Grounding DINOGrounded SAM 现已在 Huggingface 上获得支持。为方便使用,请参阅 此文档

:sun_with_face: 实用教程

:sparkles: 亮点项目

:bulb: 亮点

  • 开放集检测。 用语言检测一切
  • 高性能。 COCO 零样本 52.5 AP(无需 COCO 数据训练!)。COCO 微调 63.0 AP
  • 灵活。 可与 Stable Diffusion 协作进行图像编辑。

:fire: 新闻

  • 2023/07/18: 我们发布了 Semantic-SAM,这是一个通用图像分割模型,可在任意粒度下分割和识别任何物体。代码检查点已可用!
  • 2023/06/17: 我们提供了一个示例,用于评估 Grounding DINO 在 COCO 零样本性能上的表现。
  • 2023/04/15: 对开放集识别感兴趣的用户,请参阅 CV in the Wild Readings
  • 2023/04/08: 我们发布了 演示,将 Grounding DINOGLIGEN 结合,进行更可控的图像编辑。
  • 2023/04/08: 我们发布了 演示,将 Grounding DINOStable Diffusion 结合进行图像编辑。
  • 2023/04/06: 我们构建了一个新演示,将 GroundingDINO 与 Segment-Anything 结合,命名为 Grounded-Segment-Anything,旨在支持 GroundingDINO 中的分割功能。
  • 2023/03/28: 一个关于 Grounding DINO 和基本目标检测提示工程的 YouTube 视频。[SkalskiP]
  • 2023/03/28: 在 Hugging Face Space 上添加了一个 演示
  • 2023/03/27: 支持仅 CPU 模式。现在模型可以在没有 GPU 的机器上运行。
  • 2023/03/25: Grounding DINO 的 演示 已在 Colab 上可用。[SkalskiP]
  • 2023/03/22: 代码现已可用!
描述 论文 介绍。 ODinW 结合 Grounding DINOGLIGEN gd_gligen

:star: Grounding DINO 输入与输出说明/提示

  • Grounding DINO 接受一个 (图像, 文本) 对作为输入。
  • 它输出 900 个(默认)目标框。每个框都有与所有输入词语的相似度分数。(如下图所示。)
  • 我们默认选择最高相似度高于 box_threshold 的框。
  • 我们提取相似度高于 text_threshold 的词语作为预测标签。
  • 如果你想获取特定短语的对象,例如句子 two dogs with a stick. 中的 dogs,你可以选择与 dogs 文本相似度最高的框作为最终输出。
  • 请注意,每个词语可能被分词器拆分为多个令牌。句子中的词语数量可能与文本令牌数量不相等。
  • 我们建议在 Grounding DINO 中使用 . 分隔不同的类别名称。
    model_explain1
    model_explain2

:label: 待办事项

  • [x] 发布推理代码和演示。
  • [x] 发布检查点。
  • [x] Grounding DINO 与 Stable Diffusion 和 GLIGEN 的演示。
  • [ ] 发布训练代码。

:hammer_and_wrench: 安装

注意:

  1. 如果你有 CUDA 环境,请确保设置了环境变量 CUDA_HOME。如果没有可用的 CUDA,它将在仅 CPU 模式下编译。

请务必严格按照安装步骤操作,否则程序可能会产生:

NameError: name '_C' is not defined

如果发生这种情况,请重新克隆 git 仓库并重新执行所有安装步骤来重新安装 groundingDINO。

如何检查 cuda:

echo $CUDA_HOME

如果没有输出,则表示你尚未设置路径。

运行以下命令,以便在当前 shell 中设置环境变量。

export CUDA_HOME=/path/to/cuda-11.3

注意 cuda 版本应与你的 CUDA 运行时对齐,因为可能同时存在多个 cuda。

如果你想永久设置 CUDA_HOME,请使用以下命令存储:

echo 'export CUDA_HOME=/path/to/cuda' >> ~/.bashrc

之后,加载 bashrc 文件并检查 CUDA_HOME

source ~/.bashrc
echo $CUDA_HOME

在此示例中,/path/to/cuda-11.3 应替换为你的 CUDA 工具包安装路径。你可以通过在终端中键入 which nvcc 来找到此路径:

例如,
如果输出是 /usr/local/cuda/bin/nvcc,则:

export CUDA_HOME=/usr/local/cuda

安装步骤:

  1. 从 GitHub 克隆 GroundingDINO 仓库。
git clone https://github.com/IDEA-Research/GroundingDINO.git
  1. 将当前目录更改为 GroundingDINO 文件夹。
cd GroundingDINO/
  1. 在当前目录中安装所需的依赖项。
pip install -e .
  1. 下载预训练模型权重。
mkdir weights
cd weights
wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
cd ..

:arrow_forward: 演示

检查你的 GPU ID(仅在使用 GPU 时)

nvidia-smi

将以下命令中的 {GPU ID}image_you_want_to_detect.jpg"dir you want to save the output" 替换为适当的值。

CUDA_VISIBLE_DEVICES={GPU ID} python demo/inference_on_a_image.py \
-c groundingdino/config/GroundingDINO_SwinT_OGC.py \
-p weights/groundingdino_swint_ogc.pth \
-i image_you_want_to_detect.jpg \
-o "dir you want to save the output" \
-t "chair"
 [--cpu-only] # 开启此选项以使用 CPU 模式

如果你想指定要检测的短语,这里有一个演示:

CUDA_VISIBLE_DEVICES={GPU ID} python demo/inference_on_a_image.py \
-c groundingdino/config/GroundingDINO_SwinT_OGC.py \
-p ./groundingdino_swint_ogc.pth \
-i .asset/cat_dog.jpeg \
-o logs/1111 \
-t "There is a cat and a dog in the image ." \
--token_spans "[[[9, 10], [11, 14]], [[19, 20], [21, 24]]]"
 [--cpu-only] # 开启此选项以使用 CPU 模式

token_spans 指定了短语的起始和结束位置。例如,第一个短语是 [[9, 10], [11, 14]]"There is a cat and a dog in the image ."[9:10] = 'a'"There is a cat and a dog in the image ."[11:14] = 'cat'。因此它指的是短语 a cat。类似地,[[19, 20], [21, 24]] 指的是短语 a dog

更多详情请参阅 demo/inference_on_a_image.py

使用 Python 运行:

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_PATH = "weights/dog-3.jpeg"
TEXT_PROMPT = "chair . person . dog ."
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25

image_source, image = load_image(IMAGE_PATH)

boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption=TEXT_PROMPT,
    box_threshold=BOX_TRESHOLD,
    text_threshold=TEXT_TRESHOLD
)

annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("annotated_image.jpg", annotated_frame)

Web UI

我们还提供了一个演示代码,用于将 Grounding DINO 与 Gradio Web UI 集成。更多详情请参阅文件 demo/gradio_app.py

Notebooks

  • 我们发布了 演示,将 Grounding DINOGLIGEN 结合,进行更可控的图像编辑。
  • 我们发布了 演示,将 [Grounding DINO](https://arxiv.org/abs/2303.054
12 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 22 ms
Developed with Cursor