【目標檢測簡史】Mask-RCNN

導讀

Mask-RCNN 是ICCV2017 best paper, 是FAIR團隊的Kaiming大神和RBG大神的強強聯手之作。

Mask R-CNN= Faster R-CNN + FCN

通過在 Faster-RCNN 的基礎上添加一個分支網路,在實現目標檢測的同時,把目標實例分割。什麼是 Instance segmentation,就是將一幅圖像中所有物體框出來,並將物體進行像素級別的分割提取。

論文下載:Mask R-CNN 部分翻譯

代碼下載:facebookresearch/Detectron

基於平台:Caffe2 (非官方有tensorflow,MXNet....)

摘要

我們提出了一種概念簡單靈活通用的目標實例分割框架。我們的實現高效地檢測圖中的物體,並同時生成一張高質量的每個個體的分割掩碼。這個方法叫做Mask R-CNN,在Faster R-CNN的基礎志昂增加分支目標掩碼預測網路,並行於當前的邊界框識別。Mask R-CNN訓練簡單,對Faster R-CNN增加很小的額外支出,可以跑到5 FPS。此外,Mask R-CNN易於完成其他任務,比如同一框架下的人體姿態估計。我們展示了COCO數據集挑戰的全三項的頂級結果,包括實例分割,物體檢測,人體關鍵點檢測。不需要技巧,Mask R-CNN在每一項上超越所有現存的單一模型的表現,包括COCO 2016的勝者。希望我們簡潔高效的實現可以作為起點幫助簡化未來的實例級別的識別。代碼facebookresearch/Detectron。

技術要點

Mask R-CNN在概念上是很簡單:對於每一個候選區域 Faster R-CNN 有兩個輸出,一個類別標籤,一個矩形框坐標信息。這裡我們加了第三個分支用於輸出 object mask即分割出物體:目標掩碼。目標掩碼與已有的class和box輸出的不同在於它需要對目標的空間布局有一個更精細的提取。接下來,我們詳細介紹Mask R-CNN的主要元素,包括Fast/Faster R-CNN缺失的像素對齊(pixel-to pixel alignment)。

Faster R-CNN

目標邊界框檢測部分基於Faster R-CNN。參見文章: 【目標檢測簡史】R-CNN->SPPNet->Fast R-CNN->Faster R-CNN 進化之路

這裡簡要回顧一下 Faster R-CNN,它有兩個步驟組成,Region Proposal Network (RPN) 用於提取候區域,第二個步驟本質上和Fast R-CNN一樣,使用 RoIPool 對候選區域提取特徵進行類別分類和坐標回歸。用於兩個步驟的特徵是可以共享的,這樣可以提高速度。

Mask R-CNN:

Mask R-CNN 也是採用了兩個步驟,第一個步驟就是 RPN 提取候選區域,在第二個步驟,平行於預測類別和坐標信息,對於每個 RoI, Mask R-CNN 輸出一個二值 mask。這與當前大部分系統不一樣,當前這些系統的類別分類依賴於 mask 的預測。我們還是沿襲了 Fast R-CNN 的精神,它將矩形框分類和坐標回歸併行的進行,這麼做很大的簡化了R-CNN的流程。

在訓練階段,我們對每個樣本的 RoI 定義了多任務損失函數 L = L_cls + L_box + L_mask ,其中 L_cls 和 L_box 的定義和Fast R-CNN 是一樣的。在 mask 分支中對每個 RoI 的輸出是 K*m*m,表示K個 尺寸是 m*m的二值 mask,K是物體類別數目,。這裡我們使用了 per-pixel sigmoid,將 的損失函數定義為 L_mask average binary cross-entropy,我們的 L_mask 只定義對應類別的 mask損失,其他類別的mask輸出不會影響該類別的 loss。

我們定義 L_mask 的方式使得我們的網路在生成每個類別的 mask 不會受類別競爭影響,解耦了mask和類別預測。

Mask Representation:

對於每個 RoI 我們使用 一個 FCN 網路來預測 m*m mask。m*m是一個小的特徵圖尺寸,如何將這個小的特徵圖很好的映射到原始圖像上?為此我們提出了一個 叫 RoIAlign 的網路層來解決該問題,它在 mask 預測中扮演了重要的角色。

