CVPR2019 | Mask Scoring R-CNN 論文解讀


Mask Scoring R-CNN

CVPR2019 | Mask Scoring R-CNN 論文解讀

作者 | 文永亮

研究方向 | 目標檢測、GAN

推薦理由:

本文解讀的是一篇發表於CVPR2019的paper,來自華科和地平線,文章提出了Mask Scoring R-CNN的框架是對Mask R-CNN的改進,簡單地來說就是給Mask R-CNN添加一個新的分支來給mask打分從而預測出更准確的分數。

源碼地址:https://github.com/zjhuang22/maskscoring_rcnn

 

研究動機:

Mask R-CNN其實是何愷明大神在Faster R-CNN系列的延伸,Mask R-CNN和Faster R-CNN都是 two stages的,第一階段是RPN(Region Proposal Network),產生一些候選的目標邊界框,使用RoIAlign為每一個候選區域提取特征,生成分類、bbox回歸還有mask的預測,其實就是在Faster R-CNN的基礎上添加一個新的分支預測mask。

但是Mask R-CNN存在着一個問題,就是在實例分割的任務中,蒙版分割質量是由檢測分支的分類置信度決定。然而,mask的質量(我們這里用instance mask和ground truth之間的IoU做評判)通常與分類置信度沒有太強的關聯。

相信大家都知道IoU是目標窗口和原來標記窗口的交疊率,如果Mask R-CNN的分類置信度能夠決定分割蒙版的質量的話,也就是說其質量與分類分數呈現相關性,但是從圖二(a)中可以看出,當分類分數高於0.5時(橫坐標),甚至到達1時,MaskIoU參差不齊,可以說從0.5到1的質量分數都有,從而證實了Mask R-CNN的MaskIoU與分類置信度沒有太強的關聯。所以作者提出的Mask Scoring R-CNN,MS R-CNN中提出的框架其實很簡單,就是在原有的Mask R-CNN框架的基礎上添加一個額外的分支MaskIoU head模塊,這個模塊用來學習MaskIoU。這個框架得到的分數如圖二(b)(c)的所示,可以明顯看出分類分數高的同時蒙版質量也得到了提升。

Mask Scoring R-CNN:

·Mask Scoring:

既然我們發現了Mask R-CNN的問題,那么我們現在就來解決它,首先我們考慮蒙版的分數由什么決定?

從上面的動機中我們得知,MaskIoU可以來評價蒙版的質量,因為理想的mask應該是與Ground Truth完全重合的,所以我們必須考慮MaskIoU。除此之外,一個理想的評價mask的分數,除了與GT的重合率之外,這個實例分割只屬於一個類,對於其他類的分數都為0。所以學習mask的分數就分解成兩個任務,就是把mask分類到正確的類中以及把建議框的MaskIoU回歸到目標前景中。

有如上公式,專注於對建議框進行分類,聚焦於回歸MaskIoU。

 

·MaskIoU head:

整個MS R-CNN的改進就在於這個MaskIoU Head,MaskIoU Head模塊的輸入由兩部分組成,一是ROIAlign得到的RoI feature map,二是Mask Head分支輸出的mask。Mask經過MaxPooling之后與RoI feature map進行concat,然后經過3層卷積和2層全連接層,輸出的就是MaskIoU。以下是其完整的架構,如圖三:

 

 

 

·Training:

怎么訓練MaskIoU Head?只把mask分支輸出的mask與GT計算IoU作為target是不夠的,因為mask分支輸出的mask有好有壞,所以文章中做了閾值處理,使用RPN生成的proposals與GT的IoU大於0.5的mask稱為binary mask,這個binary mask與GT的MaskIoU就作為MaskIoU的target。

 

·Inference:

RCNN Head輸出的top-k(例如top100)分數的框,經過SoftNMS后,送入Mask Head,得到mask與ROI feature map進行concat送入MaskIoU Head得到MaskIOU,然后與分類結果得到的分數相乘得到mask score。

 

實驗結果:

實驗結果這里有很多種不同的AP,表示在不同scales時的AP,意思是使用了不同IoU閾值。作者用的數據集是COCO 2017val集。

 

 

 

 

 

 

Table 1表明了作者提出的Mask Scoring R-CNN對不同的backbone網絡並不敏感,相比Mask R-CNN基本上AP有1點左右的提升。

 

 

 

 

 

 

Table 2表明無論是否使用FPN和DCN,MaskIoU head都在AP上有提升。

 

 

 

 

 

 

 

 

 

 

 

 

Table 3是跟目前的實例分割方法在COCO 2017 test-dev上做對比。

 

 

 

 

 

 

 

這是MS R-CNN和Mask R-CNN對比效果,評分得到了修正。

 

MaskIoU head的各種選擇:

文章做了下面4種輸入組合:

1.target mask和ROI feature concat

2.target mask和ROI feature 相乘

3.所有mask和ROI feature concat

4.target mask和高分辨率的ROI feature concat

 

 

 

 

 

 

 

  還有一個問題就是,我們知道RoI內可能有很多種目標類別,我們應該讓MaskIoU學習所有的類別,還是學習RoI內的所有出現的類別,抑或是選取RoI內分類得分高的類呢?

  由此分成了三種情況:

  1. 只讓MaskIoU學習target類別,target類別其實就是分類得到的top-k類別,其他類別的就直接忽略掉。
  2. 讓MaskIoU學習所有類別。
  3. 讓MaskIoU學習所有出現在RoI中的類別,其他沒出現的類別忽略。

 

 

 

 

 

 

  發現第二種情況學習所有類別的情況是最差的,甚至比原來Mask R-CNN的效果還差。而第三種學習所有正類的情況比學習target類別差的原因是學習所有正類會增加MaskIoU head的負擔,所以文章選擇了學習target類別的情況一。

點評:

作者認為分類置信度不能單純的作為mask的得分,所以很簡單的想法就是另外創建了一個MaskIoU分支學習MaskIoU,最后與分類分數相乘的到Mask Score。感覺與IoU-Net類似。但是這樣就導致mask與檢測分支相關,使mask受限於box。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM