黃 耀 雷景生
1(上海電力大學計算機科學與技術學院 上海 200000) 2(浙江科技學院信息與電子工程學院 浙江 杭州 310023)
計算機視覺的應用日益多樣化,人體動作識別已成為其最具吸引力的研究領域之一[1]。基于幀級骨架拓展類特征的人體動作識別是指利用圖像處理、識別、分類技術來提取視頻中人體的關節點位置,再從時序骨架信息中提取動作特征,從而完成人體動作識別的技術。由于視頻動作識別面臨照明變化、遮擋、陰影、比例變化等挑戰[2],人們對動作行為識別的研究尚不成熟,且在保證準確率的情況下難以達到實時性,因而應用場景受限。
目前動作識別方法可分為三種主要模型:基于模板的方法、判別模型[3]和生成模型[4]。基于模板的方法即使在識別復雜動作的情況下也具有很強的魯棒性,但計算復雜度非常高。生成模型方法在估計缺失的數據方面特別有效,然而單變量狀態表示不足以對多個交互部分建模,因此有學者提出了判別模型[5]。判別模型給定一個觀測序列X和一個特定的標簽Y,判別分類器對后驗概率P(Y|X)建模或學習,并將輸入X鏈接到其對應類標簽的映射。判別模型取得了與生成模型相當或更好的結果[6]。
人體動作能夠被準確識別的前提是獲取到有效的骨架信息,目前有多種主流方法可以快速準確地表示出骨架特征信息,文獻[7]使用可佩戴式三軸加速度傳感器在人體作業過程中提取手腕處的運動加速度數據,應用機器學習中的分類器進行實驗并獲取特征進行動作比對,識別精度較高。文獻[8]提出結合離散余弦變換法,使用無載波超寬帶雷達進行人體動作的識別,并利用改進的網格搜索算法優化支持向量機的參數并驗證,識別準確率較高。但上述方法除了攝像機外還依賴其他特定設備,使用和維護成本較高,且使用場景單一。
隨著機器學習和深度學習的快速發展,深度神經網絡、卷積神經網絡、遞歸神經網絡等深度學習模型理論為動作特征的表示提供了新的解決思路[9-11]。文獻[12]利用Kinect設備在大數據下獲取人體關節點信息構建出3-D空間向量,通過計算空間向量的角度和比例來描述人類的行為,在多個數據集上證明了該方法的有效性。文獻[13]提出了一種基于學習空間金字塔表示的人體動作識別算法,基于余弦測度和交叉視圖二次判別分析來計算不同行為類別之間的相似度,在Hollywood2數據集上獲得了92.2%的準確率。
對于動作檢測,我們的目標是預測視頻內包含的多種連續動作,我們把這個問題歸結為幀級動作分類。在幀級動作預測之后,我們利用基于滑動窗口的方法來微調預測的幀級擴展類概率,并獲得期望的輸出。本文構造的基于幀級骨架拓展類特征的人體動作實時檢測技術流程如圖1所示,主要有三個部分,分別為骨骼提取模塊、動作特征捕捉模塊、動作判別模塊。
骨骼提取模塊首先使用骨骼提取器從視頻幀中提取人體骨骼關節點,在實際操作中尺寸過小的骨骼和缺少主要軀干(如大腿和頭部)的骨架會被視為噪聲骨骼并被舍去;動作特征捕捉模塊先將上一模塊提取出的時序骨架信息進行歸一化處理,從而實現尺度無關和視角無關,接著將骨骼導入特征提取器中,提取出三種特征:軀干角度特征、骨骼關節點位置特征、關節運動速度特征,并將三種特征融合成幀級骨架拓展類總特征F;動作判別模塊將提取出的混合特征F導入隨機森林分類器,再結合判別模型進行多種動作置信度比較,最后輸出預測的動作標簽。
OpenPose人體姿態估計算法是美國卡內基梅隆大學(CMU)基于卷積神經網絡和監督學習并以caffe為框架開發的開源庫,可以高效實現人體骨骼關節點位置的提取,此算法適用于單人和多人[14],具有極好的魯棒性和實時性[15]。因此選擇Openpose作為骨骼關節點提取器。圖2是18個人體骨骼的關節點,在表1中分別用編號0-17來表示。

