当前位置: 首页 > news >正文

开放世界目标检测 Grounding DINO

开放世界目标检测 Grounding DINO

flyfish

Grounding DINO 是一种开创性的开放集对象检测器,它通过结合基于Transformer的检测器DINO与基于文本描述的预训练技术,实现了可以根据人类输入(如类别名称或指代表达)检测任意对象的功能。这项研究的关键在于将语言引入到原本只能识别预定义类别的封闭集检测器中,以实现对开放集概念的泛化能力。

为了有效融合语言和视觉模态,研究者们在理论上将一个封闭集检测器的工作流程分为三个阶段,并提出了一个紧密融合的解决方案。该方案包括:

  1. 特征增强器:用于强化从图像中提取的特征。
  2. 语言引导的查询选择:根据提供的文本描述来选择哪些区域或对象进行更细致的分析。
  3. 跨模态解码器:用于融合视觉和语言信息,使模型能够理解两者之间的关系。

Grounding DINO 首先在大规模数据集上进行了预训练,这些数据集涵盖了对象检测、接地任务以及图像字幕生成的数据。预训练之后,模型在开放集对象检测和指代对象检测基准测试中进行了评估。结果显示,Grounding DINO 在所有三项设置中都表现出了显著的效果,包括COCO、LVIS、ODinW 和 RefCOCO/+/g 等基准测试。

具体来说,Grounding DINO 在 COCO 零样本检测基准上的平均精度(AP)达到了52.5%,并且在 ODinW 的零样本检测基准上创造了新的记录,平均精度为26.1%。这表明 Grounding DINO 不仅可以很好地处理已知类别的检测任务,还能有效地应对未曾见过的新类别,展现了强大的泛化能力。

此外,研究人员还发布了部分检查点和推理代码,供社区使用和进一步研究,发布地址为 https://github.com/IDEA-Research/GroundingDINO。

这个模型的成功标志着在开放集对象检测领域的一个重要进展,为未来的研究和应用提供了新的可能性。

Introduction

Artificial General Intelligence (AGI) 系统的能力的一个关键指标是其处理开放世界场景的熟练程度。在本文中,我们的目标是开发一个强大的系统,该系统能够根据人类语言输入检测任意对象,这一任务通常被称为开放集对象检测(open-set object detection)。此任务作为通用对象检测器具有广泛的应用前景和巨大潜力,例如可以与生成模型合作进行图像编辑(如图1(b)所示)。

为了实现这个目标,我们设计了强大的开放集对象检测器 Grounding DINO,并遵循以下两个原则:

  1. 基于DINO的紧密模态融合

    • 开放集检测的关键在于通过引入语言来实现对未见过的对象的泛化能力。大多数现有的开放集检测器都是通过将封闭集检测器扩展到开放集场景并结合语言信息发展而来的。
    • 如图2所示,一个封闭集检测器通常包含三个重要模块:用于特征提取的骨干网络(backbone)、用于特征增强的颈部(neck),以及用于区域细化(或边界框预测)的头部(head)。
    • 通过学习语言感知的区域嵌入,封闭集检测器可以被推广以检测新对象,使得每个区域可以在语言感知的语义空间中分类为新的类别。实现这一目标的关键是在颈部和/或头部输出之间使用区域输出和语言特征之间的对比损失(contrastive loss)。
  2. 大规模接地预训练以实现概念泛化

    • 为了让模型能够理解并识别各种不同类型的对象,它需要经历大规模的数据预训练,包括对象检测数据、接地数据和字幕数据等。这种预训练有助于模型学习如何将视觉信息与文本描述关联起来,从而提高对新概念的理解和泛化能力。

Grounding DINO 的设计不仅依赖于深度学习中的Transformer架构(如DINO),还依赖于跨模态(视觉和语言)信息的有效融合。通过这种方式,模型能够在不局限于预定义对象类别的前提下,根据自然语言描述准确地定位和识别图像中的对象,这标志着向更加智能和灵活的计算机视觉系统迈出了重要一步。

