彭 婷, 沈精虎, 喬 羽
(1.青島大學(xué) 機(jī)電工程學(xué)院,山東 青島 266071;2.煙臺創(chuàng)跡軟件有限公司青島分公司,山東 青島 266071)
近年來泳池溺水事故多發(fā),主要原因是沒有及時發(fā)現(xiàn)溺水者,錯過最佳急救時間所致,因此開發(fā)準(zhǔn)確率高、檢測時間短的溺水檢測系統(tǒng)十分必要。對于泳池溺水者檢測系統(tǒng),現(xiàn)有的是基于背景減法的游泳者檢測系統(tǒng)[1],利用背景減法對游泳者進(jìn)行檢測, 通過判斷水下游泳者像素范圍判斷溺水者和正常游泳者,但該法在人員較多的泳池中,由于聚類效果不佳而嚴(yán)重影響高斯混合模型建立的準(zhǔn)確性。除此之外,其他的運(yùn)動檢測法,類如光流法和幀間差分法,光流法運(yùn)算公式復(fù)雜,計算量大, 不能滿足溺水檢測的實(shí)時性。幀間差分法很難檢測出靜止或移動緩慢的前景,不能識別出靜止站立在水中或泳池邊上的游泳者,均不滿足需求。
為了提升泳池溺水檢測系統(tǒng)的準(zhǔn)確率和檢測速度,及時發(fā)現(xiàn)溺水者,本文對Mask R-CNN算法進(jìn)行優(yōu)化,通過實(shí)驗(yàn)驗(yàn)證了該算法的可行性,彌補(bǔ)了溺水檢測在深度學(xué)習(xí)領(lǐng)域的空缺。
本文提出的基于Mask R-CNN泳池中溺水行為檢測系統(tǒng)組成如圖1所示,主要部分為:1)信息采集:選用4個高清筒形網(wǎng)絡(luò)攝像機(jī)采集信息,為檢測過程提供視頻幀序列;選用可移動攝像頭拍攝視頻,讀取照片制作數(shù)據(jù)集用于訓(xùn)練過程。2)目標(biāo)檢測:采用改進(jìn)的Mask R-CNN算法實(shí)現(xiàn)泳池中人物姿勢識別。3)可視化界面:采用PyQt設(shè)計軟件,基于Python編程語言設(shè)計了交互界面,將泳池中的信息和處理結(jié)果反饋給用戶;安裝報警器,在檢測到溺水行為后發(fā)出警報。
本系統(tǒng)采用的是海康威視型號為DS—2CD1021FD—IW1,選用水上攝像頭獲取泳池畫面,將4個攝像頭分布在游泳池的四邊中線上,協(xié)同拍攝泳池的整體畫面,主要技術(shù)
圖1 溺水行為檢測系統(tǒng)組成
參數(shù)如表1所示。
表1 攝像頭主要參數(shù)
目標(biāo)檢測算法眾多,綜合考慮識別速度、準(zhǔn)確率以及使用便利原則,本文采用改進(jìn)后的掩模區(qū)域卷積神經(jīng)網(wǎng)絡(luò)(Mask R-CNN)網(wǎng)絡(luò)框架進(jìn)行泳池中溺水者檢測。本系統(tǒng)的目標(biāo)檢測模塊分為兩部分:離線訓(xùn)練檢測模型以及使用訓(xùn)練好的檢測模型進(jìn)行檢測。目標(biāo)檢測工作流程如圖2所示。
圖2 目標(biāo)檢測工作流程圖
本系統(tǒng)的可視化界面共分為3個頁面:監(jiān)控主頁面、記錄查詢頁面、視頻查詢頁面。由這三個頁面協(xié)同完成溺水行為實(shí)時檢測顯示如下:1)監(jiān)控主頁面用于顯示攝像頭實(shí)時拍攝畫面、游泳者登記信息以及標(biāo)記泳池中人員位置。2)記錄查詢頁面用于查詢顯示泳池視頻信息以及查詢顯示游泳者個人紀(jì)錄。3)視頻展示頁面用于展示并測試檢測效果。通過本地視頻對溺水行為進(jìn)行檢測,展示效果。
傳統(tǒng)的Mask R-CNN[2]采用ResNet50/ResNet100作為特征提取器提取低級特征,采用特征金字塔網(wǎng)絡(luò)(feature pyramid networks,FPN)提取小特征并輸出多層特征,采用區(qū)域建議網(wǎng)絡(luò)(region proposal network,RPN)對FPN輸出的特性圖進(jìn)行特征框選,并在興趣區(qū)域(regions of interest,ROI)對齊層上進(jìn)行分類提議并生成邊框與掩碼。Mask R-CNN的損失函數(shù)為
L=Lds+Lbox+Lmask
(1)
式中Lds為分類計算損失值,Lbox為邊框計算損失值,Lmask為掩膜計算損失值,L為網(wǎng)絡(luò)整體損失值。
本文針對泳池中游泳者溺水檢測任務(wù),對傳統(tǒng)的Mask R-CNN做出一些改進(jìn)。為提高網(wǎng)絡(luò)精度和運(yùn)算速度,將ResNet替換為優(yōu)化后的ResNeXt[3]。增加了級聯(lián)特征金字塔網(wǎng)絡(luò)(concatenated feature pyramid network,CFPN)模塊和分支,使得上下文語義信息得到了更好的利用。
2.2.1 改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)
改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,與原網(wǎng)絡(luò)結(jié)構(gòu)不同的,用ResNeXt代替了ResNet,特征金字塔網(wǎng)絡(luò)(FPN)生成的特征圖通過區(qū)域建議網(wǎng)絡(luò)(region proposal network,RPN)和ROI對齊層,僅用來輸出分類和邊框結(jié)果,新增的CFPN分支,結(jié)果ROI層單獨(dú)生成Mask。雖然FPN和CFPN分別經(jīng)過了ROI層,但得出的候選框任然是一一對應(yīng)的。
圖3 改進(jìn)的Mask R-CNN網(wǎng)絡(luò)結(jié)構(gòu)
2.2.2 卷積主干優(yōu)化
傳統(tǒng)Mask R-CNN算法的卷積主干采用深度殘差卷積網(wǎng)絡(luò)ResNet,解決了梯度消失的問題,提升了識別精度。多維殘差網(wǎng)絡(luò)ResNeXt[4]在結(jié)構(gòu)上對ResNet進(jìn)行了優(yōu)化設(shè)計,通過多分支網(wǎng)絡(luò)分組卷積結(jié)構(gòu)進(jìn)一步提高了網(wǎng)絡(luò)精度且運(yùn)算速度得到提升。
He等人在Mask R-CNN中采用ResNeXt101,ResNet50和ResNet101作為卷積主干,分別進(jìn)行對比試驗(yàn),證明ResNet101的平均精度(AP值)為35.4高于ResNet50的AP值33.6,但低于ResNeXt101的AP值36.7。
2.2.3 CFPN分支
傳統(tǒng)的Mask R-CNN網(wǎng)絡(luò)結(jié)構(gòu),采用的FPN以自頂向下的方式,通過上采樣和橫向的特征相加使較高級特征到達(dá)金字塔的較低層,但較低層的特征無法到達(dá)金字塔的較高層,使得語義信息利用不充分。與此同時,F(xiàn)PN的多維特征都是通過逐個元素相加的方式依次添加到后續(xù)圖層中,在這個加法過程中,沒有層包含高層特征和低層特征之間的相關(guān)性。實(shí)驗(yàn)[5,6]表明,利用不同層的特征之間的相關(guān)性有可能進(jìn)一步改善網(wǎng)絡(luò)的性能,與逐元素加法相比,級聯(lián)更為靈活,可以改善網(wǎng)絡(luò)性能。本文采用的CFPN[7]分支如圖4所示,改進(jìn)Mask R-CNN網(wǎng)絡(luò)結(jié)構(gòu),使其用于Mask分支,改善網(wǎng)絡(luò)性能,充分表達(dá)語義信息。
圖4 CFPN結(jié)構(gòu)
以ResNeXt為基本結(jié)構(gòu),使用P2,P3,P4,P5表示由FPN產(chǎn)生的自上而下的路徑層,使用N2,N3,N4,N5表示由CFPN產(chǎn)生的自上而下的路徑層。CFPN為解決在高級特征和低級特征之間發(fā)現(xiàn)的相關(guān)性問題,對FPN路徑層和CFPN生的路徑層加入了卷積層,其中最低層不參與此操作,Inception模塊[8]輸出將連接到CFPN的最底層。在對新生成的CFPN路徑層進(jìn)行3×3卷積計算,即可得到新生成的特征組,這些特征組將用于Mask分支。
2.2.4 評價標(biāo)準(zhǔn)
為了評價泳池中溺水檢測系統(tǒng)的性能,本文用召回率、準(zhǔn)確率[9]以及多個類的平均精度三個指標(biāo)來評估。計算公式分別如下
(2)
(3)
(4)
式中TP為真陽性樣本,代表實(shí)際和檢測結(jié)果均為正樣本的樣本;FN為假陰性樣本,代表實(shí)際為真,檢測結(jié)果為假的樣本;FP為假陽性樣本,代表實(shí)際為假,檢測結(jié)果為真的樣本;AP為平均精度,Q為類的數(shù)目。
本文采用MIT開源的標(biāo)注軟件Labelme[10]對圖像進(jìn)行語義分割,勾畫圖像中所用游泳者輪廓并標(biāo)注其狀態(tài),樣本按照游泳者狀態(tài)分類。對Labelme標(biāo)記得到的.json文件進(jìn)行格式轉(zhuǎn)換得到Mask R-CNN訓(xùn)練所需的COCO數(shù)據(jù)集格式。COCO數(shù)據(jù)集結(jié)構(gòu)主要包括圖像基本信息、標(biāo)記信息以及分類信息三部分內(nèi)容,如圖5所示。
圖5 數(shù)據(jù)集結(jié)構(gòu)
本算法模型在Python2+Caffe2[11]框架下運(yùn)行,部分底層代碼采用C++;開始訓(xùn)練之前的超參數(shù)設(shè)置為:學(xué)習(xí)率(base_lr)設(shè)置為0.001;下降策略設(shè)置為隨機(jī)梯度下降(stochastic gradiant descent,SGD),采用多分布形式(multistep);前200 000次迭代loss與accuracy下降較快,采用較小的學(xué)習(xí)率,再設(shè)置一個參數(shù)stepvalue,multistep根據(jù)這個參數(shù)值值進(jìn)行變化;在訓(xùn)練過程中,將真實(shí)的掩碼縮小至28×28,在預(yù)測過程中將預(yù)測的掩碼放大至ROI邊框的尺寸[12],得到最終的掩碼結(jié)果。
本文檢測各類人物姿態(tài)各200個樣本,共計800個樣本,待測樣本圖像分辨率被壓縮至640×360,界面運(yùn)行結(jié)果如圖6所示,泳池中各類別人物姿勢檢測準(zhǔn)確率結(jié)果,如表2所示??梢缘贸觯瑱z出率為93.3 %,誤檢率為6.4 %,檢測速率為5 FPS,檢測效率和檢測質(zhì)量均有較好的效果,達(dá)到了預(yù)期效果,且對于游泳者姿勢不斷變化的挑戰(zhàn)具有良好的魯棒性。
圖6 界面運(yùn)行結(jié)果
表2 各類別檢測結(jié)果
本文設(shè)計了基于Mask R-CNN的溺水檢測系統(tǒng),通過判斷游泳者姿勢來判別溺水者并發(fā)出警報,實(shí)驗(yàn)表明檢測速度為5 FPS,滿足泳池的安全警報作用,檢出率為93.3 %,誤檢率為6.4 %,基本滿足預(yù)期要求。細(xì)分人物姿態(tài)類別,增加泳池背景樣本,提高人物遮擋更嚴(yán)重時的檢出率是今后算法改進(jìn)的重要內(nèi)容。