文章目錄
- 文章提出的背景
- 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)不是一個東西,執行個體分割是語義分割下屬的一個小領域,
在網上找了一張圖來看一下他倆的差別。

從左到右,目标檢測,語義分割,執行個體分割,可以看出來 語義分割隻是像素級層面區分不同的分類,比如人都是一個顔色的,而執行個體分割是要分開每個不同的實體,即使是同一個類别也要用不同的顔色分開。
作者為了完成高品質的分割任務,在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整體結構:
看一下作者在論文中給出的整體結構圖:
說明一下這張圖,左邊圖檔進來之後 先走 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池化是存在一定問題的,比如下圖:
這是原來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,文中提出了兩種架構。
這兩張圖都隻展示了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之間的競争,達到解耦的效果。