湯發源,趙永興,劉曉亮,趙 欣,王京華
(1.長春理工大學機電工程學院,吉林 長春 130022;2.吉林大學第一醫院血液科,吉林 長春 130021;3.吉林大學第一醫院小兒呼吸科,吉林 長春 130021)
跌倒是日常生活中最常見的不良事件之一[1]。傳統跌倒檢測方法主要有基于穿戴設備[2,3]和基于環境傳感器[4,5]對人體跌倒進行檢測。然而,可穿戴設備需要實時佩戴,容易造成人體活動不方便,并且存在容易忘記佩戴的缺點,而基于環境設備的跌倒檢測需要在特定的環境中安裝傳感器設備,成本較高,不方便移植。
基于視頻監控采集的圖片數據,Min W 等人[6,7]利用將人體目標邊界框的縱橫比變化作為人體跌倒特征,進行人體跌倒檢測。Xu Q Z等人[8]基于OpenPose形成人體骨架圖進行人體跌倒檢測。Chen W等人[9]通過OpenPose提取人體關鍵點坐標信息,通過髖關節中心下降速度、人體中心線與地面的夾角、人體外接矩形縱橫比3 個關鍵參數來識別跌倒事件。Wang B H 等人[10]在GTX 1080GPU 上基于OpenPose提取人體的質心速度、上肢速度和人體外橢圓聯合檢測人體跌倒。伏娜娜等人[11]基于NVIDIA Quadro M2200 GPU利用人體中心點的下降速度和人體寬高比判斷人體是否發生跌倒。
根據上述分析,以往基于骨架特征的跌倒檢測通常需要在GPU設備上運行。本文通過將標準化后的人體關鍵點坐標以及人體部分關鍵點邊界框的縱橫比作為人體姿態特征向量,最后利用多層感知機(multilayer perceptron,MLP)判斷人體是否發生跌倒行為。基于輕量級OpenPose可以在CPU設備上運行并實現人體跌倒檢測。
OpenPose[12]主要思想是采用一種自下而上的關鍵點檢測方法,最初使用VGG-19主干作為一個特征提取器,然后通過初始階段和5個細化階段對特征圖進行優化。每個階段由2 個平行的分支組成,一個用于關鍵點置信圖(confidence maps,CMP)預測,另一個用于部分親和場(part affinity fields,PAFs)預測,這2 個分支的設計方式相同。根據OpenPose 定義,如圖1所示,利用18 個關鍵點的位置表示人體姿態。

圖1 人體關鍵點
卷積神經網絡結構設計的趨勢是加深網絡的層數以獲得更好的人體關鍵點檢測準確率,相對而言,深層網絡需要性能更好的設備進行訓練以及引用部署,很難在生活中得到廣泛的應用。OSOKIN D[13]遵循OpenPose的自下而上的方法,設計了一種基于MobileNetV1[14]的輕量級的關鍵點檢測網絡。為了進一步提高人體關鍵點檢測網絡的準確率,對網絡的特征細化階段進行優化,并且可以在CPU 設備上運行。
如圖2所示為標準卷積的計算過程,DF×DF×M特征圖F作為輸入,通過標準卷積計算,輸出尺寸DG×DG×N的特征圖G。其中,DF為輸入特征圖的空間寬度和高度,M為輸入特征圖的通道數,DG為經過標準卷積輸出特征圖的空間寬度和高度,N為輸出特征圖的通道數。標準卷積層由大小為DK×DK×M×N的卷積核K進行參數化,其中,DK為標準卷積核的空間高度和寬度,M為輸入特征圖通道數,N為參與計算的卷積核數量,并且N與輸出特征圖通道數相同。

圖2 標準卷積
如圖3所示,深度可分離卷積由深度卷積和逐點卷積組成,其中深度卷積為每個輸入特征圖通道應用一個卷積核,逐點卷積為一個簡單的1 ×1 卷積,用來創建分層輸出的線性組合。

