楊文璐,于孟孟,謝 宏
(上海海事大學信息工程學院,上海201306)
近年來,高新技術產業的快速發展和市場對智能設備需求的逐步擴大,極大地促進了計算機視覺的廣泛應用和發展。人類行為識別的研究成果被廣泛應用于智能監控、智能家居、視頻檢索定位、運動屬性分析等日常生活領域[1]。
目前針對人類行為的分析多集中在單人或人與物的分析,對雙人或者多人交互行為分析的研究還比較少[2]。與單人動作相比,雙人交互行為在日常生活中更常見。同時,目前一些特定場合的智能監控系統對于雙人交互行為識別的需求更為迫切,如從敏感的監控場景(機場、火車站等)大量的視頻中檢測出推搡、踢打等具有潛在危害性的行為,可以及時地反饋到相關部門,從而提高安保效率,大大提高智能視頻監控系統的智能化水平。因此,雙人交互動作的識別應用領域更廣。
根據原始數據的不同,對于雙人交互行為識別的分析方法可以分為基于RGB 視頻和基于關節點數據兩類[3]。基于RGB 視頻的研究開始得比較早,到目前為止的研究成果也非常豐富[4-6],但是由于其缺乏維度信息,導致交互行為識別的效果不是很好。
隨著時代的進步與科技的發展,以Kinect 為代表的深度攝像機開始出現。Kinect 可以通過簡單的采集方式獲取高精度的數據,提供的三維關節點信息可用于人體行為識別研究,也可以解決利用傳統圖像或視頻時難以分割人體的困難[7]。Kinect 開啟了利用三維關節點信息進行行為識別的新篇章。文獻[8]中將Kinect 捕獲的三維關節點數據轉換成關節角度特征,并使用支持向量機(Support Vector Machine,SVM)對人體姿態進行檢測;文獻[9]中為了降低識別過程的計算復雜度,提出了一種基于人體關節結構相似度的行為關鍵幀提取方法;文獻[10]中提出了一種基于空間關系和身體部位之間語義運動趨勢相似性的新特征描述符用于雙人交互識別;在文獻[11]中,交互式身體對之間的關系和運動信息被用作獨特的特征。
在雙人或多人交互行為的研究中,關鍵姿勢的提取是關鍵問題之一。文獻[12]中通過測量四肢之間的距離粗略地確定交互對,收集交互姿勢,然后進行對比挖掘提取典型的交互姿勢以進行交互識別;文獻[13]中通過連續兩幀之間的深度變化計算出某一幀姿勢對應的運動能量,定義一段時間內運動能量最大的部分是運動部分,即關鍵姿勢。
本文擬結合骨骼點角度變化的方差和骨骼點間的空間關系來提取關鍵姿勢;然后用關節距離、角度和關節運動等特征表示關鍵姿勢,每一個動作表示為一個特征矩陣;最后,利用不同的降維和分類算法組合進行實驗,選取識別率最高的算法組合。實驗結果表明本文提出的方法對復雜的交互行為具有較強的魯棒性和較好的識別率。
本文通過Kinect 獲取人體的骨骼數據,對雙人交互進行識別,具體步驟包括獲取數據、提取關鍵幀、提取特征值、降維和分類等,如圖1所示。

