1. 程式人生 > >Mask R-CNN論文筆記

Mask R-CNN論文筆記

  1. 背景及大致思路
    a. 何凱明基於Faster R-CNN提出的用於例項分割的結構框架。該框架在原本的結構上增加了用於預測mask的新支路,速度仍達到了5fps。同時,這個結構也能用於其他的視覺任務如檢測,人物關鍵點檢測。
    b. 例項分割:是物體檢測和語義分割的結合,也就是要對每個畫素都給出其對應的分類。
    c. 方法的主要改變在於,在對ROI操作時,增加了一條平行的用於預測分割的支路。這條支路是一個小的全卷積網路,也就是給出畫素到畫素的結果。
    d. ROI在操作時,會進行兩次取整操作,分別是對應到FeatureMap的一次和分割為k*k個bin的一次。每次取整造成的偏移,對於檢測任務可能不是很重要,但對於分割任務就不是很能接受了。針對這個問題,使用了ROIAlign來解決。
    e. 作者認為,將mask和類別預測分開是很重要的。所以對於每個分類,都獨立的給出一個mask,使得類間無競爭。
    f. 整個結構看起來就是FPN+Faster R-CNN+mask branch

  2. 主要模組
    a. Faster R-CNN:Mask R-CNN的主幹部分及主要思想。兩步的檢測器,第一步使用RPN得到ROI的大致邊框,然後第二步使用RoIPool,得到候選區域對應的Feature Map,並作出分類和邊框迴歸。
    b. Mask R-CNN:第一步也是通過RPN,得到ROI。但在第二步中,在分類和迴歸的基礎上,並行的得到一個二分類的mask。在訓練時,損失函式如下:
    在這裡插入圖片描述
    分別對應分類的損失,迴歸框的損失和mask的損失。在mask那一路中,我們會對於每一個類別得到一個mask,也就是說對於m * m大小的ROI,我們會得到 k * m * m個mask。但在訓練中,我們只會使用和gt一致的k的那層來計算損失。這一步和大部分的FCN網路不一樣,因為我們對於每個pixel並不是直接用softmax來預測類別,而是對於每個分類進行二分類得到最後結果。實驗顯示,這是一個很關鍵的部分。
    c. Mask Representation:不同於分類和迴歸框,這一步我們不需要使用全連線層。全連線層會丟失空間資訊,也會增加引數的數量,在實驗中,不使用全連線層也讓結果更加的準確。但這就需要在進行ROI操作時,準確的對齊於原圖,因此,作者提出了接下來的方法:RoiAlign層。
    d. RoIAlign:就像在第一部分所說,ROI的兩次取整操作,使得Feature Map和原圖有一定的漂移,那麼當感受野很大時,即使是一格的漂移,也會造成很大的誤差。於是,對於每一塊,我們都是算出對應的真實值,然後通過雙線性插值的方法,得到對應點的畫素值。
    e. Network Architecture:作者選擇了FPN作為backbone,這裡主要發生的改變就是,根據他們的尺寸,在不同的特徵層上提取RoI。具體的各層錨框大小,選擇某一層特徵層的部分在FPN中有提及。

  3. 實現細節
    a. 訓練時,只有正樣本的loss才會被計算,並保證正負樣本在1:3的比例,每張圖被縮放到800畫素的尺寸。錨框的選擇和FPN中一致。
    b. 預測時,採用FPN為backbone時會給出1000個預選框,在這些框上做預測,再使用NMS,最後對預測分最高的100個框使用mask的分支。雖然對於每一個RoI都會產生k種mask,但最後只採用分類的那個結果的那層。