圖3 深度可分離卷積
標準卷積可表示為深度卷積和可分離卷積兩步,若使用3 ×3的卷積核,則使用深度可分離卷積的參數量比標準卷積少8到9倍,精度的降低量卻很小。最終得到了一個參數減少的計算,分子代表深度可分離卷積的參數量,分母表示標準卷積的參數量,計算公式如下
Cao Z等人[15]采用串聯的細化網絡結構,通過實驗驗證可得PAFs需要更多的階段來收斂,相對于CMP 細化階段,PAFs細化階段更能增加關鍵點檢測的準確率。當使用PAFs作為先驗時,會提高CMP 精度,若使用CMP 作為先驗時,將導致關鍵點檢測精度下降,并指出采用3個階段的PAFs細化階段與一個CMP階段進行細化在網絡復雜度和準確率之間得到了最優平衡。本文以MobileNetV1 為特征提取網絡,采用3 次的PAFs細化階段和1 次的CMP 細化階段。圖4為PAFs細化階段網絡結構,細化階段的每一個模塊由殘差連接構成,通過級聯操作將每個階段的輸出預測與輸入進行連接,并作為下一個階段的輸入。

圖4 PAFs細化階段
為了進一步降低網絡的參數,并保持PAFs 和CMP 細化階段的數量要求,在CMP和PAFs之間共享大部分的計算。為了進一步對特征圖進行優化,使PAFs 和CMP 細化階段共享參數,如圖5所示。

圖5 PAFs和CMP參數共享
圖6 所示為輕量級OpenPose 人體關鍵點檢測網絡結構,其中采用2 個PAFs 細化階段,以及1 個PAFs 和CMP參數共享階段。并通過級聯操作將特征圖F,細化塊(Refinement Block)產生的特征圖以及PAFs特征圖進行連接,作為下一個階段的輸入,以生成更精細的預測。

圖6 OpenPose關鍵點檢測網絡
利用細化階段的網絡迭代地預測每一個階段中表示人體關鍵點位置的CMP 和表示人體關鍵點連接的PAFs,在每個階段的末尾都應用了CMP和PAFs損失函數作為中間監督。計算網絡在每個階段預測的CMP、PAFs與真實標簽之間的均方誤差損失。網絡在訓練過程中會對對未標注的人體關鍵點進行預測,在空間上對損失函數進行加權處理,避免懲罰真實的預測。具體來說,階段PAFs 分支的損失函數和階段CMP分支的損失函數為
式中fL為PAFs損失,fS為CMP損失;Lc為預測的關鍵點PAFs,Sj為預測的CMP;?為真實關鍵點PAFs,為真實CMP;J為預測的CMP 通道數,C為預測的PAFs 通道數。W為當像素p處缺少人體關鍵點注釋時具有W(p)=0 的二進制掩碼,該掩碼用于在訓練過程中避免對未標注的真實關鍵點的預測進行損失計算。
每個細化階段利用中間監督計算損失函數,通過周期性地補充梯度來解決梯度消失問題。總體損失目標函數為
式中TP為PAFs細化階段的次數,TC為CMP細化階段的次數。
人體姿態估計,是通過將圖片中已檢測到的人體關鍵點正確的聯系起來,從而估計人體姿態。人體關鍵點通常對應人體上有一定自由度的關節,對于描述人體姿態,預測人體行為動作至關重要。人體關鍵點是一種高水平的人體姿態表示,可以用一種非常精確的方式來描述人類活動。因此利用檢測到的關鍵點表示人體姿態,并根據圖片中人體關鍵點的坐標特征區分人體跌倒行為。圖7 所示為基于人體關鍵點的骨架。其中,圖7(a)為人體正常活動時的骨架圖特征,圖7(b)為人體跌倒后的骨架圖特征。

