GroundingDINO README

The project's README from github.com/IDEA-Research/GroundingDINO. As one markdown file: README.md.

: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:.

[Paper] [Demo] [BibTex]

PyTorch implementation and pretrained models for Grounding DINO. For details, see the paper Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection.

:sun_with_face: Helpful Tutorial

:sparkles: Highlight Projects

:bulb: Highlight

:fire: News

Description Paper introduction. ODinW Marrying Grounding DINO and GLIGEN gd_gligen

:star: Explanations/Tips for Grounding DINO Inputs and Outputs

:label: TODO

:hammer_and_wrench: Install

Note:

  1. If you have a CUDA environment, please make sure the environment variable CUDA_HOME is set. It will be compiled under CPU-only mode if no CUDA available.

Please make sure following the installation steps strictly, otherwise the program may produce:

NameError: name '_C' is not defined

If this happened, please reinstalled the groundingDINO by reclone the git and do all the installation steps again.

how to check cuda:

echo $CUDA_HOME

If it print nothing, then it means you haven't set up the path/

Run this so the environment variable will be set under current shell.

export CUDA_HOME=/path/to/cuda-11.3

Notice the version of cuda should be aligned with your CUDA runtime, for there might exists multiple cuda at the same time.

If you want to set the CUDA_HOME permanently, store it using:

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

after that, source the bashrc file and check CUDA_HOME:

source ~/.bashrc
echo $CUDA_HOME

In this example, /path/to/cuda-11.3 should be replaced with the path where your CUDA toolkit is installed. You can find this by typing which nvcc in your terminal:

For instance, if the output is /usr/local/cuda/bin/nvcc, then:

export CUDA_HOME=/usr/local/cuda

Installation:

1.Clone the GroundingDINO repository from GitHub.

git clone https://github.com/IDEA-Research/GroundingDINO.git
  1. Change the current directory to the GroundingDINO folder.
cd GroundingDINO/
  1. Install the required dependencies in the current directory.
pip install -e .
  1. Download pre-trained model weights.
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: Demo

Check your GPU ID (only if you're using a GPU)

nvidia-smi

Replace {GPU ID}, image_you_want_to_detect.jpg, and "dir you want to save the output" with appropriate values in the following command

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] # open it for cpu mode

If you would like to specify the phrases to detect, here is a demo:

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] # open it for cpu mode

