DETR:Facebook提出基於Transformer的目標檢測新範式,性能媲美Faster RCNN | ECCV 2020 Oral

DETR基於標準的Transorfmer結構,性能能夠媲美Faster RCNN,而論文整體思想十分簡潔,希望能像Faster RCNN為後續的很多研究提供了大致的思路

來源:曉飛的演算法工程筆記 公眾號

論文: End-to-End Object Detection with Transformers

Introduction


  之前也看過一些工作研究將self-attention應用到視覺任務中,比如Stand-Alone Self-Attention in Vision ModelsOn the Relationship between Self-Attention and Convolutional Layers,但這些方法大都只是得到與卷積類似的效果,還沒有很出彩的表現,而DETR基於transformer顛覆了主流目標檢測的做法,主要有三個亮點:

  • Standard Transformer,DETR採用標準的Transformer和前向網路FFN進行特徵的處理以及結果的輸出,配合精心設計的postion encoding以及object queries,不需要anchor,直接預測bbox坐標以及類別。
  • Set prediction,DETR在訓練過程中使用匈牙利排序演算法將GT和模型預測結果一一對應,使得在推理時的模型預測結果即為最終結果,不需要後續的NMS操作。
  • 目標檢測性能超越了經典的Faster RCNN,打開了目標檢測研究的新路線,並且DETR也能改裝應用於全景分割任務,性能也不錯。

The DETR model


DETR architecture

  DETR的整體架構很簡單,如圖2所示,包含3個主要部分:CNN主幹、encoder-decoder transformer和簡單的前向網路(FFN)。

  • Backbone

  定義初始圖片x_{img} \in \mathbb{R}^{3\times H_o\times W_o},使用常規的CNN主幹生成低解析度特徵圖f\in \mathbb{R}^{C\times H\times W},論文採用C=2048以及H,W=\frac{H_o}{32}, \frac{W_o}{32}

  • Transformer encoder

  先用$1\times 1卷積將輸入降至較小的維度d,得到新特徵圖z_o \in \mathbb{R}^{d\times H\times W},再將特徵圖z_o空間維度摺疊成1維,轉換為d\times HW$的序列化輸入。DETR包含多個encoder,每個encoder都為標準結構,包含mullti-head self-attention模組和前向網路FFN。由於transformer是排序不變的,為每個attention層補充一個固定的位置encoding輸入。

  • Transformer decoder

  decoder也是transformer的標準結構,使用multi-head self-attention模組和encoder-decoder注意力機制輸出N個大小為d的embedding,唯一不同的是DETR並行地decode N個目標,不需要自回歸的機制。由於decoder也是排序不變的,採用學習到的位置encdoing(等同於anchor)作為輸入,稱為object queries。類似於encoder,將位置encoding輸入到每個attention層,另外還有空間位置encoding,見圖10。decoder將N個object queries轉換為N個輸出embedding,然後獨立地解碼成box坐標和class標籤,得到N個最終的預測結構。由於了使用self-attention以及encoder-decoder注意力機制,模型能夠全局地考慮所有的目標。

  • Prediction feed-forward networks (FFNs)

  使用帶ReLU激活的3層感知機以及線性映射層來解碼得到最終的預測結果,感知機的隱藏層維度為d。FFN預測N個歸一化的中心坐標、高度、寬度以及softmax後的類別得分,由於N一般大於目標個數,所以使用特殊的類別\emptyset來標記無預測目標,類似於背景類。需要注意,最後用於輸出的FFN與encoder和decoder里的FFN是不一樣的。

  • Auxiliary decoding losses

  論文發現對decoder使用輔助損失進行訓練十分有效,特別是幫助模型輸出正確的目標個數,所以在每個decoder層添加FFN和Hugarian loss,所有的FFN共享參數,另外也使用了共享的layer-norm來歸一化FFN的輸入。

Object detection set prediction loss

  DETR輸出固定的N個預測結果,最大的困難在於根據GT對預測結果進行評分,需要先找到預測結果和GT的對應關係。定義y為GT集合,大小為N,缺少的用\emptyset填充,\hat{y}=\{ \hat{y}_i\}^N_{i=1}為預測結果,為了最好地匹配GT和預測結果,使用匈牙利演算法(二部圖匹配方法)找到能夠最小化匹配損失的最優排列方法\sigma

\mathcal{L}_{match} (y_i, \hat{y}_{\sigma(i)})=-\Bbb{1}_{\{c_i \ne \emptyset\}}\hat{p}_{\sigma(i)}(c_i)+1_{\{c_i \ne \emptyset \} } \mathcal{L_{box}}(b_i, \hat{b}_{\sigma(i)})為排序後GT-預測結果對的匹配損失,匹配損失考慮類別預測以及bbox的相似度。y_i=(c_i, b_i)為GT,其中c_i為類別,b_i\in [0, 1]^4為相對於圖片大小的坐標向量(x, y, hetight, weight),\hat{p}_{\sigma(i)}(c_i)\hat{b}_{\sigma(i)}分別為預測的類別置信度和bbox。這裡的匹配過程類似於目前檢測演算法中anchor和GT的匹配邏輯,而區別在於這裡的預測結果和GT是一一對應的。
  在找到最優排列方法\hat{\sigma}後,計算Hungarian loss:

  在實現時,考慮分類不均衡,對c_i=\emptyset的分類項降權10倍。
  與普通的目標檢測方法預測bbox的差值不同,DETR直接預測bbox的坐標。雖然這個方法實現很簡單,但計算損失時會受目標尺寸的影響,論文採用線性\mathcal{l}_1損失和IoU損失來保證尺度不變,bbox損失\mathcal{L}_{box}(b_i, \hat{b}_{\sigma (i)})\lambda_{iou}\mathcal{L}_{iou}(b_i, \hat{b}_{\sigma(i)})+\lambda_{L1} || b_i – \hat{b}_{\sigma(i)} ||_1,bbox損失需要用正樣本數進行歸一化。

Experiments


  DETR性能超越了經典的Faster RCNN。

  探究encoder層數對性能的影響

  每層decoder輸出進行預測的準確率,可以看到逐層遞增。

  位置embedding方式對性能的影響,這裡的spatial pos對應圖10的spatial positional encoding,而output pos則對應圖10的Object queries。

  損失函數對性能的影響。

DETR for panoptic segmentation


  DETR也可以在decoder的輸出接一個mask head來進行全景分割任務,主要利用了DETR模型的特徵提取能力。

  與當前主流模型的全景分割性能對比。

Conclustion


  DETR基於標準的Transorfmer結構,性能能夠媲美Faster RCNN,而論文整體思想十分簡潔,希望能像Faster RCNN為後續的很多研究提供了大致的思路。



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】

work-life balance.