mask rcnn算法原理图_基于MASK RCNN算法实现瑕疵图像识别(训练模型及应用)
數(shù)據(jù)的準(zhǔn)備其實(shí)是最花功夫和時(shí)間的,度過了上一個(gè)階段后,就進(jìn)入激動(dòng)的模型訓(xùn)練階段了,首先簡(jiǎn)要聊聊我對(duì)Mask RCNN算法的理解:
MaskRCNN是何凱明大神基于FastRCNN的改進(jìn),2018年初在tensorflow上實(shí)現(xiàn)了該模型算法。在原有FastRCNN的基礎(chǔ)上,將ROIPooling部分調(diào)整為ROIAlign,同時(shí)增加mask值描述分類。我對(duì)整個(gè)Mask RCNN的理解如下:
MaskRCNN 是一種two stage圖像檢測(cè)方法,追求精度和識(shí)別效果,所謂two stage,就是說第一步先要對(duì)圖像進(jìn)行掃描,然后生成目標(biāo)區(qū)域,認(rèn)為里面有東西;第二部再進(jìn)行圖片分類以及生成界限框(矩形框rois)和mask。與yolo和視網(wǎng)膜等追求速度的one stage算法不一樣。
下面一步一步說,first stage:
圖像進(jìn)來首先是卷積層:這是一個(gè)標(biāo)準(zhǔn)的殘差網(wǎng),代碼使用的是ResNet101網(wǎng)絡(luò)作為特征抽取器,前面的幾層可以檢測(cè)低層次的特征,比如邊緣和邊角,后面的層次可以檢測(cè)一些高級(jí)特征,具體汽車、人、天空等等,通過這個(gè)backbone網(wǎng)絡(luò),圖片會(huì)被提取出32*32的特征圖 共計(jì)2048個(gè)。這些特征圖會(huì)進(jìn)入下一個(gè)stage
在殘差網(wǎng)絡(luò)生成特征的同時(shí),FPN特征金字塔也能更好識(shí)別物體的多重尺度上的特征,它將不同層級(jí)的特征可以自由的傳遞。雖然最后一層的feature maps 語義強(qiáng),但是位置和分辨率都比較低,容易檢測(cè)不到比較小的物體。FPN的功能就是融合了底層到高層的feature maps ,從而充分的利用了提取到的各個(gè)階段的特征(ResNet中的C2-C5? ? ,參閱https://blog.csdn.net/remanented/article/details/79564045)。
這里再說說高層上采樣:為了在圖像分辨率高的時(shí)候看見小東西,就要把后面分辨率低的特征拿到前面分辨率高的圖樣里融合成新的特征。繞嘴。。。
這段代碼能看出先生成上層特征,再生成下層特征 ,upsampling即是上采樣。原代碼將FPN放在RPN網(wǎng)絡(luò)中用于生成proposal,原來的RPN網(wǎng)絡(luò)是以主網(wǎng)絡(luò)的某個(gè)卷積層輸出的feature map作為輸入,簡(jiǎn)單講就是只用這一個(gè)尺度的feature map。但是現(xiàn)在要將FPN嵌在RPN網(wǎng)絡(luò)中,生成不同尺度特征并融合作為RPN網(wǎng)絡(luò)的輸入。(參閱https://blog.csdn.net/u014380165/article/details/72890275)
ResNet殘差網(wǎng)結(jié)構(gòu)
好了,下面談?wù)剬?duì)second stage的理解。
RPN 區(qū)域推薦的網(wǎng)絡(luò),用于幫助網(wǎng)絡(luò)推薦感興趣的區(qū)域,首先是來自FPN輸出的特征P2到P5,即conv feature map
獲得窗口坐標(biāo)和前后景置信度
接下來就是RoIAlign了,這也是MaskRCNN的重點(diǎn)改進(jìn)
ROIpooling與ROIalign的區(qū)別
可以看出來,兩者最大的區(qū)別就是ROIPooling做了2次取整,從圖片到特征圖,又從特征圖到ROI池化層,這對(duì)于圖像分割會(huì)產(chǎn)生很大的誤差。RoiAlign采用雙線性插值來得到固定四個(gè)點(diǎn)坐標(biāo)的像素值。得到固定的7*7的區(qū)域特征圖
這些搞定了,就可以開始分類和mask了:包括了物體檢測(cè)最終的classes和bounding boxes。該部分是利用了之前檢測(cè)到了ROI進(jìn)行分類和回歸(是分別對(duì)每一個(gè)ROI進(jìn)行);mask的預(yù)測(cè)也是在ROI之后的,通過全連接層來進(jìn)行的。因?yàn)槊總€(gè)ROI只對(duì)應(yīng)一個(gè)物體,只需對(duì)其進(jìn)行語義分割就好,相當(dāng)于了實(shí)例分割了(? 在訓(xùn)練的時(shí)候,二者都是同時(shí)進(jìn)行的;在預(yù)測(cè)的時(shí)候,先得到分類的結(jié)果,然后再把此結(jié)果傳入到mask預(yù)測(cè)中得到mask)
---------------------------------------------------------------------------------------------------------------------------
以上是模型的預(yù)測(cè)原理,下面談?wù)剬?shí)際的訓(xùn)練,訓(xùn)練的時(shí)候要先注明是訓(xùn)練的哪一個(gè)部分:
我這里采用的是訓(xùn)練頭部70 epoch,訓(xùn)練resnet stage 5+ 20epoch,總計(jì)訓(xùn)練90epoch,step設(shè)置為100.
STEPS_PER_EPOCH 要在config類里面事先說明。
一般情況下訓(xùn)練到stage5+就可以了
90輪訓(xùn)練的tensorboard展示
整整跑了130小時(shí)。。。
mAP的計(jì)算可以調(diào)用util的方法,實(shí)際上,我們發(fā)現(xiàn)關(guān)于臟點(diǎn)類的識(shí)別,在系統(tǒng)的總體loss值下降到.5以內(nèi)既可以滿足要求。
另外通過visualize里的方法,可以實(shí)現(xiàn)豐富的圖像識(shí)別效果
以下為臟點(diǎn)類瑕疵的識(shí)別效果:
原圖
訓(xùn)練效果圖
訓(xùn)練不足時(shí),會(huì)出現(xiàn)誤識(shí)別現(xiàn)象
對(duì)于鋼板擦痕和劃痕的識(shí)別效果比較奇怪,超過一定訓(xùn)練輪數(shù)后,會(huì)出現(xiàn)過擬合現(xiàn)象。有點(diǎn)進(jìn)一步研究:
正常識(shí)別效果
過擬合
具體識(shí)別規(guī)律必須要實(shí)際確認(rèn),loss和mAP只能算作輔助吧,訓(xùn)練不一定越多越好,這就是本次”煉丹“的體會(huì)吧。
總結(jié)
以上是生活随笔為你收集整理的mask rcnn算法原理图_基于MASK RCNN算法实现瑕疵图像识别(训练模型及应用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语言用加法实现加饭运算_「编程之美」用C
- 下一篇: ftp上传当天文件的方法_五种方法将文件