趙 威,李毅
(四川大學計算機學院,成都 610065)
人體姿態估計是捕捉人體姿態序列,輸出關節點坐標反映姿態特征的技術,在動畫、影視、行為識別、人機交互等場景有廣闊的應用前景。近年來虛擬偶像文化異軍突起,捕捉和映射人體動作的體驗需求也隨之蓬勃增長,人們也希望以較低成本獲得虛擬替身和三維動畫。
常見的運動估計方法有基于物理和基于視覺的方法。基于物理的人體運動估計常借助于動作捕捉系統,通過追蹤人體上附著的傳感器信息來推斷世界場景中的人體關節坐標和運動情況,Vicon 和OptiTrack 是目前應用廣泛的商業動作捕捉系統,精度可以達到20 μm。這種方法往往需要布置多個捕捉攝像頭和穿戴捕捉服裝,對人體具備一定的侵入性和不便性,高精度的代價是費時又耗力,實驗場地要求較高且成本昂貴?;谝曈X的人體運動估計技術具備設備要求低、人體無害性的特點。微軟Kinect 深度攝像機能夠從單個深度圖像中預測人體關節的3D 位置,在用戶級別的動作捕捉游戲中得到了廣泛的應用,由于環境遮擋、自遮擋問題,應用場景僅局限于正對攝像頭的一定區域且在較強環境光下容易受限。隨著深度學習的發展,姿態估計問題得到廣泛的討論,雖然在數據集上得到了良好的驗證,但實際應用中仍存在一定的不穩定性,因此如何提高姿態估計的應用穩定性和魯棒性,生成流暢的人物動畫是人體運動估計和仿真領域研究的一大熱點。
本文使用單個Kinect 設備采集人體三維姿態,旨在以較低采集成本條件下,優化姿態估計效果,驅動虛擬人物模型生成自然流暢的虛擬人動畫,主要工作包括:
1)提出了一種時空優化的骨骼點數據處理方法,平滑并進行骨長約束,提高單目人體姿態估計的穩定性。
2)提出了一種融合Kinect 和遮擋魯棒姿勢圖(Occlusion-Robust Pose-Maps,ORPM)[1]三維姿態估計方法,結合基于骨骼追蹤與深度信息的傳統算法和基于深度學習的ORPM 單目估計方法進行姿態估計,解決了Kinect 設備采集人體姿態存在的遮擋問題,擴大了適用范圍。
3)研制了虛擬人動畫系統,使用優化處理后的三維人體骨骼點數據,實時驅動虛擬人模型運動,生成自然流暢的人物動畫。
基于視覺的運動估計方法主要有基于骨骼追蹤和基于深度學習的方法。前者往往需要借助于RGBD 攝像頭,Shotton 等[2]將人體運動和姿態估計問題映射為分類問題,其算法成功應用在Kinect V1 和Kinect V2 設備上,可滿足室內動作捕捉游戲的基本要求。人體姿態估計問題在深度學習的廣泛應用下取得了巨大的進步和突破,其中單目人體姿態估計是計算機視覺中最基本和最具挑戰性的問題之一,其旨在基于性能優良的深度神經網絡和強大的數據集,得到視頻、圖像和攝像頭中的人體坐標信息。Cao 等[3]設計并開源了人體姿態估計檢測和分析工具Open Pose。文獻[4]中先后進行了2D 多人姿態估計的研究并進一步提高了精度。Li等[5]首次將深度學習的方法應用于單張圖片的3D 姿態估計。Metha 等[1,6]提出了基于連續RGB 圖像的3D 姿態估計方法,適用于單目RGB 攝像頭并滿足實時性,在遮擋和較快速運動情況下,也能進行全身姿態的恢復。以上方法都是基于單幀推理的方法進行的,沒有充分利用連續的運動序列數據之間的相關性,會出現一定的抖動跳變和不穩定性。
在解決遮擋問題,提高Kinect 的通用性方面,研究者也開展了很多工作:Yeung 等[7]采用雙Kinect 進行雙視角數據的融合,解決關節位置不一致和自閉塞問題;Moon 等[8]采用5 臺Kinect 傳感器進行180°范圍內人體跟蹤;李琪等[9]對兩臺Kinect 攝像機計算的關節角數據進行融合,實現了相對穩定的人體姿態追蹤系統。以上的工作均采用融合多視角數據的方法進行算法改進,當一個傳感器出現錯誤情況時,可以采用另一個傳感器進行修正,然而由于Kinect 視野范圍的局限性,當兩臺Kinect 均出現自遮擋或環境遮擋的情況時,仍會出現表現關節丟失的情況,而布置5 個視角以上的攝像機的標定成本和計算成本會顯著增加。
本文首先采用單個Kinect 進行運動序列的采集,獲取Kinect 測量數據并對實時彩色信息進行ORPM 單目估計算法推理;其次針對單目估計方法的不穩定性,提出了一種時空優化的骨骼點數據處理方法,對運動序列中的人體姿態進行骨長約束,保證人體關鍵肢節的空間一致性,采用動態適應中值濾波算法在時間維度上平滑運動序列,將偏離的坐標數據進行替換,同時又不會對運動曲線過度平滑;然后采用卡爾曼濾波對兩種算法的測量值加權融合得到最終的姿態估計結果;最后采用四元數向量插值和逆向運動學約束方法,研制了虛擬人動畫系統,利用優化融合的數據,實時驅動虛擬人物模型生成動畫。
基于深度學習的三維人體姿態估計快速發展,但總體仍囿于局限的室內數據集,在泛化性和實際應用上表現不足。本章的核心任務是對ORPM 單目估計算法的骨骼點進行處理,提高其穩定性,以便更好地與Kinect 數據進行融合。通過對單目估計數據添加骨長約束,保證人體運動過程中骨骼的空間一致性;采用動態適應中值濾波,自適應進行濾波窗口的擴展和縮放,在時間維度上對骨骼數據進行優化。
Kinect V2 采用25 個關節點表示人體某一時刻的姿態,單目估計OPRM 算法的編碼結構則為15 個節點,為了后續更好地進行虛擬人動畫系統仿真實驗,本文以最契合Unity 3D 引擎角色動畫系統的Human3.6M[10]關節順序和結構為基準,對兩者進行一致性映射處理。對于Kinect 人體骨架,刪除手腳末端的手指和腳趾關節,對于ORPM 人體骨架,取左肩和右肩的中點作為胸部節點,取胸部節點和髖節點的中點作為脊椎節點,統一為Human3.6M 人體骨骼結構,反映人體運動姿態。采用以髖節點為根節點的樹型結構表示人體骨架,表明層次關系。人體骨架樹型編碼和順序如圖1 所示。

