【目標檢測】DN-DETR

一、引言

論文: DN-DETR: Accelerate DETR Training by Introducing Query DeNoising
作者: IDEA
代碼: DN-DETR
注意: 該算法是在DAB-DETR基礎上的改進,在學習該算法前,建議掌握DETR、DAB-DETR等相關知識。
特點: 指出DETR收斂慢的另一個主要原因為二分圖匹配的不穩定性,提出對真實目標的錨框信息和標簽信息施加噪聲并將其喂入解碼器中,使解碼器進行去噪操作的訓練方式。去噪部分引入了真實目標信息且不需要二分圖匹配,所以有利于原始匹配部分的穩定從而加速收斂。

二、為什么降噪能加速DETR的訓練

2.1 使匈牙利匹配更加穩定

前期的優化過程通常是隨機的,導致每次的預測結果可能有比較大的波動。例如,對于同一個查詢,第一次預測該查詢與圖片中的狗🐶匹配,第二次預測該查詢可能就與圖片中的汽車🚗匹配了。匈牙利匹配結果的巨大變化,進一步導致優化目標的不一致,模型需要反反復復進行學習修正才能逐漸穩定,所以收斂速度自然就慢了。

所以作者引入施加了噪聲的真實目標信息,包括目標的中心坐標、寬高、類別。因為它們有明確的對應目標,將它們也添加到解碼器中獲得的預測是不需要進行二分圖匹配的,也就緩解了匈牙利匹配的不穩定性。

為描述訓練前期匈牙利匹配的不穩定性,作者提出了一種指標:

其中, I ( ? ) \mathbb{I}(\cdot) I(?)為指示函數,括號中內容成立為1,否則為0; V n i V_n^i Vni?表示第 i i i個epoch的第n個查詢經解碼器后得到的預測目標的匹配情況,定義如下:

其中, O i = { O 0 i , O 1 i , ? , O N ? 1 i } \mathbf{O}^i=\{O_0^i,O_1^i,\cdots,O_{N-1}^i\} Oi={O0i?,O1i?,?,ON?1i?}表示N個預測目標, T = { T 0 , T 1 , ? , T M ? 1 } \mathbf{T}=\{T_0,T_1,\cdots,T_{M-1}\} T={T0?,T1?,?,TM?1?}表示M個真實目標。

可以看出, I S i IS^i ISi越高表明本次迭代時匈牙利匹配結果與上次的匹配結果相差越大,即不穩定性越大。

上圖為DETR、DAB-DETR、DN-DETR前12個epoch的 I S IS IS變化情況,可以看出,DN-DETR的穩定性要好于另外兩個方法,也就說明了降噪操作能夠使匈牙利匹配更加穩定。

2.2 使搜索范圍更加局部化

因為降噪訓練所引入的錨框雖然施加了噪聲,但是其所處位置仍然在真實目標附近,所以模型在調整預測位置時不必進行全局搜索,而是只進行局部搜索就可以了。錨框和目標框之間距離的縮短使得訓練過程更加簡單,收斂也就更快。

上圖為DETR和DAB-DETR訓練過程中錨框與目標框之間的距離,可以看出,DN-DETR的錨框與目標框之間的距離更小,所以訓練難度更低,收斂速度也就更快。

三、框架

3.1 施加噪聲

DN-DETR施加的噪聲是在真實目標上的,包括三個部分:中心坐標 ( x , y ) (x,y) (x,y)、寬高 ( w , h ) (w,h) (w,h)、標簽 l l l

對于中心坐標 ( x , y ) (x,y) (x,y),會施加隨機偏移。 偏移量要滿足 ∣ Δ x ∣ < λ 1 w 2 |\Delta x|<\frac{\lambda_1 w}{2} ∣Δx<2λ1?w? ∣ Δ y ∣ < λ 1 h 2 |\Delta y|<\frac{\lambda_1 h}{2} ∣Δy<2λ1?h?的限制,其中 λ 1 ∈ ( 0 , 1 ) \lambda_1\in(0,1) λ1?(0,1) λ 1 \lambda_1 λ1?的取值范圍能夠保證中心坐標的偏移不會過大,無論如何偏移,新的中心坐標仍然位于舊框之中。

