MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法
NeurIPS2023
文章:https://arxiv.org/abs/2305.18980
代码:https://github.com/YifanXu74/MQ-Det
主框图


摘要
这篇文章提出了MQ-Det,一种高效的架构和预训练策略,它利用文本描述的开放集泛化能力和视觉示例的丰富描述粒度作为类别查询,即多模态查询目标检测。MQ-Det将视觉查询融入现有的仅基于语言查询的检测器。文章提出了一个即插即用的门控类可扩展感知器(GCP)模块,用于在冻结检测器上增强类别文本与类别相关的视觉信息。为了解决由于冻结检测器带来的学习惯性问题,提出了一种视觉条件的掩码语言预测策略。MQ-Det的简单而有效的架构和训练策略与大多数基于语言查询的目标检测器兼容,从而实现多种应用。实验结果表明,多模态查询大大提高了开放世界检测的性能。例如,MQ-Det在LVIS基准测试中显著提高了最先进的开放集检测器GLIP的性能,无需任何下游微调,相较于GLIP提高了7.8%的AP。在13个少样本下游任务中,MQ-Det平均提高了6.3%的AP,而GLIP仅需额外增加3%的调制时间。
引言
近年来,随着大规模视觉语言预训练模型的兴起,目标检测领域已经进入了一个全新的范式,即使用查询文本进行目标定位。受益于预训练模型在大规模数据上的泛化能力,这种文本查询范式在通向开放集目标检测的道路上取得了稳定的进步。
与传统的固定类别集合(通常由有限数量的数字表示)相比,文本查询可以表示更广泛的概念,但也存在描述粒度不足的内在限制。例如,类别同义词(如“bat"可以表示木头制作的球棒,也可以表示一种动物)会导致模糊的查询。与此同时,对于一些细粒度的类别(如图1所示的鱼类品种检测),仅使用有限的文本很难描述鱼类的具体模式。显然,解决文本查询描述粒度不足问题的一个直接方案是设计额外的文本描述,但这存在三个明显障碍:
1)很难全面描述视觉细节。为大量类别编写文本描述是一项繁琐的工作。
2)较长的查询文本会增加预训练模型的理解难度。
3)带来更多的计算开销。
最先进的文本查询检测器GLIP即使为一些类别设计了额外的文本描述,也只能在Aquarium数据集上将平均精度(AP)从17.7%提高到18.4%。与文本相比,图像可以提供更丰富的视觉线索。但同时,人工生成的文本具有更高的信息密度,因此具有更强的泛化能力。鉴于此,一个自然的想法是将文本和图像结合起来,构成多模态查询,兼具前者的广度和后者的丰富粒度。然而,如何获得这样的多模态查询检测模型仍面临挑战:
1)直接使用有限的视觉示例进行微调会导致灾难性遗忘。
2)大规模基础模型具有良好的泛化能力,但如果重新组织和从头训练,需要承担繁重的训练负担(例如,GLIP需要超过3000万的数据存储和近480个V100 GPU天的训练时间)。
本文填补了多模态查询目标检测(MQ-Det)的空白,提出了一种高效的插件式训练架构。MQ-Det的核心思想是融合描述丰富的视觉线索和具有很强泛化能力的文本表示,同时只需在现有基于语言查询的目标检测基础模型的基础上增加很小的训练成本。作者在Objects365数据集上对模型进行微调,仅占用GLIP预训练时间的3%,就能在LVIS基准测试中通过提供5个视觉示例和文本类别描述,将微调-free的性能显著提高7.8%。
为了实现这一目标,作者提出了一个即插即用的Gated Class-scalable Perceiver (GCP)模块,用于在文本编码器的每个高级阶段动态融合信息丰富的视觉线索和高度泛化的语言线索。另外,作者还设计了一种视觉条件的掩码语言预测策略,以确保在冻结检测模型的基础上进行足够的多模态融合。作者观察到,在将视觉线索以门控残差的方式加入时,学习过程往往会陷入初始优化点附近的局部最优,而无法引入足够的视觉知识。因此,作者随机mask文本tokens,让对应的视觉查询独立地进行目标预测。作者冻结初始的检测基础模型,只训练调制阶段的GCP模块,这非常高效。
综上,本文的贡献如下:
1)首个引入既具有广度又具有丰富粒度的多模态查询的工作,为开放集目标检测开辟了一条新路。
2)提出了一个即插即用的GCP模块,用于动态融合多模态查询中信息丰富的视觉线索和高度泛化的语言线索,并采用视觉条件的掩码语言预测策略,在冻结检测模型的基础上实现充分的多模态融合。
3)MQ-Det在finetune-free和few-shot场景下展现出强大的迁移能力,而所需的训练时间远少于之前的最先进基础检测器。具体来说,MQ-Det在具有挑战性的LVIS基准测试中,相比GLIP提高了7.8%的AP,在13个下游few-shot检测任务[23]中平均提高了6.3%的AP,而调制过程仅占用了GLIP所需训练时间的3%。
方法
Gated Class-scalable Perceiver(GCP)
在第2.2节中,作者提出了一种名为Gated Class-scalable Perceiver(GCP)的即插即用架构,用于将视觉查询融入预训练的语言查询目标检测模型。具体来说,GCP模块被设计插入到文本编码器的每个高级阶段之间,以动态融合来自视觉查询的类相关视觉信息。
GCP模块包含以下两个关键组件:
1)类相关的交叉注意力层:每个类别的文本查询令牌独立地与对应的视觉查询进行交叉注意力计算,以获取丰富的视觉细节。这种设计没有类别特定的参数,可以扩展到不同粒度的类别。2)门控层:根据视觉查询的质量,动态调整交叉注意力产生的增强视觉特征的权重。这通过一个MLP层实现,它将交叉注意力的结果和文本查询令牌作为输入,产生一个标量门控值。门控值初始化为0,这样在训练开始时,输出与预训练文本编码器匹配,有助于训练稳定性和最终性能。
通过在文本编码器中以残差方式加入GCP模块的输出,该模块可以无缝地融合视觉和语言查询。由于GCP没有类别特定的参数,它可以很容易地应用于各种预训练的语言查询目标检测模型,如GLIP和GroundingDINO。此外,GCP允许模型在推理时泛化到任何数量的类和视觉查询,增强了通用性。总的来说,这种即插即用的GCP架构为有效地将视觉查询融入语言查询目标检测模型提供了一个简单而有效的设计。它为多模态查询目标检测提供了坚实的基础。
Modulated pre-training
在第2.3节中,作者提出了一种调制预训练的策略,通过在大规模图像文本数据集上进行额外的训练,将视觉查询融入预训练的语言查询目标检测模型。具体来说,调制预训练包含以下步骤:
1)提取视觉查询:从包含视觉实例的大型数据集(D)中提取视觉查询。每个类别的查询数远多于最终使用的查询数(k)。
2)在冻结的检测器上训练GCP模块:只训练新加入的GCP模块,而冻结预训练的语言查询目标检测模型(如GLIP)。这大大减少了训练时间。
3)视觉条件的掩码语言预测:为了解决仅依赖文本特征导致的学习惯性问题,提出了一种视觉条件的掩码语言预测策略。随机mask文本tokens,让模型从视觉查询中提取信息进行预测。这确保了视觉查询在训练中的充分参与。
微调
在调制预训练之后,可以对模型进行微调,以适应下游任务。由于GCP模块是即插即用的,微调也可以只针对GCP模块进行,而保持预训练模型的其他部分冻结。这只需要很少的计算资源。通过这种调制预训练策略,模型可以接受文本和视觉查询作为输入,实现多模态目标检测,而只需在预训练模型上增加很小的训练成本。实验结果表明,这种策略在finetune-free和few-shot场景下都取得了显著的性能提升。它使模型能够利用语言查询的泛化能力和视觉查询的丰富粒度。
结果
zero-shot结果

