閱讀筆記-Deformable DETR: Deformable transformers for end-to-end object detection

作者團隊:商湯,中科大,港中文
來源:arXiv:2010.04159v2
代碼:https://github.com/fundamentalvision/Deformable-DETR

title

摘要

這篇文章主要針對的是DETR收斂速度較慢以及空間分辨率因計算資源受限問題,提出使用deformable cnn的方式以臨近區域采樣計算attention取代transformer中全局的self-attention,提升了收斂速度并獲得超于DETR的檢測性能,尤其是小目標上。

簡介

DETR是第一個完全端到端的目標檢測器。

DETR存在的問題:

  1. 需要較長的訓練周期才能收斂;
  2. 在小目標上的檢測性能較差。主要是因為小目標需要大分辨率,而大分辨率帶來DETR難以接受的計算復雜度。

(個人感悟:其實DETR文章中的Figure7可以發現,queries具有一定的位置識別功能,也就是說類似于yolo中統計獲得anchors尺寸,detr訓練過程中實現了目標可能存在位置的統計與分配,顯然收斂時間更長,另外全局的attention遍歷消耗較大,而detr中需要兩次該計算(一次encoder中的self-attention,一次decoder中的cross-attention))

deformable convolution可以有效地利用稀疏局部位置。dcn一方面能通過改變感受野平衡不同尺寸的目標,且僅計算局部位置信息能提升計算速度,但其缺少刻畫元素之間關系的能力。

于是本文將dcn 和 transformer結合,提出了deformable DETR,能夠獲得較快的收斂速度以及更好的檢測性能。其核心是使用deformable attention 模塊取代transformers attention 模塊,如圖1所示,對于關鍵點的特征使用期鄰近較小集合內的元素進行相關性刻畫。


deformable detr

除此之外,本文還提出了兩種提升檢測性能的策略:迭代標定框細化策略 和兩階段deformable DETR。

相關工作

注意力機制。Transformers同時使用了自注意力機制和互注意力機制。最初的transformers時間消耗較大且需要的空間存儲也較大導致很難推廣。目前對其的改進分為三類:

  1. 使用預先定義的稀疏的key上注意力模式。其主要思路就是降低key的個數,比如fixed local window和網格狀key點等;
  2. 學習數據依賴型稀疏注意力模式。典型做法包括對key值進行聚類等
  3. 探索self-attention本身具有的低秩特性。

另外一些變形的卷積操作,比如deformable和dynamic cnn都可以視為一種self-attention機制,只是其沒有顯式刻畫元素之間的關系。
本文提出的deformable attention 模塊思想源于deformable cnn,屬于第二類,即由數據驅動獲得對應的keys,(其實也不完全正確,因為deformable cnn也是提前限制了keys的大概范圍,所以也有點類似第1種)。deformable attention模塊僅從特征圖中queries的鄰域內預測固定數量的采樣點計算attention。

目標檢測中的多尺度問題。一般來說都是采用多尺度特征解決該問題,比如FPN網絡等,本文提出的多尺度deformable attention模塊能夠自主的通過注意力機制聚合多尺度特征圖,而不需要特征金字塔網絡。

Transformers 和DETR回顧

transformers中的多頭注意力機制,每個head單獨刻畫queries與keys之間的注意力加權,然后通過權重線性加權獲得最終的輸出,計算如下:

Eq.1

其中W_m'x_k是對key元素的編碼, A_{mqk}是第k個key元素的權重,總共有|\Omega_k|個key值,所以A_{mqk}是歸一化的權重向量,正比于exp\{\frac{z_q^TU_m^TV_mx_k}{\sqrt{C_v}}\}, z_q即query的特征向量。為了區分不同的位置,z_q, x_k一般是內容特征和位置編碼的聚合。

Transformers具有兩個顯著的問題。1.較長的收斂周期。考慮一個最基本的問題,假設keys初始化時是獨立同分布的,那么每個key的attention權重應該為1/N_k, N_k為key的個數,而針對于圖像則是featmap中像素點的個數,于是讓attention學習出具有顯著性的特征向量就需要大量的訓練迭代。

另一方面,query和key的數量嚴重影響了多頭注意力模塊的計算和存儲。公式1中的計算復雜度為O(N_qC^2+N_k^2+N_qN_kC),對于圖像而言,N_q, N_k可以認為是圖像像素點,于是多頭注意力機制的計算復雜度近似于feature map尺寸的平方。

DETR是建立在transformer 編解碼結構上的一個框架,他首先利用匈牙利算法獲得預測與gt的最佳匹配,然后再匹配基礎上進行loss約束。

給定一張backbone提取的特征圖, DETR利用標準的transformer的編解碼器將其轉換為若干queries的特征集合,然后在該特征基礎上使用一個3層的前饋網絡和一個線性層分別進行box的回歸和類別的估計。

對于DETR而言,其encoder中self-attention的計算復雜度為O(H^2W^2C), 其decoder中cross-attention的計算復雜度為O(HWC^2+NHWC), self-attention的計算復雜度為N^2C+2NC^2, 顯然復雜度主要來源于encoder的輸入和輸出的特征圖尺寸。