經過roialign後後每個roi區域對應的就是m*m的圖(在上面的例子上m=7),mask分支就是對每個roi產生的K+1個m*m的二值掩膜,如果目標由20種,那麼這裡會預測20個m*m的二值掩膜,這裡為啥這麼需要遇到21個呢,一方面20種目標還有一種是背景,所以是21;另一方面,在計算loss的時候,21個二值mask只有一個有作用,比如這個roi區域的fastrcnn的部分預測為類別1,吧么這21個mask只有第2個參與loss的計算,這樣相當於將roi的類別預測和這裡的二值分割分開了,也就是論文說的解耦了。每個mask都是二值的0或者1,對應的就是該值是否就是roi對應的類別,最後計算的也是一個二進位損失,最後在roi上的整體損失是: cls分類損失+box坐標回歸損失+mask掩膜損失。

RoIAlign:

最核心的點。RoIPool 是一個標準的提特徵運算,它從每個 RoI 提取出一個小的特徵( 7×7),RoIPool 首先對浮點的 RoI 進行量化,然後再提取分塊直方圖,最後通過 最大池化 組合起來。這種分塊直方圖對於分類沒有什麼大的影響,但是對像素級別精度的 mask 有很大影響。相對roipooling會造成最後的7*7和原始的roi區域對不齊的情況,首先roi的坐標是對應的原圖的,從原圖到feature map有一個stride的對應關係, 比如原始roi是100*100的,在原圖的(15,15)的位置,考慮stride=16,那麼對應到feature map上會是 100/16和100/16的區域,坐標是(15/16, 15/16)的點,再對該區域做7*7 劃分,7*7的圖上,橫坐標1的距離對應到feature上就是100/112的距離,那麼7*7的圖上第一個點(0,0)的點對應到feature map上對應的坐標是(15/16, 15/16),那麼怎麼得到7*7的圖上的(0,0)處的值呢,很明顯,根據(15/16, 15/16)在feature map上對這個坐標周圍的4個整點的坐標進行雙線性插值,即得到了7的圖上的(0,0)處的值。同理,得到7*7的圖上的坐標為(x,y)處對應到feature map上的坐標為(15/16+x 100/112, 15/16+y* 100/112),這個坐標是是一個小數,即在feature map上對該坐標點周圍的4個整點坐標進行插值即可。

為了解決上述問題,我們提出了一個 RoIAlign 網路層 解決 RoIPool 量化引入的問題,將提取的特徵和輸入合適的對應起來。我們的改變也是很簡單的:我們避免對 RoI 的邊界或 bins 進行量化。使用線性差值精確計算每個 RoI bin 最後組合起來。

Network Architecture:

為了驗證我們方法的適應性,我們在不同的網路系統中實現了 Mask R-CNN,這裡主要分別考慮了文獻【14,21]中的兩個系統,如下圖所示:

其中採用 FPN 的架構在精度和速度上都更勝一籌。

Implementation Details

Training: 對於 mask loss L_mask 只在正樣本的 RoIs 上面定義。

我們採用文獻【9】的圖像-中心 訓練方法。將圖像長寬較小的一側歸一化到 800個像素。在每個 mini-batch 上每個 GPU 有2個圖像,每個圖像 N個樣本 RoIs,正負樣本比例 1:3.其中 對於 C4 框架的 N=64, 對 FPN框架的 N=512。在8個GPU上訓練,還有其他一些參數設置。

Inference: 在測試階段,C4的候選區域個數是300, FPN 是 1000.對這些候選區域我們進行坐標回歸,再非極大值抑制。然後對前100個得分最高的檢測框進行 mask 分支運算。這樣做可以提高速度改善精度。在 mask 分支中 ,我們對每個 RoI 給出 K 個 mask預測,但是我們只使用 分類分支給出的那個類別對應的 mask。然後我們將 m×m 浮點 mask 歸一化到 RoI 尺寸,使用一個0.5閾值進行二值化。

相關實驗結果

實例分割

我們將Mask R-CNN的方法與已有的方法進行了對比,在所有實驗中使用了COCO數據集。

圖 4在COCO測試圖片上使用Mask R-CNN的其他結果,使用了35.7掩碼AP,ResNet--101-FPN,運行速度是5fps。