few-shot结果

消融结果

其他结果

相关文章:
MQ-Det: Multi-modal Queried Object Detection in the Wild
首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章:https://arxiv.org/abs/2305.18980 代码:https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det,一种高效的架构和预训练策略,它利用文本描述的…...
HarmonyOS应用开发初体验
9月25日华为秋季全场景新品发布会上,余承东宣布,全面启动鸿蒙原生应用,HarmonyOS NEXT开发者预览版将在2024年第一季度面向开发者开放。 最近鸿蒙开发可谓是火得一塌糊涂,各大培训平台都开设了鸿蒙开发课程。美团发布了鸿蒙高级工…...
《C++新经典设计模式》之第4章 策略模式
《C新经典设计模式》之第4章 策略模式 策略模式.cpp 策略模式.cpp #include <iostream> #include <memory> using namespace std;// if或switch分支不稳定,经常改动时,考虑引入算法独立到策略类中去实现// 依赖倒置原则 // 高层组件不应该依…...
【方法】PowerPoint“只读方式”如何取消?
PPT设置了以“只读方式”打开,可以保护文件无法编辑更改,那后续不需要保护了,或者想要编辑文件,要如何取消“只读方式”呢? 首先,我们要看看PPT设置的是哪种“只读方式”。 如果PPT设置的是无密码“只读方…...
MySQL数据库概念与实践
MySQL数据库概念与实践 1. 概念 MySQL是一种常用的关系型数据库管理系统,具有丰富的功能和广泛的应用。在本篇博客中,我们将介绍MySQL数据库的一些重要概念和相关知识。 存储引擎 存储引擎是MySQL数据库用于存储、更新和查询数据的技术实现方法。MyS…...
【ArcGIS Pro微课1000例】0052:基于SQL Server创建企业级地理数据库案例
文章目录 环境搭建创建企业级数据库连接企业级数据库环境搭建 ArcGIS:ArcGIS Pro 3.0.1Server.ecp:版本为10.7SQL Server:版本为SQL Server Developer 2019创建企业级数据库 企业级地理数据库的创建需要通过工具箱来实现。工具位于:数据管理工具→地理数据库管理→创建企业…...
深度学习——第3章 Python程序设计语言(3.7 matplotlib库)
3.7 matplotlib库 目录 1 matplotlib库简介 2 pyplot的plot函数 3 matplotlib基础绘图函数示例 数据可视化有助于深度理解数据。 本节介绍绘制图形的基本方法。 1. matplotlib库简介 matplotlib官网 1.1 matplotlib库概述 matplotlib是Python优秀的数据可视化第三方库&a…...
【数据分析实战】酒店行业华住集团门店分布与评分多维度分析
文章目录 1. 写在前面2. 数据集展示3. 多维度分析3.1 门店档次多元化:集团投资战略观察3.1.1 代码实现3.1.2 本人浅薄理解 3.2 门店分布:各省市分布概览3.2.1 代码实现3.2.2 本人浅薄理解 3.3 门店分级评分:服务水平的多维度观察3.3.1 代码实…...
近期Chrome浏览器 不知哪个版本升级后原先http强制跳转到https,导致服务端302强制跳转到http也没反应
关于Chrome更新http强制跳转到https解决方法 近期Chrome浏览器 不知哪个版本升级后原先http强制跳转到https,导致服务端302强制跳转到http也没反应一、F12检查加载的Response Headers中有没有Non-Authoritative-Reason二、找了资料后得到解决方案:三、找…...
【scikit-learn基础】--『数据加载』之样本生成器
除了内置的数据集,scikit-learn还提供了随机样本的生成器。通过这些生成器函数,可以生成具有特定特性和分布的随机数据集,以帮助进行机器学习算法的研究、测试和比较。 目前,scikit-learn库(v1.3.0版)中有2…...
基于 ESP32-S3 的 Walter 开发板
Walter 是一款基于 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。 近日,比利时公司 DPTechnics BV 推出了一款基于乐鑫 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。该套件即将在 Crowd Supply 平台上发布,您可以点击此处了解详情。 无…...
Gitlab+GitlabRunner搭建CICD自动化流水线将应用部署上Kubernetes
文章目录 安装Gitlab服务器准备安装版本安装依赖和暴露端口安装Gitlab修改Gitlab配置文件访问Gitlab 安装Gitlab Runner服务器准备安装版本安装依赖安装Gitlab Runner安装打包工具安装docker安装java17安装maven 注册Gitlab Runner 搭建自动化部署准备SpringBoot项目添加一个Co…...
待做-待补充-每个节点做事,时间,以及与角度的关系
文章目录 纲领1.是否可以通过遍历一遍二叉树得到答案2.是否可以通过两颗子树相同问题的答案推导出树的答案(形式为递归)无论哪种思维模式,都需要思考:单独一个二叉树节点,它需要做什么事情?需要在什么时候做 后序判断问题是否和子树相关&…...
液态二氧化碳储存罐远程无线监测系统
二氧化碳强化石油开采技术,须先深入了解石油储层的地质特征和二氧化碳的作用机制。现场有8辆二氧化碳罐装车,每辆罐车上有4台液态二氧化碳储罐,每台罐的尾部都装有一台西门子S7-200 smart PLC。在注入二氧化碳的过程中,中控室S7-1…...
kafka学习笔记--安装部署、简单操作
本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…...
UE4 材质实现Glitch效果
材质实现Glitch效果 UE4 材质实现Glitch效果预览1预览2 UE4 材质实现Glitch效果 预览1 添加材质函数: MF_RandomNoise 添加材质: 预览2 添加材质函数MF_CustomPanner: 添加材质函数:MF_Glitch 材质添加: 下面用…...
oracle实验2023-12-8--触发器
第十四周实验 【例】功能要求:增加一新表XS_1,表结构和表XS相同,用来存放从XS表中删除的记录。 分析: 1、创建表 xs_1 SQL> create table xs_1 as select * from xs; Table created SQL> truncate table xs_1; Table truncated题目&a…...
【Python百宝箱】贝叶斯统计的魅力:从PyMC3到ArviZ,探索数据背后的不确定性
标题:预测未来趋势的利器:深入贝叶斯统计和概率编程的世界 前言 贝叶斯统计和概率编程是一种强大的分析方法,可以帮助我们处理不确定性、建立灵活的模型以及进行参数估计和推断。本文将介绍几个常用的Python库,包括PyMC3、ArviZ…...
Knowledge Graph知识图谱—8. Web Ontology Language (OWL)
8. Web Ontology Language (OWL) 在RDFs不可能实现: Property cardinalities, Functional properties, Class disjointness, we cannot produce contradictions, circumvent the Non Unique Naming Assumption, circumvent the Open World Assumption 8.1 OWL Tr…...
排序算法——冒泡排序
排序算法是计算机科学中最基本的概念之一。在众多排序算法中,冒泡排序因其实现简单而被广泛学习。尽管它不是最高效的排序方法,但对于理解基本的排序概念非常有用。本文将深入探讨冒泡排序的原理、实现、优缺点以及应用场景。 1. 冒泡排序原理 冒泡排序…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
