Mask-RCNN技術解析


Mask-RCNN技術解析

MaskR-CNN

論文鏈接:https://arxiv.org/pdf/1703.06870.pdf

代碼鏈接:https://github.com/CharlesShang/FastMaskRCNN

摘要

提出了一個概念簡單,靈活,通用的對象實例分割框架。本方法有效地檢測圖像中的對象,同時為每個實例生成高質量的分割掩碼。該方法稱為Mask R-CNN,通過在已有的包圍盒識別分支的基礎上增加一個預測對象掩模的分支,使R-CNN擴展得更快。Mask R-CNN訓練簡單,僅為速度更快的R-CNN增加少量開銷,運行速度為5 fps。此外,Mask R-CNN易於推廣到其他任務,例如,允許在相同的框架中估計人體姿勢。展示了COCO系列挑戰的所有三個軌跡的最佳結果,包括實例分割、包圍盒對象檢測和人的關鍵點檢測。不需要經過修飾,Mask R-CNN在每一項任務上都勝過所有現有的單模式參賽作品,包括COCO 2016挑戰賽的獲勝者。簡單有效的方法將作為一個堅實的基線,並有助於在實例級識別的未來研究。

一. Mask-RCNN 介紹

   Mask-RCNN,看着比較好理解,就是在 RCNN 的基礎上添加 Mask。

   Mask-RCNN 來自於Facebook的 Kaiming He,通過在 Faster-RCNN 的基礎上添加一個分支網絡,在實現目標檢測的同時,把目標像素分割出來。

 

 

 假設大家對 Faster 已經很熟悉了,其中,黑色部分為原來的 Faster-RCNN,紅色部分為在 Faster網絡上的修改

1)將 Roi Pooling 層替換成了 RoiAlign;

2)添加並列的 FCN 層(mask 層);

Mask-RCNN 的幾個特點

1)在邊框識別的基礎上添加分支網絡,用於 語義Mask 識別;

2)訓練簡單,相對於 Faster 僅增加一個小的 Overhead,可以跑到 5FPS;

3)可以方便的擴展到其他任務,比如人的姿態估計 等;

4)不借助 Trick,在每個任務上,效果優於目前所有的 single-model entries;包括 COCO2016 的Winners。

二.  Mask-RCNN 技術要點

Mask R-CNN基本結構:與Faster RCNN采用了相同的two-state步驟:首先是找出RPN,然后對RPN找到的每個RoI進行分類、定位、並找到binary mask。這與當時其他先找到mask然后在進行分類的網絡是不同的。

● 技術要點1 - 強化的基礎網絡

   通過 ResNeXt-101+FPN 用作特征提取網絡,達到 state-of-the-art 的效果。

● 技術要點2 - ROIAlign

 采用 ROIAlign 替代 RoiPooling(改進池化操作)。引入了一個插值過程,先通過雙線性插值到14*14,再 pooling到7*7,很大程度上解決了僅通過 Pooling 直接采樣帶來的 Misalignment 對齊問題。

雖然 Misalignment 在分類問題上影響並不大,但在 Pixel 級別的 Mask 上會存在較大誤差。

后面把結果對比貼出來(Table2 c & d),能夠看到 ROIAlign 帶來較大的改進,可以看到,Stride 越大改進越明顯。

● 技術要點3 - Loss Function

   每個 ROIAlign 對應 K * m^2 維度的輸出。K 對應類別個數,即輸出 K 個mask,m對應 池化分辨率(7*7)。Loss 函數定義:

 

   Lmask(Cls_k) = Sigmoid (Cls_k),平均二值交叉熵 (average binary cross-entropy)Loss,通過逐像素的 Sigmoid 計算得到。

  Why 有K個mask?通過對每個 Class 對應一個 Mask 可以有效避免類間競爭(其他 Class 不貢獻 Loss )。

 

 

 通過結果對比來看(Table2 b),也就是作者所說的 Decouple 解耦,要比多分類 的 Softmax 效果好很多。

三. 對比實驗效果

Training:

1.當IoU與Ground Truth的IoU大於0.5時才會被認為有效的RoI,只把有效RoI計算進去。

2.采用image-centric training,圖像短邊resize到800,每個GPU的mini-batch設置為2,每個圖像生成N個RoI,對於C4 backbone的N=64,對於FPN作為backbone的,N=512。使用了8塊GPU,所以總的minibatch是16,迭代了160k次,初始lr=0.02,在迭代到120k次時,將lr設定到 lr=0.002,另外學習率的weight_decay=0.0001,momentum = 0.9。如果是resnext,初始lr=0.01,每個GPU的mini-batch是1。

3.RPN的anchors有5種scale,3種ratios。為了方便剝離、如果沒有特別指出,則RPN網絡是單獨訓練的且不與Mask R-CNN共享權重。RPN和Mask R-CNN使用一個backbone,所以他們的權重是共享的。

(Ablation Experiments 為了方便研究整個網絡中哪個部分其的作用到底有多大,需要把各部分剝離開)

Inference: 在測試時,使用C4 backbone情況下proposal number=300,使用FPN時proposal number=1000。然后在這些proposal上運行bbox預測,接着進行非極大值抑制。mask分支只應用在得分最高的100個proposal上。順序和train是不同的,但這樣做可以提高速度和精度。mask 分支對於每個roi可以預測k個類別,只要背景和前景兩種,所以只用k-th mask,k是根據分類分支得到的類型。然后把k-th mask resize成roi大小,同時使用閾值分割(threshold=0.5)二值化。

 

 

 另外,給出了很多實驗分割效果,下面是一張 和 FCIS 的對比圖(FCIS 出現了Overlap 的問題):

 

 

 四. Mask-RCNN 擴展

   Mask-RCNN 在姿態估計上的擴展,效果不錯。

 

 


免責聲明!

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



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