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/opspython setup.py build installpython test.pycd ../../..

跑 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.gitcd 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
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion介绍

Stable Diffusion是一种前沿的开源深度学习模型框架,专门设计用于从文本描述生成高质量的图像。这种称为文本到图像生成的技术,利用了大规模变换器(transformers)和生成对抗网络(GANs)的力量,以…

2024-04-06 问AI: 介绍一下 ResNET 50 预训练模型

文心一言 ResNet50预训练模型是一种深度卷积神经网络(CNN),它在图像处理和计算机视觉任务中取得了显著的效果。相比于传统的CNN模型,ResNet50具有更深的网络结构,通过引入残差连接(residual connection&am…

7(8)-2-CSS 盒子模型

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 CSS 盒子模型1 盒子模型(Box Model)组成2 边框&#x…

软考程序员2024年5月报名流程及注意事项

2024年5月软考程序员报名入口: 中国计算机技术职业资格网(http://www.ruankao.org.cn/) 2024年软考报名时间暂未公布,考试时间上半年为5月25日到28日,下半年考试时间为11月9日到12日。不想错过考试最新消息的考友可以…

题目:学习使用register定义变量的方法。

题目:学习使用register定义变量的方法。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated …

C语言-翁恺-PTA-81-120课后练习题-03

title: C语言-翁恺-PTA-81-120课后练习题-03 tags: PTAC语言 description: ’ ’ mathjax: true date: 2024-04-05 22:21:00 categories:PTA 7-84 连续因子 80-以后的题目感觉都不是很好做 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff…

多线程4

死锁 想获取到第二把锁,就需要执行完第一层大括号,想要执行完第一层大括号,就要先获取到第二层的锁。 synchronized (counter2){ synchronized (counter2){} } 例子:t2先启动,t2进行加锁后一定成功,但是如果t2进行二…

c++ const关键词介绍

在C中,const 关键字用于定义常量或指定函数参数、成员函数、成员变量等为常量,表示其值在程序的执行过程中不能被修改。 //1. 定义常量: const int MAX_SIZE 100;//2. 常量指针: int x 10; const int* ptr &x; // 指向整型…

基于YOLOv8的木材缺陷检测系统说明

基于YOLOv8的木材缺陷检测系统说明 一、系统概述 基于YOLOv8的木材缺陷检测系统是一个利用深度学习技术进行木材表面缺陷自动检测的智能系统。该系统通过训练YOLOv8模型,实现对木材表面缺陷的快速、准确识别,从而提高木材加工的质量控制和生产效率。 …

图数据库技术:知识图谱的存储与查询

图数据库技术:知识图谱的存储与查询 一、引言 在探索知识的宇宙中,知识图谱是组织和理解海量信息的星系图。在这张图中,每一个概念、实体与事物不再是孤立的点,而是通过关系与边相互连接,形成一个复杂而有机的网络。图…

mysql利用延迟复制恢复误删的表

(1)在主库3306中创建测试数据 (rootlocalhost) [(none)] create database test; Query OK, 1 row affected (0.00 sec) (rootlocalhost) [(none)] use test ; Database changed (rootlocalhost) [test] create table t1(id int primary key); Query OK, …

计算机网络练习-计算机网络概述与性能指标

计算机网络概述 ----------------------------------------------------------------------------------------------------------------------------- 1. 计算机网络最据本的功能的是( )。 1,差错控制 Ⅱ.路由选择 Ⅲ,分布式处理 IV.传输控制 …

3.网络编程-TCP

目录 TCP 建立连接的过程是怎样的 TCP为什么是三次握手 TCP 断开连接的过程是怎样的 TCP挥手为什么需要四次 为什么TIME_WAIT等待的时间是2MSL TCP详解之滑动窗口 TCP 半连接队列和全连接队列是什么 TCP粘包,拆包是怎么发生的,如何解决 TCP是如何…

书生·浦语大模型实战营之茴香豆:搭建你的 RAG 智能助理

书生浦语大模型实战营之茴香豆:搭建你的 RAG 智能助理 RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇…

高项-进度管理

成本管理就是要确保项目在批准的预算内完成。 成本的类型 成本的组成 项目成本管理储备成本基准(需要经过批准才能进行变更) 成本基准应急储备工作包成本(在基准内的可以不经过批准变更) 工作包成本活动成本活动应急储备&…

物联网实战--驱动篇之(三)LoRa(sx1278)

目录 一、LoRa简介 二、sx1278模块 三、硬件抽象层 四、SX1278初始化 五、发送时间计算 六、发送模式 七、接收模式 八、总结 一、LoRa简介 LoRa在物联网传输领域有着举足轻重的地位,平时大家可能比较少听说,因为它主要还是在行业应用&#xff0…

C语言整数和小数的存储

1.整数在内存中的存储 计算机使用二进制进行存储、运算,整数在内存中存储使用的是二进制补码 1.1原码、反码、补码 整数的2进制表⽰⽅法有三种,即 原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”&am…

鸿蒙内核源码分析 (Fork 篇) | 一次调用,两次返回

第一次看到 fork 时,说是一次调用,两次返回,当时就懵圈了,多新鲜,真的很难理解。因为这足以颠覆了以往对函数的认知, 函数调用还能这么玩,父进程调用一次,父子进程各返回一次。而且只…

机器学习贝叶斯算法是什么

参考一篇理解性文章:如何让10岁的表弟也能理解贝叶斯公式 问: 机器学习贝叶斯算法是什么,它的会被用于分类或者回归分析吗,它有什么优势? 答: 机器学习中的贝叶斯算法是一种基于贝叶斯定理的算法&#…

设计原则、设计模式、设计模式项目实战

设计原则 封装、继承、多态、抽象分别可以解决哪些编程问题 封装:也叫做信息隐藏或数据保护访问。数据 通过暴露有限的访问接口,授权外部仅能通过类提供接口访问,对内的类private私有化属性,通过封装简化操作,让用户更…