圖7 人體骨架
原始圖片中相同的人體姿態在圖片不同位置時,盡管人體姿態相同,但此時表現人體姿態的關鍵點坐標是不同值,需要對人體關鍵點坐標進行標準化處理。如圖8 所示,相同的姿態位于圖片中不同的位置,利用檢測到的18 個人體關鍵點生成人體外接矩形,其中(xb1,yb2),(xb2,yb2)是人體外接矩形左上角的坐標。以人體外接矩形左上角為標準化后的坐標原點對人體關鍵點坐標進行標準化處理,消除了原始圖片大小以及人體在圖片中不同位置對姿態特征的影響。此時則可以通過標準化后的人體關鍵坐標更加準確的表達人體姿態特征。

圖8 關鍵點標準化
人體關鍵點坐標標準化的定義如下
式中XN,YN分別為標準化后的關鍵點的橫坐標和縱坐標;w,h分別為根據檢測到的所有關鍵點生成的人體外接矩形寬和高。x,y為相對于輸入圖片的關鍵點坐標。經過標準化后的人體關鍵點坐標,消除了原始圖片大小以及人體在圖片中不同位置對姿態特征的影響。此時則可以通過標準化后的人體關鍵點坐標更加準確的表示人體姿態特征。
人體邊界框為一個矩形,矩形的高度除以矩形的寬度被定義為人體形狀的縱橫比,當人體跌倒后,邊界框形狀會發生變化,因此矩形的縱橫比會有很大的變化,這與正常行走、蹲坐時縱橫比的小范圍變化有很大的不同。人體手腕、肘部是經常用到的關節部位,頻繁活動會導致人體關鍵點邊界框的形狀發生劇烈變化。為了消除對手腕、肘部關鍵點對人體邊界框的影響,本文通過OpenPose關鍵點檢測網絡得到人體的關鍵點,去除了手腕、肘部的關鍵點,利用余下的關鍵點(鼻子,眼睛,耳朵,脖子,肩膀,臀部,膝蓋和腳踝)生成人體部分關鍵點最小外接矩形,并作為人體部分關鍵點邊界框。非跌倒狀態與跌倒后的人體部分關鍵點邊界框的變化,如圖9所示。

圖9 部分關鍵點邊界框的變化
人工神經網絡與生物神經網絡相似,都是由大量神經元組成。M-P[16]神經元模型,依據生物神經元的結構和工作原理構造出來的一個抽象和簡化的模型。M-P神經元的輸出是輸入向量x與權重向量w求得內積后,經激活函數f所得到的標量,計算過程為
式中xi為n維輸入向量的各個分量,wi為各個輸入分量連接到感知機的權重,θ為閾值,y為輸出。
MLP的一個重要特點就是多層,將第一層稱之為輸入層,最后一層稱之為輸出層,中間的層稱之為隱含層。如圖10所示,最簡單的MLP 只含1 個隱含層。MLP 并沒有規定隱含層的數量,以及每層神經元的個數,因此在訓練的過程中可以根據各自的需求選擇合適的參數以獲得更好的性能。由圖10可知,通過OpenPose獲得人體關鍵點坐標,將標準化后的關鍵點坐標和人體部分關鍵點邊界框縱橫比作為一個37列的姿態特征向量,對人體狀態進行跌倒和非跌倒判斷。此時MLP 的輸入層有37 個神經元,輸出層有1個輸出神經元表示人體是否跌倒,即輸出跌倒狀態-1 或非跌倒狀態1。

圖10 MLP
輕量級OpenPose 人體關鍵點網絡訓練環境為:Pytorch1.6,Cuda10.2,GTX1080ti。
在COCO數據集上對關鍵點網絡進行訓練,采用斷點續訓,網絡訓練Epoch =200。如圖11 所示,關鍵點檢測網絡參數共享階段CMP損失和PAFs損失,縱坐標表示網絡的訓練損失,橫坐標表示網絡Epoch。

圖11 關鍵點檢測網絡訓練損失
表1展示了采用不同網絡結構進行訓練時,相對應的網絡每秒千兆浮點運算數(giga floating point operations per second,GFLOPS)和關鍵點檢測準確率的平均精度(AP)。基于OpenVINO對網絡的結構進行優化,優化后網絡的關鍵點檢測運算速度在CoreTMi5-9300H CPU可以達到20 fps。

