MM_grounding_dino 安装部署报错记录

MM_grounding_dino 安装部署报错记录

fanz Lv3

grounding_dino 是 23 年就已经推出的多模态目标检测模型,和过去的 Yolo 系列模型不同的是,YoloV 系列模型只能支持按固定的训练类别进行目标检测(Yolo World 现在也可以支持抽象文本),而 grounding dino 可以支持用户输入抽象文本(比如“the bottle handed by the man who worn white T-shirt”)进行目标检测,开放性更强。我本身不是做目标检测方向的,目前因实际需求需要用此模型帮助我完成一些简单任务,这里耗费半天安装成功了,在此做一下记录 😁。

1. 安装须知

需要注意的是,这里我询问了专门做目标检测方向的好友,并不推荐直接安装 grounding dino,而是先安装 mmdetection 这个框架,mmdetection 是一个训练流的工具,然后作者自己弄了一个 mm_grounding_dino 的模型,mm_grounding_dino 在原版的 grounding dino 模型上进行了微调。同时,借助 mmdetection,我们也可以很方便的 mm_grounding_dino 的基础上微调我们的数据集。

mmdetection_github 地址: open-mmlab/mmdetection
官方安装文档: mmdet 安装mm_grounding_dino 安装

这里可以看到有点麻烦的是,你需要先安装这个 mmdet (mmdetection 的简写),然后才能安装 mm_grounding_dino。

然后这个模型吃的显存不多,消耗显存量和你上传的图片大小有关,我上传了一张 2k 的照片大概吃的是 2G 显存,我使用的显卡是 NVIDIA A6000,如果有 4090 的话运行速度会更快。系统是 Ubuntu 22.04,Windows 系统我暂时没有试过,建议安装 wsl2。

2. 开始安装

这里跟着官方文档一步一步来吧,先安装 mmdet 然后再安装 mm_grounding_dino。

2.1 安装 mmdet

首先创建 3.8 版本的 conda 环境:

1
2
conda create --name openmmlab python=3.8 -y
conda activate openmmlab

然后就是安装 pytorch 环节,服务器使用的 cuda 版本为 12.8,所以我使用了如下命令安装:

1
pip3 install torch torchvision

这个安装命令是按照 pytorch 官网文档来的:
image.png
然后安装 mim 工具,使用其继续安装 mmengine 和 mmcv:

1
2
3
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"

然后安装 mm_detection 这里官方给了源码安装和第三方 python 包的方式,这里我直接使用了源码安装:

1
2
3
4
5
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# "-v" 指详细说明,或更多的输出
# "-e" 表示在可编辑模式下安装项目,因此对代码所做的任何本地修改都会生效,从而无需重新安装。
Tip

其实这里源码安装你就可以看出,https://github.com/open-mmlab/mmdetection.git 既有测试代码,又有这个 mmdetection 包… 反正后续测试是否 mmdet 是否安装成功也还是需要 clone 此 git,还不如源码安装算了

验证是否安装成功

1
2
3
4
mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .

# 使用源码安装就运行此命令
python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cuda:0

不出意外的话,会遇到这个错误:

1
2
File "/mnt/e/EWorkspace/mmdetection/mmdet/init.py", line 17, in and mmcv_version < digit_version(mmcv_maximum_version)),
AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0.

这个错误是显示 MMCV2.2.0 和当前环境不适配,这里 https://github.com/open-mmlab/mmdetection/issues/12312 官方 issue 中给出了几个方法:

  1. go to line 17 and change “< digit_version(mmcv_maximum_version))” to "<=digit_version(mmcv_maximum_version))"这里去 line17 改成<=即可,实测可以运行;(我使用的就是这种方法
  2. mmcv==2.1.0 is working fine for me as well so far.;(尝试过但没解决问题
  3. change line 32 in the dockerfile from “mmcv>=2.0.0rc4” to “mmcv==2.0.0rc4”.

修复这个错误之后,就能正常看到运行结果了。你会在当前文件夹中的 outputs/vis 文件夹中看到一个新的图像 demo.jpg,图像中包含有网络预测的检测框。

Info

我也有尝试过使用 uv 安装(不太喜欢 conda 中 pip 的 requirements 管理依赖方式),使用 uv add 命令安装基础包的时候都没出现太大问题,只是使用 mim 安装的时候要使用 uv run mim install mmengine

不过,也是在验证的时候出现了 mmcv 的报错,换成 2.1.0 也还是没有成功。

2.2 安装 MM grounding dino

如果上面安装成功了,那么下面部署模型这一步就变得简单了。由于前面已经执行过 git clone 命令,这里不需要再重复执行如下命令:

1
git clone https://github.com/open-mmlab/mmdetection.git

只需要进入这个代码主目录,然后安装其他依赖包:

1
2
3
pip install -r requirements/multimodal.txt
pip install emoji ddd-dataset
pip install git+https://github.com/lvis-dataset/lvis-api.git"

之后,运行这两段代码提前下载 BERT 权重和 NTLK 权重:

BERT 是语言模型,可以对文本进行 embedding;而 NTLK 是语义解析库,作用和 jieba 接近,都可以进行文本分词、文本实体提取,由于 grounding dino 仅支持英文,这里 ntlk 就是专门解析英文的库。( Ragflow 中也用的是 ntlk 库

1
2
3
4
5
6
7
8
9
10
from transformers import BertConfig, BertModel
from transformers import AutoTokenizer

config = BertConfig.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased", add_pooling_layer=False, config=config)
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

config.save_pretrained("your path/bert-base-uncased")
model.save_pretrained("your path/bert-base-uncased")
tokenizer.save_pretrained("your path/bert-base-uncased")
1
2
3
4
5
6
7
import nltk
# 我运行这两行代码的时候发现 '~' 会被解析成文件夹名,所以还是拼全路径吧
# nltk.download('punkt', download_dir='~/nltk_data')
# nltk.download('averaged_perceptron_tagger', download_dir='~/nltk_data')

nltk.download('punkt', download_dir='/home/{your username}/nltk_data')
nltk.download('averaged_perceptron_tagger', download_dir='/home/{your username}/nltk_data')

然后直接下载 MM Grounding DINO-T 模型权重即可:

1
wget load_from = 'https://download.openmmlab.com/mmdetection/v3.0/mm_grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_grit9m_v3det/grounding_dino_swin-t_pretrain_obj365_goldg_grit9m_v3det_20231204_095047-b448804b.pth' # noqa

为方便测试,请将 https://github.com/microsoft/X-Decoder/tree/main/inference_demo/images 下的图片下载到 images 文件夹中,然后运行:

1
2
3
4
python demo/image_demo.py images/animals.png \
configs/mm_grounding_dino/grounding_dino_swin-t_pretrain_obj365.py \
--weights grounding_dino_swin-t_pretrain_obj365_goldg_grit9m_v3det_20231204_095047-b448804b.pth \
--texts '$: coco'

这个时候如果可以在outputs/vis/animals.png 中看到预测结果,就说明部署成功了。

image.png

我的需求是检测衬衫、裤子、鞋子这些物品,发现识别效果很不错。下面这张是一张4mb的超清图,我输入的文本是 the t-shirt of the man who is standing,发现找的还是挺准的

96826f713e2966e421e84da58d464454.jpg

  • 标题: MM_grounding_dino 安装部署报错记录
  • 作者: fanz
  • 创建于 : 2025-12-30 23:40:54
  • 更新于 : 2025-12-31 13:13:51
  • 链接: https://redefine.ohevan.com/t83a86/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。