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)的力量,以…

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日。不想错过考试最新消息的考友可以…

多线程4

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

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

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

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

计算机网络概述 ----------------------------------------------------------------------------------------------------------------------------- 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 时,说是一次调用,两次返回,当时就懵圈了,多新鲜,真的很难理解。因为这足以颠覆了以往对函数的认知, 函数调用还能这么玩,父进程调用一次,父子进程各返回一次。而且只…

记Postman参数化

因为需要在WEB页面上处理部分数据,手动操作太慢,所以考虑使用接口方式处理,因急于使用,用Python Request的方式,写代码也来得慢,故采用Postman加外部文件参数化方式来实现。 接口请求是Post方式&#xff0c…

电商平台混战之下,天猫破解品牌增长奥秘

行业共识是追上风,才有好生意,但风很多时候不会只有一个方向。 4月2日,上海,TopTalk 2024天猫超级品牌私享会举行。这个活动已举办数年,每一年天猫都会发布新一年度的品牌经营策略,只是与往年不同的是&…

YOLOv9改进策略 :原创自研 | 自研MSAM注意力,通道注意力升级,魔改CBAM

💡💡💡本文自研创新改进:MSAM(CBAM升级版):通道注意力具备多尺度性能,多分支深度卷积更好的提取多尺度特征,最后高效结合空间注意力 1)作为注意力MSAM使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,对标CBAM。 改进1结构图如下: 《YOLOv…

linux安全加固

1.登录账号加固 /etc/login.defs 创建⽤户的默认设置⽂件 grep -Ev "^#|^$" /etc/login.defs /etc/login.defs ⽂件⽤于在创建⽤户时,对⽤户的⼀些基本属性做默认设置,例如指定⽤户 UID 和 GID 的范围,⽤户的过期时间&#xff0…

寻找排序数组中的最小值

题目描述 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次…

【前端】CSS(引入方式+选择器+常用元素属性+盒模型+弹性布局)

文章目录 CSS一、什么是CSS二、语法规范三、引入方式1.内部样式表2.行内样式表3.外部样式 四、选择器1.选择器的种类1.基础选择器:单个选择器构成的1.标签选择器2.类选择器3.id 选择器4.通配符选择器 2.复合选择器1.后代选择器2.子选择器3.并集选择器4.伪类选择器 五…

Linux 内核优化简笔 - 高并发的系统

简介 Linux 服务器在高并发场景下,默认的内核参数无法利用现有硬件,造成软件崩溃、卡顿、性能瓶颈。 当然,修改参数只是让Linux更好软件的去利用已有的硬件资源,如果硬件资源不够也无法解决问题的。而且当硬件资源不足的时候&am…

AcWing 788. 逆序对的数量——算法基础课题解

AcWing 788. 逆序对的数量 题目描述 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i 个和第 j 个元素&#xff0c;如果满足 i<j且 a[i]>a[j]&#xff0c;则其为一个逆序对&#xff1b;否则不是。…