Mask R-CNN论文理解
摘要:
- Mask RCNN可以看做是一個(gè)通用實(shí)例分割架構(gòu)。
- Mask RCNN以Faster RCNN原型,增加了一個(gè)分支用于分割任務(wù)。
- Mask RCNN比Faster RCNN速度慢一些,達(dá)到了5fps。
- 可用于人的姿態(tài)估計(jì)等其他任務(wù);
?
1、Introduction
- 實(shí)例分割不僅要正確的找到圖像中的objects,還要對(duì)其精確的分割。所以Instance Segmentation可以看做object dection和semantic segmentation的結(jié)合。
- Mask RCNN是Faster RCNN的擴(kuò)展,對(duì)于Faster RCNN的每個(gè)Proposal Box都要使用FCN進(jìn)行語義分割,分割任務(wù)與定位、分類任務(wù)是同時(shí)進(jìn)行的。
- 引入了RoI Align代替Faster RCNN中的RoI Pooling。因?yàn)镽oI Pooling并不是按照像素一一對(duì)齊的(pixel-to-pixel alignment),也許這對(duì)bbox的影響不是很大,但對(duì)于mask的精度卻有很大影響。使用RoI Align后mask的精度從10%顯著提高到50%,第3節(jié)將會(huì)仔細(xì)說明。
- 引入語義分割分支,實(shí)現(xiàn)了mask和class預(yù)測(cè)的關(guān)系的解耦,mask分支只做語義分割,類型預(yù)測(cè)的任務(wù)交給另一個(gè)分支。這與原本的FCN網(wǎng)絡(luò)是不同的,原始的FCN在預(yù)測(cè)mask時(shí)還用同時(shí)預(yù)測(cè)mask所屬的種類。
- 沒有使用什么花哨的方法,Mask RCNN就超過了當(dāng)時(shí)所有的state-of-the-art模型。
- 使用8-GPU的服務(wù)器訓(xùn)練了兩天。
?
2、Related Work
相比于FCIS,FCIS使用全卷機(jī)網(wǎng)絡(luò),同時(shí)預(yù)測(cè)物體classes、boxes、masks,速度更快,但是對(duì)于重疊物體的分割效果不好。
?
3、Mask R-CNN
MaskRCNN網(wǎng)絡(luò)結(jié)構(gòu)泛化圖:
從上面可以知道,mask rcnn主要的貢獻(xiàn)在于如下:
1. 強(qiáng)化的基礎(chǔ)網(wǎng)絡(luò)
通過 ResNeXt-101+FPN 用作特征提取網(wǎng)絡(luò),達(dá)到 state-of-the-art 的效果。
2. ROIAlign解決Misalignment 的問題
3. Loss Function
?
細(xì)節(jié)描述
1. resnet +FPN
作者替換了在faster rcnn中使用的vgg網(wǎng)絡(luò),轉(zhuǎn)而使用特征表達(dá)能力更強(qiáng)的殘差網(wǎng)絡(luò)。
另外為了挖掘多尺度信息,作者還使用了FPN網(wǎng)絡(luò)。
stage1和stage2層次結(jié)構(gòu)圖:
?結(jié)合MaskRCNN網(wǎng)絡(luò)結(jié)構(gòu)圖,注重點(diǎn)出以下幾點(diǎn):
1) 雖然事先將ResNet網(wǎng)絡(luò)分為5個(gè)stage,但是,并沒有利用其中的Stage1即P1的特征,官方的說法是因?yàn)镻1對(duì)應(yīng)的feature map比較大計(jì)算耗時(shí)所以棄用;相反,在Stage5即P5的基礎(chǔ)上進(jìn)行了下采樣得到P6,故,利用了[P2 P3 P4 P5 P6]五個(gè)不同尺度的特征圖輸入到RPN網(wǎng)絡(luò),分別生成RoI.
2)[P2 P3 P4 P5 P6]五個(gè)不同尺度的特征圖由RPN網(wǎng)絡(luò)生成若干個(gè)anchor box,經(jīng)過NMS非最大值抑制操作后保留將近共2000個(gè)RoI(2000為可更改參數(shù)),由于步長(zhǎng)stride的不同,分開分別對(duì)[P2 P3 P4 P5]四個(gè)不同尺度的feature map對(duì)應(yīng)的stride進(jìn)行RoIAlign操作,將經(jīng)過此操作產(chǎn)生的RoI進(jìn)行Concat連接,隨即網(wǎng)絡(luò)分為三部分:全連接預(yù)測(cè)類別class、全連接預(yù)測(cè)矩形框box、全卷積預(yù)測(cè)像素分割mask
2. ROIAlign
對(duì)于roi pooling,經(jīng)歷了兩個(gè)量化的過程:
第一個(gè):從roi proposal到feature map的映射過程。方法是[x/16],這里x是原始roi的坐標(biāo)值,而方框代表四舍五入。
第二個(gè):從feature map劃分成7*7的bin,每個(gè)bin使用max pooling。
這兩種情況都會(huì)導(dǎo)致證輸入和輸出之間像素級(jí)別上不能一一對(duì)應(yīng)(pixel-to-pixel alignment between network input and output)。
為了解決ROI Pooling的上述缺點(diǎn),作者提出了ROI Align這一改進(jìn)的方法。ROI Align的思路很簡(jiǎn)單:取消量化操作,使用雙線性內(nèi)插的方法獲得坐標(biāo)為浮點(diǎn)數(shù)的像素點(diǎn)上的圖像數(shù)值,從而將整個(gè)特征聚集過程轉(zhuǎn)化為一個(gè)連續(xù)的操作。值得注意的是,在具體的算法操作上,ROI Align并不是簡(jiǎn)單地補(bǔ)充出候選區(qū)域邊界上的坐標(biāo)點(diǎn),然后將這些坐標(biāo)點(diǎn)進(jìn)行池化,而是重新設(shè)計(jì)了一套比較優(yōu)雅的流程:
- 遍歷每一個(gè)候選區(qū)域,保持浮點(diǎn)數(shù)邊界不做量化。
- 將候選區(qū)域分割成k x k個(gè)單元,每個(gè)單元的邊界也不做量化。
- 在每個(gè)單元中計(jì)算固定四個(gè)坐標(biāo)位置,用雙線性內(nèi)插的方法計(jì)算出這四個(gè)位置的值,然后進(jìn)行最大池化操作。
如上,roi映射到feature map后,不再進(jìn)行四舍五入。然后將候選區(qū)域分割成k x k個(gè)單元, 在每個(gè)單元中計(jì)算固定四個(gè)坐標(biāo)位置,用雙線性內(nèi)插的方法計(jì)算出這四個(gè)位置的值,然后進(jìn)行最大池化操作。
3、損失函數(shù):分類誤差+檢測(cè)誤差+分割誤差,即L=Lcls+Lbox+Lmask
?? Lcls、Lbox:利用全連接預(yù)測(cè)出每個(gè)RoI的所屬類別及其矩形框坐標(biāo)值,可以參看FasterRCNN網(wǎng)絡(luò)中的介紹。
? ?Lmask:
?① mask分支采用FCN對(duì)每個(gè)RoI的分割輸出維數(shù)為K*m*m(其中:m表示RoI Align特征圖的大小),即K個(gè)類別的m*m的二值mask;保持m*m的空間布局,pixel-to-pixel操作需要保證RoI特征 映射到原圖的對(duì)齊性,這也是使用RoIAlign解決對(duì)齊問題原因,減少像素級(jí)別對(duì)齊的誤差。
? ? ? ??K*m*m二值mask結(jié)構(gòu)解釋:最終的FCN輸出一個(gè)K層的mask,每一層為一類,Log輸出,用0.5作為閾值進(jìn)行二值化,產(chǎn)生背景和前景的分割Mask
這樣,Lmask?使得網(wǎng)絡(luò)能夠輸出每一類的 mask,且不會(huì)有不同類別 mask 間的競(jìng)爭(zhēng). 分類網(wǎng)絡(luò)分支預(yù)測(cè) object 類別標(biāo)簽,以選擇輸出 mask,對(duì)每一個(gè)ROI,如果檢測(cè)得到ROI屬于哪一個(gè)分 類,就只使用哪一個(gè)分支的相對(duì)熵誤差作為誤差值進(jìn)行計(jì)算。(舉例說明:分類有3類(貓,狗,人),檢測(cè)得到當(dāng)前ROI屬于“人”這一類,那么所使用的Lmask為“人”這一分支的mask,即,每個(gè)class類別對(duì)應(yīng)一個(gè)mask可以有效避免類間競(jìng)爭(zhēng)(其他class不貢獻(xiàn)Loss)
?② 對(duì)每一個(gè)像素應(yīng)用sigmoid,然后取RoI上所有像素的交叉熵的平均值作為L(zhǎng)mask。
?
每個(gè) ROI 區(qū)域會(huì)生成一個(gè) m*m*numclass 的特征層,特征層中的每個(gè)值為二進(jìn)制掩碼,為 0 或者為 1。根據(jù)當(dāng)前 ROI 區(qū)域預(yù)測(cè)的分類,假設(shè)為 k,選擇對(duì)應(yīng)的第 k 個(gè) m*m 的特征層,對(duì)每個(gè)像素點(diǎn)應(yīng)用 sigmoid 函數(shù),然后計(jì)算平均二值交叉損失熵,如下圖所示:
上圖中首先得到預(yù)測(cè)分類為 k 的 mask 特征,然后把原圖中 bounding box 包圍的 mask 區(qū)域映射成 m*m大小的 mask 區(qū)域特征,最后計(jì)算該 m*m 區(qū)域的平均二值交叉損失熵。
?
?訓(xùn)練和預(yù)測(cè)細(xì)節(jié):
?
?參考:
https://blog.csdn.net/wangdongwei0/article/details/83110305
https://blog.csdn.net/jiongnima/article/details/79094159
https://blog.csdn.net/xiamentingtao/article/details/78598511
http://blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b
https://www.cnblogs.com/wangyong/p/9305347.html
https://cloud.tencent.com/developer/news/189753
轉(zhuǎn)載于:https://www.cnblogs.com/CJT-blog/p/10443945.html
總結(jié)
以上是生活随笔為你收集整理的Mask R-CNN论文理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “山寨” AirPods 出货已达 6
- 下一篇: HDU4631Sad Love Stor