對于寬高 ( w , h ) (w,h) (w,h),會施加隨機縮放。 縮放后的范圍在 [ ( 1 ? λ 2 ) w , ( 1 + λ 2 ) w ] [(1-\lambda_2)w,(1+\lambda_2)w] [(1?λ2?)w,(1+λ2?)w] [ ( 1 ? λ 2 ) h , ( 1 + λ 2 ) h ] [(1-\lambda_2)h,(1+\lambda_2)h] [(1?λ2?)h,(1+λ2?)h]之間,其中 λ 2 ∈ ( 0 , 1 ) \lambda_2\in(0,1) λ2?(0,1)。并沒有固定的縮放程度,而是在上述范圍內隨機取寬、高。

對于標簽 l l l,會施加隨機翻轉。 翻轉是以 γ \gamma γ的概率將標簽改為另一個隨機標簽。

3.2 注意力掩嗎

DN-DETR引入了 P P P個版本的噪聲,這些噪聲有差別但都滿足3.1中的條件。假設一張訓練圖片中有 M M M個目標,施加 P P P個版本的噪聲后,就會得到 P P P組帶噪目標,共 M × P M\times P M×P個新的帶噪目標。假設原始一張圖片有N個查詢,新的帶噪目標會作為額外的查詢與原始查詢拼接到一起,于是形成 M × P + N M\times P+N M×P+N個查詢。原始查詢就是DAB-DETR中的300個查詢。

?? DN-DETR將與帶噪目標相關的部分稱為去噪部分,將與原始查詢相關的部分稱為匹配部分

雖然新的查詢中被施加了噪聲,但其仍然包含真實目標的信息,如果不同組之間的查詢能夠相互訪問,那學習過程可能會異常簡單。此外,如果新的查詢與原始查詢之間能夠相互訪問,那么與噪聲相關的部分就無法與原始查詢解耦,當進入無法獲取真實目標信息的推理階段時,整個方法就癱瘓了。所以DN-DETR引入了注意力掩碼來避免這兩個問題,注意力掩碼矩陣如下:

圖中, P = 2 , M = 3 , N = 5 P=2,M=3,N=5 P=2,M=3,N=5;匹配部分表示 N N N個原始查詢;灰色部分表示對應查詢不可訪問,彩色部分表示可以訪問。訪問是單向的。

從圖中可以看出,組0可以與自身、匹配部分通信。與自身不必多說,可以訪問匹配部分是因為匹配部分中不包含任何與真實目標相關的信息,所以開放給組0訪問也沒關系。組1與組0類似,但組0與組1相互均不可訪問。匹配部分要與去噪部分解耦,所以只能訪問自身。

3.3 與DAB-DETR的差別

?? DN-DETR只是提供了一個訓練策略,在推理的時候與去噪部分相關的內容和操作都會被移除,變得與DAB-DETR完全一樣。

所以,DN-DETR和DAB-DETR在結構上的差別很小。下圖為DAB-DETR和DN-DETR的解碼器中交叉注意力部分的結構圖:

如上圖所示,二者的主要差別在于查詢部分Q的解碼器嵌入(初始化全0)替換為了類別標簽嵌入+指示項。這種替換是為了同時進行標簽和錨框的去噪,否則原始輸入中只有可學習錨框與中心坐標 ( x , y ) (x,y) (x,y)、寬高 ( w , h ) (w,h) (w,h)相關,沒有與標簽 l l l相關的部分。

對于類別標簽嵌入,要先由nn.Embedding初始化一個尺寸為 ( n u m _ c l a s s e s + 1 , h i d d e n _ d i m ? 1 ) (num\_classes+1,hidden\_dim-1) (num_classes+1,hidden_dim?1)的矩陣。 n u m _ c l a s s e s + 1 num\_classes+1 num_classes+1 n u m _ c l a s s e s num\_classes num_classes指數據集的類別總數, + 1 +1 +1表示額外增加的未知類。 h i d d e n _ d i m hidden\_dim hidden_dim是原始查詢的維度, ? 1 -1 ?1表示減去一個維度留給指示項。對于去噪部分的 M × P M\times P M×P個查詢,它們有明確的類別(施加噪聲后的),所以可以直接從矩陣中索引對應的特征。對于匹配部分的 N N N個查詢,它們不知道與什么類別匹配,均被假設為未知類,用矩陣的最后一個特征表達。剩下的那個維度用指示項填補,指示項用于表示當前查詢屬于原始的匹配部分(0)還是新增的去噪部分(1)。

對于可學習錨框,匹配部分按照DAB-DETR進行均勻分布的初始化,去噪部分直接使用施加噪聲后的中心坐標和寬高。