表1 骨骼關節點序號
在提取骨骼關節點位置的實驗過程中,由于物體遮擋、室內外陰影、攝像機角度等原因,骨骼關節點提取器有時未能識別出所有的骨骼關節點。實驗選取的視頻尺寸為{(w,h),w=640,h=480},骨骼關節點坐標正常提取后應為:
{(X0,Y0), (X1,Y1),…,(X17,Y17)|Xn∈(0,640),Yn∈
(0,480),n∈(0,17)}
(1)
如果某個關節點(Xn,Yn)未被提取器成功識別,則該關節點坐標顯示為(0,0),為了在接下來的特征分類過程中保持固定大小的特征向量,本文的解決方案是根據前一幀中的鼻部坐標進行自動填充。設上一幀中鼻部的坐標為(Xi,Yj),該幀中丟失的骨骼關節點在上一幀中的坐標為(Xw,Yh),則該幀中丟失的骨骼關節點坐標將被填充為:
(Xn,Yn)=(Xw+Xi,Yh+Yj)
(2)
由于視頻尺寸不一,且由于人體走動,攝像機和人體的相對位置也會隨之改變,導致直接提取出的骨骼關節點尺寸和角度難以統一化。為方便計算,本文將提取的骨骼關節點坐標進行歸一化處理,結果如圖3所示。
首先以脖子關節點所處的位置(X1,Y1)作為坐標原點,確保視角無關;再將骨骼關節點位置相對于圖片尺寸進行歸一化縮放,實現尺度無關。具體步驟如下:
(3)
W=max{X0,X1,…,X17}-min{X0,X1,…,X17}
(4)
H=max{Y0,Y1,…,Y17}-min{Y0,Y1,…,Y17}
(5)
基于判別模型的動作識別方法主要有兩種,利用RGB圖像進行動作識別可以獲得較高的性能,然而由于該方法需要處理每幅圖像中的幾百個像素來提取特征,實時處理時需要高成本的計算資源,且該方法還受到來自不同照明條件和背景的噪聲的影響。相比之下,用骨骼序列進行動作識別,將二維坐標序列表示為人體關節和軌跡,比用RGB圖像進行動作識別所需的計算資源要低,因為該方法每個骨骼只處理幾十個關節,此外,骨骼對上述噪聲具有一定的魯棒性[16]。
人體動作可以表示為由關節連接的線段組成的關節系統,人體運動可以被視為這些線段的空間結構的連續演變。在一個動作中,當身體軀干移動時,各骨骼關節點會發生不同方向程度的移動,這些骨骼關節點可以根據人體關節的物理結構進行連接。為避免單一特征導致動作分類的過擬合現象,本文在長度為S的連續幀內提取三種動作特征進行分類:軀干角度特征、骨骼關節點位置特征、關節點時序特征。
在獲取各個骨骼關節點二維坐標后,軀干之間的角度信息完整且便于提取,人體的動作可以看作是各個軀干之間相互作用的結果,提取軀干之間的角度特征可以有效表示動作。本文計算八個軀干的角度特征,分別為左右肩膀、左右肘部、左右臀部、左右膝蓋,如圖4所示。
以左肩角度θ1為例,此關節角度關聯三個關節點,分別為脖子P1(X1,Y1)、左肩P2(X2,Y2)、P3左肘(X3,Y3),可得夾角θ1:
(6)
(7)
在基于骨架拓展類特征的動作識別方法中,傳統的深度學習方法使用RNNs[17]將骨骼序列作為向量序列饋送,或者使用CNNs[18]從表示骨骼序列的2D偽圖像中提取特征。最近,一種基于圖卷積網絡(GCN)的方法被提出[19],并因其高性能而引起人們的關注。如圖5所示,GCN將關節表示為頂點,將其在人體中的自然連接表示為邊,然后基于邊連接的頂點計算卷積。因此,GCN比序列向量和二維偽圖像更自然地模擬人體。
對于一段動作的骨架序列,我們將S幀內的骨架關節點點相連接形成:
?
(8)
第n幀幀的動作骨架表示為:
(9)
(10)
第n幀標準化后的骨骼關節點位置表示為:
(11)
當關節序列快速移動,如人體在做奔跑、拳擊、摔倒等動作時,由于前兩個特征缺少整體信息,容易出現誤識別的情況,比如把跑步識別成了站立,這是缺少整體特征的結果。為解決以上難點,本文提出關節速度特征V_b:
(12)
(13)

綜上,本文在對骨骼關節點位置進行歸一化處理后,提取了動作骨骼的三種特征,分別為軀干角度特征θ、骨骼關節點位置特征B、關節運動速度特征V_b。


