湯發(fā)源,趙永興,劉曉亮,趙 欣,王京華
(1.長春理工大學(xué)機電工程學(xué)院,吉林 長春 130022;2.吉林大學(xué)第一醫(yī)院血液科,吉林 長春 130021;3.吉林大學(xué)第一醫(yī)院小兒呼吸科,吉林 長春 130021)
跌倒是日常生活中最常見的不良事件之一[1]。傳統(tǒng)跌倒檢測方法主要有基于穿戴設(shè)備[2,3]和基于環(huán)境傳感器[4,5]對人體跌倒進行檢測。然而,可穿戴設(shè)備需要實時佩戴,容易造成人體活動不方便,并且存在容易忘記佩戴的缺點,而基于環(huán)境設(shè)備的跌倒檢測需要在特定的環(huán)境中安裝傳感器設(shè)備,成本較高,不方便移植。
基于視頻監(jiān)控采集的圖片數(shù)據(jù),Min W 等人[6,7]利用將人體目標邊界框的縱橫比變化作為人體跌倒特征,進行人體跌倒檢測。Xu Q Z等人[8]基于OpenPose形成人體骨架圖進行人體跌倒檢測。Chen W等人[9]通過OpenPose提取人體關(guān)鍵點坐標信息,通過髖關(guān)節(jié)中心下降速度、人體中心線與地面的夾角、人體外接矩形縱橫比3 個關(guān)鍵參數(shù)來識別跌倒事件。Wang B H 等人[10]在GTX 1080GPU 上基于OpenPose提取人體的質(zhì)心速度、上肢速度和人體外橢圓聯(lián)合檢測人體跌倒。伏娜娜等人[11]基于NVIDIA Quadro M2200 GPU利用人體中心點的下降速度和人體寬高比判斷人體是否發(fā)生跌倒。
根據(jù)上述分析,以往基于骨架特征的跌倒檢測通常需要在GPU設(shè)備上運行。本文通過將標準化后的人體關(guān)鍵點坐標以及人體部分關(guān)鍵點邊界框的縱橫比作為人體姿態(tài)特征向量,最后利用多層感知機(multilayer perceptron,MLP)判斷人體是否發(fā)生跌倒行為?;谳p量級OpenPose可以在CPU設(shè)備上運行并實現(xiàn)人體跌倒檢測。
OpenPose[12]主要思想是采用一種自下而上的關(guān)鍵點檢測方法,最初使用VGG-19主干作為一個特征提取器,然后通過初始階段和5個細化階段對特征圖進行優(yōu)化。每個階段由2 個平行的分支組成,一個用于關(guān)鍵點置信圖(confidence maps,CMP)預(yù)測,另一個用于部分親和場(part affinity fields,PAFs)預(yù)測,這2 個分支的設(shè)計方式相同。根據(jù)OpenPose 定義,如圖1所示,利用18 個關(guān)鍵點的位置表示人體姿態(tài)。
圖1 人體關(guān)鍵點
卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計的趨勢是加深網(wǎng)絡(luò)的層數(shù)以獲得更好的人體關(guān)鍵點檢測準確率,相對而言,深層網(wǎng)絡(luò)需要性能更好的設(shè)備進行訓(xùn)練以及引用部署,很難在生活中得到廣泛的應(yīng)用。OSOKIN D[13]遵循OpenPose的自下而上的方法,設(shè)計了一種基于MobileNetV1[14]的輕量級的關(guān)鍵點檢測網(wǎng)絡(luò)。為了進一步提高人體關(guān)鍵點檢測網(wǎng)絡(luò)的準確率,對網(wǎng)絡(luò)的特征細化階段進行優(yōu)化,并且可以在CPU 設(shè)備上運行。
如圖2所示為標準卷積的計算過程,DF×DF×M特征圖F作為輸入,通過標準卷積計算,輸出尺寸DG×DG×N的特征圖G。其中,DF為輸入特征圖的空間寬度和高度,M為輸入特征圖的通道數(shù),DG為經(jīng)過標準卷積輸出特征圖的空間寬度和高度,N為輸出特征圖的通道數(shù)。標準卷積層由大小為DK×DK×M×N的卷積核K進行參數(shù)化,其中,DK為標準卷積核的空間高度和寬度,M為輸入特征圖通道數(shù),N為參與計算的卷積核數(shù)量,并且N與輸出特征圖通道數(shù)相同。
圖2 標準卷積
如圖3所示,深度可分離卷積由深度卷積和逐點卷積組成,其中深度卷積為每個輸入特征圖通道應(yīng)用一個卷積核,逐點卷積為一個簡單的1 ×1 卷積,用來創(chuàng)建分層輸出的線性組合。
圖3 深度可分離卷積
標準卷積可表示為深度卷積和可分離卷積兩步,若使用3 ×3的卷積核,則使用深度可分離卷積的參數(shù)量比標準卷積少8到9倍,精度的降低量卻很小。最終得到了一個參數(shù)減少的計算,分子代表深度可分離卷積的參數(shù)量,分母表示標準卷積的參數(shù)量,計算公式如下
Cao Z等人[15]采用串聯(lián)的細化網(wǎng)絡(luò)結(jié)構(gòu),通過實驗驗證可得PAFs需要更多的階段來收斂,相對于CMP 細化階段,PAFs細化階段更能增加關(guān)鍵點檢測的準確率。當使用PAFs作為先驗時,會提高CMP 精度,若使用CMP 作為先驗時,將導(dǎo)致關(guān)鍵點檢測精度下降,并指出采用3個階段的PAFs細化階段與一個CMP階段進行細化在網(wǎng)絡(luò)復(fù)雜度和準確率之間得到了最優(yōu)平衡。本文以MobileNetV1 為特征提取網(wǎng)絡(luò),采用3 次的PAFs細化階段和1 次的CMP 細化階段。圖4為PAFs細化階段網(wǎng)絡(luò)結(jié)構(gòu),細化階段的每一個模塊由殘差連接構(gòu)成,通過級聯(lián)操作將每個階段的輸出預(yù)測與輸入進行連接,并作為下一個階段的輸入。
圖4 PAFs細化階段
為了進一步降低網(wǎng)絡(luò)的參數(shù),并保持PAFs 和CMP 細化階段的數(shù)量要求,在CMP和PAFs之間共享大部分的計算。為了進一步對特征圖進行優(yōu)化,使PAFs 和CMP 細化階段共享參數(shù),如圖5所示。
圖5 PAFs和CMP參數(shù)共享
圖6 所示為輕量級OpenPose 人體關(guān)鍵點檢測網(wǎng)絡(luò)結(jié)構(gòu),其中采用2 個PAFs 細化階段,以及1 個PAFs 和CMP參數(shù)共享階段。并通過級聯(lián)操作將特征圖F,細化塊(Refinement Block)產(chǎn)生的特征圖以及PAFs特征圖進行連接,作為下一個階段的輸入,以生成更精細的預(yù)測。
圖6 OpenPose關(guān)鍵點檢測網(wǎng)絡(luò)
利用細化階段的網(wǎng)絡(luò)迭代地預(yù)測每一個階段中表示人體關(guān)鍵點位置的CMP 和表示人體關(guān)鍵點連接的PAFs,在每個階段的末尾都應(yīng)用了CMP和PAFs損失函數(shù)作為中間監(jiān)督。計算網(wǎng)絡(luò)在每個階段預(yù)測的CMP、PAFs與真實標簽之間的均方誤差損失。網(wǎng)絡(luò)在訓(xùn)練過程中會對對未標注的人體關(guān)鍵點進行預(yù)測,在空間上對損失函數(shù)進行加權(quán)處理,避免懲罰真實的預(yù)測。具體來說,階段PAFs 分支的損失函數(shù)和階段CMP分支的損失函數(shù)為
式中fL為PAFs損失,fS為CMP損失;Lc為預(yù)測的關(guān)鍵點PAFs,Sj為預(yù)測的CMP;?為真實關(guān)鍵點PAFs,為真實CMP;J為預(yù)測的CMP 通道數(shù),C為預(yù)測的PAFs 通道數(shù)。W為當像素p處缺少人體關(guān)鍵點注釋時具有W(p)=0 的二進制掩碼,該掩碼用于在訓(xùn)練過程中避免對未標注的真實關(guān)鍵點的預(yù)測進行損失計算。
每個細化階段利用中間監(jiān)督計算損失函數(shù),通過周期性地補充梯度來解決梯度消失問題??傮w損失目標函數(shù)為
式中TP為PAFs細化階段的次數(shù),TC為CMP細化階段的次數(shù)。
人體姿態(tài)估計,是通過將圖片中已檢測到的人體關(guān)鍵點正確的聯(lián)系起來,從而估計人體姿態(tài)。人體關(guān)鍵點通常對應(yīng)人體上有一定自由度的關(guān)節(jié),對于描述人體姿態(tài),預(yù)測人體行為動作至關(guān)重要。人體關(guān)鍵點是一種高水平的人體姿態(tài)表示,可以用一種非常精確的方式來描述人類活動。因此利用檢測到的關(guān)鍵點表示人體姿態(tài),并根據(jù)圖片中人體關(guān)鍵點的坐標特征區(qū)分人體跌倒行為。圖7 所示為基于人體關(guān)鍵點的骨架。其中,圖7(a)為人體正?;顒訒r的骨架圖特征,圖7(b)為人體跌倒后的骨架圖特征。
圖7 人體骨架
原始圖片中相同的人體姿態(tài)在圖片不同位置時,盡管人體姿態(tài)相同,但此時表現(xiàn)人體姿態(tài)的關(guān)鍵點坐標是不同值,需要對人體關(guān)鍵點坐標進行標準化處理。如圖8 所示,相同的姿態(tài)位于圖片中不同的位置,利用檢測到的18 個人體關(guān)鍵點生成人體外接矩形,其中(xb1,yb2),(xb2,yb2)是人體外接矩形左上角的坐標。以人體外接矩形左上角為標準化后的坐標原點對人體關(guān)鍵點坐標進行標準化處理,消除了原始圖片大小以及人體在圖片中不同位置對姿態(tài)特征的影響。此時則可以通過標準化后的人體關(guān)鍵坐標更加準確的表達人體姿態(tài)特征。
圖8 關(guān)鍵點標準化
人體關(guān)鍵點坐標標準化的定義如下
式中XN,YN分別為標準化后的關(guān)鍵點的橫坐標和縱坐標;w,h分別為根據(jù)檢測到的所有關(guān)鍵點生成的人體外接矩形寬和高。x,y為相對于輸入圖片的關(guān)鍵點坐標。經(jīng)過標準化后的人體關(guān)鍵點坐標,消除了原始圖片大小以及人體在圖片中不同位置對姿態(tài)特征的影響。此時則可以通過標準化后的人體關(guān)鍵點坐標更加準確的表示人體姿態(tài)特征。
人體邊界框為一個矩形,矩形的高度除以矩形的寬度被定義為人體形狀的縱橫比,當人體跌倒后,邊界框形狀會發(fā)生變化,因此矩形的縱橫比會有很大的變化,這與正常行走、蹲坐時縱橫比的小范圍變化有很大的不同。人體手腕、肘部是經(jīng)常用到的關(guān)節(jié)部位,頻繁活動會導(dǎo)致人體關(guān)鍵點邊界框的形狀發(fā)生劇烈變化。為了消除對手腕、肘部關(guān)鍵點對人體邊界框的影響,本文通過OpenPose關(guān)鍵點檢測網(wǎng)絡(luò)得到人體的關(guān)鍵點,去除了手腕、肘部的關(guān)鍵點,利用余下的關(guān)鍵點(鼻子,眼睛,耳朵,脖子,肩膀,臀部,膝蓋和腳踝)生成人體部分關(guān)鍵點最小外接矩形,并作為人體部分關(guān)鍵點邊界框。非跌倒狀態(tài)與跌倒后的人體部分關(guān)鍵點邊界框的變化,如圖9所示。
圖9 部分關(guān)鍵點邊界框的變化
人工神經(jīng)網(wǎng)絡(luò)與生物神經(jīng)網(wǎng)絡(luò)相似,都是由大量神經(jīng)元組成。M-P[16]神經(jīng)元模型,依據(jù)生物神經(jīng)元的結(jié)構(gòu)和工作原理構(gòu)造出來的一個抽象和簡化的模型。M-P神經(jīng)元的輸出是輸入向量x與權(quán)重向量w求得內(nèi)積后,經(jīng)激活函數(shù)f所得到的標量,計算過程為
式中xi為n維輸入向量的各個分量,wi為各個輸入分量連接到感知機的權(quán)重,θ為閾值,y為輸出。
MLP的一個重要特點就是多層,將第一層稱之為輸入層,最后一層稱之為輸出層,中間的層稱之為隱含層。如圖10所示,最簡單的MLP 只含1 個隱含層。MLP 并沒有規(guī)定隱含層的數(shù)量,以及每層神經(jīng)元的個數(shù),因此在訓(xùn)練的過程中可以根據(jù)各自的需求選擇合適的參數(shù)以獲得更好的性能。由圖10可知,通過OpenPose獲得人體關(guān)鍵點坐標,將標準化后的關(guān)鍵點坐標和人體部分關(guān)鍵點邊界框縱橫比作為一個37列的姿態(tài)特征向量,對人體狀態(tài)進行跌倒和非跌倒判斷。此時MLP 的輸入層有37 個神經(jīng)元,輸出層有1個輸出神經(jīng)元表示人體是否跌倒,即輸出跌倒狀態(tài)-1 或非跌倒狀態(tài)1。
圖10 MLP
輕量級OpenPose 人體關(guān)鍵點網(wǎng)絡(luò)訓(xùn)練環(huán)境為:Pytorch1.6,Cuda10.2,GTX1080ti。
在COCO數(shù)據(jù)集上對關(guān)鍵點網(wǎng)絡(luò)進行訓(xùn)練,采用斷點續(xù)訓(xùn),網(wǎng)絡(luò)訓(xùn)練Epoch =200。如圖11 所示,關(guān)鍵點檢測網(wǎng)絡(luò)參數(shù)共享階段CMP損失和PAFs損失,縱坐標表示網(wǎng)絡(luò)的訓(xùn)練損失,橫坐標表示網(wǎng)絡(luò)Epoch。
圖11 關(guān)鍵點檢測網(wǎng)絡(luò)訓(xùn)練損失
表1展示了采用不同網(wǎng)絡(luò)結(jié)構(gòu)進行訓(xùn)練時,相對應(yīng)的網(wǎng)絡(luò)每秒千兆浮點運算數(shù)(giga floating point operations per second,GFLOPS)和關(guān)鍵點檢測準確率的平均精度(AP)?;贠penVINO對網(wǎng)絡(luò)的結(jié)構(gòu)進行優(yōu)化,優(yōu)化后網(wǎng)絡(luò)的關(guān)鍵點檢測運算速度在CoreTMi5-9300H CPU可以達到20 fps。
表1 在COCO驗證集上的OpenPose的準確性與復(fù)雜性
自定義人體跌倒數(shù)據(jù)集,基于UR Fall Detection Dataset以及Lei Fall Detection Dataset 數(shù)據(jù)集。首先,將數(shù)據(jù)集圖片中的人體狀態(tài)分為跌倒和非跌倒兩種狀態(tài);然后,使用OpenPose檢測人體關(guān)鍵點,將標準化后關(guān)鍵點坐標、人體部分關(guān)鍵點邊界框縱橫比作為人體日常活動狀態(tài)的特征向量;最后,將每幀圖片中的人體活動狀態(tài)特征向量,保存在一個CSV格式文件中作為跌倒數(shù)據(jù)集。其中,人體的狀態(tài)特征向量以37列矩陣表示,分別表示18 個骨骼關(guān)節(jié)點的坐標值以及人體部分關(guān)鍵點外接矩形的縱橫比。并增加一列,表示人體狀態(tài)的類別標簽-1(跌倒)和1(非跌倒)。
對學(xué)習(xí)器進行訓(xùn)練時,不僅需要有效可行的實驗估計方法,還需要有衡量模型泛化能力的評價標準,對學(xué)習(xí)器的泛化性能進行評估。引入準確率Ac(accuracy)、召回率Re(recall)、查準率Pr(precision)和F1分數(shù)(F1-score)共同評價系統(tǒng)的性能。由真正例TP、假反例FN、假正例FP 和真反例TN4種分類情況可知4種性能指標的計算如下
進行學(xué)習(xí)器比較時,若一個學(xué)習(xí)器的“受試者工作特征曲線”(receiver operating characteristic curve,ROC)被另一個學(xué)習(xí)器的ROC 曲線完全包住,則可斷言后者的性能優(yōu)于前者,若兩個學(xué)習(xí)器的ROC 曲線發(fā)生交叉,比較ROC 曲線下的面積(area under curve,AUC)判斷兩者孰優(yōu)孰劣。
基于自定義跌倒數(shù)據(jù)集對MLP 進行訓(xùn)練時,對不同MLP的層數(shù),以及每層神經(jīng)元的個數(shù)進行訓(xùn)練,選擇較優(yōu)的隱含層層數(shù)以及每層神經(jīng)元的個數(shù)。在訓(xùn)練的過程中隱含層每層神經(jīng)元節(jié)點個數(shù)的取值范圍為[10,200],訓(xùn)練步長為10?;贏UC選擇較優(yōu)的MLP 算法模型,分別計算單層,雙層,三層,四層MLP 算法模型所能獲得的最大AUC,并記錄此時的隱含層中每層神經(jīng)元的節(jié)點個數(shù)。如表2所示,當選擇三層的MLP,每層神經(jīng)元節(jié)點數(shù)量分別為[80,140,20],模型的AUC 最大。此時在隱含層神經(jīng)元節(jié)點個數(shù)范圍[10,200]的條件下,持續(xù)增加MLP 的層數(shù),基本不會提高網(wǎng)絡(luò)模型的性能,因此選擇三層的MLP 比較合適。
表2 MLP結(jié)構(gòu)對比
為了進一步展示模型的性能。由表2可確定不同層數(shù)以及每層神經(jīng)元個數(shù)的MLP。由表3 可知采用3 層的MLP,在各個度量標準中實現(xiàn)了較優(yōu)的檢測性能。
表3 MLP訓(xùn)練結(jié)果%
基于不同設(shè)備的跌倒檢測算法準確率結(jié)果及幀率對比如表4所示。本文方法可以得到良好的跌倒檢測準確率以及在CPU上得到20 fps的檢測速度。通過對性能指標、應(yīng)用成本的比較,本文方法具有一定的優(yōu)越性。
表4 MLP不同設(shè)備的跌倒檢測算法結(jié)果對比
將已訓(xùn)練完成的OpenPose關(guān)鍵點檢測網(wǎng)絡(luò)與MLP跌倒分類算法進行連接,形成端到端的人體跌倒檢測網(wǎng)絡(luò)。如圖12所示,端到端的人體跌倒檢測網(wǎng)絡(luò)可以識別人體跌倒事件的發(fā)生。
圖12 人體跌倒檢測
本文基于輕量級OpenPose關(guān)鍵點檢測網(wǎng)絡(luò),通過優(yōu)化網(wǎng)絡(luò)的細化階段,提高網(wǎng)絡(luò)關(guān)鍵點檢測準確率。標準化后的關(guān)鍵點坐標消除了圖片中位置、人體大小對人體姿態(tài)的影響,并且利用人體部分關(guān)鍵點縱橫比消除手腕、肘部關(guān)鍵點對邊界框的影響。將標準化后關(guān)鍵點坐標及人體部分關(guān)鍵點邊界框的縱橫比作為判斷人體跌倒的特征向量,最后利用三層MLP進行跌倒檢測。以往基于人體關(guān)鍵點的跌倒檢測通常需要在GPU上運行才能實現(xiàn)良好的檢測速率。實驗結(jié)果表明,本文提出的方法在CoreTMi5-9300H CPU上可以實現(xiàn)20 fps檢測速度,并且實現(xiàn)了98.64%的跌倒檢測準確率。