Open-GroundingDino和GroundingDino的推理流程实现

1、简单介绍

GroundingDino是一个多模态检测模型,可以输入文本提示输出视觉目标的位置,实现了文本和图像的匹配。相比较于一众的OVD算法,GroundingDino在文本处理上的灵活度高,因为大多OVD算法是采用clip文本编码器,这个编码器对文本的处理有限,只能是某些单词,一些特殊的名称在clip的预训练模型中没有对应的文本向量。而GroundingDino及部分采用 bert 的模型,可以处理单词、短语和句子等文本,在数据集迁移上更加友好。

在这里插入图片描述
Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection,这是GroundingDino的论文标题,大概意思是 把DINO和文本预训练模型结合用于开集目标检测。

在这里插入图片描述

官方的GroundingDino只开源了推理的代码,没有给出训练代码,数据集格式也未知,而Open-GroundingDino是作为GroundingDino的第三方实现训练的开源代码,所以关注GroundingDino的工作是否适合迁移到个人数据集中。
GroundingDino的论文地址:https://arxiv.org/pdf/2303.05499.pdf
GroundingDino的Github网址:https://github.com/IDEA-Research/GroundingDINO
Open-GroundingDino的Github网址:https://github.com/longzw1997/Open-GroundingDino

文本提示的预测功能:

在这里插入图片描述

2、推理实现

我是首先想跑通Open-GroundingDino,因为Open-GroundingDino给出了训练代码,同时给出了数据集格式,如果可以跑通非常适合进行迁移。于是我安装了相关环境进行测试。

基本的环境安装跟着requirements.txt走基本上就够了,后面是编译 GroundingDino,给出的操作方法是:

pip install -r requirements.txt 

cd models/GroundingDINO/ops

python setup.py build install

python test.py

cd ../../..

跑 test.py 我的也正常执行完了

在这里插入图片描述
但是后面准备跑推理代码的时候:

python tools/inference_on_a_image.py \
  -c tools/GroundingDINO_SwinT_OGC.py \
  -p path/to/your/ckpt.pth \
  -i ./figs/dog.jpeg \
  -t "dog" \
  -o output

结果报错了,说找不到 grounddino这个模块,我看代码目录里有这个文件夹,以为只要修改进行引用就行,结果修改后仍然不行。后面是卡在了 模型加载的地方:

load_res = model.load_state_dict()

出现报错:

AttributeError:tuple object has no attribute load_state_dict

显然模型加载出现了问题,而且很不好解决。

于是我想到 Open-GroundingDino的推理代码应该和 GroundingDino应该差不多,因为Open-GroundingDino是一个第三方实现,是基于原版来匹配的。于是我尝试跑GroundingDino的推理代码。

我把代码下载之后,按照要求进行操作:

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

操作之后环境里编译生成了一个groundingdino库,显然这个才是正确的要调的库。我随后开始测试,执行命令:

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

结果,却没结果。代码正常跑完了,但是打开保存的预测结果,发现还是原图,并没有加上预测的框。我想肯定是输入的文本提示有问题,导致无法解析要检测的类别。

其实,在执行命令之前,我已经在 GroundingDINO_SwinT_OGC.pytext_encoder_type = "bert-base-uncased"改成 text_encoder_type = "./local/xx/bert-base-uncased" ,因为之前跑过类似的,我就把本地bert文本编码的模型路径加进去了,所以推理代码可以正常执行完毕,但是却没有输出结果。

我不太熟悉 GroundingDINO需要加载bert的文件位置,所以我之间搜索 bert-base-uncasedtext_encoder_type 找出如下位置处代码 :
在这里插入图片描述

我分别把里面的两个 text_encoder_type 换成 本地的bert-base-cased 的路径,再进行测试,进入结果文件夹,打开图片查看,发现上面就画了提示的目标,如下图所示。

在这里插入图片描述
如上就完成了 Open-GroundingDino和GroundingDino的推理流程实现

相关问题解决也可以具体看官方GitHub:https://github.com/IDEA-Research/GroundingDINO/issues/218
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/524258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3 前情回顾: 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet 1.8.3 卷积神经网络近年来…

C# Solidworks二次开发:获取唯一ID的API详解

大家好,今天要介绍的是关于solidworks中可以获取对象唯一ID的几种API,获取唯一ID的API有如下几种: (1)第一种是GetID Method (IComponent2),其含义为获取每个组件的唯一ID。 下面是API中的使用例子&#x…

作为一个前端,在入职新公司如何快速安装好开发环境