圖1 雙人交互行為識別過程Fig.1 Recognition process of two-person interaction behavior
在獲取數據階段,本文采用經典數據集和自建數據集結合的方式。
經典數據集采用SBU 數據集[14]。該數據集采用Microsoft Kinect 傳感器獲取并提取骨骼數據。該數據集中包含8 種類型的雙人互動,即靠近、遠離、推人、踢人、拳打、遞書、擁抱和握手。所有數據均記錄在相同的實驗室環境中,7 名參與者組成21 對進行交互,每個動作類別每一對做一次或兩次。整個數據集大約有300 個交互,除了包含640 × 480 像素的彩色圖像和深度圖之外,該數據集還包含每幀每個人15 個關節的三維坐標。由于骨骼的快速移動和關節點之間的遮擋、重疊,導致采取的某些數據不穩定甚至不正確。
自建數據集則使用Kinect 2.0 獲取了7 種交互動作的彩色視頻、深度圖像和骨骼數據。數據集包含的交互動作類型為靠近、遠離、推人、踢人、拳打、遞書和握手,是由5個人組成10對,每種動作每對做10~15次組成。此外,該數據集是在背景雜亂的室內環境中捕獲的,彩色視頻和深度圖均具有640 ×480 像素的分辨率。利用Kinect 2.0 的骨骼跟蹤技術可以捕獲人體25個關節點的三維位置信息,如圖2所示。
關鍵姿勢是表示該幀及其鄰幀中人體狀態的姿態,由關鍵姿態表示的狀態對于解釋人的行為最有意義[15]。為了防止交互行為識別中關鍵信息的丟失,減少數據的冗余,本文提取關鍵幀中的人體姿態信息作為關鍵姿態。
幀間差異比較是一種常用的提取關鍵幀的技術,通過比較相鄰幀圖像之間的顏色直方圖或者人體關節位移等信息,將幀間差異小于特定閾值的幀圖像過濾掉,剩余的幀圖像被確定為關鍵幀[16]。本文就采用幀間差異比較,利用式(1)計算連續兩幀之間骨骼坐標的移動距離,設定一個閾值,篩選出大于閾值的幀組成關鍵幀,然后再進行特征提取。

其中:m代表幀數;j代表是骨骼點。
目前國內外提出的動作識別算法中有三種表示骨骼特征的方法:第一種是空間描述,通過計算一定時間內人體骨骼所有關節或部分關鍵關節的兩兩距離,用協方差矩陣表示識別動作的特征;第二種是幾何描述,利用運動骨架變換序列對骨架關節的子集或相對幾何特征進行描述;第三種是基于關鍵姿勢的描述,使用算法選擇一組表示每個動作的關鍵姿勢,每個骨架序列使用最接近的關鍵姿勢來表示[17]。
使用骨架關節作為特征的最大挑戰之一是語義上相似的運動不一定在數值上相似[18]。但對于同一類動作總會有相同的關鍵姿勢,即每一個交互動作都有自己獨有的一個或多個區別于其他動作的特征,除了這些主要的特征之外大都是一些多余動作,如握手,只需判斷雙方的右手或者左手是否握在一起,至于雙方的其他動作都是干擾動作。所以本文提出了一種新的基于關鍵姿勢的描述對雙人交互的動作進行識別。
1.3.1 提取關鍵骨骼點
提取關鍵姿勢首先要找到關鍵姿勢中的骨骼點,關鍵骨骼點是完成一個動作最主要的部位,而其他的多余行為則不是我們研究的重點。在概率論和統計學中,隨機變量的方差描述了它的離散度,即變量與期望值的距離。本文利用連續幀之間關節點角度變化的方差來說明骨骼點運動的幅度大小,從而找到運動的主要部位。
交互雙方各自建立一個以臀部為中心的直角坐標系,坐標系的方向和Kinect 自身的坐標系一樣,如圖3 所示。本文以Y軸正方向(0,1,0)為標準向量,計算骨骼點與中心形成的方向向量與標準向量之間的角度,計算公式為:

其中:i、j是交互中肢體的任一關節,關節可以來自一個人也可以是不同的人。
獲得交互雙方所有骨骼點的角度后用方差來說明角度變化的程度,以此找到動作中最活躍的部位。方差表示為:

其中:i代表任何一個骨骼點;m代表關鍵幀的幀數;Angin為連續兩幀之間骨骼點i角度的變化是骨骼點i連續兩幀之間角度變化的平均值。
根據方差的大小,獲取方差最大的兩個骨骼點作為關鍵骨骼點。