方法

deformable attention module

一個公式就能看懂:

Eq.2

對比公式1就可以發現,這里主要不同在于k的取值有原先的整個集合\Omega_k具體為K個近鄰點,而每個近鄰點的位置通過\delta p_{mqk}學習獲得,另外A_{mqk}也是由數據直接網絡生成并進行softmax生成。


deformAttn和self-attention的不同點:

  • self attention是全局特征作為key值, 而deformAttn是在每個query附近自主學習K個key值
  • self attention中的權重是key和queries對的關系刻畫,比如內積等,而deformAttn則是直接由線性層獲得。

deformAttn位置選擇和deformable cnn的不同點:deformable cnn是在正常的cnn kernel點上分別預測偏移量,而deformAttn則是在當前一個點上直接預測多個偏移量。


多尺度的deformable attention模塊。

直接看公式:

Eq.3

其中l表示不同的尺度層,\phi_l(\cdot)表示將對應位置映射到第l層,可以發現和公式2相比,不同點在于公式2中從單層生成了K個點,而公式3是每層產生K個點,生成LK個采樣位置,然后進行聚合。另外W_m還是每層共享的。

Deformable Transformer Encoder

通過可形變注意力模塊,作者直接將其替換transformer注意力模塊,每個encoder的輸入輸出都是相同分辨率的多尺度特征圖,這里分辨率是指相同尺度下不同encoder的輸入。多尺度的特征圖直接來自ResNet的最后3個stage,而沒有使用FPN,因為多尺度可形變注意力模塊本身能夠融合交換不同scale的信息
對于query像素位置,除了position信息外,還融合了該query所在的level,即\{e_l\}_{l=1}^L

可行變transformer解碼器

在解碼器中除了self-attention還有cross-attention。因為deformable attention作用在卷積層上,因此這里只有cross-attention可以被替代,而self-attention則保持不變。對于每一個object query,由線性層和sigmoid學習出其對應的參考點的2d歸一化坐標,然后即可以使用deformable attention操作。

另外deformable DETR又把DETR拉回了相對坐標回歸的路子,預測box時回歸的是相對于參考點的距離,能夠加快收斂。

Deformable DETR的其他改進和變種

Iterative Bounding Box Refinement 針對于多個decoder,每個decoder的輸入是前一層的decoder的輸出
兩階段deformable DETR: DETR中的queries是隨機初始化的,而兩階段方式則是由Deformable DETR的變種生成初始的候選queries。在第一階段,移除Deformable DETR中的decoder模塊,僅使用encoder模塊,每個像素位置都作為queries,直接預測box,然后選擇score最大的box作為候選位置。其實第一階段就有點類似于無錨框單階段檢測思路。

實驗

執行細節

多頭注意力機制M=8,不同的scale K=4. 不同level的特征的encoder共享參數。adam優化器2x1e-4訓練50個epoch, queries的個數從100增加到300. Focal Loss權重變為2.

DETR的比較

comparision of DDETR with DETR

DC5表示對resnet網絡最后一層stride以及空洞卷積保持分辨率的修改。DC5+表示已當前的訓練設置相同設置DETR模型訓練結果。
可以發現Deformable DETR的最大貢獻點在于訓練周期的大幅縮短以及對小目標精度的提升。

這應該來自于兩點:1. 可形變卷積提到全局attention,減少了運算量;2.多尺度融合能夠處理不同分辨率的目標;

另外還可以發現兩個變種模型,性能提升都比較明顯,表明先驗知識其實有利于模型的精度,這應該是顯然的,因為學習這種比較發散的統計規律精度還是沒有專門給的先驗好。


MS inputs: 表示多尺度輸入,即不同的尺度的feature map獨立的輸入到encoder中,相當于每個尺度的feature map都經過detr有該尺度本身的預測。
MS attention:多尺度的deformable attention,相當于不同尺度的feature map具有一定的融合輸入到encoder中。
K: 表示每層feature map中deformable cnn采樣的點的個數。

這里有點困惑的是實驗沒有對比 MSinputs +FPN而不使用MS attention的參照組,第一行和最后一行只能說明FPN不能進一步提升,沒說單獨使用FPN和單獨使用MS attention的對比。

和SOTA方法的對比

image.png

總結

本工作是對DETR的一種改進。重要的點包括:使用deformable cnn的思想實現local attention替代了全局的attention,這個模塊感覺對于檢測任務或者分割任務是比較有用的,但對于圖像分類這種任務估計作用不是很大。另外就是multi-scale特征在encoder中通過deformable attention進行了融合,避免了FPN結構。當然本文還提出了一些更進一步的變種,比如迭代策略和兩階段策略。這兩種策略的本質都是引入了更好的先驗知識,所以性能能進一步的提升。

Deformable DETR的最實際的作用是大大縮短了網絡的訓練周期。讓個人煉丹也能跑動。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容