丟棄Transformer,全卷積網路也可以實現E2E檢測

机器之心發表於2020-12-09
目標檢測是計算機視覺領域的一個基礎研究主題,它利用每張影像的預定義類標籤來預測邊界框。大多數主流檢測器使用的是基於錨的標籤分配和非極大值抑制(NMS)等手動設計。近來,很多研究者提出方法透過距離感知和基於分佈的標籤分類來消除預定義的錨框集。儘管這些方法取得了顯著的進展和優越的效能,但拋棄手動設計的 NMS 後處理可能阻礙完全的端到端訓練。

基於這些問題,研究人員相繼提出了 Learnable NMS、Soft NMS 和 CenterNet 等,它們能夠提升重複刪除效果,但依然無法提供有效的端到端訓練策略。之後,Facebook AI 研究者提出的 DETR 將 Transformer 用到了目標檢測任務中,還取得了可以媲美 Faster R-CNN 的效果。但是,DETR 的訓練時間卻大大延長,在小目標上的效能也相對較低。

所以,在本文中,來自曠視科技和西安交通大學的研究者提出了一個新穎問題:全卷積網路是否可以實現良好的端到端目標檢測效果?並從標籤分配和網路架構兩個方面回答並驗證了這一問題。

丟棄Transformer,全卷積網路也可以實現E2E檢測


  • 論文連結:https://arxiv.org/pdf/2012.03544.pdf

  • 專案程式碼:https://github.com/Megvii-BaseDetection/DeFCN (內部程式碼遷移 + 審查中,後續放出)


具體而言,研究者基於 FCOS,首次在 dense prediction 上利用全卷積結構做到 E2E,即無 NMS 後處理。研究者首先分析了常見的 dense prediction 方法(如 RetinaNet、FCOS、ATSS 等),並且認為 one-to-many 的 label assignment 是依賴 NMS 的關鍵。受到 DETR 的啟發,研究者設計了一種 prediction-aware one-to-one assignment 方法。

此外,研究者還提出了 3D Max Filtering 以增強 feature 在 local 區域的表徵能力,並提出用 one-to-many auxiliary loss 加速收斂。本文方法基本不修改模型結構,不需要更長的訓練時間,可以基於現有 dense prediction 方法平滑過渡。本文方法在無 NMS 的情況下,在 COCO 資料集上達到了與有 NMS 的 FCOS 相當的效能;在代表了密集場景的 CrowdHuman 資料集上,本文方法的 recall 超越了依賴 NMS 方法的理論上限。

整體方法流程如下圖所示:

丟棄Transformer,全卷積網路也可以實現E2E檢測


One-to-many vs. one-to-one

自 anchor-free 方法出現以來,NMS 作為網路中最後一個 heuristic 環節,一直是實現 E2E dense prediction 的最大阻礙。但其實可以發現,從 RPN、SSD、RetinaNet 等開始,大家一直遵循著這樣一個流程:先對每個目標生成多個預測(one-to-many),再將多個預測去重(many-to-one)。所以,如果不對前一步 label assignment 動刀,就必須要保留去重的環節,即便去重的方法不是 NMS,也會是 NMS 的替代物(如 RelationNet,如 CenterNet 的 max pooling)。

丟棄Transformer,全卷積網路也可以實現E2E檢測


那直接做 one-to-one assignment 的方法是否存在呢?其實是有的。上古時代有一個方法叫 MultiBox,對每個目標和每個預測做了 bipartite matching,DETR 其實就是將該方法的網路換成了 Transformer。此外還有一個大家熟知的方法:YOLO,YOLO 也是對每個目標只匹配一個 grid[1] ,只不過它是採用中心點做的匹配,而且有 ignore 區域。

Prediction-aware one-to-one

於是接下來的問題就是,在 dense prediction 上能不能只依賴 one-to-one label assignment,比較完美地去掉 NMS?研究者首先基於去掉 centerness 分支的 FCOS,統一網路結構和訓練方法,用 Focal Loss + GIoU Loss,做了如下分析實驗:

丟棄Transformer,全卷積網路也可以實現E2E檢測


研究者設計了兩種 hand-crafted one-to-one assignment 方法,分別模仿 RetinaNet(基於 anchor box)和 FCOS(基於 center 點),儘可能做最小改動,發現已經可以將有無 NMS 的 mAP 差距縮小到 4 個點以內。

但研究者認為手工設計的 label assignment 規則會較大地影響 one-to-one 的效能,比方說 center 規則對於一個偏心的物體就不夠友好,而且在這種情況下 one-to-one 規則會比 one-to-many 規則的魯棒性更差。所以認為規則應該是 prediction-aware 的。研究者首先嚐試了 DETR 的思路,直接採用 loss 做 bipartite matching 的 cost[2] ,發現無論是絕對效能還是有無 NMS 的差距,都得到了進一步的改善。

但他們知道,loss 和 metrics 往往並不一致,它常常要為最佳化問題做一些妥協(比如做一些加權等等)。也就是說,loss 並不一定是 bipartite matching 的最佳 cost。因而研究者提出了一個非常簡單的 cost:

丟棄Transformer,全卷積網路也可以實現E2E檢測


看起來稍微有點複雜,但其實就是用網路輸出的 prob 代表分類,網路輸出和 gt 的 IoU 代表迴歸,做了加權幾何平均,再加一個類似於 inside gt box 的空間先驗。加權幾何平均和空間先驗在後面都分別做了 ablation。