圖1 人體骨架樹型編碼和順序Fig.1 Human skeleton tree coding and sequence
人體結構中骨骼的長度是固定的,但在檢測過程中,人體運動過快或環境噪聲等影響,輸出的姿態估計結果的骨骼長度有波動,這是姿態估計效果不穩定的原因之一。因此本文將約束各個肢節長度的位置,以求得更符合人體運動規律的姿態估計信息。采集表演者T-Pose 的穩定序列,每一段骨長可由相鄰節點之間的歐氏距離表示,采用穩定序列的樣本均值作為表演者的平均骨骼長度。如式(1)所示,其中j表示人體關節點,L為骨骼長度均值,ε為誤差參數,當肢體長度在范圍[L-ε,L+ε]內時,認為該節點長度沒有發生較大的誤差。節點長度發生變化時,對下位節點進行恢復。由于不同采集者的體型、位置不同,平均骨骼長度和誤差范圍也有一定的差距。

以膝關節點pi(xi,yi,zi)和足關節點pj(xj,yj,zj)為例,關節定長的約束過程為:
1)建立膝蓋節點為圓心、肢體長度為半徑的球體,當肢體長度一定時,踝關節一定位于以膝蓋節點為球心、以肢體長度為半徑的球面上。
2)求解球心到腳部節點的空間直線,與球面的交點即為最終肢體定長后的節點位置。球心OC=(xi,yi,zi),球面公式如式(2)所示:

