Mask R-CNN論文閱讀筆記


title: Mask R-CNN論文閱讀筆記
date: 2019-06-04 11:36:32
tags:

  • instance segmentation
  • paper

參考資料如下:

Abstract

Introduction

Related Work

Mask R-CNN

在Faster R-CNN的二分支預(yù)測基礎(chǔ)上,加上第三個預(yù)測分支:預(yù)測一個mask。關(guān)鍵是如何提取很欣盏(像素級別)的空間信息

Faster R-CNN回顧

Faster R-CNN第一階段“RPN”,提取出“proposal”——即有可能包含object的區(qū)域退唠,但不關(guān)心到底是什么object;第二階段本質(zhì)上是“Fast R-CNN”, 使用ROIPool對proposal的feature進行“same size”操作荤胁,再輸入到Fast R-CNN進行分類&bounding box回歸瞧预。這兩個階段用到的feature可以是共享的。


Faster R-CNN模型圖

Mask R-CNN

Mask R-CNN也是二階段方法仅政,第一階段同樣是RPN網(wǎng)絡(luò)垢油。在第二階段并行進行三個工作:①預(yù)測cls ②box offset ③binary mask

? 形式化地,對于每個ROI定義了多任務(wù)loss:L=L_{cls}+L_{box}+L_{mask}已旧,其中L_{cls},L_{box}的定義與Fast R-CNN中的一樣秸苗。對于L_{mask}: 每一個ROI有一個Km^2維度的輸出(K是cls的個數(shù)召娜,m是ROI align后輸入第二階段的特征大性送省)。如下圖所示,如果cls分支預(yù)測的是“人”秸讹,則只取“人mask”與label之間計算binary cross-entropy loss檀咙。

[圖片上傳失敗...(image-1cb66f-1562147825974)]

  • binary cross-entropy loss的計算方式如下:即每個cell計算loss,再平均

[圖片上傳失敗...(image-8b59b0-1562147825974)]

這樣的mask loss定義消除了classes之間的競爭璃诀,解除了mask分支預(yù)測和cls分支預(yù)測的耦合弧可。不同于FCN網(wǎng)絡(luò)對于segmentation loss的定義softmax+cross-entropy, mask rcnn使用的loss定義為sigmoid+binary loss劣欢。FCN網(wǎng)絡(luò)的segmentation loss的定義如下棕诵,可以看出: ①classes之間是有競爭的[sum(yi)=1] ②mask的預(yù)測也帶有了cls的預(yù)測,這樣就與cls分支耦合了

[圖片上傳失敗...(image-14fc8a-1562147825974)]

RoIAlign

RPN網(wǎng)絡(luò)輸出的region of interest是相對于原圖的凿将,映射到feature map上有可能不在整數(shù)坐標(biāo)上校套。如下圖,假設(shè)有一個5*5的feature map牧抵,而RPN輸出的region映射到feature map上是虛線區(qū)域


image
  • ROI Pooling的做法:

    • 先對ROI進行quantization操作(quantization:即對到相應(yīng)的整數(shù)上 )
    image
    • 進行pooling的bin劃分
    image
    • 再對bin進行quantization操作
    image
    • 再對每個bin取max
    image
  • ROI Align操作:

    • 直接進行bin劃分

    [圖片上傳失敗...(image-950307-1562147825974)]

    • 在bin中sample一些點笛匙,論文中說點的個數(shù)&位置的影響并不大。其中X_{low}犀变、X_{hign}是相應(yīng)bin的X最小妹孙,最大值

    [圖片上傳失敗...(image-36a4f-1562147825974)]

    • 計算每個點處的value(雙線性差值)。以S1為例获枝,他周圍的整點(2,1)蠢正、(3,1)(2,2)映琳、(3,2)机隙,這些整點處的value是知道的,因此可以計算出S1處的值萨西,計算如下:

    [圖片上傳失敗...(image-bfd0d-1562147825974)]

    • 每個bin有四個點有鹿,對這四個點進行取average(用max-pool也可以,模型對此不敏感)
    image
    image

網(wǎng)絡(luò)結(jié)構(gòu)

[圖片上傳失敗...(image-8f2b1c-1562147825974)]
為了說明這個方法的泛化性谎脯,作者提出多種Mask-RCNN結(jié)構(gòu)葱跋。不同結(jié)構(gòu)之間的差異體現(xiàn)在: (i)特征提取層的backbone結(jié)構(gòu) (ii)網(wǎng)絡(luò)的兩個head部分(Box head&Mask head)

backbone架構(gòu)

