林 楓
(中國科學技術大學計算機科學與技術學院 安徽 合肥 230027)
動作識別一直是計算機視覺領域中的重要研究分支。根據數據源的不同,它可以劃分為基于RGB圖像的動作識別和基于3D人體骨架數據的動作識別[1-3]。近年來,隨著深度攝像等技術發展,基于3D人體骨架數據的動作識別受到越來越多的關注。相比于RGB圖像,3D人體骨架數據表達能力更高,且在不同的光照、視角、移動速度等條件下具有更好的魯棒性[4]。
動作識別的目標是在對人體骨架實施的動作進行判別分析。人體骨架通常可表示為一個由關節連接起來的剛性段組成的鉸鏈系統,而骨架的動作則可以視為這些剛性段在空間形態上的連續演化[5]。因此,3D人體骨架動作數據主要描述人體骨架的空間變化,通常以人體多關節點坐標的時間序列的形式呈現。這種數據往往比較復雜,難以用簡單的向量進行表示。
針對3D人體骨架的動作識別任務,研究者提出很多方法,包括基于人工特征的方法[6-7]、基于幾何模型的方法[8-11]和基于深度學習的方法[12-14]。相比于其他方法,基于幾何模型的識別方法注重挖掘骨架數據的幾何結構,通過格拉斯曼流形[15]、李群[6,16]等幾何模型來描述數據空間,同時強調動作序列的魯棒表示,具有更好的可解釋性。由于數據維數較高,這類方法能用降維的方式把高維序列樣本直接映射成幾何空間的一個點,有效減少數據的冗余信息,但這個壓縮過程所造成的時序信息損失很容易會被忽略。文獻[17]指出一個動作從開始執行到完成的演化過程蘊含一種本征性的時序。這意味著時序信息對動作的確定十分關鍵。因此,這種損失最終會影響動作的識別效果。文獻[18]試圖通過構造漢克爾矩陣的方式編碼時序信息,但能包含的時序信息非常有限[19]。其他研究者則大多利用線性動態系統(Linear Dynamic System,LDS)來建模時序[20-22]。然而,這種基于連續幀建模的方式通常是高度冗余的,會大大增加計算代價[23]。
為了在保持降維優點的同時考慮時序信息,本文提出一種基于乘積格拉斯曼流形的動作識別方法。針對流形表示中時序信息缺失的問題,引入乘積格拉斯曼流形來建模不同時間視角下的局部動作變化,從而構造一種自包含時序信息的序列表示。基于這種表示,利用流形上的非線性度量分析骨架動作序列的異同,對序列數據進行學習,得到動作序列的分類判別模型,實現更加準確的動作識別。
在格拉斯曼流形上的經典內積定義為:
〈X,Y〉=tr(XTY)
(1)
式中:X和Y為格拉斯曼流形上的任意兩點。
文獻[24]指出,在實際中,利用投影映射:

(2)


(3)

由上述內積誘導出相應的距離度量,可以寫成如下形式:
(4)
事實上,格拉斯曼流形上有效的核函數不止投影核一種,還有Binet-Cauchy(BC)核、不定核、仿射核、歸一化核等其他種類[26-27]。它們被統稱為格拉斯曼核(Grassmann Kernels)。可以基于這類核函數進行格拉斯曼流形上的學習。文獻[26]討論了以子空間為單位在格拉斯曼流形上進行判別學習的可行性,基于線性判別分析(Linear Discriminant Analysis,LDA)的思想和格拉斯曼核提出了格拉斯曼判別分析(Grassmann Discriminant Analysis,GDA),通過最大化類間距離、最小化類內距離得到最佳判別函數。除此之外還有圖嵌入判別分析[28]、投影度量學習[25]等方法陸續被提出。
由多個格拉斯曼流形空間的笛卡爾積構成的乘積空間也是一個光滑流形,被稱為乘積格拉斯曼流形(Product Grassmann Manifold,PGM)。可以表示為:

(5)

對于PGM上的任意兩個點,X={X1,…,Xm}和Y={Y1,…,Ym},可以構造出PGM上的度量:
(6)
作為一族格拉斯曼流形的組合模型,乘積格拉斯曼流形非常適合于表示有多級變化因子的數據[29]。
給定一組序列數據,考察其中一個樣本。例如一個動作序列X,它可以描述為:
X=[X1,X2,…,XT]
(7)
式中:Xi(i=1,2,…,T)是時刻i的3D骨架數據,它通常為一個3×J的矩陣或簡化成一個長為3J的向量,J表示骨架中關節的個數。
不妨假設所有動作在時序上都是可比較的,即每個動作序列的本征時序都能用一個固定長度m的有序分組表示。
式(7)中序列X可重新表示為:
{[X1,…,Xt1],[Xt1+1,…,Xt2],…,[Xtm-1+1,…,XT]}
(8)
本文簡記:
Sj=[Xtj-1,…,Xtj] 1≤j≤m
(9)
t0=1且tm=T。
Sj(j=1,…,m)描述的是動作第j個時序階段執行的局部子動作。它可能包含多個可描述的動作單元,但為了降低序列表示的冗余信息,我們并不關注這個局部子動作在每一個時刻的表示,而只考慮它在當前階段的全局表現。注意到,除非|tj-tj-1|足夠小,否則Sj的維數依然會很高。因此,我們需要對Sj進行降維表示,提取其中的主要信息。因為Sj跨越的是一個相對較小時間段,在計算時,不必擔心局部時序信息的損失,可以直接將它映射到格拉斯曼流形上。
考慮對Sj進行奇異值分解(Singular Value Decomposition,SVD):
(10)