下圖為DN-DETR的結構圖:

總結下來,DAB-DETR和DN-DETR僅訓練時有差別,差別是:
(1) 解碼器嵌入被換成了類別標簽嵌入+指示項。嵌入部分由nn.Embedding初始化,匹配部分按未知類取最后一個特征,去噪部分按噪聲類別取對應索引的特征。指示項為0表示匹配部分,為1表示去噪部分。
(2) 輸入查詢的數量從 N N N變成了 M × P + N M\times P+N M×P+N M × P M\times P M×P是該圖片中 M M M個真實目標被施加了 P P P個版本的噪聲后得到的錨框和標簽。
(3) 為了避免通信帶來的問題,引入了注意力掩碼。
(4) 與原始查詢拼接在一起的去噪查詢也會經解碼器輸出框和標簽預測。為實現去噪,對于框使用l1 loss和GIOU loss,對于標簽使用Focal loss,三個loss合并稱為重構損失(reconstruction loss)。

致謝:

本博客僅做記錄使用,無任何商業用途,參考內容如下:
DN-DETR 論文簡介
DN-DETR 源碼解析

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

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

相關文章

TCP和UDP的區別以及應用場景

TCP&#xff08;傳輸控制協議&#xff09;和UDP&#xff08;用戶數據報協議&#xff09;是兩種不同的傳輸層協議 區別 TCP是面向連接的&#xff0c;UDP是無連接的&#xff1b; TCP是可靠的&#xff0c;UDP是不可靠的&#xff1b; TCP是面向字節流的&#xff0c;UDP是面向數據…

如何高效配置與使用Pip換源

目錄 1. Pip源的基本概念 1.1 常見的國內鏡像源 2. 臨時換源 2.1 使用命令行參數指定鏡像源 2.2 安裝多個包時指定鏡像源 3. 永久換源 3.1 修改用戶級配置文件 3.1.1 創建和編輯配置文件 3.2 修改全局配置文件 3.2.1 創建和編輯全局配置文件 4. 驗證換源配置 5. 切…

VMamba: Visual State Space Model論文筆記

文章目錄 VMamba: Visual State Space Model摘要引言相關工作Preliminaries方法網絡結構2D-Selective-Scan for Vision Data(SS2D) VMamba: Visual State Space Model 論文地址: https://arxiv.org/abs/2401.10166 代碼地址: https://github.com/MzeroMiko/VMamba 摘要 卷積神…

防火墻共性檢測技術

防火墻共性檢測技術 防火墻共性檢測技術是指防火墻在監控和控制網絡流量時&#xff0c;共同采用的一些檢測和過濾方法。無論是哪種類型的防火墻&#xff0c;這些技術都可以用于識別和阻止惡意流量&#xff0c;確保網絡安全。以下是防火墻共性檢測技術的詳細介紹&#xff0c;包…

axios的基本使用和vue腳手架自帶的跨域問題解決