? 文中稱backbone結(jié)構(gòu)為“network-depth-features”。測試的網(wǎng)絡(luò)架構(gòu)有50 depth或者100 depth的Resnet和ResNeXt網(wǎng)絡(luò)源梭。帶有ResNets的Faster RCNN是從4-th stage最后的feature map上提取特征娱俺,作者記作C4。例如废麻,從ResNet-50 的4-th stage final feature上提取特征荠卷,則被記為ResNet-50-C4

image

? 作者還測試了更有效的bockbone——Feature Pyramid Network(FPN),帶有FPN backbone 的Faster RCNN在不同尺度上提取ROI特征烛愧。除了多尺度之外油宜,其余的部分和不同的ResNet相同掂碱。使用了ResNet-FPN backbone提取特征的Mask RCNN,在精度和速度上都有優(yōu)秀的表現(xiàn)

network head

head部分主要是在已有結(jié)構(gòu)上添加了全卷積的mask預(yù)測分支慎冤。作者主要拓展了以Resnet和FPN為基礎(chǔ)網(wǎng)絡(luò)的Faster RCNN box head疼燥。以FPN基礎(chǔ)網(wǎng)絡(luò)為例:

image
  • box head

[圖片上傳失敗...(image-250f2c-1562147825974)]

① FPN-ROI mapping:將ROI對應(yīng)到特定scale的feature map上。每個ROI有一個pooler scale屬性蚁堤,可以從pooler scale知道對應(yīng)的是哪個feature map醉者。

FPN網(wǎng)絡(luò)如下:

[圖片上傳失敗...(image-c82a46-1562147825974)]

可知pooler scale有1/4[P2],1/8[P3]披诗,1/16[P4]撬即,1/32[P5]四種(P6不參與這一步),通過如下公式:

[圖片上傳失敗...(image-1266cb-1562147825974)]

? 可知,lvl_{min}=2呈队、lvl_{max}=5(即Pn最小是P2搞莺,Pn最大是P5)。若某一個ROI掂咒,通過其pooler scale計算出target_{lvl}=3,則其對應(yīng)著P3才沧。

② ROI Align:將ROI對應(yīng)上Pn,進行same size操作

[圖片上傳失敗...(image-8da4ba-1562147825974)]

  • Mask Head

[圖片上傳失敗...(image-821ac0-1562147825974)]

[圖片上傳失敗...(image-a3fe5b-1562147825974)]

[圖片上傳失敗...(image-3432f6-1562147825974)]

對于每個proposal會預(yù)測num_classes個mask绍刮,到底選擇哪個mask温圆,是通過box headcls預(yù)測分支來挑選的,如上圖孩革。

實現(xiàn)細(xì)節(jié)

超參的設(shè)定依據(jù)Fast/Faster RCNN岁歉,雖然原始的任務(wù)是object detection,但作者發(fā)現(xiàn)對于instance segmentation也同樣適用

Training:

  • ROI的positive/negative:IoU[RoI&ground-truth box]>=0.5判為positive膝蜈;否則判為negative锅移。L_{mask}只定義在positive ROI上。mask的預(yù)測目標(biāo)是①intersection between RoI ②GT mask
  • image-centric training饱搏。圖像shorter edge縮放到800像素非剃。每個GPU上,每個mini-batch有2張圖片推沸,每張圖片采樣N個ROI(正負(fù)比例為1:3)备绽。采用C4 backbone,N=64鬓催;FPN backbone肺素,N=512
    • image-centric sampling:mini-batch先對圖像采樣2個,再在采樣到的圖像中采樣N個ROI宇驾,這樣同一張圖的各個ROI可以共享feature[Fast RCNN采用]倍靡;還有一種方法稱為“RoI-centric sampling”,這種方法從所有圖片的所有候選區(qū)域中均勻取樣课舍,由于ROI來自不同圖片塌西,為了得到ROI的feature蜗顽,這些不同的圖片都要計算其feature,開銷很大[R-CNN和SPPnet采用]
  • 作者使用8個GPU迭代了160k次雨让,相應(yīng)的learning rate=0.02并在120k迭代步lr變?yōu)?.002。衰減速率為0.0001忿等,動量為0.9.
  • 為了方便消融性實驗栖忠,RPN的獨立訓(xùn)練的,但由于RPN和Mask RCNN使用相同的backbone贸街,因此是可以共享的

Inference:

  • mask分支只應(yīng)用在top 100 score的detected box上
  • 每個ROI有cls_num個mask庵寞,但是依據(jù)cls branch,選出第k個mask不铆。對于m*m的mask湖饱,先resize to ROI size酗昼,再二值化

實驗