此外,文中提到的“对比损失”是一种训练技术,它帮助模型学会区分正样本(即正确的匹配)和负样本(错误的匹配),这对于确保模型正确地关联语言描述和视觉内容至关重要。这种方法使 Grounding DINO 能够有效地从已知类别泛化到未知类别,从而在开放集对象检测任务中表现优异。
执行代码先执行

export HF_ENDPOINT=https://hf-mirror.com
from groundingdino.util.inference import load_model, load_image, predict, annotate
import cv2model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "weights/groundingdino_swint_ogc.pth")
IMAGE_PATH = "weights/dog-3.jpeg"
TEXT_PROMPT = "chair . person . dog ."
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25image_source, image = load_image(IMAGE_PATH)boxes, logits, phrases = predict(model=model,image=image,caption=TEXT_PROMPT,box_threshold=BOX_TRESHOLD,text_threshold=TEXT_TRESHOLD
)annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("annotated_image.jpg", annotated_frame)

问题

GroundingDINO/ms_deform_attn.py", line 53, in forwardoutput = _C.ms_deform_attn_forward(^^
NameError: name '_C' is not defined

解决方法

export CUDA_HOME=/usr/local/cuda-12.4
echo $CUDA_HOME

请添加图片描述

相关文章:

开放世界目标检测 Grounding DINO

开放世界目标检测 Grounding DINO flyfish Grounding DINO 是一种开创性的开放集对象检测器,它通过结合基于Transformer的检测器DINO与基于文本描述的预训练技术,实现了可以根据人类输入(如类别名称或指代表达)检测任意对象的功…...

easegen将教材批量生成可控ppt课件方案设计

之前客户提出过一个需求,就是希望可以将一本教材,快速的转换为教学ppt,虽然通过人工程序脚本的方式,已经实现了该功能,但是因为没有做到通用,每次都需要修改脚本,无法让客户自行完成所有流程&am…...

2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36)

参考:2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36) ubantu20.04,mysql5.7.13 navicat 远程连接数据库报错 2002 - Can’t connect to server on ‘192.168.1.61’ (36) 一、查看数据库服务是否有启动,发现有启动 systemctl status mysql…...

【虚拟机网络拓扑记录】

虚拟机网络拓扑记录 虚拟机安装windows到ubuntu的网络拓扑ubuntu到ubuntu里面的虚拟机网络拓扑windows到ubuntu里面的虚拟机网络拓扑 虚拟机安装 本实验宿主机为windos, 安装vmware,虚拟机操作系统使用ubuntu,然后再在ubuntu上面创建新的虚拟…...

【单片机通讯协议】—— 常用的UART/I2C/SPI等通讯协议的基本原理与时序分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、通信基本知识1.1 MCU的参见外设1.2 通信的分类按基本的类型从传输方向上来分 二、UART(串口通讯)2.1 简介2.2 时序图分析2.3 UART的…...

Vue3 核心语法

1. OptionsAPI 与 CompositionAPI Vue2 的API设计是 Options(配置)风格的。Vue3 的API设计是 Composition(组合)风格的。 1.1 Options API 的弊端 Options类型的 API,数据、方法、计算属性等,是分散在&a…...

LLaMA-Factory GLM4-9B-CHAT LoRA 指令微调实战

🤩LLaMA-Factory GLM LoRA 微调 安装llama-factory包 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git进入下载好的llama-factory,安装依赖包 cd LLaMA-Factory pip install -e ".[torch,metrics]" #上面这步操作会完成…...

GTM023 W.H.Greub线性代数经典教材:Linear Algebra

这本教材是我高中时期入门线性代数的主要教材,我的很多基础知识都来源于这本书,如今看回这本书可以说满满的回忆。这本书可以说,是我读过的内容最为全面且完备的线性代数教材了。而且它的语言风格非常的代数化,没有什么直观可言&a…...

