GroundingDINO-根据文本提示检测任意目标

news2025/1/22 12:57:49

1. 背景介绍

GroundingDINO是一种新的SOTA零样本物体检测模型。在这篇文章中,我们将讨论Grounding DINO模型的优势,分析其具体的模型架构,并提供真实的测试样例。

闲话少说,我们直接开始吧!

2.零样本目标检测

大多数目标检测模型被训练来识别预先定义的特定类别的集合,这方面的主要缺陷是缺乏相应的灵活性。每次要扩展或更改可识别对象的类别集合时,都必须收集新类别的数据,对其进行人工标记,然后再次重新训练模型。这一点对于工业落地来说,当然 是非常耗时且昂贵的。

零样本目标检测技术希望打破这一现状,使其能够在不重新训练模型的情况下检测新类别的物体。而我们所要做的就是更改相应的文本提示词,模型将检测到大家所描述的对象。

3.举个栗子

上面讲了一堆大道理,可能有的童鞋们还是没有直观的认识,不防我们来举个栗子吧。
在这里插入图片描述

如上图所示,我们观测左边的图像,我们输入提示词类别椅子(chair) — 属于COCO数据集的某个类别。该模型成功地检测到了这张图像上所有的椅子(chair)对象,检测结果很完美。
对于右边的图像,我们试图输入提示词狗的尾巴(dog's tail),显而易见,这个类别 当然不在任何常用的数据集中,但它仍然可以让模型正常检测识别,并给出正确的结果。

4.性能表现

GroundingDINO在COCO零样本检测任务上实现检测精度AP=52.5 — 而在训练过程中没有使用COCO的任何训练样本。党使用COCO数据进行微调后,GroundingDINO的检测精度达到了AP=63.0 。并且它以26.1 的AP创下了ODinW零样本基准数据集的最高分记录。
在这里插入图片描述

5.技术优势

事实上,Grounding DINO 共有以下三个技术优势:

  • 零样本目标检测 — Grounding DINO擅长检测目标对象,即使它们不是训练数据中预定义类别集合中的对象。这种独特的功能使模型能够适应新的场景对象,使其具有更通用的泛化性,并适用于各种现实世界的任务。
  • 指称表达理解 — 在给定的文本描述语境下,识别和定位图像中的特定对象或区域。换言之,可以使用提示词来要求模型只检测人坐的椅子,而不是检测图像中的人和椅子,然后编写额外附加的逻辑来确定椅子是否被占用。这要求模型对语言和视觉内容都有深刻的理解,并能够将单词或词语与相应的视觉元素特征进行关联。
  • 消除手工设计的组件,如NMS — Grounding DINO通过消除对手工设计的组件(如非最大抑制(NMS))的需求,简化了目标检测流程。此外,这种设计进一步简化了模型体系结构和训练过程,同时提高了效率和检测性能。

在这里插入图片描述

6.网络结构

Grounding DINO旨在融合DINOGLIP论文中的设计。DINO是一种基于tranformer的检测方法,它可以实现最先进的对象检测器的性能以及相应的端到端优化,消除了对NMS(非最大抑制)等手工模块的依赖。另一方面,GLIP侧重于文本侧,这项任务涉及将给定文本中的短语或单词将其与图像或视频中相应的视觉元素进行关联,可以有效地将文本描述与其各自的视觉表示进行关联。

Grounding DINO的网络结构分为以下几个部分:

  • 文本主干和图像特征提取主干 —  一般使用像Swin Transformer这样的图像主干来提取多尺度图像特征,并且使用像BERT这样的文本主干来提取文本特征。
    在这里插入图片描述

  • 文本图像特征融合  —  在提取出图像和文本特征后,将它们输入到特征增强器中进行跨模态特征融合。特征增强包括多个特征增强器层。可变形的自注意机制被用来增强图像特征,普通自注意机制被用于文本特征增强。
    在这里插入图片描述

  • 文本语义引导的query选择 – 为了有效地利用输入文本来引导对象检测,设计了一个语言引导查询选择模块,以选择与输入文本更相关的融合特征作为解码器的query。

  • 多模态解码器 - 开发了一种来组合图像和文本特征的跨模态解码器。每个跨模态query被送到自注意力层、用于组合图像特征的图像交叉注意力层、用来组合文本特征的文本交叉注意力层以及每个跨模态解码器层中的FFN层。与DINO解码器相比,每个解码器层都有一个额外的文本交叉注意力层,因为文本信息需要注入到query中以更好地对齐多模态特征。

在这里插入图片描述

7.简单例子

为了让大家更容易地尝试这个模型,我们准备了一个Jupyter测试样例,你可以点击链接进行访问。
在这里插入图片描述

如上图所示,Grounding DINO允许根据语义进行更加精确地检测。我们可以使用文本提示词 “一个坐在椅子上的人”,来将要搜索范围缩小到仅一个人占用的椅子,而不是检测图像中所有的椅子 。我们可以看到右侧图像中,该模型不仅返回了一个检测到的椅子,还返回了一个被检测到的“男人” — 提示词中的附加词。

8.复杂例子

与GLIP一样,可以通过通过合适的prompt engineering来提高网络检测的质量。在下面的照片中,使用简单的文本查询 — “餐巾纸” 喂入模型,那么我们将不会检测到任何物体。
在这里插入图片描述

但是在这种情况下,提供更多描述细节来帮助我们寻找特定的对象的是有帮助的,例如“蓝色餐巾”和“桌子上的餐巾”,以实现所需要的输出。

9.总结

正如大家在本文开头的表格中所看到的,Grounding DINOGLIP推理速度更快,但在要求实时检测场景中考虑起来仍然推理速度太慢。

然而,该模型可以在灵活性和泛化性很重要的任务中大放异彩,比如Grounding DINO可以成功地用于自动化数据标注。此外,Grounding DINO还可以通过使用语言约束而不是复杂且容易出错的手工组件来分析检测关系,从而大大简化图像和视频分析的处理逻辑。

总之,Grounding DINO无疑是一个重大突破,它将为物体检测及其他领域的更多创新应用铺平道路。

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

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

相关文章

Python实现员工管理系统(Django页面版 ) 七

各位小伙伴们好久不见,2024年即将到来,小编在这里提前祝大家新的一年快快乐乐,能够事业有成,学习顺心,家庭和睦,事事顺利。 今天我们本篇要实现的是一个登录界面的实现,其实登录界面的实现看着挺…

php学习06-魔术常量

有九个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下: 参考

SpringBoot知识

1、Spring和SpringBoot对比 2、版本调整 (1)先排除是否是JDK与SpringBoot的版本不一致导致的:如JDK1.8和SpringBoot3.1.5冲突; (2)调整编译版本 (3)调整maven的jdk (4&…

AI又进化了,AI 写代码工具

今年 AI 的发展可谓一日千里,相信不少同学应该都用过 AI 来帮助自己提高开发效率吧? 比如让 AI 根据注释生成代码、解释整段代码、提供技术问题的答疑、修改 Bug、生成单元测试等等。 在 12 月 28 日刚刚结束的 WAVE SUMMIT 深度学习开发者大会上&…

引领手游技术潮流:武汉灰京文化的卓越技术创新与市场推广支持

在数字娱乐领域,手游行业正蓬勃发展,为数以亿计的玩家提供了丰富的娱乐选择。武汉灰京文化,作为该领域的佼佼者,以其强大的技术创新和全面的市场推广支持,为合作伙伴的成功铺平了道路,不仅提升了游戏质量&a…

Amlogic HDMI驱动分析

目录 一、简介 二、代码结构介绍 三、HDMI资料 四、宏观认识一下HDMI 1、硬件连接 2、Amlogic方案中HDMI的位置 3、Amlogic HDMI驱动模块的划分 五、HDMI-RX驱动分析 1、芯片手册解读 2、RX -makefile 3、驱动模型分析 4、RX的运行 5、HDMI RX调试 六、HDMI-TX驱…

单列集合Collection常用api

集合体系结构 Collection Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。 public static void main(String[] args) {//TODO Collection类 所有集合的接口 /*public boolean add(E e) 添加public void clear() …

Ubuntu20.04 上启用 VCAN 用作本地调试

目录 一、启用本机的 VCAN​ 编辑 1.1 加载本机的 vcan 1.2 添加本机的 vcan0 1.3 查看添加的 vcan0 1.4 开启本机的 vcan0 1.5 关闭本机的 vcan0 1.6 删除本机的 vcan0 二、测试本机的 VCAN 2.1 CAN 发送数据 代码 2.2 CAN 接收数据 代码 2.3 CMakeLists.…

图像质量评估:使用 SSIM 计算图像相似性

在图像处理领域,衡量两幅图像之间相似性的一种常见方法是使用结构相似性指数(SSIM)。SSIM 是一种全参考的图像质量评估指标,它不仅考虑了图像的亮度、对比度,还考虑了结构信息。在本文中,我们将介绍一个使用…

Qt QAction添加图片

QAction用的时候,时常需要添加图片,如上图所示,代码如下所示: 测试的图片格式包含png,jpg,bmp,svg,其他未测试

OpenCV-Python(9):图像基础操作

目录 学习目标 获取图像像素并修改像素值 获取图像属性 图像ROI 拆分及合并图像通道 图像边缘扩充 学习目标 获取像素值并修改获取图像的属性(信息)图像的ROI获取图像通道拆分及合并图像扩边 获取图像像素并修改像素值 几乎所有这些操作与Numpy 的关系要比与OpenCV 的…

大语言模型(LLM)框架及微调 (Fine Tuning)

大语言模型(LLM) 技术作为人工智能领域的一项重要创 新在今年引起了广泛的关注。 LLM 是利用深度学习和大数据训练的人工智能系统,专门 设计来理解、生成和回应自然语言。这些模型通过分析大量 的文本数据来学习语言的结构和用法,…

跟着LearnOpenGL学习11--材质

文章目录 一、材质二、设置材质三、光的属性四、不同的光源颜色 一、材质 在现实世界里,每个物体会对光产生不同的反应。 比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。 有些物体反…

器件的静态特性

器件的静态特性 静态特性(伏安特性) 1.器件在导通或关断的状态下,其电压与电流对应关系。 2.静态过程体现器件最基本的电压与电流稳态特性。 动态特性(开关特性) 1.器件在开或关过程中,其电压、电流随时…

关于java循环结构for

关于java循环结构for 在上一篇文章中,我们了解到了while和do…while的结构以及用法,这篇文章我们主要学习一下最常用的循环结构,for结构😀,这个结构理解起来相对while结构会难一些,本篇文章内容会很多&…

深入Mybatis数据源

数据源是持久层框架中最核心的组件之一,在实际工作中比较常见的数据源有 C3P0、Apache Common DBCP、Proxool 等。作为一款成熟的持久化框架,MyBatis 不仅自己提供了一套数据源实现,而且还能够方便地集成第三方数据源。 javax.sql.DataSourc…

Linux之缓冲区的理解

目录 一、问题引入 二、缓冲区 1、什么是缓冲区 2、刷新策略 3、缓冲区由谁提供 4、重看问题 三、缓冲区的简单实现 一、问题引入 我们先来看看下面的代码:我们使用了C语言接口和系统调用接口来进行文件操作。在代码的最后,我们还使用fork函数创建…

单纯形的几何意义 Simplex

单纯形是 n 维空间 n1 个仿射无关的点的集合的凸包。在几何意义上: 1维单纯形是一个线段2维单纯形是一个三角形3维单纯形是一个四面体(tetrahedron)

MySQL线上慢SQL问题分析处理小记

相同数据量表结构,线上执行12s 本地执行0.1s过程分析 1. 慢SQL信息 SELECT t1.id,t2.idFROM t_platform_target_standard_target_index t1LEFT JOIN t_platform_target_standard t2 ON t1.target_number t2.target_numberWHERE t1.delete_flag 0 AND t2.user_num …

Linux上管理不同版本的 JDK

当在 Linux 上管理不同版本的 JDK 时,使用 yum 和 dnf 可以方便地安装和切换不同的 JDK 版本。本文将介绍如何通过这两个包管理工具安装 JDK 1.8 和 JDK 11,并利用软连接动态关联这些版本。 安装 JDK 1.8 和 JDK 11 使用 yum 安装 JDK 1.8 打开终端并…