Paper : https://arxiv.org/abs/2005.12872
Code : https://github.com/facebookresearch/detr
預備知識
Transformer,二分圖匹配(匈牙利算法),GIoU 損失
整體思路
通過 CNN 提取目標特徵 (
C×H×W ),使用 1x1 卷積降維
d×H×W, 隨後把特徵轉換爲序列 (
d×HW ) 輸入到 Transformer Encoder 中,使用學習的 N 個 object query 和 Encoder 的輸出作爲 Transformer Decoder 的輸入得到 N 解碼結果,然後把這 N 個解碼結果通過前饋網絡直接得到相對座標的預測以及類別。
創新點
- 真正的端到端,沒有複雜的 anchor 設計和 後處理 NMS
- 使用學習的 object query 加到解碼器的每一個 Attention 層
- 在 Decoder 部分直接固定輸入和輸出的長度 N,可以並行處理
- 最後預測的文本框與標註框使用匈牙利算法得到最佳二分圖匹配,然後計算損失
缺點 在小目標上的檢測效果不佳,需要改進
應用 這樣的結構在文本檢測方面是否可行,可以嘗試一下
1. Object detection set prediction loss
N 個預測,N 大於一張圖像中的目標的數量。在預測和標註之間產生一個最優二分匹配,然後優化特徵目標(bbox)的損失。
-
首先找到最優二分匹配,一個預測框對應一個GT框
y 是 N 個 GT 目標集,沒有目標的用
∅ 表示,
y^ 是 N 個預測目標集,尋找最優二分匹配
σ^=arg minσ∈SNi∑KLmatch(yi,y^σ(i))(1)
Lmatch(yi,y^σ(i)) 是在GT
yi 和索引爲
σ(i) 預測的匹配損失,最優匹配使用匈牙利(Hungarian)算法計算。
匹配損失同時考慮了類別預測以及預測的和 GT 的相似性。GT 的每一個元素
i 都可以看做
yi=(ci,bi) ,
ci 是類標籤(可能爲空),
bi∈[0,1]4 是一個向量,使用 GT box 相對圖像大小的中心座標和高寬表示。對於
σ(i) 的預測,類標籤
ci 概率定義爲
p^σ(i)(ci) ,預測框爲
b^σ(i) 。
Lmatch(yi,y^σ(i)) 定義爲
-
計算對應框的損失
Lbox(⋅) 使用 L1 損失和 廣義 IoU 損失
Liou(⋅,⋅) ,則
Lbox(bi,b^σ(i))=λiouLiou(bi,b^σ(i))+λL1∣∣bi−b^σ(i)∣∣1(3)
這兩個損失通過批次內的目標數量標準化。
2. DETR architecture
一個CNN backbone提取特徵表示,Transformer,前饋網絡做最終的預測
Backbone
使用 CNN backbone 生成低分辨率的特徵圖
f=RC×H×W,C=2048,H,W=32H0,32W0
Transformer encoder
使用
1×1 卷積減少特徵圖
f 的通道數,從
C 減少到
d,得到新特徵圖
z0∈Rd×H×W . 由於encoder的輸入需要是序列,所以把
z0 的空間維度摺疊到一個維度上,得到
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個像素)。