Mask R-CNN


摘要:

detect object的同時為每個instance 生成segmentation mask。
與faster rcnn的不同在於在bounding box recognition時並行預測object mask,即多加了一個分支。
top results:效果必然好。Without tricks, Mask R-CNN outperforms all existing, single-model entries on instance segmentation, bounding-box object detection, and person keypoint detection, including the COCO 2016 challenge winners.

R-CNN:r-cnn選取candidate object regions和在candidate object regions(將candidate object regions進行放縮到一樣大小)上卷積的過程是獨立的;fast r-cnn使用RoIPool+共享卷積產生的特征圖,在最后一個特征圖上進行RoIPool,為每個RoI 產生一樣大小的RoI feature vector;faster r-cnn提出的motivation是“為什么不用cnn提取candidate object regions?”,然后作者就用個RPN(FCN)來進行提取candidate object regions了,還給出了每個框是物體的概率,並且和預測class label、box offsets兩個分支共享最后的特征圖(記住,RPN用最后的特征圖只是用來提proposals,在RPN里沒有ROI。而在那兩個分支:分類和框時,需要RoI。)。
Instance Segmentation:
以前的instance segmentation都是segmentation先於recognition。我們的方法基於並行預測masks和class labels。最近,fully convolutional instance segmentation提出,全卷積會產生 positionsensitive output channels 。這些channels同時處理object classes,boxes,masks,這個系統很快,但是在overlapping instance上會產生系統錯誤和偽邊。

3.Mask R-CNN

Mask R-CNN只不過比faster r-cnn多了一個分支,因此它有三個輸出:a class label,a bounding box offset and the object mask。但是這個附加的mask分支和class、boxes不同,它需要提取目標的更精細的空間布局。與Maskr-cnn相比,不能pixel-to-pixel alignment是Fast/faster r-cnn最大的缺陷。
Mask R-CNN:faster rcnn不是分為兩階段嘛。第一階段RPN,提出candidate object regions;第二階段,用RoIPool從共享的最后的特征圖上,用candidate object regions產生一個相同大小的vector,這個vector來預測class label和bounding box。
而Mask R-CNN的第一階段和faster rcnn相同。Mask R-CNN的第二階段,在產生class和box offset的同時,並行產生a binary mask for each RoI。
對每個RoI,都定義一個multi-task loss * L = Lcls + Lbox + Lmask 。其中Lcls和Lbox都和fast r-cnn一樣。輸出mask的分支,對於每一個RoI,都會輸出Km^2維度的輸出,其中包括K個binary masks,每個mask都對應一個類(這個mxm應該不是指原圖的proposal的分辨率,因為RoIAlign后得到的vector是一樣大小的。應該是可以通過這個mxm計算對應原圖中的哪些像素)。為此,we apply a per-pixel sigmoid, and define Lmask as the average binary cross-entropy loss.(這個loss怎么實現的,沒看懂)For an RoI associated with ground-truth class k, Lmask is only defined on the k-th mask (other mask outputs do not contribute to the loss).
我們這樣定義Lmask可以使網絡為每個類別產生masks,並且每個類之間沒有競爭。(什么類間競爭,這塊的原理搞不懂)classification branch可以產生class label,而mask branch不用產生class label,它可直接用分類分支產生的class label。因此,這分離了mask和class的過程。這點和以往使用FCNs進行語義分割很是不同,以往的這些都用a per-pixel softmax and a multinomial cross-entropy loss,因此masks across classes
compete。而我們用 a per-pixel sigmoid and a binary loss,這不會使類間競爭產生mask。
Mask Representation:mask中應該包含input object 的spatiallayout。mask怎樣才能包含物體的空間布局呢?你看,在class label和box offsets時,從RoiPool出來后的長vector都被全連接折疊成短vector。使用全連接,打亂了最后的特征圖的spatial layout。其實,我們如果用FCN,mask的空間結構就可以通過由卷積提供的pixel-to-pixel的對應自然地被解決。我們使用FCN預測每個RoI的m x m mask。
This pixel-to-pixel behavior requires our RoI features, which themselves are small feature maps, to be well aligned to preserve the explicit per-pixel spatial correspondence. ()
RoIAlign:
RoIPool是如何從一個RoI+特征圖得到a small feature map的呢?兩個量化過程就能得到了。RoIPool首先將a floating-number RoI量化到離散粒度的feature map上,然后這個quantized RoI就被分為spatial bins;這些bins再量化;最后每個bin覆蓋的feature map上的區域就被合並(例如使用max pooling合並),最終就得到一個7X7的small feature map。這種量化方式,會使RoI和the extracted features之間不能對准。雖然這可能不會影響分類,因為分類對小的平移是魯棒的,但這對predict pixel-accurate masks有很大的副作用。
(其實,由原圖proposal到RoI需要經過變換,RoI是對應最后一層特征圖的。
我們為什么提取proposal?不如直接提取RoI?所以,由proposal到RoI是由程序計算出來的,可能是個浮點數值,而作為一個浮點的RoI不行呀,需要把RoI具體到占feature map的哪些個像素點,即離散化。離散化過程中,肯定不可能正好整除,會有四舍五入之類的,但舍去一個特征圖中的點可能就是舍去原圖中的一大片呀。以上是第一步量化。第二部量化就是把RoI占特征圖的離散化的點分為7 X 7部分,這也不可能都正好整除呀!所以這一步量化可能也會造成translation。)
為了解決這個副作用,我們避免RoI boundaries or bins的任何量化(不量化了,不求約數了,直接從浮點RoI到浮點bins,然后在求small feature map時,插值!)。使用雙線性插值來計算每個bin中四個采樣位置的輸入特征的精確值,然后合並。使用雙線性插值,讓不能整除變能整除。(應該是把特征圖插值成可以整除的大小。)
**Network Architecture:
為證明我們的方法具有一般性,我們用多個結構實現了Mask R-CNN。這些結構在(i)提取特征的backbone(ii)分類、預測框、預測mask的head上不同。
對於backbone:(1)使用50或者101層的ResNet或者ResNeXt,提取network-depth-feature。(2)使用ResNet-FPN backbone,在速度和精度上都很好。
對於head:除了比faster rcnn多加了mask分支,還extend the faster rcnn head box heads from the ResNet and RPN papers.(具體細節可以看這兩篇paper,本文沒有詳細說。)

3.1 Implementation Details

我們設置了超參數,這些超參數的選擇和在faster rcnn中一樣。
Training:在Fast R-CNN中,RoI有正有負。IoU大於0.5為正,否則為負。而Lmask是在正RoI上定義的。The mask target is the intersection between an RoI and its associated ground-truth mask(所以,Lmask,在RoI為正時,是用預測出來的mask - mask target,如果RoI為負,則為0)。


免責聲明!

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



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