3)求解空間直線與球面的交點,可以得到兩個與球面相交點P1、P2,選擇距離足關節更近的交點作為最終求解點。經過關節長度限制后,輸出的三維姿態估計數據骨骼長度一致,更符合人體運動規律。
對姿態估計中的抖動情況進行討論,運動過程中,人體運動狀態隨時間平穩變化,某一時刻的運動狀態是上一時態運動的拓展,同時也是下一時態運動的基準。基于算法逐幀處理的過程,抖動情況往往是由于某一幀或幾幀數據的錯誤處理引起的突變。為了保證運動過程中的時間一致性,需要對關節點數據進行平滑處理,篩去偏移點使數據峰值趨于平緩,從而優化突變情況。
姿態估計的平滑效果與窗口大小逆相關:窗口越大,平滑效果越明顯;反之,平滑效果越接近于原始值,對不同偏差的幀數據應采取不同的平滑窗口。因此提出動態適應的中值濾波方法,平滑窗口能夠自適應地擴展和縮放。對于連續噪聲或偏移量較大的幀,采用較大的窗口。對于噪聲較小的幀,采用較小的窗口,在抑制強噪聲的同時也能最大限度保留運動細節,算法過程包括以下幾個步驟:
1)對運動序列進行窗口補齊操作,從x、y、z三個維度順序計算每一幀在滑動窗口范圍內的最大值、最小值和中值。分別代表第s幀第i個骨骼點坐標的測量值、最大值、最小值和中值。
2)判斷中值是否與最大值或最小值相等,如果滿足條件說明樣本不足,對窗口進行2 倍擴展;反之,對窗口進行2倍縮放,直到下一次縮放不滿足條件或到達窗口閾值。窗口穩定后進入3)。
3)判斷測量值是否介于最小值和最大值中間,如果滿足條件,說明測量值偏差較小,接近于穩定,將測量值作為返回結果;否則返回中值。
4)如果增大或縮放后的窗口大小達到閾值,將測量值作為該幀的返回結果。
Kinect 捕獲到的人體姿態估計結果以深度攝像頭為坐標原點,單目估計算法的坐標原點則為Kinect 設備的彩色攝像頭,因此采用張氏標定法[11]標定兩個攝像頭并求解內外參數,確定兩個攝像頭之間的位姿關系,保證人體姿態的空間一致性,雙攝像頭的相對旋轉矩陣R和平移向量T如式(3)和式(4)所示:

其中:R0、R1分別為彩色攝像頭和深度攝像頭的外參中的旋轉矩陣,T0、T1為平移向量。
不同算法的采樣頻率不同,模塊處理能力存在差異,在時間上需要進行同步對齊處理,因此采用時間配準的方法將Kinect 和單目估計算法的采集數據對齊至同一時刻,減少時間誤差。雙算法的采集序列如圖2 所示。

圖2 不同算法的采樣序列Fig.2 Sampling sequences of different algorithms
內插外推法[12]利用已有的采樣情況預估目標時刻的狀態,將高頻采樣數據同步至低頻采樣率的姿態估計,實現雙算法的時間對齊,雙算法的采樣頻率保持一致在24 FPS。假設姿態估計采集在ti-1、ti、ti+1時刻下的真實值記錄為αi-1、αi、αi+1,則在插值點tj處的值表示為式(5):

本節介紹實現基于卡爾曼濾波的數據融合方法,使用Kinect 和ORPM 算法的測量值以測量噪聲協方差矩陣R的逆矩陣為權重因子生成融合結果。人體運動可抽象為線性運動,通過離散時間下的狀態空間模型對運動系統進行建模,如式(6)[8]所示:

其中:yk為k時刻的測量向量,xk為狀態向量,vk為測量噪聲向量,Hk為測量轉移矩陣。
卡爾曼濾波過程包括預測和更新兩個階段。預測階段包括計算出當前運動時刻的預測狀態向量值和誤差協方差矩陣兩步驟,如式(7)和式(8)所示:

