丟棄Transformer,FCN也可以實現E2E檢測

2020-12-09     AI科技大本營

原標題:丟棄Transformer,FCN也可以實現E2E檢測

作者 | 王劍鋒

來源 | 知乎CVer計算機視覺專欄

我們基於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方法的理論上限。

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

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)。

那直接做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,做了如下分析實驗:

我們設計了兩種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:

看起來稍微有點複雜,但其實就是用網絡輸出的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

針對第一點,我們提出了3D Max Filtering,這基於一個intuition(paper中沒有提到):卷積是線性濾波器,學習max操作是比較困難的。此外,我們在FCOS上做了實驗,發現duplicated predictions基本來自於5×5的鄰域內,所以最簡單的做法就是在網絡中嵌入最常見的非線性濾波器max pooling。另外,NMS是所有feature map一起做的,但網絡在結構上缺少層間的抑制,所以我們希望max pooling是跨層的。

如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實驗。

這裡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上做了實驗如下:

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

我們還做了其它一些實驗和分析,歡迎看原文。

可視化

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

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

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的一種新做法,我們組也對此做了一些工作,後續可能會放出來。

順便打一波廣告:對曠視研究院BaseDetection組感興趣的同學可以發簡歷到[email protected],組裡目前主要在做目標檢測、自監督等方向。

參考

  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://link.zhihu.com/?target=https%3A//arxiv.org/abs/2012.03544

代碼:

github.com/Megvii-BaseD(內部代碼遷移+審查中,後續放出)

文章來源: https://twgreatdaily.com/zh-tw/kxjhS3YBX2TYn2u-LNAy.html










CSDN湘苗培優

2020-12-24