圖3 Kinect2.0坐標系圖Fig.3 Kinect2.0 coordinate system diagram
1.3.2 提取關鍵姿勢
提取關鍵骨骼點之后更重要的是確定關鍵姿勢,即確定互動肢體對。每個交互動作都有其必不可少的互動肢體對,由于交互雙方的身體部位總是按照交互順序彼此接近甚至接觸,因此本文通過測量關鍵骨骼點之間的距離確定交互對。關節距離最常用的是歐氏距離,Disi_j定義為:

其中:i、j 是交互中肢體的關鍵關節,關節可以來自一個人也可以是不同的人。
利用歐氏距離獲取關鍵骨骼點與交互方所有骨骼點的距離,根據距離大小確定交互對。
1.3.3 計算特征向量
實驗中Kinect 采集的骨骼數據為一組時間序列數據,原始數據包括人體15 或25 個關節點的三維坐標。然后轉化為每幀的多個特征維度,一個交互行為中的若干幀特征構成一個交互動作的樣本。根據1.3 節提取出的關鍵交互對,針對每個交互動作利用一個或兩個特征值來表示出關鍵關節的姿勢狀態,具體表示如下所述(以1.1 節圖2 的25 個關節為例,用0~24 表示交互的第一個人的關節,25~49 表示交互的第二個人的關節):
1)利用1.3.2 節中的式(4)計算關節1(SpineMid)和關節26(SpineMid)間的距離Dis1_26來表示交互雙方身體間的距離,若此距離小于某個閾值則輸出1,否則輸出0。
2)計算關節3(Head)和關節28(Head)在X 軸方向上的距離,記為DisX3_28,然后計算關節3和關節11(HandRight)、關節7(HandLeft)在 X 軸 上 的 距 離 以 及 關 節 28 和 關 節 36(HandRight)、關節32(HandLeft)在X 軸上的距離,分別記為:DisX3_11、DisX3_7、DisX28_36和 DisX28_32;若 DisX3_28大于后四個距離中的任意一個則輸出1,否則輸出0。
3)計算關節 15(FootLeft)和關節 19(FootRight)、關節 40(FootLeft)和關節 44(FootRight)在 Y 軸上的距離,分別記為:DisY15_19和DisY40_44,若任一距離大于某個閾值則輸出1,否則輸出0。
4)由步驟1)得到每幀交互雙方間的距離Dis1_26,接著計算前后兩幀間交互雙方距離的差值,若差值大于0 則為1,否則輸出0。
5)利用1.3.1節中的式(2)計算關節4(ShoulderLeft)和關節 7(HandLeft)、關 節 8(ShoulderRight)和 關 節 11(HandRight)、關節 29(ShoulderLeft)和關節 32(HandLeft)、關節33(ShoulderRight)和關節 36(HandRight)分別形成的向量與 Y 軸正方向形成的夾角 Ang8_11、Ang29_32、Ang33_36,來說明胳膊抬起的大致位置,判斷任一角度是否大于某個閾值,若成立輸出1,否則輸出0。
6)利用1.3.2 節中的式(4)計算關節7(HandLeft)和關節29(ShoulderLeft) 、關 節 11(HandRight) 和 關 節 33(ShoulderRight)、關節 32(HandLeft)和關節 4(ShoulderLeft)、關節36(HandRight)和關節8(ShoulderRight)間的距離,分別記為:Dis7_29、Dis11_33、Dis32_4、Dis36_8,若任一距離小于某個閾值,則輸出1,否則輸出0。
7)計算關節 1(SpineMid)和關節26(SpineMid)在 X 軸上的 距 離 DisX1_26,再 計 算 關 節 11(HandRight)、關 節 36(HandRight)在 X 軸方向上和 DisX1_262 的距離差,若差值小于某個閾值則說明右手位于交互雙方之間,輸出1,否則輸出0。
8)利用1.3.2 節中的式(4)計算關節11(HandRight)和關節36(HandRight)間的距離Dis11_36來表示交互雙方右手之間的距離,若此距離小于某個閾值則輸出1,否則輸出0;然后在Dis11_36小于前者閾值的情況下,再次判斷是否小于更小的某個閾值,若成立輸出1,否則輸出0。
綜上所述,每幀提取的特征包含9 個特征,判斷每一幀的上述特征條件是否成立,如果成立則為1,否則為0,這樣就形成一個二值矩陣作為特征矩陣。
SBU 數據集的樣本數量在平常的研究中屬于小樣本的數據。為了使實驗結果更有說服力,本文采用“leave-one-out”方法來進行實驗。“leave-one-out”方法也可叫“留一法”,該方法中使用的訓練集比初始數據集少一個樣本,這使得在leaveone-out方法中實際評估的模型與在大多數情況下預期要評估的數據集上訓練出的模型非常相似。因此,留一法的評估結果往往被認為比較準確。
目前已存在多種應用廣泛的降維算法和分類器模型,本文選取了幾種常用、較流行的降維算法和分類器模型進行組合,并在SBU 數據集以及本文自建的數據集上進行實驗。其中降維算法有:主成分分析(Principal Component Analysis,PCA)、奇異值分解(Singular Value Decomposition,SVD);分類算法有隨機森林(Random Forest,RF)、SVM、長短期記憶(Long Short-Term Memory,LSTM)網絡。
PCA 算法是一種線性降維方法,它的主要思想是將L 維度中的特征映射到k(k <L)維度。這k 維是一個新的正交特征,也稱為主成分,是基于尺寸特征重建的k 維特征,即找到數據中最重要的方面,并用數據中最重要的方面替換原始數據。
SVD可以很容易地獲得任何矩陣的滿秩分解并使用滿秩分解達到對數據進行降維壓縮的目的[19]。降維處理的重要性取決于SVD 中奇異值的重要性,它是丟棄不重要特征向量的過程,而由剩余特征向量組成降維后的空間。
Bagging 算法是Bootstrap aggregating,其思想就是從總體樣本當中隨機取一部分樣本進行訓練,通過多次這樣的操作,進行投票獲取平均值作為結果輸出,這就極大可能地避免了不好的樣本數據,從而提高準確度[20]。而RF是基于樹模型的Bagging 的優化版本。通過從原始訓練樣本集中隨機選擇w個樣本,生成一個新的訓練樣本集,并根據自助樣本集生成一個w 分類樹,形成一個RF。新數據的分類結果取決于分類樹形成的分數數量。
SVM 是線性分類器,其主要目的是在足夠的空間中找到一個超平面以劃分所有數據樣本,并最大限度地減少數據集中所有數據與該超平面之間的距離。SVM最重要的方面是核函數的選取和參數的選擇,這些可以通過實驗識別率來選擇。
LSTM 方法是在循環神經網絡(Recurrent Neural Network,RNN)方法的基礎上改進而來,引入一個新的狀態單元Cell作為計算核心,解決了循環神經網絡的梯度消失和梯度爆炸問題[21]。LSTM 的核心是門控制機制,包括輸入門、輸出門和遺忘門,這使LSTM 可以選擇記住、忘記或更新歷史信息,并且LSTM可以解決丟失RNN梯度的問題。
本文主要是使用Matlab 2016b 中的工具箱對數據進行降維和分類,故只簡要介紹一下上文所提到算法的實現原理。為了減少錄制數據時無法避免的骨骼遮擋和數據不穩定的影響,本文在降維和分類之前加入一個判斷條件:如果二值矩陣的某個特征有間斷的一個1或兩個1存在,則把1置為0。
實驗環境為 Inter Core i3-3217U,CPU@1.8 GHz,4 GB 內存,Windows 8 操作系統,Visual Studio 2015 和 Matlab 2016b。使用Kinect 采集并獲取實驗數據集,在獲取人體骨骼的三維坐標后在Visual Studio 上編寫程序對原始數據進行關鍵幀和特征的提取等處理,得到特征矩陣后把特征矩陣在Matlab 中利用降維和分類工具箱進行處理并得到識別結果。
降維算法和分類器模型的不同組合在SBU數據集以及本文自建的數據集上的實驗結果對比如表1所示。

