景 智
(北京信息科技大學(xué)計算機學(xué)院,北京 100192)
影視特效和游戲娛樂的制作要求日新月異,虛擬角色成為熱點之一,并迅速得到應(yīng)用。虛擬角色,是盡可能根據(jù)真實人體的形態(tài)去構(gòu)建虛擬人體,并根據(jù)真實人身體和面部運動特點去驅(qū)動計算機三維虛擬角色模型運動。真人演員不需要親自去扮演電影和游戲中的人物,而是穿戴特殊的運動捕捉設(shè)備,將自己的動作映射到虛擬角色動作上,從而完成拍攝和錄制工作。
近年來,隨著計算機硬件性能迅速提高,以及計算機圖形渲染技術(shù)不斷提升,虛擬角色的渲染效果已經(jīng)接近于真實人體的皮膚質(zhì)感,在普通的家用計算機上就可以制作和實時呈現(xiàn)。但是,運動捕捉和面部捕捉的實現(xiàn)方法依然需要穿戴復(fù)雜的傳感器設(shè)備,并且需要在專業(yè)的、昂貴的攝影棚中完成。
在攝影棚中,運動捕捉是通過排布在攝影棚空間中的多個視頻捕捉設(shè)備來捕捉人體佩戴的反光標(biāo)記點,或者通過穿戴在身體上的慣性傳感器設(shè)備,將人體各個關(guān)節(jié)的運動狀況估算并記錄下來。這就需要真人演員預(yù)先穿上緊身的動捕服裝,或者通過軋帶和魔術(shù)貼等方式將設(shè)備固定在自己身體的指定位置。有些運動捕捉設(shè)備還需要演員做幾個標(biāo)準(zhǔn)動作來進行設(shè)備初始坐標(biāo)系的標(biāo)定。
對于非專業(yè)人員來說,這些繁復(fù)的工作無疑會帶來額外的攝制成本。人們迫切需要一種更為簡便的方式來完成身體姿態(tài)和運動數(shù)據(jù)的捕捉。本文提出一種基于深度學(xué)習(xí)的單攝像頭無標(biāo)記點運動捕捉方法:首先,基于OpenPose等算法實時計算得到目標(biāo)的2D關(guān)節(jié)位置;然后,推算得到3D骨骼信息,并反饋為虛擬角色的身體運動。還研究了無標(biāo)記點面部捕捉的方法和數(shù)據(jù)平滑遷移算法,進行了功能和性能測試,取得了良好的輸出效果。
目前,有人研究了一種基于多相機的無標(biāo)記點運動捕捉方法,需要8-12臺RGBD相機來完成拍攝空間的布置。每臺RGBD相機可以同時采集高分辨率的可見光圖像以及深度圖像,通過深度圖像中的信息,系統(tǒng)可以分析得到演員的基本身體輪廓并預(yù)測他的骨骼關(guān)節(jié)位置;通過多臺相機的數(shù)據(jù)融合,可以實時構(gòu)建演員的身體三維模型并記錄所有的運動數(shù)據(jù),全程不需要演員穿戴專門的設(shè)備,只需要穿貼身舒適的服裝即可。
但是,這種方法依然需要專門的拍攝空間布置工作,而且,深度圖像的拍攝采用紅外散斑數(shù)據(jù)采集和融合而成,該技術(shù)具有較大局限性,容易受到外界干擾、測量距離較短、數(shù)據(jù)精度較差等問題。因此,沒有得到推廣和應(yīng)用。
本文研究使用一臺單目相機作為運動捕捉的核心設(shè)備。第一步,基于著名的OpenPose庫進行編譯和修改,實現(xiàn)實時的2D關(guān)節(jié)點捕捉與記錄。
傳統(tǒng)的姿態(tài)識別算法采用了自頂而下的方法:首先找到目標(biāo)人體,然后再進行姿態(tài)估計;因此對于多人識別的支持不夠理想,主要原因在于人數(shù)規(guī)模和人的具體位置無法固定,并且人與人之間存在遮擋關(guān)系。這導(dǎo)致無法抽取出獨立的單人個體,也無法保證人數(shù)較多的情況下系統(tǒng)的實時性。
OpenPose是專為多人姿態(tài)識別和捕捉而設(shè)計的人工智能算法庫,它采用了自下而上的設(shè)計思想:先檢測得到每個關(guān)節(jié)點,然后將它們與人的個體聯(lián)系起來,最終實現(xiàn)對多人姿態(tài)的實時檢測和估計。關(guān)節(jié)檢測和關(guān)聯(lián)的過程采用了獨創(chuàng)的部分關(guān)聯(lián)場(Part Affinity Fields,簡稱PAF)算法。
原始圖像被輸入到并列的兩個CNN神經(jīng)網(wǎng)絡(luò)中,居上的網(wǎng)絡(luò)負責(zé)計算置信度,居下的網(wǎng)絡(luò)負責(zé)計算得到PAF數(shù)據(jù)(即可能的關(guān)節(jié)2D位置,以及2D方向向量)。如圖1所示。
圖1 OpenPose的PAF預(yù)測神經(jīng)網(wǎng)絡(luò)
其中c表示某段肢體名稱,k表示某個單人個體。據(jù)此可以得到這兩個關(guān)節(jié)之間是否真正連接的置信度信息,并求取所有相連關(guān)節(jié)點的最優(yōu)匹配方案。
有了全部的候選關(guān)節(jié)連接圖譜之后,就可以將共享同一個候選關(guān)節(jié)的連接數(shù)據(jù)整合到一起,形成對于每個個體的全身姿勢檢測數(shù)據(jù),也就是人員的2D關(guān)節(jié)點位置數(shù)據(jù)。如圖2所示。
圖2 OpenPose的2D識別結(jié)果
OpenPose可以返回穩(wěn)定可靠的多人實時運動捕捉數(shù)據(jù),但是它只存在于2D圖像空間內(nèi),因此無法映射到3D的虛擬角色身體上,也就無法用作后續(xù)的業(yè)務(wù)使用。為了解決這個問題,需要引入第二個神經(jīng)網(wǎng)絡(luò)來解決2D人體關(guān)節(jié)到3D人體關(guān)節(jié)的預(yù)測問題。
這個神經(jīng)網(wǎng)絡(luò)采用兩個線性連接層,每個連接層都依次經(jīng)過了線性回歸,數(shù)據(jù)平滑和歸一化(Batch Normalization),數(shù)據(jù)激活(Rectified Linear Units,即ReLu),以及數(shù)據(jù)舍棄(dropout)的過程。
基于檢測的模型對于2D關(guān)節(jié)點檢測的表現(xiàn)更好,而在3D空間下,由于數(shù)據(jù)的非線性程度高,輸出空間大,所以適合采用基于回歸的模型。采用了Human3.6M提供的數(shù)據(jù)進行3D關(guān)節(jié)數(shù)據(jù)訓(xùn)練,它包含了大約210萬張同時帶有2D和3D姿態(tài)標(biāo)簽的圖像數(shù)據(jù),其中部分可以用作測試集使用?;谠摲椒ㄓ嬎愕玫降?D關(guān)節(jié)點數(shù)據(jù)如圖3所示。
圖3 從2D到3D關(guān)節(jié)點的過程
在將輸出的3D關(guān)節(jié)點數(shù)據(jù)應(yīng)用于虛擬角色之前,還需要考慮多人識別時的目標(biāo)跟蹤問題。因為,OpenPose本身并不記錄某個連續(xù)運動的角色信息,它所返回的個體ID完全取決于當(dāng)前幀圖像的識別結(jié)果。同一個角色在一段時間的視頻畫面中對應(yīng)的ID很可能是反復(fù)變化的,這無法滿足對運動捕捉和映射的基本需求。
引入Yolo4作為目標(biāo)識別和跟蹤的輔助工具,采用CNN神經(jīng)網(wǎng)絡(luò)領(lǐng)域中最優(yōu)秀的各種優(yōu)化策略,包括:數(shù)據(jù)處理、主干網(wǎng)絡(luò)、網(wǎng)絡(luò)訓(xùn)練、激活函數(shù)、損失函數(shù)等各個方面,都有著不同程度的優(yōu)化?;赮olo4進行個體目標(biāo)跟蹤的流程如下:
1) 讀取當(dāng)前幀圖像,進行行人目標(biāo)檢測;
2) 獲取目標(biāo)檢測框的位置,及各檢測框圖像塊的深度特征;
3) 根據(jù)置信度參數(shù)對檢測框進行過濾,刪除置信度不高的檢測框,留下最佳的目標(biāo)檢測框;
4) 使用Kalman濾波器,預(yù)測目標(biāo)在當(dāng)前幀的位置;
5) 更新Kalman追蹤器的參數(shù)及特征,追蹤并發(fā)聵目標(biāo)ID和運動情況;
6) 對于目標(biāo)消失,以及新目標(biāo)出現(xiàn)等情況進行獨立的判斷和反饋。
整個多人跟蹤和運動捕捉系統(tǒng)的運行流程,如下圖4所示。
圖4 多人跟蹤和運動捕捉系統(tǒng)流程圖
采用單獨的面部捕捉攝像頭和頭盔支架來近距離采集人的面部圖像信息。該設(shè)備帶有獨立的補光系統(tǒng),適合獨立使用或者與其它系統(tǒng)結(jié)合使用。
雖然身體識別所用的攝像頭也可以用于面部識別,但是,該攝像頭的位置需要固定在場地的角落,與演員的位置關(guān)系無法確定,也很容易出現(xiàn)臉部被遮擋的情形;又因為面部的特征點遠多于身體特征點,如果無法準(zhǔn)確和完整的觀察,是很容易丟失或者抖動的,所以,還是采用獨立的采集系統(tǒng)為宜。如圖5所示。
圖5 面部捕捉專用攝像頭和支架
采用OpenCV或者dlib等開源的人臉圖像識別算法,可以得到人臉的68個控制點(landmark)數(shù)據(jù),各個控制點在3D人臉上的位置,如圖6所示。
圖6 三維人臉模型的控制點
各個控制點和人臉關(guān)鍵位置的對應(yīng)關(guān)系如表1所示。
表1 人臉模型控制點關(guān)系表
人臉的三維控制點可以直接用于虛擬角色面部網(wǎng)格的控制,本文使用了徑向基函數(shù)(Radial Basis Function,即RBF)方法來完成控制操作。
徑向基函數(shù)RBF插值,也就是對空間的一些3D離散點之間進行平滑插值。假設(shè)在3維空間中有N個離散點Xi,那么對于任意一點x,有以下函數(shù)
其中αi是一個常數(shù)項,g(x)表示徑向基函數(shù),P(x)=P(a,b,c)=c0+c1a+c2b+c3c表示一個多項式參數(shù)。根據(jù)已知的N個離散點Xi,可以構(gòu)建出N個方程:Fi=F(Xi),據(jù)此構(gòu)建一個N+4的線性方程組F=GA,其中F=(F1,F(xiàn)2,…,F(xiàn)N,0,0,0,0),A=(α0,α1,…,αN,c0,c1,c2,c3),G是一個(N+4,N+4)矩陣。求解這個線性方程組即可得到空間插值變換的所有必要參數(shù)。
如果預(yù)設(shè)的空間離散點即為人臉的三維控制點,那么要將面部表情遷移到虛擬人臉網(wǎng)格上,也就是將人臉網(wǎng)格上的每一點都通過RBF插值計算得到新的位置。這一方法不需要再設(shè)置虛擬角色的面部骨骼,也不需要額外的面部標(biāo)記點;方便快速,運行結(jié)果穩(wěn)定可靠。
根據(jù)OpenPose的輸出骨骼數(shù)據(jù)信息來構(gòu)建虛擬角色的模型骨骼。骨骼結(jié)構(gòu)如圖7所示。
圖7 人體骨骼關(guān)節(jié)關(guān)系圖
各個骨骼關(guān)節(jié)點與實際人體位置的對應(yīng)關(guān)系,如表2所示。
表2 人體骨骼關(guān)節(jié)點關(guān)系表
由此生成的虛擬角色的三維測試模型和骨骼,如圖8所示。
圖8 虛擬角色模型和骨骼數(shù)據(jù)
使用GTX1060Ti顯卡來運行OpenPose,2D轉(zhuǎn)3D,以及Yolo4目標(biāo)跟蹤這三組神經(jīng)網(wǎng)絡(luò)模型,并將結(jié)果轉(zhuǎn)換為三維世界坐標(biāo)和姿態(tài),傳遞給Unity端顯示的三維角色骨骼,進而驅(qū)動角色進行運動。具體的運動遷移效果如圖9所示。
圖9 三維角色運動遷移
角色的面部運動則通過獨立的攝像頭采集,獲取面部控制點坐標(biāo),并通過RBF變形算法控制面部網(wǎng)格頂點運動。面部不需要額外再設(shè)置骨骼關(guān)節(jié)點,也不需要蒙皮操作,直接執(zhí)行頂點動畫即可。
經(jīng)過測試,該角色的運動控制和面部捕捉控制算法所需時間約為50ms左右,對應(yīng)系統(tǒng)實時運行的幀速率在20到25幀/秒,可以滿足一般影視特效和游戲娛樂系統(tǒng)的需求。具體的時間記錄如表3所示。
表3 系統(tǒng)運行每幀時間資源表
本文研究了一種基于單目攝像頭的運動捕捉系統(tǒng)及其實現(xiàn)方法。該方法采集多人運動的可見光圖像,使用OpenPose算法獲取每個人的2D實時運動關(guān)節(jié)點;再通過一個線性回歸神經(jīng)網(wǎng)絡(luò)將2D關(guān)節(jié)轉(zhuǎn)換為3D關(guān)節(jié)點,并且,通過Yolo4人體識別模塊,將畫面中的角色單獨抽取出來,并賦予一個運動時的ID,輸出的運動捕捉數(shù)據(jù)已經(jīng)可以直接傳遞給后續(xù)采集和渲染端軟件使用。
本文研究的另一個方法是基于單目攝像頭的面部捕捉設(shè)備。該方法負責(zé)近距離采集面部的68個控制點信息,然后,通過控制點的RBF變換來實時變換虛擬角色面部的頂點,實現(xiàn)面部表情動畫的播放。
該方法操作簡單、價格低廉、識別準(zhǔn)確率高、運行穩(wěn)定,可以直接與多種后端游戲引擎和渲染工具對接,因此,據(jù)有較高的研究和使用價值。但是,該方法運行的幀速率不高,神經(jīng)網(wǎng)絡(luò)識別的關(guān)節(jié)點在運動過程中依然存在不穩(wěn)定性,或者在拍攝環(huán)境復(fù)雜的情況下將關(guān)節(jié)關(guān)聯(lián)到錯誤的目標(biāo)個體上,進一步的研究,優(yōu)化系統(tǒng)功能,解決和改善這些問題,是下一步主要研究方向。