2019 CVPR Oral
Mask Scoring R-CNN
Introduction
問題:分類置信度 與 Mask IOU 的偏差
( Mask RCNN 是對每個類別獨立地預測一 個二值掩模 ,沒有引入 類間競爭 , 每個二值掩模 的類別依靠 網絡RoI分類分支給出的 分類 score 。但是,由下圖可見 ,分類 score 與 MaskIoU 的相關性並不好. )
解決: 模型學習每個 Mask 與 gt 之間的 IOU score 乘 分類 score 。
-
實例分割利用預測 Mask 與 groud truthMask 之間的像素級 IoU 來描述實例分割質量,提出了一種直接學習 IoU 的網絡。( MaskIoU )
-
一旦我們在測試階段得到了預測的 Mask 分數,通過將預測的 Mask 分數與分類分數相乘 來重新評估Mask分數。因此,Mask Score 同時考慮語義類別和實例 Mask 的完整性。
Mask RCNN
- 第一階段是區域建議網絡(RPN)。它提出了候選對象邊界框,而不考慮對象類別。
- 第二階段稱爲R-CNN階段,對每個proposal使用RoIAlign提取特徵,並進行proposal分類、bbox 迴歸和Mask預測。
Network
網絡模塊 MaskIoU head 把 Mask Head 的輸出(預測)與 pooling 後的 ROI 的特徵 作爲該分支的輸入,去迴歸 mask IOU。
MaskIoU head
論文中將 mask score learning task 分解成 mask classification 和 IoU regression,如上圖
- 在Mask head的基礎上,加了一個分支,將 ROI對齊後的特徵 與得到的 Mask 做了一個 concat
- 然後通過卷積層+全連接層,得 到IoU Score
- 最後通過score相乘得到最終的得分:
問題
網絡是如何訓練的?
- MaskIoU 分支,訓練樣本是RPN的正樣本(負樣本只參與分類),與Mask分支一致;
定義正樣本爲 RPN的Box 與 Ground Truth 的 IoU 大於0.5。
-
針對得到的Mask結果,根據閾值(文中是0.5)做二值化,計算二值化結果 和 Ground Truth的mask IoU;
-
3個head分支同時訓練。
這裏作者試驗了多個head,根據試驗效果最後選擇當前head ,下圖(a)
網絡是如何 inference ?
-
對於輸出的box做soft-NMS處理後,得到score top-k(文中k=100)的box;
這一步和mask RCNN並無區別,根據輸出box映射到mask 分支,獲取對應的分割圖。 -
將得到的分割圖送入mask IoU分支,計算對應得分;
-
僅使用 MaskIoU head 校正 R-CNN 生成的 classification score
- 具體來講,假設 Mask R-CNN 的 R-CNN 階段輸出 N個bounding box,選中其中應用 SoftNMS 之後的前 k(k=100)個 scoring box。
- 之後,這 k 個box被送入 Mask head 用於生成 multi-class mask。這是標準的 Mask R-CNN推理過程 。
- 論文中也遵循這個過程,並送入 k 個 target mask 用於估計 MaskIoU 。估計得到的 MaskIoU 乘上 classification score,得到矯正後的 mask score 作爲最終的 mask confidence。[3]
Pytorch
maskscoring_rcnn[PyTorch]
References
[1] 性能超越何愷明Mask R-CNN!華科碩士生開源圖像分割新方法
[2] https://blog.csdn.net/weixin_37993251/article/details/88248361
[3]https://blog.csdn.net/ShuqiaoS/article/details/89152728