由于电脑运行内存才16G有点卡,今天公司给我们换了32G内存,是直接整个主机都换了,环境自然得重新安装,在装的过程中,自己会有些心得体会,就是想着一个新人如何快速安装环境。 个人说一下我的思路&#xff1a…

Mysql的物理文件

1.Windows下面的配置文件是:my.ini [mysql] default-character-setutf8[mysqld] port3306 default_authentication_pluginmysql_native_password basedirE:/phpStudy/phpstudy_pro/Extensions/MySQL8.0.12/ datadirE:/phpStudy/phpstudy_pro/Extensions/MySQL8.0.1…

视频压缩软件都有哪些?分享4款专业的视频软件!

在数字化时代,视频已经成为我们生活中不可或缺的一部分。然而,随着视频质量的不断提升,其占用的存储空间也在迅速增长。为了解决这个问题,视频压缩软件应运而生。本文将为您介绍几款热门的视频压缩软件,帮助您选择最适…

conda创建虚拟环境太慢,Collecting package metadata (current_repodata.json): failed

(省流版:只看加粗红色,末尾也有哦) 平时不怎么用conda,在前公司用服务器的时候用的是公司的conda源,在自己电脑上直接用python创建虚拟环境完事儿,所以对conda的配置并不熟悉~~【狗头】。但是python虚拟环境的最大缺点…

Win安装SSH教程

在Windows操作系统上安装和配置SSH(Secure Shell)可以让你通过加密的方式远程连接和管理其他计算机或服务器。以下是安装和配置SSH的简单教程: 下载OpenSSH for Windows: 访问OpenSSH for Windows的官方网站(https://g…

嵌入式面向对象学习 RT-Thread I/O 设备管理框架 设备驱动层 案例测试

嵌入式面向对象 RT-Thread I/O 设备管理框架 设备驱动层 注:本文介绍性内容转载于《RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)》 注: 本次使用的开发板 : ​ 兆易创新GD32F407VET6开发板 ​ 雅特力科技…

数据结构面试题报错调试方法记录

栈和队列报错调试 1.用栈实现队列 232. 用栈实现队列 - 力扣(LeetCode) 此题解题思路如下: 先将数据放在pushst栈里面,popst栈为空再把pushst栈里面的数据放进popst栈里面去,不为空则不执行。不为空时候直接拿取栈…

楚雄师范学院数学与计算机学院与树莓集团产教融合合作签约仪式顺利举行!

2024年4月2日,楚雄师范学院数学与计算机学院与树莓集团产教融合合作签约仪式在云南楚雄师范学院隆重举行。未来,双方将在国际数字影像产业园建设产教融合实训基地,全面增强人才培养的社会适应性。 出席本次签约仪式的嘉宾有学院党委书记周云燕…

PyTorch深度学习——张量及其运算

深度学习框架的张量 张量的运算是深度学习的核心,如一张图片可以看作是四维的张量,一个迷你批次的文本可以看作是二维张量,基本上所有的深度学习模型都可以表示为张量的操作,梯度、反向传播算法也可以表示为张量和张量的运算 张…

opencv图像处理技术(阈值处理与图像平滑)

进行图像处理时,常常需要对图像进行预处理以提取所需的信息或改善图像质量。阈值处理和图像平滑是两种常见的预处理技术。 阈值处理 阈值处理是一种图像分割技术,其基本思想是将图像中的像素值与一个或多个预先设定的阈值进行比较,根据比较…

Git入门实战教程之创建版本库

一、Git简介 Git是一个分布式版本控制系,分层结构如下: Git分为四层: 1、工作目录 当前正在工作的项目的实际文件目录,我们执行命令git init时所在的地方,也就是我们执行一切文件操作的地方。 2、暂存区 暂存区是…

软件测试常考面试题-软件测试面试宝典(一篇足矣)

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

数据库表设计18条黄金规则

前言 对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。 系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。 后端开发的日常工作&#xff…

C语言初阶—9函数

函数的声明 (main函数前)----告诉有一个函数 格式: 类型 函数名(参数); 函数的声明 放到头文件add.c 函数的定义 ----创建函数----放到add.c 格式:类型 函数名(参数) { 语句项; } 在文…

leetcode.707. 设计链表

题目 题意: 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的…

Dubbo 序列化

Dubbo 序列化 1、什么是序列化和反序列化 序列化(serialization)在计算机科学的资料处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),…

MySQL数据库基础--事务

事务 是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 默认MySQL的事务是自动提交的,也就是说,当执行…

《C语言深度解剖》(2):详解C语言分支语句和循环

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多数据结构与算法点击专栏链接查看&am…