表1 在COCO驗證集上的OpenPose的準確性與復雜性
自定義人體跌倒數據集,基于UR Fall Detection Dataset以及Lei Fall Detection Dataset 數據集。首先,將數據集圖片中的人體狀態分為跌倒和非跌倒兩種狀態;然后,使用OpenPose檢測人體關鍵點,將標準化后關鍵點坐標、人體部分關鍵點邊界框縱橫比作為人體日常活動狀態的特征向量;最后,將每幀圖片中的人體活動狀態特征向量,保存在一個CSV格式文件中作為跌倒數據集。其中,人體的狀態特征向量以37列矩陣表示,分別表示18 個骨骼關節點的坐標值以及人體部分關鍵點外接矩形的縱橫比。并增加一列,表示人體狀態的類別標簽-1(跌倒)和1(非跌倒)。
對學習器進行訓練時,不僅需要有效可行的實驗估計方法,還需要有衡量模型泛化能力的評價標準,對學習器的泛化性能進行評估。引入準確率Ac(accuracy)、召回率Re(recall)、查準率Pr(precision)和F1分數(F1-score)共同評價系統的性能。由真正例TP、假反例FN、假正例FP 和真反例TN4種分類情況可知4種性能指標的計算如下
進行學習器比較時,若一個學習器的“受試者工作特征曲線”(receiver operating characteristic curve,ROC)被另一個學習器的ROC 曲線完全包住,則可斷言后者的性能優于前者,若兩個學習器的ROC 曲線發生交叉,比較ROC 曲線下的面積(area under curve,AUC)判斷兩者孰優孰劣。
基于自定義跌倒數據集對MLP 進行訓練時,對不同MLP的層數,以及每層神經元的個數進行訓練,選擇較優的隱含層層數以及每層神經元的個數。在訓練的過程中隱含層每層神經元節點個數的取值范圍為[10,200],訓練步長為10。基于AUC選擇較優的MLP 算法模型,分別計算單層,雙層,三層,四層MLP 算法模型所能獲得的最大AUC,并記錄此時的隱含層中每層神經元的節點個數。如表2所示,當選擇三層的MLP,每層神經元節點數量分別為[80,140,20],模型的AUC 最大。此時在隱含層神經元節點個數范圍[10,200]的條件下,持續增加MLP 的層數,基本不會提高網絡模型的性能,因此選擇三層的MLP 比較合適。

表2 MLP結構對比
為了進一步展示模型的性能。由表2可確定不同層數以及每層神經元個數的MLP。由表3 可知采用3 層的MLP,在各個度量標準中實現了較優的檢測性能。

表3 MLP訓練結果%
基于不同設備的跌倒檢測算法準確率結果及幀率對比如表4所示。本文方法可以得到良好的跌倒檢測準確率以及在CPU上得到20 fps的檢測速度。通過對性能指標、應用成本的比較,本文方法具有一定的優越性。

表4 MLP不同設備的跌倒檢測算法結果對比
將已訓練完成的OpenPose關鍵點檢測網絡與MLP跌倒分類算法進行連接,形成端到端的人體跌倒檢測網絡。如圖12所示,端到端的人體跌倒檢測網絡可以識別人體跌倒事件的發生。

圖12 人體跌倒檢測
本文基于輕量級OpenPose關鍵點檢測網絡,通過優化網絡的細化階段,提高網絡關鍵點檢測準確率。標準化后的關鍵點坐標消除了圖片中位置、人體大小對人體姿態的影響,并且利用人體部分關鍵點縱橫比消除手腕、肘部關鍵點對邊界框的影響。將標準化后關鍵點坐標及人體部分關鍵點邊界框的縱橫比作為判斷人體跌倒的特征向量,最后利用三層MLP進行跌倒檢測。以往基于人體關鍵點的跌倒檢測通常需要在GPU上運行才能實現良好的檢測速率。實驗結果表明,本文提出的方法在CoreTMi5-9300H CPU上可以實現20 fps檢測速度,并且實現了98.64%的跌倒檢測準確率。