其中:是基于k-1 時刻之前的觀測值在時間k的測量值先驗狀態估計;Pk|k-1是基于k-1 時刻之前的觀測值在時間k的誤差協方差矩陣先驗估計;Fk為k時刻的線性狀態轉移矩陣;Gk為輸入控制矩陣;uk為輸入控制向量;Qk為協方差對角矩陣,表示外界環境過程噪聲。
更新階段首先計算卡爾曼增益Kk,如式(9)所示,其中和分別為混合后的測量矩陣和測量噪聲協方差矩陣;然后計算經過線性狀態轉移矩陣得到的狀態向量估計,如式(10)所示,最后估計誤差協方差矩陣Pk|k,如式(11)所示:

在卡爾曼濾波的過程中,測量向量呈現為在樣本均值周圍高斯分布,測量噪聲與測量值和樣本均值的距離成正相關關系:噪聲越大表明測量值偏移樣本均值越遠,則獲得的權重越小;噪聲越小則測量值偏移樣本均值越小,則獲得的權重越大。因此卡爾曼濾波的加權融合策略為:以測量噪聲協方差逆矩陣為權重,對兩種算法結果進行加權平均融合,如式(12)所示:

其中為融合后的測量向量。
虛擬人物運動驅動方法包括四元數向量插值和逆向運動學約束。四元數向量是三維旋轉的一種表達形式,具備計算量小、適應性強的特性。由于數據獲取模塊的速率只能達到24 FPS,為了更好地展示運動情況,采取球形插值的方式獲得更平滑的動畫效果。逆向運動學是基于末端節點約束中間節點的技術,可以對四元數向量驅動方法進行修正,使運動過程更符合規律。
四元數向量插值方法可以控制虛擬角色運動,同時避免歐拉角方法的萬向鎖問題和提高計算效率?;谇拔慕⒌娜梭w骨骼模型,節點自由度的更新是由父節點傳遞下去的,父節點的旋轉平移會影響子節點,而子節點的變化不會影響父節點。四元數向量驅動方法包括以下幾個步驟:
1)計算當前幀每個肢干的特征矢量,矢量由子節點減去父節點坐標得到,如式(13)所示:

其中:i、j為樹型編碼中具備父子關系的節點索引;P為特征矢量。
2)定義t時刻的四元數旋轉向量qt,如式(14)所示:

其中:w表示相鄰幀中剛體肢干的旋轉角度;v表示垂直于qt-1、qt方位向量的旋轉軸單位向量;i,j,k 為虛數單位。
3)采用四元數三維旋轉公式表示運動過程,如式(15)所示:

4)采用球面插值對t和t-1 幀中的虛擬角色骨骼特征矢量進行插值操作,過程可描述為式(16):

其中λ∈[0,1]表示平滑程度:數值越接近0 表示兩幀之間插值點越多,表現越平滑;數值越接近1 表示兩幀之間插值點越少,平滑程度越低。
采用四元數向量插值方法可以得到平滑運動的虛擬人動畫,然而存在不滿足人體運動規律的現象,仍需要采用運動學方法進行修正和約束。逆向運動學的原理為基于人體樹型結構的特點,根據子節點帶動父節點,逐層傳遞運動約束。給出末端關節位置V時,可求解該關節的旋轉角度R,如式(17)所示:

循環坐標下降法(Cyclic-Coordinate Descent,CCD)是逆向運動學求解的一種數值方法,通過反復迭代和逼近,找到人體運動的穩定狀態。CCD 方法在迭代的過程中,需要由末端節點調節直至根節點的所有節點旋轉信息,求解復雜度較大。實際運動過程中,末端節點的位姿關系并不會影響所有節點的狀態。例如手腕的變化會影響肩部和肘部的狀態,但不會影響髖節點的自由度。
因此在CCD 方法的基礎上添加約束項,使得求解過程更符合人體運動規律。定義節點J,當前關節點旋轉角度θi的運動范圍為[α,β],運動約束過程可表示為式(18)。如果當前幀的計算結果符合人體生理特征范圍,無須進行運動學約束;反之,則將當前肢節旋轉角度約束至區間內。

為了驗證時空優化的骨骼點數據處理方法對單目三維姿態估計的有效性,采集了一段包含異常狀態的連續序列,其中圖3(a)為交叉雙臂動作中連續的6 幀。圖3(b)為處理前單目估計算法處理的三維姿態,紅色圓圈標注的位置為骨骼變形和塌陷的情況,可以看出在第3、第4 和第6 幀中,人體骨架出現了較為明顯的骨長變化,第6 幀中人體胸部附近出現了關節錯位的情況。圖3(c)為骨長約束后的三維姿態圖,可以看出處理后的骨架之間的間距變大,塌陷和變形的情況得到解決,具有良好的穩定性。

