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结果

在这里插入图片描述

消融结果

在这里插入图片描述

其他结果

在这里插入图片描述

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

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

相关文章

【LeetCode刷题-树】-- 103.二叉树的锯齿形层序遍历

103.二叉树的锯齿形层序遍历 方法:广度优先搜索 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int …

单片机(STM32,GD32,NXP等)中BootLoader的严谨实现详解

Bootloader(引导加载程序)的主要任务是引导加载并运行应用程序,我们的软件升级逻辑也一般在BootLoader中实现。本文将详细介绍BootLoader在单片机中的实现,包括STM32、GD32、NXP Kinetis等等的所有单片机,因为无论是什么样的芯片,…

​pathlib --- 面向对象的文件系统路径​

3.4 新版功能. 源代码 Lib/pathlib.py 该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 纯路径,以及从纯路径继承而来但提供 I/O 操作的 具体路径。 如果以前从未用过此模块,或不确定…

07.仿简道云公式函数实战-逻辑函数-AND

1.AND函数 AND 函数可用于表示:当所有参数逻辑值为 true 时,返回 true;只要有任何一个参数逻辑值为 false,则返回false。 2. 函数用法 AND(语文成绩>90,数学成绩>90,英语成绩>90) 3.函数示例 1)AND(A,B)&a…

Ruff智慧路灯方案让城市管理更智慧,物联网助力城市数智化运营

随着5G、物联网、人工智能等新一代信息技术的发展,路灯管理也被赋予了更多可能,路灯已经从简单的照明工具逐步成为智慧城市发展的新入口。 据了解,当前我国路灯照明耗电量约占总量的15%。传统路灯存在耗能大、设备故障无法定位、路灯状态难以…

安装LLaMA-Factory微调chatglm3,修改自我认知

安装git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda activate llama_factory cd LLaMA-Factory pip install -r requirements.txt 之后运行 CUDA_VISIBLE_DEVICES0 python src/train_web.py,按如下配置…

algorithm graphics

绘制地图坐标路线_哔哩哔哩_bilibili neo4j test-CSDN博客

如何使用Java在Excel中添加动态数组公式?

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 动态数组公式是 Excel 引入的一项重要功能,它将 Excel 分为两种风格:Excel 365 和传统 …

Linux基础项目开发2:物联网监控——视频监控方案介绍(一)

前言: 这次我们来做一个关于视频监控的基础小项目,需要我们用到网络的相关知识,还会学到好多优秀的网络协议,下面让我们开始对物联网视频监控进行一个大体框架的介绍吧 目录 项目内容: 1.视频监控方案介绍 2.视频监控…

ROB的结构与作用

在流水线的提交(Commit)阶段,之所以能够将乱序执行的指令变回程序中指定的顺序状态,主要是通过重排序缓存(Reorder Buffer, ROB)来实现的 ROB本质上是一个FIFO在它当中存储了一条指令的相关信息,例如这条指令的类型、结果、目的寄存器和异常…

SpringCloud面试题——Sentinel

一:什么是Sentinel? Sentinel是一个面向分布式架构的轻量级服务保护框架,实现服务降级、服务熔断、服务限流等功能 二:什么是服务降级? 比如当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备…

安装程序无法自动安装Virtual Machine Communication Interface Sockets(VSock)驱动程序

环境情况: 物理机win10系统 虚拟机windowserver08系统 vmware 16.0的版本 问题触发: 在虚拟机win7系统上安装vmware tools出现提示,报错信息“安装程序无法自动安装Virtual Machine Communication Interface Sockets(VSock&a…

Android 11.0 systemui锁屏页面时钟显示样式的定制功能实现

1.前言 在11.0的系统ROM定制化开发中,在进行systemui的相关开发中,当开机完成后在锁屏页面就会显示时间日期的功能,由于 开发产品的需求要求时间显示周几上午下午接下来就需要对锁屏显示时间日期的相关布局进行分析,然后实现相关功能 效果图如图: 2.systemui锁屏页面时钟显…

Ubuntu Destktop 22.04 设置 ssh 超时时间

Ubuntu Destktop 22.04 使用 ssh 连接服务器时,发现一段时间不操作就会自动断开连接,解决方法如下: 打开 /etc/ssh/ssh_config 文件: sudo vim /etc/ssh/ssh_config在文件最后添加: # ssh 客户端会每隔 30 秒发送一…

4fiddler抓包工具的使用

一、定义 1.1 抓包的定义 说明:客户端向服务器发送请求以及服务器响应客户端的请求,都是以数据包来传递的。 抓包(packet capture):通过工具拦截客户端与服务器交互的数据包 1.2 fiddler的介绍 Fiddler是一个http协议调试代理工具&#…

将数组转换为字符串 numpy.array_repr()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将数组转换为字符串 numpy.array_repr() [太阳]选择题 请问关于以下代码最后输出的数据类型是? import numpy as np a np.array([0, 1, 2]) print("【显示】a ",a) pr…

Node CLI 之 Yargs (2)

什么是 yargs? yargs 是一个用于处理命令行参数的 Node.js 库 安装 yargs npm install yargs简单例子 不定义任何选项,直接便可以使用 定义命令 const yargs require(yargs)yargs.command(hello, Prints hello world, (yargs) > {}, (argv) >…

docker-compose的介绍与使用

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。 注意如果使用 build 指令,在 Dockerfile 中设置…

2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现: 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此,对这一现象进行建模,特别是对其空间发生和扩展进行建模&…