我們的實驗在COCO數據集上進行的測試,標準COCO測度包括AP(IoU閾值的平均值)、AP50、AP75和APs、APM、APL(不同規模的AP),如非特殊註明,AP是通過掩碼IoU來估計得到。表1是Mask R-CNN與現有的實例分割方法對比的結果,圖2和圖4都是Mask R-CNN輸出的可視化結果,圖5是將Mask R--CNN基準與FCIS+++對比結果,FCIS+++顯示出其會受到實例分割基礎性偽影的影響,而Mask R-CNN並不會出現這種情況。

表格 1實例分割結果:表中記錄了將Mask R-CNN與其他實例分割方法對比得到的結果。我們的模型表現優於所有同類的模型。MNC和FCIS分別是COCO 2015和2016分割挑戰賽的冠軍。Mask R-CNN表現優於更複雜的FCIS+++,FCIS+++包括多規模的訓練/測試、水平翻轉測試和OHEM。所有的都是單模型結果。

圖 5 FCIS+++(上)對比Mask R-CNN(下,ResNet-101-FPN),FCIS在重合物體問題上會出現系統性偽影(systematic artifacts)。

研究人員將Mask R-CNN進行了多項測試,結果如下表2所示:

表格 2 Mask R-CNN的Ablations實驗結果,模型在trainval35k、minival上測試,並彙報了基於mask AP結果。

  • 表2(a)Backbone架構:更好的backbone能夠帶來期望的收穫:更深入的網路效果更好、FPN表現超過了C4的特徵,ResNeXt在ResNet基礎上進行了改善。
  • 表2(b)多項式對比獨立掩碼(ResNet-50-C4)結果:通過每個類的二元掩碼(sigmoid)進行的分解Decoupling對比多項式掩碼(softmax)有更好的表現。
  • 表2(c)展示了RoIAlign(ResNet-50-C4)的結果:使用不同RoI層的掩碼結果。我們的RoIAlign層提高了AP ~3 points,提高了AP75 ~5 points。使用合適的對齊(alignment)方法改善的原因之一。
  • 表2(d)RoIAlign(ResNet-50-C5, stride 32)展示的是基於large-stride特徵的掩碼水平和框水平的AP。比stride-16特徵(如表2c所示),這裡出現的對齊失誤更嚴重,因而造成了大量的精確誤差。
  • 表2(e)掩碼分支(ResNet-50-FPN):完全卷積網路(Fully convolutionalnetworks, FCN)對比多層感知器(MLP,全連接)進行掩碼預測。FCNs利用編碼空間布局改善了結果。

表格 3目標檢測:在test-dev上的單模型(邊界框 AP)對比其他模型的結果。使用ResNet-101-FPN的Mask R-CNN結果比其他同類模型(這些模型忽略了掩碼輸出問題)表現更好,Mask R-CNN的好結果受益於使用了RoIAlign(+1.1 APbb)、多任務訓練(+0.9 APbb)和ResNeXt-101(+1.6 APbb)。

圖 6在COCO test上使用Mask R-CNN(ResNet-50-FPN)的關鍵點測試結果,利用相同的模型預測得到了人物分割掩碼。此模型有63.1的關鍵點掩碼,運行速度為5 fps。

利用Mask R-CNN也可以延用到人物姿態估計,作者進行了相關實驗,表4是實驗結果。

表格 4在COCO test-dev上的關鍵點探測AP,我們用的模型是ResNet-50-FPN,一個單一的模型,運行速度是5fps,CMU-Pose+++是2016年的冠軍模型,使用了多層測試和後處理的CPM,利用目標探測過濾,以及累計的~5 points:G-RMI利用COCO plus MPII進行訓練,使用了兩個模型(Inception-ResNet-v2 + ResNet-101),此模型使用了更多的數據,因此跟Mask R-CNN不能直接比較。

考慮到Mask-CNN模型對於提取約束框、掩碼和關鍵點的有效性,我們期待它是一個對於實例水平任務來說更有效的框架,Mask-CNN可以泛化到更多的實例層(instance level)的識別工作,並可以延展到更複雜的任務。

參考文獻:

  1. arxiv.org/pdf/1703.0687
  2. blog.csdn.net/linolzhan
  3. 【論文解讀】Facebook 何凱明 Mask R-CNN 狙擊目標實例分割
  4. Mask R-CNN

推薦閱讀:

TAG:目標檢測 | MaskRCNN | 深度學習DeepLearning |