表2 骨架多特征尺寸
將三種幀級骨架拓展類特征進行特征融合,使其成為幀級拓展類總特征F,公式如下:
(14)
隨著機器學習的快速發展和廣泛應用,包裝法、卡方檢驗、互信息法等特征算法可以幫助我們計算出特征與標簽的相關性;此外隨機森林等分類算法在圖像識別和語音識別等領域均取得了不錯的成果[20]。實驗結果表明,隨機森林分類器在UTKinect Dataset數據集上取得了較好的動作識別效果。
在得到幀級骨架拓展類的三個特征后,為了驗證上述特征是否可以對基于時序的人體骨架進行有效描述,我們希望對每個特征與標簽的相關性進行量化處理。常用的特征相關性過濾法有卡方過濾、F檢驗、互信息法等。在面對冗余的特征時,卡方過濾可以根據選取的閾值和特征相關性大小篩選出期望數目的關聯特征,但是當特征數較少且關聯性較高時,特征的刪減會降低模型的準確率;F檢驗又稱方差齊性檢驗,F檢驗的本質是尋找兩組數據之間的線性聯系,當特征與標簽具有線性聯系時,它可以準確篩選出與標簽關聯性高于閾值的特征,但是在面對和標簽不具有明顯線性特征時,相關特征的缺失同樣會導致模型表現的衰退;而互信息法不同于F檢驗法,互信息法通過計算每個特征與標簽之間的任意關系,可以量化每個特征與目標之間互信息量的估計,從而可以判斷各個特征與標簽相關性的強弱。
互信息法計算公式如下:
I(Y;X)=
(15)
式中:X為某幀骨架拓展類的特征;Y為對應的標簽;xi為該特征第i個數據的數值;yi表示該數值對應的標簽。其中X=xi與Y=yi的聯合概率表示為:
P(X=xi,Y=yi)
(16)
xi在整個數據集中出現的概率表示為:
P(X=xi)
(17)
yi在整個數據集中出現的概率表示為:
P(Y=yi)
(18)
傳統的機器學習分類器有很多種,常見的有支持向量機算法(Support Vector Machine)、K近鄰算法(k-NearestNeighbor)、樸素貝葉斯算法(Naive Bayesian Model)等。這些算法各有優劣,比如K近鄰算法雖然精度較高且對異常值不敏感,但是計算和空間復雜度較高;支持向量機算法盡管計算代價不高但是容易欠擬合,分類精度較低,而集成了多個分類器的集成學習算法(Ensemble Learning)巧妙地解決上述問題。集成算法會考慮多個評估器的建模結果,匯總之后得到一個綜合的結果,以此來獲取比單個模型更好的回歸或分類表現。
集成算法主要有兩類:Bagging(并行)類算法和Boosting(串行)類算法,隨機森林是非常具有代表性的Bagging類集成算法,如圖6所示,它的所有基評估器都是決策樹,而分類樹組成的森林就叫做隨機森林分類器,由于隨機森林算法具有良好的性能表現,它被廣泛應用到諸如語音識別、人體動作識別、度量學習等領域。
隨機森林分類器的具體流程如下:若現有數據集P={Xi,Yi},其中:Xi為幀級骨架拓展類的混合特征;Yi為動作標簽。隨機森林在S個基分類器的基礎上通過集成學習組成一個集成分類器。如圖7所示,當有樣本進入集成分類器后,根據各個分類器投票結果的多少,決定樣本輸出的分類結果。
基于第3節中所提出的特征評估與分類算法,本文選取UTKinect Dataset數據集,根據特征互信息量、準確率、精確率、召回率、F1-Score、每秒平均傳輸幀數等衡量指標對算法進行了性能評估。此外,還將本文方法與其他現有的先進算法進行了對比實驗,實驗設備部分信息如表3所示。

表3 實驗設備信息
在隨機森林分類器中,n_stimators表示弱分類器的個數,其數值過小容易導致過擬合,數目過大會影響算法運行速度,本文將數值設置為100;max_features表示決策樹分枝時考慮的特征個數,我們選擇auto,默認為總特征數的開平方取整;max_depth表示決策樹最大深度,本文選擇為40;其余值設置為默認。具體數值如表4所示。

表4 隨機森林模型參數
本文使用UTKinect Dataset數據集進行測試,該數據集由得克薩斯州大學奧斯汀分校建立,由10種動作類型和10組動作序列組成,每個人執行指定動作兩次,圖像為三通道,分別為RGB圖像、深度圖、骨骼關節點位置,數據集示例如圖8所示。
本文選取RGB圖像進行算法評估,其中80%作為訓練集,20%作為測試集。具體動作圖像樣本數量如表5所示。