P(X)={Π(U1),…,Π(Um)}
(11)
這種PGM表示自然包含了動作序列的本征時序,因此能為動作識別帶來很大的方便。
對于單格拉斯曼流形,研究者已經提出一些有效的判別分析方法。事實上,這些方法都遵循著傳統機器學習的思路,即構造一個目標函數并優化從而得到最佳的模型參數。只不過優化的目標函數不再是普通向量,而是子空間。

(12)
式中:ω是模型參數;C是正則化參數;φ(X)是X的子空間表示;l(·)是基本損失函數,當它為合頁函數l(X,y;ω)=max{0,1-yωTφ(X)}時,上述分類器即為格拉斯曼流形上的支持向量器(Support Vector Machine,SVM)。類似地,邏輯回歸或者概率向量機模型[30]等也可以擴展到格拉斯曼流形上。
單格拉斯曼流形上的分類方法可以推廣到PGM上。這里以SVM為例。應當注意到,PGM上的點的分布是其在組成該PGM的各個單格拉斯曼流形上投影的分布疊加作用的結果。因此,可以構造經驗損失函數:
(13)
這里的φ是一個非線性映射函數。
最小化式(13)中的目標函數并不是一件容易的事。因此,可以不直接優化該函數,而是去求解其對偶問題,引入核方法,這樣做大大降低了求解難度,也提高了求解效率。
通過引入一個輔助變量α=(αi)i=1,…,n,本文可以將PGM上的分類模型式(13)轉換成為一個帶核模型:
(14)
式中:Kt(·,·)是格拉斯曼核。注意到式(14)的形式和通常的SVM優化函數非常相似,只有核函數的部分是有差異的。我們可以提取出式(14)中的核:
(15)
本文將K(·,·)稱為PGM核。它是一個格拉斯曼核的加性組合。顯然,影響PGM核的關鍵是各單格拉斯曼核的形式。當然,最常用的核自然是投影核,其形式如式(3)所示,不再贅述。
式(15)中的PGM核將每個單格拉斯曼流形核對結果的貢獻度都看作是一致的,但事實上不同的局部可能會產生不同的影響。因此,也可以考慮將簡單的加法模型修正為一個加權的多核模型:

(16)
在確定核的形式之后,可以基于數據的PGM表示事先計算核矩陣,再最小化式(14)中的目標函數。
為了挖掘序列數據的流形結構,本文提出一種基于PGM的動作識別算法。該算法以3D骨架動作序列為輸入,再將序列映射到PGM上得到降維表示。基于這種PGM表示,利用多核學習的方法可以計算出核矩陣。之后的參數學習過程就可以像求解一般SVM優化問題那樣去求解目標函數式(14)的最小化問題,得到最佳的模型參數核評分函數。最后利用訓練得到的模型,對一般的骨架動作序列進行分類識別。算法的步驟如圖1所示。

圖1 基于PGM的人體骨架動作識別
值得注意的是,該算法在構建降維表示時的計算代價與PGM的因子個數m成正比,并受SVD分解的效率影響,因此復雜度約為O(mSLr),S是骨架坐標表示的維數,L是序列長度,r是降維SVD分解時保留的奇異值個數。為了降低信息的冗余,通常m不會很大;而局部包含信息通常比全局信息少,因此降維時r也會較小。這時,算法復雜度與一般基于格拉斯曼流形的降維表示方法相近。因此,其計算代價并不會高于其他在格拉斯曼流形上進行學習的方法。同時,訓練出的分類器具有很好的泛化能力,能夠實現高效、準確的動作識別。當然,受到SVM方法自身的限制,其實時預測的效率一定程度上依賴于核矩陣的計算。為了更好地提高識別的實時性,可通過一定策略[31]對分類器進行在線優化。
實驗使用了MATLAB R2017b作為開發工具,并使用了LibSVM工具包[32]。
本文在MSR Action3D[33]、Florence 3D[34]和KARD[35]三個常用的3D人體骨架動作數據集上進行了實驗,數據集信息如表1所示。

