標籤:

Mask-RCNN論文解讀

Mask R-CNN介紹

Mask R-CNN是基於Faster R-CNN的基於上演進改良而來,FasterR-CNN並不是為了輸入輸出之間進行像素對齊的目標而設計的,為了彌補這個不足,我們提出了一個簡潔非量化的層,名叫RoIAlign,RoIAlign可以保留大致的空間位置,除了這個改進之外,RoIAlign還有一個重大的影響:那就是它能夠相對提高10%到50%的掩碼精確度(Mask Accuracy),這種改進可以在更嚴格的定位度量指標下得到更好的度量結果。第二,我們發現分割掩碼和類別預測很重要:為此,我們為每個類別分別預測了一個二元掩碼。基於以上的改進,我們最後的模型Mask R-CNN的表現超過了之前所有COCO實例分割任務的單個模型,本模型可以在GPU的框架上以200ms的速度運行,在COCO的8-GPU機器上訓練需要1到2天的時間。

MaskR-CNN擁有簡潔明了的思想:對於FasterR-CNN來說,對於每個目標對象,它有兩個輸出,一個是類標籤(classlabel),一個是邊界框的抵消值(bounding-box

offset),在此基礎上,Mask R-CNN方法增加了第三個分支的輸出:目標掩碼。目標掩碼與已有的class和box輸出的不同在於它需要對目標的空間布局有一個更精細的提取。接下來,我們詳細介紹Mask R-CNN的主要元素,包括Fast/Faster R-CNN缺失的像素對齊(pixel-to

pixel alignment)。

Mask R-CNN的工作機理

Mask R-CNN 使用了與Faster R-CNN相通的兩階段流程,第一階段叫做RPN(Region Proposal Network),此步驟提出了候選對象邊界框。第二階段本質上就是FastR-CNN,它使用來自候選框架中的RoIPool來提取特徵並進行分類和邊界框回歸,但Mask R-CNN更進一步的是為每個RoI生成了一個二元掩碼,我們推薦讀者進一步閱讀Huang(2016)等人發表的「Speed/accuracy trade-offs for modern convolutional object detectors」論文詳細對比Faster R-CNN和其他框架的不同。

掩碼將一個對象的空間布局進行了編碼,與類標籤或框架不同的是,Mast R-CNN可以通過卷積的像素對齊來使用掩碼提取空間結構。

ROIAlign:ROIPool是從每個ROI中提取特徵圖(例如7*7)的標準操作。

網路架構(Network Architecture):為了證明Mast R-CNN的普遍性,我們將Mask R-CNN的多個構架實例化,為了區分不同的架構,文中展示了卷積的主幹架構(backbone architecture),該架構用於提取整張圖片的特徵;頭架構(headarchitecture),用於邊框識別(分類和回歸)以及每個RoI的掩碼預測。

在Faster R-CNN網路上的修改,具體包括:

(1)將ROI Pooling層替換成了ROIAlign;

(2)添加了並列的FCN層(Mask層)。

技術要點

一、增強了基礎網路

將ResNeXt-101+FPN用作特徵提取網路,達到State-of-the-art的效果。

二、加入了ROIAlign層

ROIPool是一種針對每一個ROI的提取一個小尺度特徵圖(E.g. 7x7)的標準操作,它用以解決將不同尺度的ROI提取成相同尺度的特徵大小的問題。ROIPool首先將浮點數值的ROI量化成離散顆粒的特徵圖,然後將量化的ROI分成幾個空間的小塊(Spatial Bins),最後對每個小塊進行Max Pooling操作生成最後的結果。

通過計算[x/16]在連續坐標x上進行量化,其中16是特徵圖的步長,[ . ]表示四捨五入。這些量化引入了ROI與提取到的特徵的不對準問題。由於分類問題對平移問題比較魯棒,所以影響比較小。但是這在預測像素級精度的掩模時會產生一個非常的大的負面影響。

由此,作者提出ROIAlign層來解決這個問題,並且將提取到的特徵與輸入對齊。方法很簡單,避免對ROI的邊界或者塊(Bins)做任何量化,例如直接使用x/16代替[x/16]。作者使用雙線性插值(Bilinear Interpolation)在每個ROI塊中4個採樣位置上計算輸入特徵的精確值,並將結果聚合(使用Max或者Average)。

用例子具體分析一下上述區域不匹配問題。如圖所示,這是一個Faster-RCNN檢測框架。輸入一張800*800的圖片,圖片上有一個665*665的包圍框(框著一隻狗)。圖片經過主幹網路提取特徵後,特徵圖縮放步長(stride)為32。因此,圖像和包圍框的邊長都是輸入時的1/32。800正好可以被32整除變為25。但665除以32以後得到20.78,帶有小數,於是ROI Pooling 直接將它量化成20。接下來需要把框內的特徵池化7*7的大小,因此將上述包圍框平均分割成7*7個矩形區域。顯然,每個矩形區域的邊長為2.86,又含有小數。於是ROI Pooling 再次把它量化到2。經過這兩次量化,候選區域已經出現了較明顯的偏差(如圖中綠色部分所示)。更重要的是,該層特徵圖上0.1個像素的偏差,縮放到原圖就是3.2個像素。那麼0.8的偏差,在原圖上就是接近30個像素點的差別,影響還是很大的。

具體方法要點:

  • 遍歷每一個候選區域,保持浮點數邊界不做量化。
  • 將候選區域分割成k x k個單元,每個單元的邊界也不做量化。
  • 在每個單元中計算固定四個坐標位置,用雙線性內插的方法計算出這四個位置的值,然後進行最大池化操作。

三、改進了分割Loss

由原來的基於單像素Softmax的多項式交叉熵變為了基於單像素Sigmod二值交叉熵。該框架對每個類別獨立地預測一個二值掩模,沒有引入類間競爭,每個二值掩模的類別依靠網路ROI分類分支給出的分類預測結果。這與FCNs不同,FCNs是對每個像素進行多類別分類,它同時進行分類和分割,基於實驗結果表明這樣對於對象實例分割會得到一個較差的性能。

下面介紹一下更多的細節,在訓練階段,作者對於每個採樣的ROI定義一個多任務損失函數$L=L_{cls}+L_{box}+L_{mask}$,前兩項不過多介紹。掩模分支對於每個ROI會有一個$Km^2$維度的輸出,它編碼了$K$個解析度為$m imes m$的二值掩模,分別對應著$K$個類別。因此作者利用了A Per-pixel

Sigmoid,並且定義為平均二值交叉熵損失(The Average Binary Cross-entropy Loss)。對於一個屬於第$K$個類別的ROI,僅僅考慮第$K$個Mask(其他的掩模輸入不會貢獻到損失函數中)。這樣的定義會允許對每個類別都會生成掩模,並且不會存在類間競爭。

四、掩模表示

一個掩模編碼了一個輸入對象的空間布局。作者使用了一個FCN來對每個ROI預測一個的掩模,這保留了空間結構信息。


推薦閱讀:

AAAI 2018最佳論文出爐,中國留學生再下一城
論文文獻搜索整理的技巧
【AAAI Oral】利用DeepMind的DQN解數學應用題,準確率提升15%
如何選擇SCI論文翻譯平台?
fpn論文解讀

TAG:論文 |