The token_spans specify the start and end positions of a phrases. For example, the first phrase is [[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'. Hence it refers to the phrase a cat . Similarly, the [[19, 20], [21, 24]] refers to the phrase a dog.

See the demo/inference_on_a_image.py for more details.

Running with 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

We also provide a demo code to integrate Grounding DINO with Gradio Web UI. See the file demo/gradio_app.py for more details.

Notebooks

COCO Zero-shot Evaluations

We provide an example to evaluate Grounding DINO zero-shot performance on COCO. The results should be 48.5.

CUDA_VISIBLE_DEVICES=0 \
python demo/test_ap_on_coco.py \
 -c groundingdino/config/GroundingDINO_SwinT_OGC.py \
 -p weights/groundingdino_swint_ogc.pth \
 --anno_path /path/to/annoataions/ie/instances_val2017.json \
 --image_dir /path/to/imagedir/ie/val2017

:luggage: Checkpoints

name backbone Data box AP on COCO Checkpoint Config
1 GroundingDINO-T Swin-T O365,GoldG,Cap4M 48.4 (zero-shot) / 57.2 (fine-tune) GitHub link | HF link link
2 GroundingDINO-B Swin-B COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO 56.7 GitHub link | HF link link

:medal_military: Results

COCO Object Detection Results COCO
ODinW Object Detection Results ODinW
Marrying Grounding DINO with Stable Diffusion for Image Editing See our example notebook for more details. GD_SD
Marrying Grounding DINO with GLIGEN for more Detailed Image Editing. See our example notebook for more details. GD_GLIGEN

:sauropod: Model: Grounding DINO

Includes: a text backbone, an image backbone, a feature enhancer, a language-guided query selection, and a cross-modality decoder.

arch

:hearts: Acknowledgement

Our model is related to DINO and GLIP. Thanks for their great work!

We also thank great previous work including DETR, Deformable DETR, SMCA, Conditional DETR, Anchor DETR, Dynamic DETR, DAB-DETR, DN-DETR, etc. More related work are available at Awesome Detection Transformer. A new toolbox detrex is available as well.

Thanks Stable Diffusion and GLIGEN for their awesome models.

:black_nib: Citation

If you find our work helpful for your research, please consider citing the following BibTeX entry.

@article{liu2023grounding,
  title={Grounding dino: Marrying dino with grounded pre-training for open-set object detection},
  author={Liu, Shilong and Zeng, Zhaoyang and Ren, Tianhe and Li, Feng and Zhang, Hao and Yang, Jie and Li, Chunyuan and Yang, Jianwei and Su, Hang and Zhu, Jun and others},
  journal={arXiv preprint arXiv:2303.05499},
  year={2023}
}

GroundingDINO (IDEA-Research/GroundingDINO)

Searching Database…

Что это?Модель детекции объектов в открытом наборе классов от IDEA-Research (ECCV 2024): подаёте картинку и текстовый запрос — она находит объекты, которые вы описали словами. В этом репозитории официальная реализация на PyTorch с предобученными моделями.
Это приложение, которое я запускаю, или код, на котором я строю своё?Исследовательская кодовая база: устанавливается как Python-пакет и вызывается из вашего кода, плюс чекпоинты моделей, которые нужно скачать. Для быстрой пробы есть демо с веб-интерфейсом на Gradio, демо в Colab и интеграция с Hugging Face.
Как его запустить?Склонируйте репозиторий, перейдите в папку GroundingDINO, установите зависимости через pip (сначала задайте CUDA_HOME, если у вас есть CUDA), затем скачайте предобученные веса модели и запустите демо-скрипт на своей картинке.
Есть ли подводные камни при установке?В README предупреждают, что шаги установки нужно выполнять строго по инструкции, иначе программа может сломаться; предлагаемое решение — заново склонировать репозиторий и повторить все шаги. Кроме того, выпущен только код для инференса — код для обучения пока в списке TODO.
Это в основном для исследователей или можно использовать в реальном проекте?И то и другое: модель вышла из исследовательской лаборатории, но она интегрирована в Hugging Face, а в туториалах Roboflow показано, как с её помощью авторазмечать и оценивать датасеты для обучения других детекторов, например YOLOv8.
Что я подаю на вход и что получаю на выходе?Пару (картинка, текст). По умолчанию возвращается до 900 рамок, каждая оценивается на соответствие словам из вашего запроса; рамки с оценкой выше box_threshold остаются, а слова с оценкой выше text_threshold становятся предсказанными метками. Названия категорий разделяйте точками.
Насколько хорошие результаты он даёт?В README выделяют 52.5 AP zero-shot на COCO без использования данных COCO для обучения и 63.0 AP после дообучения. Выпущенные чекпоинты: GroundingDINO-T — 48.4 zero-shot / 57.2 после дообучения, GroundingDINO-B достигает 56.7 AP.
Какие предобученные чекпоинты можно скачать?Два: GroundingDINO-T с бэкбоном Swin-T (обучен на O365, GoldG и Cap4M) и более тяжёлый GroundingDINO-B со Swin-B, обученный на большем объёме данных, включая COCO, OpenImage и ODinW-35. Оба идут с конфигурационными файлами.
Он работает вместе с Segment Anything?Да — Grounded-SAM объединяет его с Segment Anything для сегментации по текстовому запросу, а Grounded SAM 2 добавляет отслеживание любого объекта в открытом мире. В демо его также совмещают со Stable Diffusion и GLIGEN для редактирования изображений.
Size
12.8 MB
Stars
10.7K
Age
3y
Commits · 90 Days