表1 不同算法組合在兩個數據集上的實驗結果對比Tab. 1 Experimental results comparison of various algorithm combinations on SBU dataset and self-built dataset
由表1 可知:PCA+SVM 的組合在SBU 數據集上識別率最高并且平均耗時最少,由此可知PCA+SVM 相比其他組合更適合于SBU 數據集;PCA+RF、PCA+LSTM 兩個組合在本文自建數據集上識別率最高,但PCA+RF 平均耗時相對更少,在優先考慮識別率的情況下PCA+RF 更適合于自建的數據集。綜述所述:對于上述兩個數據集來說,降維算法PCA 比SVD 效果更好;對于降維算法,由于SVD 的維數多于PCA,所以SVD平均耗時更多;而對于不同的分類器模型,SVM平均耗時少于RF,RF 耗時少于LSTM,所以在各種算法組合中PCA+SVM 平均耗時是最少的。
PCA+SVM 組合在SBU 數據集上的識別率結果如表2 所示。由表2 可以看出,由于交互動作的明顯特征,踢人和擁抱以100%的正確率被識別出來,而靠近和遠離動作受擁抱和遞書前期的靠近動作以及完成后的分離動作的影響,使得部分動作的識別出現錯誤;而對于拳擊和推人、握手和遞書相似性很大,識別也有些困難。
將本文方法的識別率與現有算法的結果進行比較,具體如表3 所示。本文方法的識別率達到92.47%,其識別率分別比文獻[14]、文獻[19]、文獻[12]和文獻[10]中的方法提高了12.17、3.07、5.57 和1.35 個百分點。圖4 給出了文獻[14]、文獻[19]、文獻[10]中的方法和本文方法中每個動作類別詳細的識別精度比較。與文獻[10]中的方法相比,本文方法中擁抱、推人和拳擊動作的識別率略高。相較于文獻[19]中的方法,本文方法的最大優勢在于拳打動作的識別。此外,除了遠離和遞書動作,其他動作識別的準確度均高于文獻[14]中的方法。

