摘要
提出了一個概念簡單,靈活,通用的對象執行個體分割架構。本方法有效地檢測圖像中的對象,同時為每個執行個體生成高品質的分割掩碼。該方法稱為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;包括 COCO 2016 的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 在姿态估計上的擴充,效果不錯。