交换机与路由器的区别

交换机和路由器是网络中的两种关键设备,它们各自承担不同的功能,主要区别体现在以下几个方面: 一、工作层次与功能 交换机: 工作层次:交换机主要工作在OSI模型的第二层,即数据链路层。 功能:交…...

springboot502基于WEB的牙科诊所管理系统(论文+源码)_kaic

牙科诊所管理系统的设计与实现 摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定牙科诊所管理系统的…...

soular使用教程

用 soular 配置你的组织,工作更高效!以下是快速上手的简单步骤:  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责的清晰分配。  1.1 用…...

纯div+css+js弹出窗

目的&#xff1a;实现弹出窗、仅关闭弹窗之后才能操作。自适应宽度与高度、当文本内容太多时、添加滚动条效果。 效果图 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport"…...

一篇文章学会HTML

目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…...

QGIS二次开发(插件开发)

实习二 QGIS插件开发 2.1 任务要求 a&#xff09;用C语言编写qgis插件&#xff0c;实现带有x/y坐标的文本文件的地图显示。 用文件流fstream操作文本文件&#xff0c;读取其中的坐标数据。基于QgsPlugin相关类派生出一个插件&#xff0c;并加到插件工厂中。基于QgsVectorLaye…...

Web防火墙和下一代防火墙的区别

介绍 客户经常询问“当我已经拥有下一代防火墙&#xff08;NGFW&#xff09;时&#xff0c;为什么需要Web应用程序防火墙&#xff08;WAF&#xff09;&#xff1f;”。本博文的目的是解释两种解决方案之间的区别&#xff0c;重点关注Web应用程序防火墙可以提供的附加值。 什么…...

Linux:alias别名永久有效

一、背景 日常使用bash时候&#xff0c;有些常用的命令参数的组合命令太长&#xff0c;很难记&#xff0c;此时可以利用Linux提供的alias命令生成命令的别名&#xff08;命令的隐射&#xff09;&#xff0c;但是我们会发现&#xff0c;当退出了终端后重新登录就失效了&#xff…...

【递归与回溯深度解析:经典题解精讲(中篇)】—— LeetCode

文章目录 组合目标和组合总和字母大小写全排序优美的排列N皇后 组合 思路&#xff1a;回溯算法 问题要求从 1 到 n 中选出 k 个数的所有组合。 使用回溯算法递归构造解。 每次递归时&#xff0c;记录当前的组合路径&#xff0c;当组合长度达到 k 时&#xff0c;将其加入结果集…...

01.HTTPS的实现原理-HTTPS的概念

01.HTTPS的实现原理-HTTPS的概念 简介1. HTTPS的概念和安全性2. HTTPS的实现原理3. HTTPS和HTTP的区别4. OSI七层协议模型5. SSL和TLS的区别 简介 该系列文章主要讲述了HTTPS协议与HTTP协议的区别&#xff0c;以及HTTPS如何实现安全传输。内容分为三部分&#xff1a;HTTPS的实…...

一文详解MacOS+CLion——构建libtorch机器学习开发环境

对于希望在本地环境中进行深度学习开发的开发者来说&#xff0c;配置合适的工具链是至关重要的一步。本文旨在帮助您在 macOS 操作系统上&#xff0c;利用 CLion IDE 和 PyTorch 的 C依赖库——libtorch&#xff0c;快速搭建起一个高效的开发环境。这里我们将一步步地讲解如何下…...

【LeetCode 面试经典150题】详细题解之哈希表篇

【LeetCode 面试经典150题】详细题解之哈希表篇 1 哈希表的基础1.1 基础概念及实现1.2.1 哈希表的工作原理1.2.2 705.设计哈希集合1.2.3 706.设计哈希映射 1.2 HashMap相关1.2.1 基本操作1.2.2 遍历 1.3 Hashtable1.4 LinkedHashMap1.5 HashSet**1.5.1基本特性**1.5.2 基本方法…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...