各種指標(biāo)

  • 簡單指標(biāo):下面的“覆蓋上了”、“沒有”都是以IoU=0.5\ or\ 0.75\ or\ …為閾值的(大于閾值說明覆蓋上了古沥,小于閾值說明沒有覆蓋上)

    • TP(true positive): 有GT,且mask覆蓋上了(準(zhǔn)確)
    • TN:在背景處娇跟,算法預(yù)測出是背景(準(zhǔn)確)
    • FP:預(yù)測的mask處岩齿,沒有GT (過預(yù)測了)
    • FN:有GT的地方,沒有mask(沒預(yù)測到)
  • mask IoU:IoU=(GT \cap MASK)/(GT \cup MASK)

image
image
  • AP(Average Precision)

    • 查準(zhǔn)率:Precision=TP/(TP+FP)苞俘,這用公式應(yīng)用在test set中的某一類
    • 由于TP等確定盹沈,和IoU的閾值有關(guān),因此可以寫成Precision(t)=TP(t)/(TP(t)+FP(t))
    • 為了考慮全面吃谣,可以取不同的閾值t乞封,如0.5:0.05:0.95,(即岗憋,從0.5開始肃晚,以0.05為步長,一直取到0.95)仔戈,再在閾值層面取平均\overline{Precision(t)}=\frac{1}{|threshold|}{\sum TP(t)/(TP(t)+FP(t))}
    • AP=\frac{1}{cls\_num}\sum^{cls\_num}_{i}\overline{Precision(t)}:即對所有類的\overline{Precision(t)}做平均陷揪。
    • 即:AP=\frac{1}{cls\_num}\sum^{cls\_num}_{i}\frac{1}{|threshold|}{\sum TP(t)/(TP(t)+FP(t))}.即:現(xiàn)在閾值層面取平均,再在cls層面取平均
    • AP_{50}杂穷,即閾值只取0.5時悍缠,計算出來的AP
    • AP_{S/M/L}:即AP_{small/medium/large}。AP for small objects: area<32*32; for medium objects: 32*32<area<96*96; for large objects: area>96*96
  • AR(Average Recall)

    • 查全率:Recall=TP/(TP+FN)
    • 同上:AR計算公式如下:

    [圖片上傳失敗...(image-68e17b-1562147825974)]

數(shù)據(jù)集介紹

參考文章如下:1. PASCAL VOC介紹 2.COCO介紹

PASCAL VOC數(shù)據(jù)集

  • 分布如下:
image

即耐量,VOC 2012包含了VOC 0812的所有數(shù)據(jù)飞蚓。普遍使用的是 VOC2007和VOC2012數(shù)據(jù)集,因為二者是互斥的廊蜒。

  • 數(shù)據(jù)量
    • VOC 2007共10k image:5k train+val(train趴拧、val不分開的)以及5k test———>20 cls
    • VOC 2012【檢測任務(wù)】: trainval有11540張圖片共27450個物體溅漾;測試集大小不知道,還沒有公布(VOC 2017的測試集以及l(fā)abel已經(jīng)公布了)———>20 cls
    • VOC 2012【分割任務(wù)】:trainval有 2913張圖片共6929個物體著榴;測試集大小不知道添履,還沒有公布———>20 cls

COCO數(shù)據(jù)集

  • 數(shù)據(jù)量(2014年)———>80 cls
    • train/val/test分別為80k/40k/40k
  • 數(shù)據(jù)劃分
    • 訓(xùn)練集:80K的train + 35K的val(35K的val稱為“trainval 35k”)
    • 測試集【本地】:剩余的5K val(被稱為“minival”)
    • 測試集【在線】:提交到官方的evaluation server(稱為“test-dev”)

Main Results

作者對比了COCO 2015和COCO 2016的冠軍模型MNC和FCIS,在without bells and whilstles(可以理解為不需要花里胡哨的東西脑又,例如不需要OHEM暮胧、data-augment等)的情況下,Mask R-CNN with ResNet-101-FPN都能超越花里胡哨的FCIS+++(which includes multi-scale train/test, horizontal flip test, and online hard example mining)问麸。作者雖然沒有嘗試往衷,但是認(rèn)為這些花里胡哨的東西用在Mask RCNN上應(yīng)該也能改進。

模型對比圖

? 通過模型的一些輸出圖片可以發(fā)現(xiàn)严卖,F(xiàn)CIS+++有個普遍存在的缺點席舍,即在實例與實例的重疊處表現(xiàn)不好,說明其對于實例分割的基礎(chǔ)問題哮笆,并沒有很好的解決来颤。而Mask RCNN卻能應(yīng)對

上面是FCIS+++,下面是Mask RCNN

消融性實驗(Ablation Experiments)

