1. 程式人生 > >Mask RCNN論文筆記

Mask RCNN論文筆記

Mask RCNN是大神Kaiming He的一大神作。

1、概述

Mask RCNN主要是再Faster RCNN上進行了一些調整(將RoIpooling層替換為了RoIAlign層),並且在RoIAlign後增加了一個進行instance segmentation的分支。

圖片來源

上圖展示了一個Mask RCNN的網路結構,用RoIAlign來代替RoIpooling部分,並且在分類與迴歸中添加了並列的分支FCN(mask層)

2、loss function

訓練中,文章定義了多個任務的損失是對每一個RoI有L=L_{cls}+L_{reg}+L_{mask},其中的前兩個損失是同faster RCNN中一樣的定義,而第三個損失L_{mask}

是mask層的損失計算。mask對應的每個RoI的輸出維度是K*m^2,表示K個類別共有K個mxm的二進位制掩碼【論文中m*m對應池化解析度7*7,通過對每個class對應一個mask可以有效地避免同類競爭】,這裡使用的是per-pixel sigmoid【在論文中有與per-pixel softmax進行對比】,將損失函式定義為L_mask average binary cross-entropy,loss只定義在有對應gt的mask上,其他mask不對loss有貢獻值。

3、RoIAlign【重點推薦:一篇不錯的文

論文比較主要的地方是用RoIAlign來代替RoIpooling,因為原來的faster RCNN是無需做例項分割的,而例項分割是需要在pixel級別上有較高的精確度,但是因為RoIpooling的量化操作,使其對實力分割上的一個精度會比較低,因此作者就提出了使用RoIAlign來代替RoIpooling。

  • RoIpooling的操作主要是為了將不同尺寸的feature map操作成尺寸一樣大小的feature。
  • RoIAlign沒有像RoIpooling那樣做量化操作【in paper, use x/16 instead of round(x/16)】,並且使用了雙線性插值to compute the exact values of the input features at four regularly sampled locations in each RoI bin, and aggregate the result(using max or average)【具體細節等看完程式碼吧】

一張來自上面的連結博文的比較好的圖。【理解:RoIAlign的RoI的邊界無需量化取整,而是如圖中RoIAlign部分,將得到的RoIAlign,框的邊界仍然取浮點數,此時,在每個bin(最終需要得到的尺寸的規模為t*t,那麼有t*t個bins)中取樣四個點【平均取的四個點?】】,四個點的值由鄰近的feature map的pixel值通過雙線性插值法來取得,最後將這四個取樣點的值進行max或average來作為這個bin的值,最終可得到尺寸大小一樣的RoI所對應的更加精確的feature map區域值。   第三種方法是使用了積分的方法,連結博文中說會更加精確,但是會比較耗時。】

4、結果對比

圖片來源

5、Mask RCNN擴充套件——