圖3 運動序列處理Fig.3 Motion sequence processing
空間中任意兩個三維點集的誤差可由最小二乘距離[13]表示。當最小二乘距離越小時,證明兩幀之間的相關度越高,未發生突變,反之表明幀之間很可能出現了異常,需要進行空間約束。基于人體運動的平穩性和連續性,相鄰幀三維點集的最小二乘距離值應趨向于較小值。針對該序列處理前后的最小二乘距離對比情況如表1 所示,可以看出處理后的幀間誤差更小,證明處理后的人體運動更平穩。

表1 幀間最小二乘距離Tab.1 Least squares distance between frames
平滑濾波對單目姿態估計過程中的時間一致性具有一定作用。對整個采集的運動序列進行可視化展示,表現了使用不同平滑算法處理的對比結果,自上而下分別為原始姿態估計結果、中值濾波優化結果和本文方法的結果,如圖4 所示。紅色藍色和綠色曲線分別表示17 組三維骨骼點在x、y、z三個維度的位置隨時間變化情況。可以看出中值濾波的平滑效果有限,在500 幀后發生連續跳變和抖動時,不能很好地進行平滑。動態適應中值濾波方法在解決抖動問題上具有明顯的優勢:具有更強的平滑效果、能消除大部分劇烈的抖動、對異常數據進行修復、更符合人體運動規律。

圖4 運動序列中關節點坐標變化情況Fig.4 Coordinate changes of joint points in motion sequence
為了驗證融合算法的有效性,使用微軟Kinect V2 和三維人體動作捕捉系統OptiTrack 同時采集運動序列,實驗場景如圖5 所示。其中OptiTrack 包括8 個前視紅外攝像頭,架于采集室上方四周,實驗人員穿戴包含37 個光學標定點的捕捉服裝。Kinect 正對人體,在距離2 m、離地1.5 m 的區域范圍內進行動作和姿態數據的采集。

圖5 實驗場景Fig.5 Experimental scene
由表演者在正對Kinect 采集范圍內進行揮手、行走、蹲下和雙臂交叉、側身擊拳等動作。在實驗對象前方置放高腳椅,保證在采集序列中關節存在環境遮擋情況。圖6 從左到右依次為采用Kinect V2、本文融合方法和OptiTrack 設備數據生成的動畫效果,從整體來看,虛擬人動畫能準確反映出實驗人員的肢體動作,在動畫應用上具備可行性;同時仍存在一定的不足,如綠色圓圈標注的位置,虛擬人物末端關節動畫出現了不協調的情況,這是骨骼點的數量較少造成的,頭部、手腕、腳踝的部位僅用一個點去表示,存在二義性旋轉問題。

圖6 生成的動畫效果Fig.6 Generated animation effects
動畫效果反映了姿態估計算法數據的準確性。將錯誤之處用紅色圓圈進行標注,當身體全部關節都出現在視野中時,Kinect 數據和融合方法都能準確展現運動姿態,在雙臂交叉和下蹲動作中,Kinect 出現了關節推斷不準確和關節錯亂的情況,融合算法能夠基本反映運動姿態。此外,當出現人物遮擋時,Kinect 傾向于優先識別距離較近的實驗對象,原本追蹤的人體丟失,動畫展現為前面人物的動作;本文方法并未丟失目標人體的檢測,更接近動捕設備的動畫效果。
人體姿態估計的變化情況可由每個關節的自由度變化表示。以右臂為例,右肩有3 個旋轉自由度,右肘有兩個旋轉自由度。圖7、8 分別為在揮手和側身擊拳動作序列中右肩和右肘的變化情況??梢钥闯觯趽]手動作中,由于并未存在遮擋情況,Kinect V2、文獻[14]方法以及均值融合方法和本文方法在表現上較為一致,均與動捕系統的結果相差無幾。在側身擊拳動作中,由于存在右臂對左臂的遮擋情況,Kinect的變化趨于平緩,沒有較大的周期性變化,波峰和波谷較小,不能準確反映側身擊拳的動作變化;文獻[14]方法在波峰和波谷的位置出現了較多的鋸齒狀抖動,僅能在一定程度上反映防遮擋情況;而采用均值融合的方法距離真實值仍存在較大的偏差,如圖8(a)、(d)、(e)所示。本文方法獲取的關節角度在多數關節角的波峰和波谷位置更接近于OptiTrack 系統,這說明融合方法在處理遮擋中具備一定的有效性。

