DETR : End-to-End Object Detection with Transformers

Paper : https://arxiv.org/abs/2005.12872

Code : https://github.com/facebookresearch/detr

預備知識

Transformer,二分圖匹配(匈牙利算法),GIoU 損失

整體思路

通過 CNN 提取目標特徵 ( C × H × W C×H×W ),使用 1x1 卷積降維 d × H × W d×H×W , 隨後把特徵轉換爲序列 ( d × H W d×HW ) 輸入到 Transformer Encoder 中,使用學習的 N 個 object query 和 Encoder 的輸出作爲 Transformer Decoder 的輸入得到 N 解碼結果,然後把這 N 個解碼結果通過前饋網絡直接得到相對座標的預測以及類別。

創新點

  1. 真正的端到端,沒有複雜的 anchor 設計和 後處理 NMS
  2. 使用學習的 object query 加到解碼器的每一個 Attention 層
  3. 在 Decoder 部分直接固定輸入和輸出的長度 N,可以並行處理
  4. 最後預測的文本框與標註框使用匈牙利算法得到最佳二分圖匹配,然後計算損失

缺點 在小目標上的檢測效果不佳,需要改進

應用 這樣的結構在文本檢測方面是否可行,可以嘗試一下

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-o9epcjyQ-1594380002523)(./images/DETR-pipeline.png)]在這裏插入圖片描述

1. Object detection set prediction loss

N 個預測,N 大於一張圖像中的目標的數量。在預測和標註之間產生一個最優二分匹配,然後優化特徵目標(bbox)的損失。

  1. 首先找到最優二分匹配,一個預測框對應一個GT框

    y y 是 N 個 GT 目標集,沒有目標的用 \emptyset 表示, y ^ \hat{y} 是 N 個預測目標集,尋找最優二分匹配
    σ ^ = arg min σ S N i K L m a t c h ( y i , y ^ σ ( i ) ) (1) \hat{\sigma} = \mathop{\text{arg min}}_{\sigma \in \mathfrak{S}_N} \sum_i^K \mathcal{L}_{match} (y_i, \hat{y}_{\sigma(i)}) \tag{1}
    L m a t c h ( y i , y ^ σ ( i ) ) \mathcal{L}_{match}(y_i,\hat{y}_{\sigma(i)}) 是在GT y i y_i 和索引爲 σ ( i ) \sigma(i) 預測的匹配損失,最優匹配使用匈牙利(Hungarian)算法計算。

    匹配損失同時考慮了類別預測以及預測的和 GT 的相似性。GT 的每一個元素 i i 都可以看做 y i = ( c i , b i ) y_i = (c_i, b_i) c i c_i 是類標籤(可能爲空), b i [ 0 , 1 ] 4 b_i \in [0,1]^4 是一個向量,使用 GT box 相對圖像大小的中心座標和高寬表示。對於 σ ( i ) \sigma(i) 的預測,類標籤 c i c_i 概率定義爲 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}(c_i) ,預測框爲 b ^ σ ( i ) \hat{b}_{\sigma(i)} L m a t c h ( y i , y ^ σ ( i ) ) \mathcal{L}_{match} (y_i, \hat{y}_{\sigma(i)}) 定義爲 在這裏插入圖片描述

  2. 計算對應框的損失

    在這裏插入圖片描述

    L b o x ( ) \mathcal{L}_{box}(\cdot) 使用 L1 損失和 廣義 IoU 損失 L i o u ( , ) \mathcal{L}_{iou}(\cdot, \cdot) ,則
    L b o x ( b i , b ^ σ ( i ) ) = λ i o u L i o u ( b i , b ^ σ ( i ) ) + λ L 1 b i b ^ σ ( i ) 1 (3) \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 \tag{3}
    這兩個損失通過批次內的目標數量標準化。

2. DETR architecture

一個CNN backbone提取特徵表示,Transformer,前饋網絡做最終的預測

Backbone

使用 CNN backbone 生成低分辨率的特徵圖 f = R C × H × W , C = 2048 , H , W = H 0 32 , W 0 32 f = \Bbb{R}^{C×H×W}, C=2048, H,W=\frac{H_0}{32}, \frac{W_0}{32}

Transformer encoder

使用 1 × 1 1×1 卷積減少特徵圖 f f 的通道數,從 C C 減少到 d d ,得到新特徵圖 z 0 R d × H × W z_0 \in \Bbb{R}^{d×H×W} . 由於encoder的輸入需要是序列,所以把 z 0 z_0 的空間維度摺疊到一個維度上,得到 d × H W d×HW 的特徵圖。

由於 transformer 的體系結構是置換不變性 ( permutation-invariant ),所以給每個 attention 層的輸入加上固定的位置編碼

Transformer decode

與原始模型的區別在於論文的模型在每個解碼器層並行解碼 N 個目標。

因爲解碼器也是置換不變的,所以 N 個輸入也加上了位置編碼,不過這裏的位置編碼是通過學習的,論文中叫 object query,也是在每個 attention 層上都加。

Prediction feed-forward networks ( FFNs )

預測框相對於輸入圖像的中心點座標,高和寬。線性層使用 softmax 函數預測類別。

DETR’s transformer

在這裏插入圖片描述

預測目標的可視化解碼注意力

在這裏插入圖片描述

3. DETR for panoptic segmentation

在這裏插入圖片描述

每個目標的 transformer 解碼器的輸出作爲輸入,在編碼器的輸出上計算該嵌入的多頭(M頭)注意力得分,爲每個目標生成 M 個低分辨率的注意力熱圖。爲了生成最後的預測和增加分辨率,使用了類 FPN 的結構。爲了預測全景分割,簡單的在每個像素上使用了 argmax 計算掩模分數,把對應的類別用於結果掩模。

在推理階段,首先過濾掉置信度小於 0.85 的檢測框,然後再計算每個像素的 argmax,決定每個像素屬於哪個mask。然後把屬於同一類別的不同 mask 合併,過濾掉空 mask (少於4個像素)。