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

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无疑是一个重大突破,它将为物体检测及其他领域的更多创新应用铺平道路。

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

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

相关文章

第七课:计算机网络、互联网及万维网(WWW)

第七课:计算机网络、互联网及万维网(WWW) 第二十八章:计算机网络1、局域网 Local Area Networks - LAN2、媒体访问控制地址 Media Access Control address - MAC3、载波侦听多路访问 Carrier Sense Multiple Access - CSMA4、指数…

海凌科HLK-V2语音识别模块更新词条

简介 HLK-V20 是海凌科的离线语音识别模块, 中英文不同时支持, 只支持中文/英文, 具体识别看每次的SDK更新设置;资料下载 可以在微信公众包搜索海凌科或HI-LINK, 下载资料 感知模块->HLK-V20 模块限制 中英文被限制, 需要根据你在官网设置的SDK信息进行确定;可以仅设置3…

Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性

目录 事件修饰符 阻止默认事件 阻止冒泡 允许触发一次 捕获模式 self passive 键盘事件 keyup & keydown 按键别名 注意tab 注意系统按键 自定义按键 鼠标事件 简介 鼠标焦点事件 计算属性 差值语法实现 methods实现 computed实现 get() set() 总…

听GPT 讲Rust源代码--src/tools(38)

File: rust/src/tools/clippy/clippy_dev/src/lib.rs rust/src/tools/clippy/clippy_dev/src/lib.rs文件是Clippy开发工具的入口文件,其作用是提供Clippy开发过程中所需的功能和工具。Clippy是一个Rust代码的静态分析工具,用于提供各种有用的代码规范、编…

Linux网络编程学习心得.5

1.libevent编写tcp服务器流程 创建套接字 绑定 监听 创建event_base根节点 初始化上树节点 lfd 上树 循环监听 收尾 普通的event事件 文件描述符 事件(底层缓冲区的读事件或者写事件) 触发 回调 高级的event事件 bufferevent事件 核心: 一个文件描述符 两…

攻防技术-单包攻击防范:扫描、畸形、特殊(HCIP)

单包攻击类型介绍 一、扫描窥探攻击 1、地址扫描攻击防范 攻击介绍 运用ping程序探测目标地址,确定目标系统是否存活。也可使用TCP/UDP报文对目标系统发起探测(如TCP ping)。 防御方法 检测进入防火墙的ICMP、TCP和UDP报文,根…

性能优化-如何提高cache命中率

本文主要介绍性能优化领域常见的cache的命中率问题,旨在全面的介绍提高cache命中率的方法,以供大家编写出性能友好的代码,并且可以应对性能优化领域的面试问题。 🎬个人简介:一个全栈工程师的升级之路! &am…

PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用 1.序列化:将对象转化成数组或者字符串的形式 2.反序列化:将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格,不同人有不同的书写情况,可能还会出现换行的情况 为此为了…

【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

文章目录 一、查找元素 - set#find 函数1、函数原型 简介2、代码示例 - set#find 函数 二、获取元素个数 - set#count 函数1、函数原型 简介2、代码示例 - set#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C 语言的 STL 标准模板库 , std::set 集合容器 是一个…

软件测试/测试开发丨Python 内置库 OS 学习笔记分享

os 概述 os: Operating System os 使用 导入 os 模块 查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))os 操作系统相关 os.name:获取系统名称os.environ:获取系统环境变量信…

西北工业大学计算机组成原理实验报告——verilog后两次

在单周期CPU的基础上开发实现流水线CPU 说明: 1. 该PDF带有大纲功能,点击大纲中的对应标题,可以快速跳转。 2. 目录层级为: 一、一级标题 (二)二级标题 (3)三级标题 4.四级标…

Stable Diffusion Webui在Linux服务器第一次运行不能连接huggingface

第一次运行stable-diffusion-webui出现了如下错误 (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /openai/clip-vit-large-patch14/resolve/main/vocab.json (Caused by ConnectTimeoutError(<urllib3.connecti…

亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织的第七届大数据“星河&#xff08;Galaxy&#xff09;”案例评选结果公示&#xff0c;亚信安慧AntDB数据库两项目入选&#xff0c;其中“基于Ant…

C单片机数据类型与格式化

C语言数据类型 关键字位数表示范围stdint关键字ST关键字举例unsigned char80 ~ 255uint8_tu8u8 data 128char8-128 ~ 127int8_ts8s8 temperature 25unsigned short160 ~ 65535uint16_tu16u16 counter 5000short16-32768 ~ 32767int16_ts16s16 position 32767unsigned int3…

基于C#串口通信的智能仪表充电管理系统

基于C#串口通信的智能仪表充电管理系统 谁要源码的话加入群聊收费50元。提供代码&#xff0c;加QQ66987475。 一、 系统描述 该系统管理矿用检测仪器的充电、领取、归还、考勤等基本功能&#xff0c;一套系统拓补图如下&#xff1a; 由上位机、打印机、大屏幕、人脸识别仪…

腾讯云轻量应用服务器是什么?详细介绍

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、…

力扣:62. 不同路径(动态规划,附python二维数组的定义)

题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

mxxWechatBot微信机器人V2版本文档说明

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 先看这里 一、前言二、mxxWechatBot流程图三、怎么使用&#xff1f; 一、前言 经过不断地探索与研究&#xff0c;mxxWechatBot正式上线&#xff0c;届时全面开放使用。 mxxWechatBot&am…

goframe v2 模板引擎的用法

这里用的goframe v2框架 提醒&#xff1a;下面的import 引入的控制器和api&#xff0c;根据自己实际项目路径 main函数 import ("context""github.com/gogf/gf/v2/net/ghttp""github.com/gzdzh/dzhgo/modules/dzhCms/controller/web""gith…

C/C++ BM3 链表中的节点每k个一组翻转

文章目录 前言题目思路阐述代码总结 前言 这道题的关键是理解链表指针的位置&#xff1b; 在BM2的区间翻转基础上&#xff0c;多了个指针偏移&#xff0c;博客里面我贴图阐述一下。 题目 思路阐述 这道题的翻转过程参考BM2的题解&#xff0c;这里主要阐述一下指针移动和整体思…