消融性實驗有點控制變量的意思稠肘,mask RCNN有一系列pipelines脚曾,如A、B启具、C等本讥,消融性實驗就是看各個部分的貢獻到底有多大,各個部分是不是彼此依賴鲁冯、相互促進

  • 結(jié)構(gòu)
    • FPN > C4
    • ResNet 101 > ResNet 50
    • ResNeXt 101 > ResNet 101
  • Independent Masks > Multinomial: 見前面L_{mask}的介紹
  • RoIAlign > RoIWarp ~= RoIPool
    • 使用stride-32的C5 feature比使用stride-16的C4 feature有著更高的精度——說明RoIAlign極大解決了“大步長(large-stride)” feature的挑戰(zhàn)(檢測和分割領(lǐng)域)
  • mask branch:由于mask的預(yù)測是需要空間信息的拷沸,因此全卷積(FCN)branch > MLP(多層全連接)

Bounding box detection result

消融性實驗的指標(biāo)針對的是最終mask的AP,現(xiàn)在討論bbox

  • full trained Mask R-CNN:表現(xiàn)優(yōu)于Faster R-CNN的各種變種(忽略Mask R-CNN的mask branch輸出)
  • part trained Mask R-CNN(不訓(xùn)練mask branch)——也稱為"Faster R-CNN with RoIAlign": 優(yōu)于Faster R-CNN的各種變種【RoIAlign的功勞】
  • full trained Mask R-CNN > part trained Mask R-CNN【multi-task training的功勞薯演,即mask branch也有一定的貢獻】

時間(速度)

Inference:

作者使用Faster RCNN的4-step alternating training方法訓(xùn)練

  • ResNet-101-FPN撞芍。模型在每張圖片需要195ms的GPU時間(Nvidia Tesla M40)+ 15ms CPU時間(resizing output to original resolution)。雖然是共享了特征跨扮,但是統(tǒng)計意義上和不共享特征有著相同的mask AP
  • ResNet-101-C4序无。耗費~400ms,因此不推薦
Faster RCNN的4-step training

訓(xùn)練:

  • 在COCO trainval35k上衡创,8-GPU同步訓(xùn)練
    • ResNet-50-FPN:32 hours(0.72s per mini batch——16 images)
    • ResNet-101-FPN:44 hours

Enhance

許多用在detection/segmentation的技巧也可以用在Mask RCNN上

  • updated baseline(超參的改變)
    • 160k次迭代 ——> 180K次迭代
    • 在120k次learning rate變成1/10 ——> 在120k帝嗡、160k迭代都變成1/10
    • NMS threshold:0.3 ——> 0.5
  • End-to-end training: “approximate 版本”
  • pre-trained使用1k-class subset of ImageNet ——> 5k-class subset of ImageNet
  • Train-time augmentation: 增加到260k次迭代
    • training 階段: sample scale from [640,800] pixels
    • learning rate:在200k、240k分別reduced by 10
  • deeper 結(jié)構(gòu):101-layer ResNeXt ——> 152-layer
  • Non-local(NL): [todo]
  • test-time augmentation: 綜合scale=[400: 100: 1200]&水平翻轉(zhuǎn)的結(jié)果
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末璃氢,一起剝皮案震驚了整個濱河市哟玷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌一也,老刑警劉巖巢寡,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喉脖,死亡現(xiàn)場離奇詭異,居然都是意外死亡抑月,警方通過查閱死者的電腦和手機树叽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谦絮,“玉大人题诵,你說我怎么就攤上這事“じ澹” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵京痢,是天一觀的道長奶甘。 經(jīng)常有香客問我,道長祭椰,這世上最難降的妖魔是什么臭家? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮方淤,結(jié)果婚禮上钉赁,老公的妹妹穿的比我還像新娘。我一直安慰自己携茂,他們只是感情好你踩,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讳苦,像睡著了一般带膜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸳谜,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天膝藕,我揣著相機與錄音,去河邊找鬼咐扭。 笑死芭挽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝗肪。 我是一名探鬼主播袜爪,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薛闪!你這毒婦竟也來了饿敲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤逛绵,失蹤者是張志新(化名)和其女友劉穎怀各,沒想到半個月后倔韭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡瓢对,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年寿酌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硕蛹。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡醇疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出法焰,到底是詐尸還是另有隱情秧荆,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布埃仪,位于F島的核電站乙濒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卵蛉。R本人自食惡果不足惜颁股,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傻丝。 院中可真熱鬧甘有,春花似錦、人聲如沸葡缰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泛释。三九已至幌氮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胁澳,已是汗流浹背该互。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留韭畸,地道東北人宇智。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像胰丁,于是被迫代替她去往敵國和親随橘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容