第 i個二值掩膜輸出就是該RoI的損失 Lmask
對於預測的二值掩膜輸出,我們對每個像素點應用sigmoid函數,整體損失定義為平均二值交叉損失熵。
引入預測K
個輸出的機制,允許每個類都生成獨立的掩膜,避免類間競爭。這樣做解耦了掩膜和種類預測。不像是FCN的方法,在每個像素點上應用softmax函數,整體采用的多任務交叉熵,這樣會導致類間競爭,最終導致分割效果差。
掩膜表示到RoIAlign層
在Faster R-CNN上預測物體標簽或bbox偏移量是將feature map壓縮到FC層最終輸出vector,壓縮的過程丟失了空間上(平面結構)的信息,而掩膜是對輸入目標做空間上的編碼,直接用卷積形式表示像素點之間的對應關系那是最好的了。
輸出掩膜的操作是不需要壓縮輸出vector,所以可以使用FCN(Full Convolutional Network),不僅效率高,而且參數量還少。為了更好的表示出RoI輸入和FCN輸出的feature之間的像素對應關系,提出了RoIAlign層。
先回顧一下RoIPool層:
其核心思想是將不同大小的RoI輸入到RoIPool層,RoIPool層將RoI量化成不同粒度的特征圖(量化成一個一個bin),在此基礎上使用池化操作提取特征。
下圖是SPPNet內對RoI的操作,在Faster R-CNN中只使用了一種粒度的特征圖:
平面示意圖如下:
這里面存在一些問題,在上面量操作上,實際計算中是使用的是[x/16]
, 16的量化的步長, [·]是舍入操作(rounding
)。這套量化舍入操作在提取特征時有着較好的魯棒性(檢測物體具有平移不變性等),但是這很不利於掩膜定位,有較大負面效果。
針對這個問題,提出了RoIAlign層:避免了對RoI邊界或bin的量化操作,在擴展feature map時使用雙線性插值算法。這里實現的架構要看FPN論文:
一開始的Faster R-CNN是基於最上層的特征映射做分割和預測的,這會丟失高分辨下的信息,直觀的影響就是丟失小目標檢測,對細節部分丟失不敏感。受到SSD的啟發,FPN也使用了多層特征做預測。這里使用的top-down的架構,是將高層的特征反卷積帶到低層的特征(即有了語義,也有精度),而在MRCNN論文里面說的雙線性差值算法就是這里的top-down反卷積是用的插值算法。
總結
MRCNN有着優異的效果,除去了掩膜分支的作用,很大程度上是因為基礎特征網絡的增強,論文使用的是ResNeXt101+FPN的top-down組合,有着極強的特征學習能力,並且在實驗中夾雜這多種工程調優技巧。
但是吧,MRCNN的缺點也很明顯,需要大的計算能力並且速度慢,這離實際應用還是有很長的路,坐等大神們發力!