這就是研究者提出的 POTO 策略,它進一步地提升了無 NMS 下的效能,也側面驗證了 loss 並不一定是最好的 cost[3]。但從 Table 1 中也發現了,POTO 的效能依舊不能匹敵 one-to-many+NMS 組合。研究者認為問題出在兩個方面:

  1. one-to-one 需要網路輸出的 feature 非常 sharp,這對 CNN 提出了較嚴苛的要求(這也是 Transformer 的優勢);

  2. one-to-many 帶來了更強的監督和更快的收斂速度。


於是分別用 3D Max Filtering 和 one-to-many auxiliary loss 緩解如上問題。

3D Max Filtering

丟棄Transformer,全卷積網路也可以實現E2E檢測


如 Figure 3 所示,這個模組只採用了卷積、插值、max pooling 3d,速度非常快,也不需要寫 cuda kernel。

One-to-many auxiliary loss

針對第二點監督不夠強、收斂速度慢,研究者依舊採用 one-to-many assignment 設計了 auxiliary loss 做監督,該 loss 只包含分類 loss,沒有迴歸 loss。assignment 本身沒什麼可說的,appendix 的實驗也表明多種做法都可以 work。這裡想提醒大家的是注意看 Figure 2 的乘法,它是 auxiliary loss 可以 work 的關鍵。在乘法前的一路加上 one-to-many auxiliary loss,乘法後是 one-to-one 的常規 loss。由於 1*0=0,1*1=1,所以只需要大致保證 one-to-one assignment 的正樣本在 one-to-many 中依然是正樣本即可。

實驗

最主要的實驗結果已經在 Table 1 中呈現了,此外還有一些 ablation 實驗。

丟棄Transformer,全卷積網路也可以實現E2E檢測


這裡 highlight 幾點:

  1. α越低,分類權重越大,有無 NMS 的差距越小,但絕對效能也會降低 [4];α太高也不好,後續所有實驗用α=0.8;

  2. 在α合理的情況下,空間先驗不是必須的,但空間先驗能夠在匹配過程中幫助排除不好的區域,提升絕對效能;研究者在 COCO 實驗中採用 center sampling radius=1.5,在 CrowdHuman 實驗中採用 inside gt box[5];

  3. 加權幾何平均數(Mul)[6]比加權算術平均數(Add)[7]更好。


去掉 NMS 的最大收益其實是 crowd 場景,這在 COCO 上並不能很好地體現出來。所以又在 CrowdHuman 上做了實驗如下:

丟棄Transformer,全卷積網路也可以實現E2E檢測


請注意 CrowdHuman 的 ground-truth 做 NMS threshold=0.6,只有 95.1% 的 Recall,這也是 NMS 方法的理論上限。而本文方法沒有采用 NMS,於是輕易超越了這一上限。

研究者還做了其它一些實驗和分析,歡迎看原文。

視覺化

經過以上改進,研究者成功把 one-to-one 的效能提升到了與 one-to-many+NMS 方法 comparable 的水平。此外還視覺化了 score map,可以發現 FCN 是有能力學出非常 sharp 的表示的,這也是很讓研究者驚奇的一點。

丟棄Transformer,全卷積網路也可以實現E2E檢測


結果圖中比較明顯的改善出現在多峰 case 上。比如兩個物體有一定的 overlap(但又沒有特別重合),這個時候 one-to-many+NMS 方法經常出現的情況是,除了兩個物體分別出了一個框之外,在兩個物體中間也出了一個框,這個框與前兩個框的 IoU 不足以達到 NMS threshold,但置信度又比較高。這類典型的多峰問題在 POTO 中得到了較大的緩解。

丟棄Transformer,全卷積網路也可以實現E2E檢測


Others

有些人可能比較關心訓練時間,因為潛意識裡在 dense prediction 上做 bipartite matching 應該是很慢的。然而實際上依賴於 scipy 對 linear_sum_assignment 的最佳化,實際訓練時間僅僅下降了 10% 左右。

如果對這一時間依然敏感,可以用 topk(k=1)代替 bipartite matching;在 dense prediction 裡 top1 實際上是 bipartite matching 的近似解 [8] 。相似地,k>1 的情況對應了 one-to-many 的一種新做法,研究者也對此做了一些工作,後續可能會放出來。

參考

  1. 如果有人感興趣的話,可以在 YOLO 上去掉 NMS 嘗試一下,可以接近 30mAP。

  2. 注意這裡沒有使用 DETR 的 CE+GIoU+L1 組合,而是直接採用 loss 本身(Focal+GIoU)。研究者認為這樣更符合 DETR 用 loss 做 cost 的原意。

  3. 其實這裡可以有一個腦洞留給大家,因為 cost 是不需要求導的,所以甚至是可以直接算 AP 當 cost 的。

  4. 側面印證了分類和迴歸的衝突在檢測任務上是顯著的。

  5. 理由很簡單,CrowdHuman 的遮擋問題太嚴重,center 區域經常完全被遮擋。

  6. 事實上加權幾何平均數的負對數就是 CE+IoU Loss,加權算術平均數則沒有明顯的物理含義。

  7. NoisyAnchor 在 assign 中採用了類似的公式,只不過採用的是 anchor IoU。

  8. 更具體來講,top1(即 argmin)是 Hugarian Algorithm 只做第一次迭代的結果;由於在 dense prediction 下衝突會很少,一次迭代就已經逼近了最優匹配,這也是為什麼 Hungarian Algorithm 這裡實際執行很快。


知乎連結:https://zhuanlan.zhihu.com/p/332281368

相關文章