表2 PCA+SVM在SBU數據集上的識別率結果Tab. 2 Recognition rates of PCA+SVM on SBU dataset

表3 SBU數據集上各方法的識別率對比Tab. 3 Recognition rates comparison of vairous algorithms on SBU dataset

圖4 SBU數據集上各個動作的識別率對比Fig. 4 Recognition rates comparison of different actions on SBU dataset
利用PCA+SVM 組合對自建的數據集進行動作識別,識別結果如表4 所示。可以看出,交互類別中的識別率都超過了90%,并且有的達到了100%。其中拳打和推人動作相似性極高,難以區分使得二者的識別率最低,且錯誤中的絕大多數被識別為對方;而靠近和遠離易受到其他動作的影響使得識別率難以達到100%。

表4 PCA+SVM在自建數據集上的識別率結果Tab. 4 Recognition rates of PCA+SVM on self-built dataset
針對雙人交互行為識別應用領域廣但效率低的問題,本文提出了一種基于關鍵姿勢的雙人交互行為識別方法。以往的研究多采用直方圖來表示每一幀的姿勢信息,導致空間信息的丟失;有些研究保留了姿勢中的空間信息,但忽略時間信息[4]。而本文提取每個交互動作的關鍵姿勢組合成特征矩陣,既保留了在空間尺度上的信息,同時也把時間尺度的信息包含在內。在SBU交互數據集和自建的交互數據集上評估本文的識別方法,識別率分別達到92.47%和94.14%。
本文自建了一個包含更多樣本的新的雙人交互數據集,數據集包含RGB 圖像、深度圖像和骨架關節。本文提出的基于關鍵姿勢的識別算法得到的特征矩陣能夠有效地表示不同的交互類別。SBU 交互數據集和本文收集的數據集的實驗結果表明本文方法明顯優于大多數文獻中所提出的方法。
然而,雙人交互行為識別時,骨架關節的遮擋問題一直存在,因此下一步工作主要集中在通過結合深度圖像的信息來提取更有效的特征,以實現更多交互動作類別更準確的識別。