表5 數據集樣本分布
人體某個動作的識別結果可以分為正樣本(Positive)和負樣本(Negative),我們把TP(Ture Positive)定義為正樣本的正確分類數,把TN(Ture Negative)定義為負樣本的正確分類數,把FP(False Positive)定義為正樣本的錯誤分類數,把FN(False Negative)定義為負樣本的錯誤分類數;隨后根據樣本的分類情況引入幾種常見的分類指標對算法的性能進行評估。
為了評估預測值和真實值之間的差距,我們引入準確率(Accruacy),公式如下:
(19)
為了評估正確分類為正的樣本與被分類為正的樣本的數量關系,我們引入精確率(Precision),公式如下:
(20)
為了評估正確識別出的正樣本與正樣本總量的關系,我們引入召回率(Recall),公式如下:
(21)
為綜合評估算法的性能,我們引入F1-Score,公式如下:
(22)
為了更加清晰地衡量算法的性能,本文還給出識別結果的混淆矩陣,有助于找到各個動作之間的關系。
4.3.1特征實驗
為了驗證提取出的幀級骨架拓展類特征能否有效表示出時序動作,本節結合互信息量等相關指標進行了相關的實驗。基于骨骼序列的動作識別是一個包含時間序列的分類問題,每個數據對應著三個特征和一個標簽,由于幀級骨架拓展類的特征數值與拓展類大小有關,本文在實驗過程中將拓展類個數S分別取值為10、15、20,并對得出的實驗結果求均值,得到的互信息量結果如表6所示。為了探究不同幀級骨架拓展類特征組合對于動作識別性能的影響,本節還進行了特征的消融實驗,實驗結果如表7所示。

表6 特征互信息量

表7 不同特征組合的動作識別實驗結果(%)

4.3.2幀級拓展類數量的影響
由于幀級骨架拓展類特征中包含骨架時序特征,幀級拓展類數量如果太少,混合特征中不會包含充分的有效骨架信息;相反,幀級拓展類數量如果過多,可能會增加參數數量并產生冗余數據從而降低識別準確率。為充分驗證本文方法的有效性,我們采用隨機森林分類器對數據集進行了測試實驗,并選取了多組幀級拓展類數量對結果的準確率、精確率、召回率、F1-Score等參考指標進行了測試,算法識別結果如表8所示。

表8 算法識別結果(%)

4.3.3與現有方法的比較
為了充分驗證本文方法的先進性,本節引入了其他現有的先進算法在UTKinect Dataset數據集上進行了對比實驗,結果如表9所示。

表9 本文方法與現有方法的比較(%)
文獻[21]把動作序列的時空表示非線性地投影到一個不可逆的特征表示介質中,并將序列的非線性、稀疏性和空間曲率特性集成到一個單目標函數中,得到了高度緊湊的判別屬性表示。文獻[22]與文獻[21]不同,其使用傳輸平方根速度函數(TSRVF)來表示流形軌跡,并結合主成分分析法(mfPCA)進行特征低緯嵌入,在動作識別、聚類、多序列采樣等應用中有效地建模了流形軌跡。文獻[23]使用方法與本文相近,使用深度序列和相應的骨骼關節信息進行基于深度學習的動作識別,其將學習的特征與SVM分類器結合,從而進行動作識別。文獻[24]提出了兩個基于深度的特征,稱為成對相對關節方向(PRJO)和深度貼片運動圖(DPMM),分別代表每對關節之間的相對運動和人與物體的相互作用;對稀疏關節集,提出一種基于回歸的學習方法來學習動作預測器。文獻[25]提出了一種基于樹形結構的遍歷框架,為了處理骨架數據中的噪聲,在LSTM模塊中引入了一種新的門控機制,網絡可以通過該機制了解網絡的可靠性,此外還提出了一種基于LSTM單元的多模態特征融合策略,取得了較高的準確率。
在比對實驗結果后可以發現,相比現有方法,本文方法在識別準確率上具有一定優勢。在處理UTKinect Dataset數據集中的拿、扔、撿等動作時,由于遮擋和角度等原因,基于骨骼特征[21,23]和深度特征[24]的方法效果偏差,而ST-LSTM+TG[25]和本文方法的準確率均優于其他方法,這也證明在處理骨架特征時,時序特征是影響動作識別準確率的重要因素。
4.3.4算法運行速度實驗
本文選取UTKinect Dataset數據集中的s06_e01片段進行實時性測試,以平均每秒運行速率(mFPS)作為參考指標,實驗過程截圖如圖12所示,實驗結果如表10所示,mFPS達到了21.9,這表明算法具備了實時運行的能力。

表10 算法運行速度實驗結果
本文基于幀級骨骼拓展類特征構造了一個混合特征,并結合隨機森林分類器實現了人體實時動作檢測的功能。在根據各項指標進行實驗評估后,驗證了該識別方法的有效性,在UTKinect Dataset數據集上的識別準確率達到了97.43%,平均處理一幀畫面的時間低于0.05 s,在保證識別準確率的基礎上兼顧了實時性。該方法在監控、安防、視頻交互等領域的應用前景巨大。此外,本文還對比了基于時序特征算法與常見算法的識別準確率,結果表明基于時序特征的方法在準確度上均優于其他方法,這為以后動作識別相關的研究提供了依據。