今年的Oral,在coco數據集表現超過了Mask RCNN,來自地平線的華科實習生。
論文:Mask Scoring R-CNN【paper】【github】
1. 提出背景
Mask RCNN 提出以來,一直是作爲經典霸屏,但這裏面一直存在一個嚴重的問題,那就是其score機制:
由於沿用了 Faster RCNN 的 class和box,對應class是類別score,並不能代表mask的好壞,看下圖:
2. 算法框架
問題提出來,很簡單的想法就是,我能否加一個分支預測mask部分的score呢?比如用IoU來度量。
思路很簡單,在Mask head的基礎上,加了一個分支,將ROI對齊後的特徵與得到的Mask做了一個concat,然後通過卷積層+全連接層,得到IoU Score,最後通過score相乘得到最終的得分:
Smask = Scls ∗ Siou
- 訓練階段
來看網絡是如何訓練的?給幾個key point:
1)對於新增的IoU分支,訓練樣本是RPN的正樣本(負樣本只參與分類),與Mask分支一致;
定義正樣本爲RPN的Box與Ground Truth的IoU大於0.5。
2)針對得到的Mask結果,根據閾值(文中是0.5)做二值化,計算二值化結果 和 Ground Truth的mask IoU;
當二值化mask結果與GT一致時,Loss = 1 - Mask IoU = 0
這裏的二值化可以考慮修改一下,比如採用soft mask的方案。
3)3個head分支同時訓練。
這裏作者試驗了多個head,根據試驗效果最後選擇當前head,這裏也有改進的空間,大家可以好好分析一下。
- 推理階段
1)對於輸出的box做soft-NMS處理後,得到score top-k(文中k=100)的box;
這一步和mask RCNN並無區別,根據輸出box映射到mask 分支,獲取對應的分割圖。
2)將得到的分割圖送入mask IoU分支,計算對應得分;
3)僅使用Mask IoU的score來矯正class core,能夠整體反應分割的夠不夠好;
3. 測試效果
測試效果很不錯,請看大屏幕:
在CoCo數據集上的表現(不同backbone上均有顯著提升):