表1 數據集信息
MSR Action3D數據集來自于微軟研究院,通過深度相機收集。但這些樣本有一部分有缺失,因此實際中往往會棄用這部分數據。KARD數據集則利用微軟Kinect相機捕捉骨架坐標,數據更加可靠、準確。而Florence 3D數據集由佛羅倫薩大學的研究者收集得到,同樣是利用了Kinect相機。該數據集中的動作具有高度的類間相似性和類內的波動性,因此該數據集的動作對于機器識別起來會有一定困難。
本文的三個實驗均按照相應數據集文獻中的標準實驗進行。對于MSR Action3D數據集,依照文獻[28]中的設定將它劃分為三個數據子集。而每個子集則按動作執行對象將數據的50%用于訓練,50%用于測試。在Florence 3D數據集上則采用每次留一人(Leave-one-subject-out)用于測試的學習規則。而對于KARD數據集,同樣將它劃分為三個識別難度不同的數據子集,但是使用了更多不同的實驗設置。在KARD數據集上進行了三個子實驗(A/B/C),分別使用(A)每個對象數據的1/2、(B)每個對象數據的2/3和(C)全部數據的1/2用于訓練。
為了選擇合適的參數,本文在所有的實驗中均使用了10折交叉驗證。其中,分類器參數C的選擇范圍為-103~104,而控制局部降維的參數r則通常不超過10。m作為PGM表示最重要的參數,在本文實驗中從1~10中進行篩選。在實際測試中,m不宜過大也不宜過小。
為了驗證本文方法的有效性,在MSR Action3D數據集上,將本文方法與文獻[14]、文獻[25]、文獻[26]、文獻[28]和文獻[36]提出的方法進行實驗對比,如表2所示。

表2 MSR Action3D數據集上的準確率結果比較(%)
可以看出,相比其他算法,本文方法在這三個不同的子集上均表現良好。在子集1上雖然比文獻[25]的方法略有不如,但比其他方法的準確率都要更高;在子集2上也達到了最高的識別準確率;而子集3上的識別準確率更是遠超其他算法。本文方法平均識別準確率也大幅上升,比其他方法提高了2%,這充分說明該算法對于常規動作有很強的識別能力。該方法在不同子集上的混淆矩陣如圖2所示。可以看出,它在大多數類別動作的判別上表現很好,只是對少數幾個易混淆類動作的識別還有待提高。整體上看,矩陣對角線的顏色明顯比非對角線的更深,表明本文方法分類效果較好。

(a) 子集1

(b) 子集2

(c) 子集3圖2 MSR Action3D子集上的混淆矩陣
除了MSR Action3D數據集,我們還在Florence 3D數據集上進行了實驗,結果如表3所示。該實驗的結果是經過10次測試取平均值得到的。從表3可以看到,本文方法在該數據集上能取得最高的準確率。這體現了它在小規模數據集上良好的泛化能力。

表3 Florence 3D數據集上的實驗結果(%)
為了進一步驗證算法對骨架動作數據建模的流形結構是有效的,本文又在KARD數據集的三個不同子集上進行了三組實驗,并將結果與文獻[25]、文獻[26]和文獻[28]等基于流形的方法進行比較,如表4所示。

表4 KARD數據集上的準確率結果對比(%)
可以看出,在第一個子集上采用實驗設置A的時候,本文方法是其中識別最準確的;在B和C設置下結果也與準確率最高的算法非常接近。在第二個子集上,文獻[26]的方法表現非常突出,本文方法的識別率也相差無幾。第三個子集是區分難度最大的子集。在這個子集上,無論什么設置,本文方法都有著最高的識別準確率。綜合來看,其他算法在動作識別時都有一定的不穩定性,可能在某個子集上效果非常好,但在另一個子集上的效果卻相對較差。這表明它們對數據的建模可能存在一定偏差,泛化能力不足。而本文方法在三個數據子集上的表現都很穩定,準確率很高,結果不會因為實驗設置的改變或者數據子集的變化而產生巨大波動。這意味著相比于其他幾個基于流形的算法,該方法對數據的建模可能更接近數據的真實結構。
本文提出一種基于PGM的3D人體骨架動作識別方法。該方法將動作序列數據投影到PGM上,直接在流形上進行學習。為了保留低維表示優點的同時捕捉時序信息,本文的方法利用PGM可以表示多因子數據的特點,提取時間序列在不同時間視角下的局部信息,并整合進行模型訓練。實驗結果表明該方法在多個數據集上均能有效提高識別效果。在未來的研究中,我們會將這種方法的思想推廣到其他流形,進一步提高這種方法在不同數據環境下的準確性與魯棒性以及算法的實時預測能力,并探索方法在更廣泛的時間序列學習上的應用。