axios的基本使用和vue腳手架自帶的跨域問題解決 1. axios 1.1 導入axios npm i axios1.2 創建serve1.js serve1.js const express require(express) const app express()app.use((request,response,next)>{console.log(有人請求服務器1了);console.log(請求來自于,re…

go Channel 原理 (一)

Channel 設計原理 不要通過共享內存的方式進行通信&#xff0c;而是應該通過通信的方式共享內存。 在主流編程語言中&#xff0c;多個線程傳遞數據的方式一般都是共享內存。 Go 可以使用共享內存加互斥鎖進行通信&#xff0c;同時也提供了一種不同的并發模型&#xff0c;即通…

npm ci vs npm i

npm ci vs npm i 幾個關鍵區別&#xff1a;該選擇哪個&#xff1f; 通過 npm ci 和 npm i 兩個命令&#xff0c;都可安裝項目的依賴。那么這兩個命令有什么區別呢&#xff1f; 幾個關鍵區別&#xff1a; 目的和用途&#xff1a; npm ci &#xff1a;根據項目中的 package-lock…

AI奏響未來樂章:音樂界的革命性變革

AI在創造還是毀掉音樂 引言 隨著科技的飛速發展&#xff0c;人工智能&#xff08;AI&#xff09;正在逐漸滲透到我們生活的每一個角落&#xff0c;音樂領域也不例外。AI技術的引入&#xff0c;不僅為音樂創作、教育、體驗帶來了革命性的變革&#xff0c;更為整個音樂產業注入了…

順序表應用——通訊錄

在本篇之前的順序表專題我們已經學習的順序表的實現&#xff0c;了解了如何實現順序表的插入和刪除等功能&#xff0c;那么在本篇當中就要學習基于順序表來實現通訊錄&#xff0c;在通訊錄當中能實現聯系人的增、刪、查改等功能&#xff0c;接下來就讓我們一起來實現通訊錄吧&a…

grpc學習golang版( 五、多proto文件示例 )

系列文章目錄 第一章 grpc基本概念與安裝 第二章 grpc入門示例 第三章 proto文件數據類型 第四章 多服務示例 第五章 多proto文件示例 第六章 服務器流式傳輸 第七章 客戶端流式傳輸 第八章 雙向流示例 文章目錄 一、前言二、定義proto文件2.1 公共proto文件2.2 語音喚醒proto文…

解決Vue3項目中跨域問題的步驟

決Vue3項目中跨域問題的步驟可以按照以下方式清晰地分點表示和歸納&#xff1a; 1. 使用代理服務器&#xff08;Proxy&#xff09; 步驟&#xff1a; 在Vue項目的根目錄下找到或創建vue.config.js文件。在vue.config.js中配置devServer的proxy選項。設定需要代理的接口前綴&a…

基于局域網下的服務器連接、文件傳輸以及內網穿透教程 | 服務器連接ssh | 服務器文件傳輸scp | 內網穿透frp | 研究生入學必備 | 深度學習必備

&#x1f64b;大家好&#xff01;我是毛毛張! &#x1f308;個人首頁&#xff1a; 神馬都會億點點的毛毛張 &#x1f4cc;本篇博客分享的是基于局域網下的服務器連接&#x1f517;、文件傳輸以及內網穿透教程&#xff0c;內容非常完備?&#xff0c;涵蓋了在服務器上做深度學…

樹莓派3B讀寫EEPROM芯片AT24C256

AT24C256是一個Atmel公司的EEPROM存儲芯片&#xff0c;容量是256K個bit&#xff08;也就是32K字節&#xff09;&#xff0c;I2C接口&#xff0c;而樹莓派正好有I2C接口&#xff0c;如下圖藍框中的4個IO口&#xff0c; 把AT24C256和這4個口接在一起&#xff0c;這樣硬件就準備好…

Django 頁面展示模型創建表的數據

1&#xff0c;添加視圖函數 Test/app8/urls.py from django.shortcuts import render from .models import Userdef create_user(request):if request.method POST:username request.POST.get(username)email request.POST.get(email)# ... 獲取其他字段的值# 創建用戶實例…

【Python學習篇】Python實驗小練習——異常處理(十三)

個人名片&#xff1a; &#x1f393;作者簡介&#xff1a;嵌入式領域優質創作者&#x1f310;個人主頁&#xff1a;妄北y &#x1f4de;個人QQ&#xff1a;2061314755 &#x1f48c;個人郵箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;個人微信&#xff1a;Vir2025WB…

【教程】5分鐘直接了解隨機森林模型

本文來自《老餅講解-BP神經網絡》https://www.bbbdata.com/ 目錄 一、什么是隨機森林模型1.1.隨機森林模型介紹1.2.為什么隨機森林要用多棵決策樹 二、怎么訓練一個隨機森林模型2.1.訓練一個隨機森林模型 隨機森林模型是機器學習中常用的模型之一&#xff0c;它是決策樹模型的一…

Node.js全棧指南:靜態資源服務器

上一章【認識 MIME 和 HTTP】。 我們認識和了解了 MIME 的概念和作用&#xff0c;也簡單地學習了通過瀏覽器控制臺查看請求和返回的用法。 通過對不同的 HTML、CSS、JS 文件進行判斷&#xff0c;設置不同的 MIME 值&#xff0c;得以讓我們的瀏覽器正正確地接收和顯示不同的文…

八爪魚現金流-031,寬帶到期記一筆負債

到期了&#xff0c;新弄的網絡&#xff0c;記錄一下負債包。 八爪魚現金流 八爪魚

英英詞典(匯編實驗)

功能要求&#xff1a; 1.單詞及其英文解釋的錄入、修改和刪除 (1 ) 錄入新單詞&#xff0c;把它插入到相應的位置(按詞典順序)&#xff0c;其后跟英文解釋、同義詞、反義詞&#xff1b;&#xff08;此功能要求在文件中完成&#xff0c;其它功能可以將單詞放在數據段中&#xf…