于中陽(yáng),楊文輝
(上海旺鏈信息科技有限公司,上海 200443)
游泳是一項(xiàng)非常受歡迎的運(yùn)動(dòng),但是泳池溺水事故頻發(fā)。目前的泳池防溺水措施大多依賴于人工觀察,人力成本高,并且容易出現(xiàn)人工疏忽,救援不及時(shí)的現(xiàn)象。因此,研究人員提出了許多有效的泳池防溺水措施。
目前的泳池防溺水研究主要分為2 類:①基于可穿戴式防溺水設(shè)備的研究,如手環(huán)、泳帽等[1-3]。通過(guò)可穿戴式防溺水設(shè)備實(shí)時(shí)監(jiān)測(cè)游泳者的生命體征,出現(xiàn)異常,發(fā)出警報(bào)[4-6]。這種方法需要額外佩戴設(shè)備,影響了游泳者的游泳體驗(yàn),并且設(shè)備存在易受環(huán)境干擾、需要經(jīng)常維護(hù)保養(yǎng)的問(wèn)題。②基于計(jì)算機(jī)視覺的泳池防溺水研究[7-9],通過(guò)攝像頭獲取游泳者的游泳圖像,利用目標(biāo)檢測(cè)、人體姿態(tài)估計(jì)等深度學(xué)習(xí)模型分析游泳者的運(yùn)動(dòng)狀態(tài),判斷游泳者是否溺水,這種方法游泳者不需要佩戴設(shè)備,可以帶來(lái)更好的游泳體驗(yàn)。但是,當(dāng)前的基于計(jì)算機(jī)視覺的泳池防溺水技術(shù)大多利用目標(biāo)檢測(cè)算法(如YOLO 系列)研究游泳者的頭部、人體與水面的位置關(guān)系,人為設(shè)置溺水判定規(guī)則,主觀因素太強(qiáng),模型參數(shù)過(guò)多且難以確定,準(zhǔn)確率有待提高[8,10]。
具有研究意義的泳池防溺水研究主要有:Prakash[11]提出一種新方程(NEPTUNE)泳池溺水檢測(cè)系統(tǒng),先合并處理視頻序列的圖像,再利用K-means 聚類算法提取合并的圖像的特征,利用每個(gè)圖像的變量識(shí)別出溺水情況,檢測(cè)速度快,誤報(bào)率低。青島大學(xué)喬羽[12]設(shè)計(jì)了一種基于Mask R-CNN 泳池中溺水行為檢測(cè)系統(tǒng),采用Mask R-CNN 算法對(duì)游泳者圖像進(jìn)行目標(biāo)檢測(cè),訓(xùn)練出的分類器模型能夠檢測(cè)出游泳者的多種游泳行為,該系統(tǒng)的檢出率為91.2%,誤檢率為7.5%。Dulhare等[13]使用Faster R-CNN 目標(biāo)檢測(cè)模型和數(shù)據(jù)增強(qiáng)算法檢測(cè)人們?cè)谒碌男袨椤|華大學(xué)張修念[14]設(shè)計(jì)了一種基于邊緣計(jì)算平臺(tái)與計(jì)算機(jī)視覺的泳池溺水預(yù)警系統(tǒng),利用改進(jìn)的輕量級(jí)OpenPose 模型先對(duì)游泳者圖像進(jìn)行人體姿態(tài)估計(jì),將姿態(tài)標(biāo)記后的圖像送入目標(biāo)檢測(cè)模型YoLov4 進(jìn)行溺水行為檢測(cè)。
現(xiàn)有的基于計(jì)算機(jī)視覺的泳池防溺水技術(shù)漏檢、誤檢率高。因此,本文提出一種基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法,利用人體姿態(tài)估計(jì)模型OpenPose 對(duì)游泳者的圖像進(jìn)行人體姿態(tài)估計(jì),通過(guò)比較游泳者的關(guān)鍵點(diǎn)距離向量與溺水狀態(tài)的關(guān)鍵點(diǎn)距離向量的相似性來(lái)判斷是否溺水。
為了能夠準(zhǔn)確地發(fā)現(xiàn)泳池溺水游泳者,本文提出一種基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法,利用游泳者的關(guān)鍵點(diǎn)距離變化來(lái)檢測(cè)溺水行為,算法流程如圖1 所示,步驟如下。
圖1 基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法
步驟1:對(duì)游泳者視頻數(shù)據(jù)每隔10 幀截取一張圖片,輸入到訓(xùn)練好的OpenPose 姿態(tài)估計(jì)模型進(jìn)行人體姿態(tài)估計(jì)(如有關(guān)鍵點(diǎn)缺失,則進(jìn)行填充),獲取圖片中游泳者的18 個(gè)關(guān)鍵點(diǎn)坐標(biāo)。
步驟2:重新建立坐標(biāo)系,以脖子關(guān)鍵點(diǎn)為原點(diǎn),水平向右方向?yàn)閤 軸,豎直向下方向?yàn)閥 軸更新其他關(guān)鍵點(diǎn)的坐標(biāo)。計(jì)算其他17 個(gè)關(guān)鍵點(diǎn)與原點(diǎn)的距離,構(gòu)造游泳者的關(guān)鍵點(diǎn)距離向量。
步驟3:如果當(dāng)前截取的游泳者圖片的關(guān)鍵點(diǎn)距離向量與之前計(jì)算好的一個(gè)或多個(gè)溺水狀態(tài)關(guān)鍵點(diǎn)距離向量集合(總共有13 個(gè))的首個(gè)距離向量的R2大于等于0.6,則繼續(xù)對(duì)截取的下一幀游泳者圖片與對(duì)應(yīng)的溺水狀態(tài)關(guān)鍵點(diǎn)距離向量集合的第二個(gè)距離向量進(jìn)行比較,以此類推,若連續(xù)20 次關(guān)鍵點(diǎn)距離向量的R2都大于等于0.6,即截取的游泳者的20 幀圖片關(guān)鍵點(diǎn)距離變化與其中一種溺水狀態(tài)(不會(huì)同時(shí)匹配多種溺水狀態(tài))的關(guān)鍵點(diǎn)距離變化相似,則判定為溺水。否則,重新進(jìn)行關(guān)鍵點(diǎn)距離向量比較判斷。
OpenPose[15]是當(dāng)前熱門的自底向上的多人人體姿態(tài)估計(jì)模型,先利用深度學(xué)習(xí)方法檢測(cè)圖像中所有人的關(guān)鍵點(diǎn),再將關(guān)鍵點(diǎn)劃分給不同的人。相比于其他目標(biāo)檢測(cè)模型獲取游泳者的類別與邊框,通過(guò)人體姿態(tài)估計(jì)模型OpenPose 獲取游泳者的18 個(gè)關(guān)鍵點(diǎn)坐標(biāo),能夠更準(zhǔn)確地描述游泳者游泳過(guò)程中的肢體動(dòng)作變化。
如圖2 所示,OpenPose 模型的主干網(wǎng)絡(luò)VGG19的前10 層提取圖片的特征圖F,特征圖F 進(jìn)入兩分支多階段卷積神經(jīng)網(wǎng)絡(luò),其中上分支用來(lái)預(yù)測(cè)人體關(guān)鍵點(diǎn)位置置信度圖(Part Confidence Maps,PCM),下分支用來(lái)預(yù)測(cè)人體關(guān)鍵點(diǎn)的親和力域(Part Affinity Fields,PAF)。第一階段的ρ1和φ1兩個(gè)推理網(wǎng)絡(luò)生成關(guān)鍵點(diǎn)置信度圖S1和關(guān)鍵點(diǎn)親和域L1,后面階段將特征圖F 和t-1 階段的預(yù)測(cè)結(jié)果一起作為輸入,預(yù)測(cè)該階段的關(guān)鍵點(diǎn)置信度圖和關(guān)鍵點(diǎn)親和域。
圖2 OpenPose 模型網(wǎng)絡(luò)架構(gòu)圖
每個(gè)階段的PCM 和PAF 都會(huì)進(jìn)行Loss 求解,最后總的Loss 是所有Loss 的和。OpenPose 模型使用匈牙利算法進(jìn)行最大值匹配,將關(guān)鍵點(diǎn)連接成骨架。OpenPose 模型獲取的18 個(gè)關(guān)鍵點(diǎn)如圖3 所示。
圖3 OpenPose 模型獲取的18 個(gè)關(guān)鍵點(diǎn)
由于泳池?cái)z像頭的拍攝角度、泳池水面的反光、游泳者濺起的水花等影響因素,通過(guò)OpenPose 模型對(duì)截取的游泳者的圖片進(jìn)行關(guān)鍵點(diǎn)標(biāo)記,有時(shí)會(huì)丟失部分關(guān)鍵點(diǎn)信息,影響溺水檢測(cè)的結(jié)果。因此,本文根據(jù)空缺關(guān)鍵點(diǎn)的前后幀的對(duì)應(yīng)關(guān)鍵點(diǎn)的均值來(lái)填充丟失的關(guān)鍵點(diǎn)。填充游泳者丟失的關(guān)鍵點(diǎn)的計(jì)算方法如式(3)和式(4)所示。xf和yf分別代表填充的關(guān)鍵點(diǎn)的橫坐標(biāo)和縱坐標(biāo),xa,ya代表關(guān)鍵點(diǎn)出現(xiàn)空缺的前一幀對(duì)應(yīng)關(guān)鍵點(diǎn)的橫坐標(biāo)和縱坐標(biāo),xb,yb代表關(guān)鍵點(diǎn)空缺結(jié)束的視頻幀對(duì)應(yīng)關(guān)鍵點(diǎn)的橫坐標(biāo)和縱坐標(biāo)。
通過(guò)OpenPose 模型獲取游泳者的18 個(gè)關(guān)鍵點(diǎn)坐標(biāo),18 個(gè)關(guān)鍵點(diǎn)坐標(biāo)的坐標(biāo)系以圖片左上角為原點(diǎn),水平向右方向?yàn)閤 軸,豎直向下方向?yàn)閥 軸。因?yàn)橛斡菊哂斡具^(guò)程中脖子的變化幅度小,因此,重新建立坐標(biāo)系[16],如圖4 所示,以脖子關(guān)鍵點(diǎn)(x1,y1)為原點(diǎn),水平向右方向?yàn)閤 軸,豎直向下方向?yàn)閥 軸,更新游泳者18個(gè)關(guān)鍵點(diǎn)的坐標(biāo)
圖4 重新建立坐標(biāo)系
利用除脖子關(guān)鍵點(diǎn)之外的其他17 個(gè)關(guān)鍵點(diǎn)與原點(diǎn)的距離來(lái)描述游泳者的動(dòng)作,其他17 個(gè)關(guān)鍵點(diǎn)與原點(diǎn)的距離計(jì)算公式
構(gòu)造17 個(gè)關(guān)鍵點(diǎn)與原點(diǎn)的距離向量D=[d1,d2,…d17],此時(shí)d1表示關(guān)鍵點(diǎn)0 到原點(diǎn)的距離,di(i≥2)表示關(guān)鍵點(diǎn)i 到原點(diǎn)的距離。
由于游泳是個(gè)連續(xù)的動(dòng)作變化過(guò)程,因此,連續(xù)計(jì)算20 幀游泳圖片(對(duì)游泳者視頻數(shù)據(jù)每隔10 幀截取一張圖片)的關(guān)鍵點(diǎn)距離向量,構(gòu)成游泳者關(guān)鍵點(diǎn)距離向量集合Sw={D1,D2,…D20},描述了截取的20 幀游泳圖片的關(guān)鍵點(diǎn)距離變化過(guò)程。
本算法的重點(diǎn)是將游泳者的關(guān)鍵點(diǎn)距離向量與溺水狀態(tài)關(guān)鍵點(diǎn)距離向量進(jìn)行相似性比較從而判斷是否溺水。因此,構(gòu)造能夠表征溺水狀態(tài)肢體動(dòng)作變化的關(guān)鍵點(diǎn)距離向量集合是溺水判斷的關(guān)鍵。
本文定義了13 種不同的溺水狀態(tài),將13 個(gè)不同類型的游泳者溺水視頻分別每隔10 幀截取一張圖片,利用訓(xùn)練好的OpenPose 模型對(duì)每個(gè)溺水視頻截取的20 幀圖片進(jìn)行人體姿態(tài)估計(jì)(如有關(guān)鍵點(diǎn)缺失,則進(jìn)行填充),獲取溺水游泳者的18 個(gè)關(guān)鍵點(diǎn)坐標(biāo),重新建立坐標(biāo)系,分別計(jì)算每個(gè)溺水游泳者視頻截取的20 幀圖片的關(guān)鍵點(diǎn)距離向量,構(gòu)造出13 個(gè)溺水狀態(tài)關(guān)鍵點(diǎn)距離向量集合。
溺水檢測(cè)過(guò)程中需要對(duì)游泳者的關(guān)鍵點(diǎn)距離向量與溺水狀態(tài)關(guān)鍵點(diǎn)距離向量進(jìn)行相似性評(píng)估,本算法利用R2來(lái)衡量2 個(gè)向量的相似性,R2定義如下
本文的實(shí)驗(yàn)環(huán)境包括:Windows11 操作系統(tǒng),12th Gen Intel(R)Core(TM)i7-12700F 2.10 GHz、16 GB內(nèi)存,GTX 3060 顯卡,PyCharm。
由于人工對(duì)數(shù)據(jù)集中的游泳者進(jìn)行人體關(guān)鍵點(diǎn)標(biāo)注,費(fèi)時(shí)費(fèi)力,因此,采用COCO2017 數(shù)據(jù)集的前五萬(wàn)個(gè)樣本按照訓(xùn)練集∶驗(yàn)證集∶測(cè)試集=8∶1∶1 的比例對(duì)OpenPose 人體姿態(tài)估計(jì)模型進(jìn)行訓(xùn)練。
使用自制的20 條溺水游泳者視頻(溺水動(dòng)作為人工模擬)和80 條正常游泳者視頻(包括蛙泳、仰泳等各類正常游泳動(dòng)作)對(duì)本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法進(jìn)行評(píng)估。對(duì)游泳者視頻每隔10 幀截取一張圖片,利用訓(xùn)練好的OpenPose 模型對(duì)截取的圖片進(jìn)行人體姿態(tài)估計(jì)(如有關(guān)鍵點(diǎn)缺失,則進(jìn)行填充),獲取游泳者的18 個(gè)關(guān)鍵點(diǎn)(關(guān)鍵點(diǎn)信息包括關(guān)鍵點(diǎn)坐標(biāo)和置信度,保存為json 文件),重新建立坐標(biāo)系,以脖子關(guān)鍵點(diǎn)為原點(diǎn),構(gòu)造截取的每幀圖片的關(guān)鍵點(diǎn)距離向量,利用游泳者連續(xù)20 幀圖片的關(guān)鍵點(diǎn)距離向量與溺水狀態(tài)的關(guān)鍵點(diǎn)距離向量的R2(使用sklearn.metrics 計(jì)算)進(jìn)行溺水判定。
為了驗(yàn)證本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法的有效性,用準(zhǔn)確率accuracy、精確率precision、召回率recall 評(píng)估算法的性能。將溺水狀態(tài)作為正類,正常的游泳狀態(tài)作為反類,TP 為真正例(預(yù)測(cè)正確的溺水類別),TN 為真反例(預(yù)測(cè)正確的正常游泳類別),F(xiàn)P 為假正例(預(yù)測(cè)錯(cuò)誤的溺水類別),F(xiàn)N 為假反例(預(yù)測(cè)錯(cuò)誤的正常游泳類別)。
算法評(píng)估實(shí)驗(yàn)中部分游泳者視頻幀的關(guān)鍵點(diǎn)檢測(cè)如圖5 所示。從圖5 可以看出,OpenPose 模型對(duì)截取的圖片進(jìn)行人體姿態(tài)估計(jì),有時(shí)會(huì)丟失部分關(guān)鍵點(diǎn)信息,而本文根據(jù)空缺關(guān)鍵點(diǎn)的前后幀的對(duì)應(yīng)關(guān)鍵點(diǎn)的均值來(lái)填充丟失的關(guān)鍵點(diǎn),可以有效地減小誤差。
圖5 部分游泳者視頻幀的關(guān)鍵點(diǎn)檢測(cè)圖
基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法的評(píng)估實(shí)驗(yàn)結(jié)果見表1。
表1 基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法的評(píng)估實(shí)驗(yàn)結(jié)果
由表1 可以看出,對(duì)于用來(lái)測(cè)試的20 條溺水游泳者視頻和80 條正常游泳者視頻,本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法檢測(cè)出了17 條溺水游泳者視頻和78 條正常游泳者視頻,錯(cuò)檢了3 條溺水游泳者視頻和2 條正常游泳者視頻,準(zhǔn)確率為95%,精確率為85%,召回率為89.47%。實(shí)驗(yàn)結(jié)果表明,本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法可以有效地檢測(cè)出溺水游泳者。實(shí)驗(yàn)過(guò)程中,影響本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法的因素有泳池?cái)z像頭拍攝的游泳者照片的角度、泳池的水面反光、游泳者濺起的水花等,在后續(xù)的研究中,可以對(duì)截取的游泳者圖片進(jìn)一步預(yù)處理,如圖片矯正、水下圖像處理、剔除反光和水花區(qū)域等。另外,為了提高OpenPose 模型標(biāo)記游泳者關(guān)鍵點(diǎn)的速度,可以對(duì)OpenPose 模型進(jìn)行輕量化處理,如將OpenPose 模型的主干網(wǎng)絡(luò)替換為輕量級(jí)網(wǎng)絡(luò)、合并預(yù)測(cè)分支等。
為了準(zhǔn)確地檢測(cè)出泳池溺水游泳者,本文提出了一種基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法,利用OpenPose 模型對(duì)游泳者的圖像進(jìn)行人體姿態(tài)估計(jì)(如有關(guān)鍵點(diǎn)缺失,則進(jìn)行填充),獲取游泳者的18 個(gè)關(guān)鍵點(diǎn)坐標(biāo),構(gòu)造游泳者的關(guān)鍵點(diǎn)距離向量,通過(guò)計(jì)算游泳者關(guān)鍵點(diǎn)距離向量與溺水狀態(tài)關(guān)鍵點(diǎn)距離向量的相似性來(lái)判斷游泳者是否溺水。利用20 條溺水游泳者視頻和80 條正常游泳者視頻評(píng)估本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法。實(shí)驗(yàn)結(jié)果表明,本文提出的基于人體姿態(tài)估計(jì)的泳池溺水檢測(cè)算法的準(zhǔn)確率為95%,精確率為85%,召回率為89.47%,可以準(zhǔn)確地檢測(cè)出溺水游泳者。