Mask RCNN筆記


Mask RCNN

 

 

一、核心要點

(1)RoIAlign

mask rcnn的關鍵 一是RoIAlign,是將RoIPooling的插值方式,從最近鄰插值(INTER_NEAREST)方式變為雙線性插值。

這里復習一下關於RoI,RoIPooling的知識

RoI是Region of Interests 特征圖上感興趣的區域(“框”)

RoIPooling的過程是將一個個大小不同的box框,都映射成固定大小(w*h)的矩形框

具體操作是:先把RoI中的坐標映射到feature map上,得到feature map上的坐標后,使用Pooling得到輸出,在Pooling過程中需要計算Pooling后的結果對應到feature map上所占的范圍,然后在那個范圍中進行取max或average操作。使用RoIPooling會在RoI和extracted features之間對應位置產生偏移(introduce misalignments)。

所以使用RoIAlign 來解決這個問題。

論文中還和RoIWarp(J. Dai, K. He, and J. Sun. Instance-aware semantic segmentation via multi-task network cascades. In CVPR, 2016. 2, 3,4, 5, 6 )進行了比較,實驗結果表明RoIAlign的效果要好於 RoIWarp。

(2)實例分割同檢測並行進行

 

嘗試了兩種不同的faster rcnn的結構,ResNet C4和FPN結構。

從圖中可以看到,ResNet C4共享RoI層,而FPN是兩個任務分開做RoI。

mask Loss 只定義在了正例的RoIs上。

 

在該文章中RPN和 mask分支,訓練時,不共享特征;對於前邊的特征提取,RPN和mask共享基礎網絡結構。

 

(3)使用FCN對RoI進行實例分割

  使用FCN對RoI生成的每一個mask進行pixel2pixel的預測。mask編碼了輸入目標的空間分布。

 

(4)類間無競爭的Lmask

對於每個RoI,其loss定義為L=Lcls +Lbox + Lmask

Lcls為分類損失,Lbox為bounding box回歸,Lmask為實例分割損失

 生成k個m*m的mask,Lmask只定義在 k-th mask上對於一個具體為k類的gt,其他mask對loss沒有貢獻,這樣類間就沒有競爭。

對每一個像素使用sigmod,然后取RoI上所有像素的交叉熵的平均值,作為Lmask,

反向傳播的時候,Loss只對gt那一類進行計算和反向傳播,有效的避免了類別競爭,也使得分割和分類解耦(之前的FCN,是針對每一個像素進行softmax輸出,然后計算交叉熵)

 

實驗

實驗一

Instance Segmentation

  •  說明 Mask RCNN效果好, ResNeXt-FPN網絡的表達能力最好

 

實驗二 剝離實驗分析

表二(a) Backbone Architecture實驗說明,ResNeXt-101-FPN的效果要最好

表二(b)說明計算loss時,使用sigmod要好於FCN的softmax

表二(c、d)說明RoIAlign的效果要好於RoIPool和RoIWarp

表二(e)說用使用FCN進行分割的效果要好於MLP(多層感知機)

 

 

 

實驗三 目標檢測

實驗四 關鍵點檢測

 

 

實驗五 cityscapes 上的效果

 


免責聲明!

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



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