1. 程式人生 > >【轉】mask-rcnn詳解

【轉】mask-rcnn詳解

《Mask R-CNN》 進行例項分割,就是要在每一個畫素上都表示出來目標所屬的具體類別。 完成類別檢測,影象分割和特徵點定位。
1、解決的問題:在時間上對faster rcnn進行了優化,並且提高準確度,最關鍵的是在畫素級別進行特徵點定位達到了將各個物件的邊緣確定的效果。
這裡寫圖片描述
上圖是,faster rcnn的分割檢測效果。下圖是,mask rcnn的分割檢測效果,可以明顯看到,改進的地方是各個物件的邊緣被勾勒了出來,這個技術是論文中提到的畫素級別的特徵點識別。
這裡寫圖片描述
2、解決方法:
Mask RCNN在faster rcnn的結構上做出了改善。
大概瞭解了faster rcnn的網路結構,本論文也作出了簡單介紹。Faster rcnn主要分為兩個步驟,一是RPN,二是Fast RCNN。第一步驟主要是為了檢測邊緣,第二步驟是為了提取特徵進行分類。faster rcnn使用NN來做區域類別的預測,在Fast-rcnn的基礎上使用共享卷積層的方式。卷積後的特徵圖同樣也是可以用來生成區域類別的預測(region proposal)。通過增加兩個卷積層來實現Region Proposal Networks (RPNs) , 一個用來將每個特徵圖 的位置編碼成一個向量,另一個則是對每一個位置輸出一個 objectness score 和 regressed bounds for k region proposals.
這裡寫圖片描述


Faster R-CNN 對每個候選物件有兩個輸出,即一個類標籤和一個邊界框偏移值。我們在 Faster R-CNN 上添加了第三個分支即輸出object mask,從而得到Mask rcnn。因此,Mask R-CNN 是一種自然而且直觀的想法。但新增的 mask 輸出與類輸出和邊界框輸出不同,需要提取物件的更精細的空間佈局。Mask R-CNN 的關鍵要素包括 pixel-to-pixel 對齊,這是 Fast/Faster R-CNN 主要缺失的一塊。
Mask RCNN中,RPN和faster rcnn中的RPN是相同的,第二步驟中的Fast RCNN作出改進:增加了個mask 層,從而可以並行地對每個ROI(興奮區域)進行預測“各類別”和“邊緣”。其中mask的主要特點就是並行。

第一步:對ROI的損失函式重新定義為
這裡寫圖片描述
對每個RoI的mask分支,其輸出維度為Km*m。其中K表示對m*m的影象編碼K個二分類mask,每一個mask有K個類別。所以需要應用單畫素的sigmoid進行二分類,並定義Lmask為平均二分類cross-entropy loss。對於類別為k的RoI,Lmask定義在第k個掩膜(其他掩膜輸出對loss沒貢獻)
對Lmask的定義允許網路為每個類別生成mask且在類別之間沒有競爭。用專門的分類分支來預測類別標籤(標籤也用來選擇輸出mask),這樣就解耦了類別與mask預測。而FCN用的是單畫素的softmax和multinomialcross-entropy loss,在這種情況下,mask和classes之間存在競爭,mask rcnn使用per-pixel sigmoid和binary loss就不會。通過實驗表時這是提高instance segmentation的關鍵點。
第二步:mask層的定義和引入
這裡寫圖片描述


一個mask對目標的空間佈局進行編碼,因此,不同於class labels和box offsets(它們通過全連線層利用了 vectors丟失了空間資訊),提取mask的空間結構在畫素級別即pixel-to-pixel下完成(由相應的convolutions提供),本質還是卷積代替全連線,維持空間資訊。
對每個RoI,使用FCN預測m*m個mask,這就允許每個mask分支保持明確的m*m的目標空間佈局,而不用將其陷入向量描述(缺少空間維度)。不同於其他模型使用fc layers進行mask預測,Mask RCNN的全連線層需要更少的引數,且精度更高。
這種pixel-to-pixel的行為需要RoI特徵,這些特徵是小的特徵圖,為了一致的較好的保持明確的單畫素空間對應關係,Mask RCNN提出了RoIAlign,這是對mask預測的關鍵。
這裡寫圖片描述

