Shilong Liu, Zhaoyang Zeng, Tianhe Ren, Feng Li, Hao Zhang, Jie Yang, Chunyuan Li, Jianwei Yang, Hang Su, Jun Zhu, Lei Zhang:email:.
Grounding DINO 的 PyTorch 实现与预训练模型。详情请参阅论文 Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection。
2023/07/18: 我们发布了 Semantic-SAM,这是一个通用图像分割模型,可在任意粒度下分割和识别任何物体。代码和检查点已可用!2023/06/17: 我们提供了一个示例,用于评估 Grounding DINO 在 COCO 零样本性能上的表现。2023/04/15: 对开放集识别感兴趣的用户,请参阅 CV in the Wild Readings!2023/04/08: 我们发布了 演示,将 Grounding DINO 与 GLIGEN 结合,进行更可控的图像编辑。2023/04/08: 我们发布了 演示,将 Grounding DINO 与 Stable 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: 代码现已可用!(图像, 文本) 对作为输入。900 个(默认)目标框。每个框都有与所有输入词语的相似度分数。(如下图所示。)box_threshold 的框。text_threshold 的词语作为预测标签。two dogs with a stick. 中的 dogs,你可以选择与 dogs 文本相似度最高的框作为最终输出。. 分隔不同的类别名称。注意:
CUDA_HOME。如果没有可用的 CUDA,它将在仅 CPU 模式下编译。请务必严格按照安装步骤操作,否则程序可能会产生:
NameError: name '_C' is not defined
如果发生这种情况,请重新克隆 git 仓库并重新执行所有安装步骤来重新安装 groundingDINO。
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
安装步骤:
git clone https://github.com/IDEA-Research/GroundingDINO.git
cd GroundingDINO/
pip install -e .
mkdir weights
cd weights
wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
cd ..
检查你的 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