Mask R-CNN個人理解
1 簡述
Mask R-CNN是一個小巧、靈活的通用物件例項分割框架(object instance segmentation)。它不僅可對影象中的目標進行檢測,還可以對每一個目標給出一個高質量的分割結果。它在Faster R-CNN[1]基礎之上進行擴充套件,並行地在bounding box recognition分支上新增一個用於預測目標掩模(object mask)的新分支。該網路還很容易擴充套件到其他任務中,比如估計人的姿勢,也就是關鍵點識別(person keypoint detection)。該框架在COCO的一些列挑戰任務重都取得了最好的結果,包括例項分割(instance segmentation)、候選框目標檢測(bounding-box object detection)和人關鍵點檢測(person keypoint detection)。
2 結構
一共可以分為兩個分支:
(1)第一個分支為原始Faster R-CNN的結構,它用於對候選視窗進行分類和視窗座標迴歸。(2)第二個分支對每一個感興趣區域(Region of Interest,RoI)預測分割掩模,它利用了一個小的全卷積網路結構[2](Fully Convolutional Network,FCN)。
3 主要關鍵因素
關鍵點1:解決特徵圖與原始影象上的RoI不對準問題
問題描述:RoIPool[3]是一種針對每一個RoI的提取一個小尺度特徵圖(e.g. 7x7)的標準操作,它用以解決將不同尺度的RoI提取成相同尺度的特徵大小的問題。RoIPool首先將浮點數值的RoI量化成離散顆粒的特徵圖,然後將量化的RoI分成幾個空間的小塊(spatial bins),最後對每個小塊進行max pooling操作生成最後的結果。該操作類似於下圖,但只取了一個尺度。
解決方案:作者提出RoIAlign層來解決這個問題,並且將提取到的特徵與輸入對齊。方法很簡單,避免對RoI的邊界或者塊(bins)做任何量化,例如直接使用x/16代替[x/16]。作者使用雙線性插值(bilinear interpolation)在每個RoI塊中4個取樣位置上計算輸入特徵的精確值,並將結果聚合(使用max或者average)。
關鍵點2:將掩模預測和分類預測拆解
下面介紹一下更多的細節,在訓練階段,作者對於每個取樣的RoI定義一個多工損失函式,前兩項不過多介紹。掩模分支對於每個RoI會有一個維度的輸出,它編碼了K個解析度為的二值掩模,分別對應著K個類別。因此作者利用了a per-pixel sigmoid,並且定義為平均二值交叉熵損失(the average binary cross-entropy loss)。對於一個屬於第k個類別的RoI,僅僅考慮第k個mask(其他的掩模輸入不會貢獻到損失函式中)。這樣的定義會允許對每個類別都會生成掩模,並且不會存在類間競爭。
關鍵點3:掩模表示
一個掩模編碼了一個輸入物件的空間佈局。作者使用了一個FCN來對每個RoI預測一個的掩模,這保留了空間結構資訊。
對於以上幾個關鍵點,作者在表格2中給出了詳細的效能比較。
針對關鍵點1:
針對關鍵點2:
針對關鍵點3:
4 結果展示與效能對比
[1] Faster R-CNN: To- wards real-time object detection with region proposal net- works. In NIPS, 2015.
[2] Fully convolutional networks for semantic segmentation. In CVPR, 2015.
[3] Fast R-CNN. In ICCV, 2015.