天天看點

【目标檢測 論文泛讀】 Mask R-CNN

文章目錄

  • ​​文章提出的背景​​
  • ​​Faster R-CNN回顧​​
  • ​​作者的改進思路​​
  • ​​Mask R-CNN整體結構:​​
  • ​​RoIAlign​​
  • ​​Mask​​
  • ​​Mask R-CNN的兩種模型​​
  • ​​小總結​​

R-CNN系列推演:

  • ​​R-CNN 論文解讀​​
  • ​​SSPnet 論文解讀​​
  • ​​Fast R-CNN 論文解讀​​
  • ​​Faster R-CNN 論文解讀​​
  • ​​FPN 論文解讀​​
  • ​​Mask R-CNN 論文解讀​​

每一篇都是上一篇或上幾篇的改造版,按順序看會比較好。

這篇論文是基于Faster R-CNN和FPN的改良版。

論文下載下傳位址:​​​https://arxiv.org/pdf/1703.06870.pdf​​

論文題目:Mask R-CNN

文章提出的背景

Mask R-CNN主要解決的是執行個體分割問題,看到部分視訊或者部落格将這裡直接說成語義分割,不是很準确。

語義分割和執行個體分割的差別:

執行個體分割(Instance segmentation)和語義分割(Semantic segmentation)不是一個東西,執行個體分割是語義分割下屬的一個小領域,

在網上找了一張圖來看一下他倆的差別。

【目标檢測 論文泛讀】 Mask R-CNN

從左到右,目标檢測,語義分割,執行個體分割,可以看出來 語義分割隻是像素級層面區分不同的分類,比如人都是一個顔色的,而執行個體分割是要分開每個不同的實體,即使是同一個類别也要用不同的顔色分開。

作者為了完成高品質的分割任務,在Faster R-CNN 的基礎上進行改造模型,提出了 Mask R-CNN。

Faster R-CNN回顧

整個模型是基于 Faster R-CNN的,是以先回顧一下這個模型。一張表格,清晰易懂。

Faster R-CNN
整張圖檔給CNN,提取出feature map
feature map送給RPN子產品,RPN内部: 滑窗生成anchors,然後分類(背景還是物體)+回歸修正 得到精準的候選框。
精準候選框+第一步整張圖的feature map送給ROI池化,生成候選框的feature map,最後分類(物體的分類)+回歸。

作者的改進思路

Mask R-CNN整體結構:

看一下作者在論文中給出的整體結構圖:

【目标檢測 論文泛讀】 Mask R-CNN

說明一下這張圖,左邊圖檔進來之後 先走 Faster R-CNN那一套, 就是一個Backbone模型提取feature map,然後 RPN 然後再RoIAlign,之後分類+回歸+mask。

這裡相較于Faster R-CNN 隻有兩個變動,一個是改造了原來的ROI池化,一個是在最後多加了一個mask分支用于分割。

是以 Mask R-CNN = Backbone+RPN+RoIAlign+(分類+回歸+mask)。

RoIAlign

RoIAlign是作者對于Faster R-CNN的改動之一,對于原來的ROI池化是存在一定問題的,比如下圖:

【目标檢測 論文泛讀】 Mask R-CNN

這是原來ROI池化中的一步操作,将原圖的ROI(候選框)映射到feature map上,可以看到比例的變換,這裡就有可能出現浮點數,但換成整數了,也就是說特征圖與原始圖像是不對準的(mis-alignment),這就造成了精度的損失問題。

還有一個地方,ROI在剛提出的時候是用來代替SSPnet中的spp模型,他又一個重要作用就是固定輸出大小供FC使用。而在任意尺寸變為固定大小的過程中,又發生了上述的尺寸變換産生浮點數卻變成整數的精度損失問題。

mis-alignment問題對于分類影響不大,但對于分割任務影響較大。

作者為了解決這個問題,對ROI進行了改造,提出了ROIAlign模型。ROI Align方法取消整數化操作,保留了小數,使用雙線性插值的方法獲得坐标為浮點數的像素點上的圖像數值。但在實際操作中,ROI Align并不是簡單地補充出候選區域邊界上的坐标點,然後進行池化,而是重新進行設計。

​​ROIAlign、ROIPling詳細原理​​

Mask

這是作者相較于Faster R-CNN的第二個改動。

就是原模型在最後隻有回歸和分類兩個分支,作者新加入了mask分支用于分割任務。

mask的損失函數就更新成:,或表達為:

其中分類和回歸的定義和Faster R-CNN一樣。

對于Mask的損失函數,假設一共有K個類别,則mask分割分支的輸出次元是 , 對于 中的每個點,都會輸出K個二值Mask(每個類别使用sigmoid輸出),計算loss的時候,并不是每個類别的sigmoid輸出都計算二值交叉熵損失,而是該像素屬于哪個類,哪個類的sigmoid輸出才要計算損失。并且在測試的時候,通過分類分支預測的類别來選擇相應的mask預測。這樣,mask預測和分類預測就徹底解耦了。

Mask R-CNN的兩種模型

為了産生對應的Mask,文中提出了兩種架構。

【目标檢測 論文泛讀】 Mask R-CNN

這兩張圖都隻展示了RoI輸出之後的結構。

左圖:

使用了ResNet作為Backbone,後面一路進FC然後分類+回歸,一路反卷積來提升分辨率,然後分割。

最後mask 的 14 * 14 * 80 其中 80個channel指80個class對應的mask,且每個mask是14 * 14的矩陣。每個格子都是binary。

res5指的是ResNet的第五個stage。

右圖:

小總結

  • 分析了ROI池化對于mask的不足,并提出了ROIAlign模型;
  • 改進了Faster R-CNN模型,加入了mask分支做分割任務;
  • mask與回歸分類分成兩個分支,使用Binary Loss代替Multinomial Loss,消除不同類别的mask之間的競争,達到解耦的效果。

繼續閱讀