第三步:RoIAlign的定義和引入
RoIAlign解決的問題:
Mask rcnn第二步驟中的RoIPool是對每個RoI提取小的特徵圖(比如7*7)的標準操作,它首先將一個floating number的RoI量化為discrete granularity(離散粒度)的特徵圖,然後被量化後的RoI被分成小的空間bin(本身已被量化),最後將每個bin聚合成特徵值(通常使用maxpooling)。量化執行的方式為,比如[x/16],其中16為特徵圖的stride,[]表示取整。同樣的,當劃分bin(比如7*7)的時候,也要執行量化。
這些量化操作在RoI和提取的特徵中引入了misaligments,這也許對分類沒有影響,但對預測pixel-accurate的mask有較大的負面作用。

下圖是ROIPOOL的三個步驟,其中第二步的量化是連續地X座標計算,x/16,16是步長。
這裡寫圖片描述
RoIAlign,移除RoIPool 的harsh 量化,從而調整特徵的提取與輸入。Mask rcnn提出的改變很簡單:避免任何的RoI邊界(boundaries)或者bin的量化(比如使用x/16而不是[x/16])。我們在每個RoI bin中的4個常規的取樣位置使用雙線性插值計算輸入特徵的準確值,並將結果融合(使用max或average)。RoIAlign對演算法有了很大的提高。

網路結構:
Mask RCNN分成三個部分,第一個是主幹網路用來進行特徵提取,第二個是頭結構用來做邊界框識別(分類和迴歸),第三個就是mask預測用來對每一個ROI進行區分。

主幹網路使用的是50層的深度殘差網路ResNet50和Feature Pyramid Network(FPN)
這裡寫圖片描述
如上圖為ResNet的結構,ResNet提出了一種減輕網路訓練負擔的殘差學習框架,這種網路比以前使用過的網路本質上層次更深。其明確地將這層作為輸入層相關的學習殘差函式,而不是學習未知的函式。在ImageNet資料集用152 層(據說層數已經超過1000)——比VGG網路深8倍的深度來評估殘差網路,但它仍具有較低的複雜度。在2015年大規模視覺識別挑戰賽分類任務中贏得了第一。
FPN根據特徵的規模大小,從不同級別層次的特徵中提取 RoI features 。

這裡寫圖片描述
這裡寫圖片描述
在網路主幹上,作者的結論是: Using a ResNet-FPN backbone for feature extraction with Mask RCNN gives excellent gains in both accuracy and speed.

頭結構:
在網路的頭部,我們近似使用faster rcnn之前的結構,新增一個全卷積mask預測分支。特別地,我們從ResNet和FPN來擴充套件Faster R-CNN box heads。
這裡寫圖片描述
上圖右部分是該網路的頭結構,其中14X14是空間解析度spatial resolution,256是頻道數,3X3卷積核進行卷積4次得到14X14X256,再2×2 且步長 stride為 2進行deconvs,並且在隱層使用ReLU,得到28X28X256再進行全連線得到輸出,作為網路主幹的輸入。
訓練細節:
ROI判斷是否活躍,根據IOU是否具備>=0.5的ground-truth box。損失函式中的Lmask僅受活躍的ROI影響,mask target是ROI和ground-truth box的交集。
在訓練中,採用圖片中心去訓練,且重新resize圖片大小為800畫素。

3、論文結論
論文中此處這些表格是分別對mask rcnn的內部採用FPN和ROIAlign作出實驗進行驗證性質上有提高。

此處的AP是平均的IOU 閾值。最終,Mask RCNN的效果對比在下圖。
這裡寫圖片描述
最後將Mask RCNN拓展應用於了城市行人姿勢預測 。將關鍵點的位置建模為 one-hot mask,採用 Mask R-CNN 來預測每個 K 關鍵點型別(例如左肩,右肘)的 K mask。這個任務證明了 Mask R-CNN 的靈活性。

這裡寫圖片描述
本文的程式碼還未開放。目前準備執行並學習下,faster rcnn的程式碼。