轉載:https://zhuanlan.zhihu.com/p/58291808
論文鏈接:https://arxiv.org/abs/1903.00241
代碼鏈接:https://github.com/zjhuang22/maskscoring_rcnn
今天介紹一篇CVPR2019的論文,來自華科和地平線,這篇論文從實例分割中mask 的分割質量角度出發,提出過去的經典分割框架存在的一個缺陷:用Bbox bounding box的classification confidence作為mask score,導致mask score和mask quality不配准。因此文章基於Mask R-CNN提出一個新的框架Mask Scoring R-CNN,能自動學習出mask quality,試圖解決不配准的問題。
在實例分割(instance segmentation)中,比如Mask R-CNN,mask 分支的分割質量(quality)來源於檢測分支的classification confidence。Mask R-CNN其實Faster R-CNN系列的延伸,其在Faster R-CNN的基礎上添加一個新的分支用來預測object mask,該分支以檢測分支的輸出作為輸入,mask的質量一定程度上依賴於檢測分支。這種簡單粗暴的做法取得了SOTA的性能,近年來COCO比賽的冠軍或者前幾名基本是Mask R-CNN及其變體,但依然有上升的空間。
更仔細的來講,Mask R-CNN存在的問題是:bounding box的classification confidence不能代表mask的分割質量。classification confidence高可以表示檢測框的置信度高(嚴格來講不能表示框的定位精准),但也會存在mask分割的質量差的情況。高的分類置信度也應該同時有好的mask 結果。
回到原始的初衷,文章希望得到精准的mask質量,那么如何評價輸出的mask質量呢?
是AP,或者說是instance-level的IoU。這個IoU和檢測用到的IoU是一個東西,前者是predict mask和gt mask的pixel-level的Intersection-over-Union,而后者則是predict box和gt box的box-level的Intersection-over-Union。所以一個直觀的方法就是用IoU來表示分割的質量,那么讓網絡自己學習輸出分割的質量也是簡單直觀的做法。學習出mask的IoU,那么最后的mask score就等於maskIoU乘以classification score,mask score就同時表示分類置信度和分割的質量。
作者在Mask R-CNN的基礎上添加了一個MaskIoU分支用於預測當前輸出的mask和gt mask的IoU。MaskIoU的輸入由兩部分組成,一是ROIAlign得到的RoI feature map,二是mask分支輸出的mask。兩者concat之后經過3層卷積和2層全連接輸出MaskIoU。
training過程:
box分支和mask保持不變,輸出的mask先經過閾值為0.5的binarize,再計算binary mask和gt的IoU作為target,采用L2 loss作為損失函數,loss weight設為1,3個分支同時end-to-end訓練。
inference過程:
檢測分支輸出score最高的100個框,再送入mask分支,得到mask結果,RoI feature map再和mask送入MaskIoU分支得到mask iou,與box的classification score相乘就得到最后的mask score。
實驗結果,在COCO 2017 test集上,相對於Mask R-CNN,mask AP有1個點多的提升。
同時作者還做了對比實驗,驗證不同的MaskIoU輸入對性能的影響。文章列舉了4種輸入方式:
- target mask和ROI feature concat
- target mask和ROI feature 相乘
- 所有mask和ROI feature concat
- target mask和高分辨率的ROI feature concat
其網絡結構示意圖如下:
驗證不同training target對性能的影響:
- 只學習target類別的MaskIoU,忽略其他類別
- 學習所有類別的MaskIoU,相應的其他類別的MaskIoU的學習目標就是0
- 學習出現在ROI區域的類別的MaskIoU。
可以看出,setting#1的效果最好,setting#2的效果最差。
同時作者還做了實驗探索Mask Scoring R-CNN的性能上界。
對每個輸出的MaskIoU,用輸出的mask 和匹配的gt mask iou來代替,MaskIoU分支就輸出了mask分支的真實quality,這時就得到了Mask Scoring R-CNN的性能上界。實驗結果表明Mask Scoring R-CNN依然比Mask R-CNN更好,說明MaskIoU起到了alignment的效果,但很顯然會比用gt mask iou 代替的效果差,說明一方面box的准確性和mask分支本身也會影響mask任務的性能,另一方面MaskIoU 分支的學習能力可以進一步提升,Mask Scoring R-CNN依然有提升的空間。
速度方面,作者在Titan V GPU上測試一張圖片,對於ResNet18-FPN用時0.132s,Resnet101-DCN-FPN用時0.202s,Mask Scoring R-CNN和Mask R-CNN速度一樣。
總結:
作者motivation就是想讓mask的分數更合理,從而基於mask rcnn添加一個新的分支預測來得到更准確的分數,做法簡單粗暴,從結果來看也有漲點。其實mask的分割質量也跟box輸出結果有很大關系,這種detection-based分割方法不可避免,除非把detection結果做的非常高,不然mask也要受制於box的結果。這種做法與IoU-Net類似,都是希望直接學習最本質的metric方式來提升性能。
為了同時提升detection和mask的效果,最近的Cascade方法很受歡迎,從人臉檢測領域的Cascade CNN, 到Cascade R-CNN: Delving into High Quality Object Detection,再到友商的HTC不僅在COCO中拿了冠軍,同時也被CVPR2019接收,Cascade方式展現了強大實力,相信在未來會出現越來越多的Cascade,如Cascade RetinaNet,Cascade TridentNet。。。