圖7 揮手動作中右肩和右肘的角度變化情況Fig.7 Changes in angles of right shoulder and right elbow during waving motion

圖8 側身擊拳動作中右肘和右腕的角度變化情況Fig.8 Changes in angles of right elbow and right wrist in sideways punching motion
虛擬人動畫系統包括場景生成、數據捕獲、數據優化和處理以及人物運動驅動模塊,如圖9 所示,其中場景生成包括虛擬人物模型與環境的搭建,SMPL(Skinned Multi-Person Linear)人體模型[14]是一個基于深度學習的層次結構虛擬角色模型,包括頂點、球形骨骼點、紋理貼圖和骨骼蒙皮,可以省去較為繁雜的建模工作。場景建模包括外觀設計、材質貼圖和場景渲染步驟。

圖9 虛擬人動畫系統流程Fig.9 Flowchart of virtual human animation system
將SMPL 模型導入Unity3D 游戲引擎,然后用腳本系統建立模型關節節點和表演者運動控制節點的映射關系,通過傳輸控制協議(Transmission Control Protocol,TCP)將融合數據傳輸至引擎中,映射給角色模型。數據捕獲模塊包括Kinect 數據以及ORPM 單目估計算法推理數據的獲??;數據處理優化模塊以及人物運動驅動模塊的流程在前面章節已經介紹。表演者可以在攝像頭前表演身體姿態,系統將進行三維人體姿態估計和優化處理,驅動虛擬人物生成動畫,場景更新。
圖10 為表演者在T-Pose、舉手、踢腿、下蹲和夜間抬手的采集場景以及不同動畫生成方法的對比。從圖10 可以看出:文獻[14]方法僅能在光照良好的條件下使用,在夜晚并未檢測出抬手動作,模型呈現為初始動作;歐拉角方法未進行逆向運動學約束,在抬手、踢腿和下蹲中均出現了一定的腳部下陷進地面的情況,并容易出現萬向鎖問題,如抬腿動作的動畫。

圖10 表演者部分動作與動畫效果Fig.10 Part of performer’s actions and corresponding animation effects
從表2 的客觀指標來看,本文方法使用了四元數向量插值的運動方法,動畫達到60 FPS,相比文獻[14]提高了兩倍,并且環境適應性更好。因此證明,虛擬人運動系統能滿足動畫和游戲場景的基本需求。

表2 不同動畫生成方法對比Tab.2 Comparison of different animation generation methods
本文采用Kinect 設備捕獲人體運動序列,針對單目估計算法的不穩定性,提出了時空優化的骨骼點處理方法,針對Kinect 的遮擋問題,提出了結合ORPM 單目估計算法和Kinect 測量數據融合的方法,最后基于四元數向量插值和逆向運動學約束,研制了虛擬人動畫系統,與傳統Kinect 算法相比,本文算法能夠良好應對部分遮擋情況,無額外成本、易架設,在動畫應用方面具備可行性。
同時也存在一些不足:基于深度學習的姿態估計算法精度和適用廣度還有待提升,但采用深度學習方法輔助傳統方法進行適用性拓展是一個可行的探究方法。除此之外,由于關節點數量限制,末端關節存在二義性旋轉問題,而良好的角色動畫除了要求肢體動作流暢外,還需要兼顧真實的面部表情和手部動作,同時這也是近年來計算機視覺領域的熱點問題,一種可能的方案是建立精細的角色模型,采用基于深度學習的方法進行手部和面部表情數據獲取,將人體骨骼動畫、面部動畫和手部細節動畫進行混合,獲得更高精度的動畫,這也是未來工作需要考慮的。