2021年ICLR的一篇文章
一、Introduction
DETR的缺點:
1、模型很難收斂,訓練困難。相比於現存的檢測器,他需要更長的訓練時間來收斂,在coco數據集上,他需要500輪來收斂,是faster r-cnn的10到20倍;
2、DETR在小物體檢測上性能較差。現存的檢測器通常帶有多尺度的特征,小物體目標通常在高分辨率特征圖上檢測,而DETR沒有采用多尺度特征來檢測,主要是高分辨率的特征圖會對DETR增加不可接受的計算復雜度。
基於此,提出了Deformable DETR模型,deformable detr結合了deformable conv的空間稀疏采樣優勢和transformer的元素間關系建模能力。detr的計算復雜性來自於其中的transformer結構在全局上下文中的注意力計算,而且作者注意到,盡管這種注意力是在全局上下文中計算的,但最終某一個視覺元素只會與很小一部分其他視覺元素通過權重建立起強的聯系。
因此deformable detr不再采用全局的注意力計算,只計算reference point周圍一小部分點的注意力,而不是計算全局的,這樣可以減少計算量,加快收斂速度。
二、Model
(一)Multi-Scale Features & Scale-Level Embedding
DETR使用的是單尺度特征,作者參考以往模型也采用了多尺度的特征來增強檢測效果,特別是小目標的檢測效果。但並不采取FPN中的特征融合結構,因為deformable attention的方式可以自行的融合不同尺度的特征。
上圖是作者對多尺度特征圖的選取和處理過程,選擇backbone中的C3 C4 C5三個特征層的輸出,通過1*1卷積將通道數目都減少到256,另外C5還進行一次3 * 3卷積得到分辨率最低的特征圖。右側四個特征圖后續會作為Input。
DETR僅用了單尺度特征,於是對於特征點位置信息的編碼,使用的是三角函數,不同位置的特征點會對應不同的編碼值。但deformable detr使用的是多尺度特征,位於不同特征層的特征點可能擁有相同的(w,h)坐標,原來的位置編碼已經不足以表征多尺度特征圖上元素的位置信息了。
對於此,作者提出了一個scale-level embedding,僅用於區分不同特征層,同一特征層中的所有特征點會對應相同的scale-level embedding。它不是利用固定公式算出來的編碼,而是隨機初始化后跟隨網絡一起訓練的,是可學習的。
在實際使用時,這個 scale-level embedding 與基於三角函數公式計算的 position embedding 相加在一起作為位置信息的嵌入。
(二)Deformable Attention(& Multi-Scale)
上圖是detr中使用的原版的nulti-head attention,omega_k代表key的集合,A是注意力圖,M代表head集合,z是query的輸入特征,x是key和value的輸入特征。
這個是本文的deformable attention的公式,與multi-head attention的不同之處是后面的p_g和delta_p_mqk,p_g是reference point,而delta_p_mqk是采樣點相對於reference point的偏移位置。
具體過程見下圖(圖是單尺度的圖,公式是多尺度的公式):
(在self-attention中,根據輸入特征 I 計算q(【N_q ×C】)、k(【N_k × C】)、v(【HW × C】),然后某一個q與所有的k結合,計算出attention,attention再與所有的v結合,計算得到output。其中k v的shape一般是一樣的,因為我們計算完attention之后需要與k對應的v計算輸出,而q與輸出的shape有關,每個q負責采樣k個位置,再與k個value結合得到q對應的那個輸出。)
上圖中,z【N_q×C】是query的輸入特征,在encoder部分的attention模塊中N_q=HW即特征圖大小,z_q為第q個query所對應的向量,分別通過線性映射、線性映射+softmax,得到采樣點偏移和注意力權重(這里的注意力權重不是由q和k計算得來的,而是直接由query的輸入特征計算來的,之所以可以這么做,是因為這里的referece point是z_q本身的位置,采樣點是reference point加上偏移,而偏移也是由z_q計算得來的,所以采樣點的位置是與z_q相關聯的,那么根據采樣點位置采樣插值出來的特征自然就能夠和通過query經過線性變換得到的注意力權重對應起來了)。encoder部分,參考點就是z_q自己對應的位置;decoder部分,reference point是由預設的object query經過全連接層和sigmoid歸一化得到的。x【HW×C】是value的輸入特征,乘以轉化矩陣wm'后得到value矩陣。
歸一化后的參考點坐標與歸一化后的采樣點偏移相加,得到采樣點的位置,根據采樣點位置,使用雙線性插值的方法(因為得到的采樣點坐標不一定是整數值,所以采用雙線性插值來采樣)提取出value矩陣中對應的采樣點value值,對其施加注意力權重,得到最終輸出。
擴展到多尺度時,與上面過程是一樣的,只是每個head需要處理來自四個特征層的采樣點,上圖是多尺度條件下的公式。
下圖是各個量的shape:
下圖是各個模塊之間的關系,可以深入理解一下:
(三)總體的deformable detr結構
DETR
Encoder部分:將attention模塊全部換成multi-scale deformable attention,encoder的輸入輸出均為多尺度的feature map,保持相同的分辨率;
Decoder部分:有cross-attention和self-attention兩種模塊,只把cross-attention替換為multi-scale deformable attention,self-attention保留不變。cross attention中的參考點,是由object query【300×C】經過線性映射+sigmoid得到的。
檢測頭部輸出的是參考點的偏移量,文中說這樣可以降低一些訓練難度。
三、Experiments
Deformable detr大約只需要detr的1/10的epoch就可以收斂;
識別精度相較於detr來說也有比較明顯的提高,尤其是在小目標上;
計算量上並沒有明顯提升;
推理時間有較明顯提高。