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

在這里插入圖片描述

消融結果

在這里插入圖片描述

其他結果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215590.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring框架中的五種常用設計模式

1、單例模式 Spring 的 Bean 默認是單例模式,通過 Spring 容器管理 Bean 的?命周期,保證每個 Bean 只被 創建?次,并在整個應?程序中重用。 2.工廠模式 Spring 使???模式通過 BeanFactory 和 ApplicationContext 創建并管理 Bean 對象…

以csv為源 flink 創建paimon 臨時表相關 join 操作

目錄 概述配置關鍵配置測試啟動 kyuubi執行配置中的命令 bug解決bug01bug02 結束 概述 目標:生產中有需要外部源數據做paimon的數據源,生成臨時表,以使用與現有正式表做相關統計及 join 操作。 環境:各組件版本如下 kyuubi 1.8…

Python從門到精通(九):numpy科學計算庫

? Numpy 這是一個三方的庫,是很多科學與工程庫的基礎。在機器學習中應用廣泛。 import numpy as np。 數組運算 import numpy as npax np.array([1, 2, 3, 4]) ay np.array([5, 6, 7, 8])type(ax) print(f{ax} * 2 {ax * 2}) #[2 4 6 8] print(f{ax} 10 {a…

Spring(Spring/Springboot 的創建) 基礎

一. Spring 1.1 Spring是什么? Spring 指的是 Spring Frameword(Spring 框架),它是一個開源框架。 Spring 是包含了眾多工具方法的IoC容器。 1.2 什么是容器? 容器時用來容納某種物品的裝置。 我們之前接觸到的容器: ? List/Map ->…

內存cache大量使用問題導致應用異常問題

概述 28s應用崩潰查看內存使用有大量cache。 分析 查看free 信息平時的確存在大量cache使用的情況查看dmes信息發現filesendserver崩潰 崩潰信息為系統調用 查看到page allocation failure:order 5 同時也看到系統內存使用情況 查看到系統實際還有部分內存為空閑內存&am…

【Android開發-26】Android中服務Service詳細講解

1,service的生命周期 Android中的Service,其生命周期相較Activity來說更為簡潔。它也有著自己的生命周期函數,系統會在特定的時刻調用對應的Service生命周期函數。 具體來說,Service的生命周期包含以下幾個方法: on…

[筆記] 使用 qemu/grub 模擬系統啟動(單分區)

背景 最近在學習操作系統,需要從零開始搭建系統,由于教程中給的虛擬機搭建的方式感覺還是過于重量級,因此研究了一下通過 qemu 模擬器,配合 grub 完成啟動系統的搭建。 qemu 介紹 qemu 是一款十分優秀的系統模擬器,…

Linux上進行Nacos安裝

Nacos安裝指南 僅供參考,若有錯誤,歡迎批評指正! 后期會繼續上傳docker安裝nacos的過程! 1.Windows安裝 開發階段采用單機安裝即可。 1.1.下載安裝包 在Nacos的GitHub頁面,提供有下載鏈接,可以下載編譯好…

《C++新經典設計模式》之第7章 單例模式

《C新經典設計模式》之第7章 單例模式 單例模式.cpp 單例模式.cpp #include <iostream> #include <memory> #include <mutex> #include <vector> #include <atomic> using namespace std;// 懶漢式&#xff0c;未釋放 namespace ns1 {class Gam…

手動搭建koa+ts項目框架(日志篇)

文章目錄 前言一、安裝koa-logger二、引入koa-logger并使用總結如有啟發&#xff0c;可點贊收藏喲~ 前言 本文基于手動搭建koats項目框架&#xff08;路由篇&#xff09;新增日志記錄 一、安裝koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

【每日一題】【12.11】1631.最小體力消耗路徑

&#x1f525;博客主頁&#xff1a; A_SHOWY&#x1f3a5;系列專欄&#xff1a;力扣刷題總結錄 數據結構 云計算 數字圖像處理 1631. 最小體力消耗路徑https://leetcode.cn/problems/path-with-minimum-effort/這道題目的核心思路是&#xff1a;使用了二分查找和BFS &a…

PHP基礎(2)

目錄 一、PHP 數據類型 二、PHP 字符操作函數 strlen() str_word_count() strrev() strpos() str_replace() 一、PHP 數據類型 PHP 有八種基本數據類型和兩種復合數據類型&#xff1a; 整型&#xff08;int&#xff09;&#xff1a;表示整數&#xff0c;可以是正數或負數&am…

線程Thread源代碼思想學習1

1.啟動線程代碼 public class MultiThreadExample {public static void main(String[] args) {// 創建兩個線程對象Thread thread1 new Thread(new Task());Thread thread2 new Thread(new Task());// 啟動線程thread1.start();thread2.start();} }class Task implements Ru…

EXPLAIN 執行計劃

有了慢查詢語句后&#xff0c;就要對語句進行分析。一條查詢語句在經過 MySQL 查詢優化器的各種基于成本和規則的優化會后生成一個所謂的執行計劃&#xff0c;這個執行計劃展示了接下來具體執行查詢的方式&#xff0c;比如多表連接的順序是什么&#xff0c;對于每個表采用什么訪…

記錄 DevEco 開發 HarmonyOS 應用開發問題記錄 【持續更新】

HarmonyOS 應用開發問題記錄 HarmonyOS 應用開發問題記錄一、預覽器無法成功運行?如何定位預覽器無法編譯問題? 開發遇到的問題 HarmonyOS 應用開發問題記錄 一、預覽器無法成功運行? 大家看到這個是不是很頭疼? 網上能看到許多方案,基本都是關閉一個配置 但是他們并…

InitializingBean初始化--Spring容器管理

目錄 InitializingBean--自動執行一些初始化操作spring初始化bean有兩種方式&#xff1a;1.優點2.缺點2.PostConstruct 注解2.舉例使用InitializingBean接口 和PostConstruct3.初始化交給容器管理4.與main入口函數有什么區別5.在 Spring 中&#xff0c;有兩種主要的初始化 bean…

【Java SE】帶你識別什么叫做異常!!!

&#x1f339;&#x1f339;&#x1f339;個人主頁&#x1f339;&#x1f339;&#x1f339; 【&#x1f339;&#x1f339;&#x1f339;Java SE 專欄&#x1f339;&#x1f339;&#x1f339;】 &#x1f339;&#x1f339;&#x1f339;上一篇文章&#xff1a;【Java SE】帶…

Android獲取Wifi網關

公司有這樣一個應用場景&#xff1a;有一臺球機設備&#xff0c;是Android系統的&#xff0c;它不像手機&#xff0c;它沒有觸摸屏幕&#xff0c;所以我們對球機的操作很不方便&#xff0c;于是我們搞這樣一個設置&#xff1a;點擊球機電源鍵5次分享出一個熱點&#xff0c;然后…

【JVM從入門到實戰】(一) 字節碼文件

一、什么是JVM JVM 全稱是 Java Virtual Machine&#xff0c;中文譯名 Java虛擬機。 JVM 本質上是一個運行在計算機上的程序&#xff0c;他的職責是運行Java字節碼文件。 二、JVM的功能 解釋和運行 對字節碼文件中的指令&#xff0c;實時的解釋成機器碼&#xff0c;讓計算機…

C++類模板不是一開始就創建的,而是調用時生成

類模板中的成員函數和普通類中成員函數創建時機有區別的&#xff1a; 普通類中的成員函數一開始就可以創建模板類中的成員函數調用的時候才可以創建 總結;類模板中的成員函數并不是一開始就創建的&#xff0c;再調用時才去創建 #include<iostream> using namespace st…