李偉強,雷 航,張靜玉,王旭鵬
(電子科技大學信息與軟件工程學院,成都 610054)
(*通信作者電子郵箱1261707134@qq.com)
準確的三維姿態(tài)信息在人機交互等領域起到至關重要的作用,是近幾年計算機視覺領域的研究熱點[1-3]。基于深度學習的算法可以有效地解決計算機視覺領域中的姿態(tài)估計問題[1-6]。其中,手部姿態(tài)估計是指計算機通過算法對輸入圖片或者視頻中手部姿態(tài)進行分析和預測,從而確定手部在三維空間中的姿態(tài)信息,即各個關節(jié)點在三維空間中的位置分布。
傳統(tǒng)的手部姿態(tài)估計算法大多基于RGB 彩色圖像。其中,Zimmermann等[1]提出了一種從RGB圖像中學習完整三維手勢估計的方法;Panteleris 等[2]提出了一種從RGB 圖像中實時獲取手部姿態(tài)的方法,該方法首先估計手部關節(jié)在二維圖片中的位置,然后,采用非線性最小二乘法將手的三維模型擬合到估計的二維關節(jié)位置,從而恢復手部姿態(tài);Cai 等[3]通過引入一個深度正則化函數(shù),提出了一種新的弱監(jiān)督學習方法進行手部姿態(tài)估計。但是,基于RGB 圖像的方法往往會受到光照強度變化的影響,很難適用于夜間光線較差或白天光照持續(xù)變化等情況。
隨著低成本、高精度深度攝像機的逐漸普及推廣,基于深度數(shù)據(jù)的手部姿態(tài)估計方法被提出。很多方法采用二維卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN),從深度圖中進行姿態(tài)的估計[6-11],并取得了一定的進展。Tompson 等[7]提出一種基于隨機決策森林的算法,對連續(xù)手部姿態(tài)進行實時恢復,該方法有效地解決了時效性問題,但在準確性上還有待提高;Oberweger 等[8-10]以各關節(jié)點的初始估計位置為中心,使用主成分分析法降低輸入數(shù)據(jù)的維度,采用卷積神經(jīng)網(wǎng)絡預測精確的手部姿態(tài)信息,同時,通過劃分多個輸入?yún)^(qū)域進一步提高手部姿勢預測的準確性;Ge 等[11]提出了一種利用多視圖投影對關節(jié)點位置的二維熱圖進行回歸的方法,解決了二維熱圖未充分使用深度信息的問題。但是,二維卷積神經(jīng)網(wǎng)絡并不能充分提取三維的圖像特征[10]。在此之后,三維卷積神經(jīng)網(wǎng)絡被提出,并應用于手部姿態(tài)估計。Ge 等[12]提出了一種三維卷積神經(jīng)網(wǎng)絡算法,解決了二維卷積神經(jīng)網(wǎng)絡不能直接從三維手勢中提取特征的問題,但是該算法復雜度較高;Ge等[13]提出了基于PointNet[14]和PointNet++[15]的特征提取方法對關節(jié)點位置進行回歸,可以直接處理點云數(shù)據(jù),但沒有解決手部關節(jié)點與手部特征之間高度非線性映射關系。針對手部關節(jié)點和手部特征之間的高度非線性映射關系,基于概率密度的模型被提出用以解決此類問題。Bouchacourt 等[16]提出了一種新的概率模型Disco,該模型能夠從神經(jīng)網(wǎng)絡參數(shù)化的后驗分布中有效采樣,但是對于深度圖的特征提取能力存在不足;Moon 等[17]提出了一種由體素到體素的深度學習網(wǎng)絡模型,該模型降低了手部關節(jié)點與深度圖之間的高度非線性映射關系,但是計算復雜度較高,且計算量隨著分辨率增加呈立方增長。
為了解決非受限場景下的手部姿態(tài)估計問題,考慮到光照變化、遮擋和姿態(tài)幅度較大等情況,本文提出了一種基于深度數(shù)據(jù)的三維手部姿態(tài)估計算法。該方法直接處理點云數(shù)據(jù),采用PointNet++提取手部的幾何特征;通過學習標簽在空間中的分布,解決手部特征和關節(jié)點位置之間的高度非線性問題,提高了關節(jié)點位置預測的準確性。
本文的主要工作如下:
1)面向非受限場景下的手部姿態(tài)估計問題,提出了一種端到端的深度網(wǎng)絡模型,該網(wǎng)絡以歸一化的點云數(shù)據(jù)為輸入,能夠有效地提取高鑒別力的手部幾何特征,計算復雜度較低;
2)為了提高姿態(tài)估計的準確性,該網(wǎng)絡將標簽分布學習應用于手部姿態(tài)估計,以解決手部特征和關節(jié)點之間的高度非線性問題。
給定的手部深度圖A,三維手部姿態(tài)估計預測各手部關節(jié)點在世界坐標系下的位置信息。其中,J表示預測的手部關節(jié)點總數(shù)。令T={(Ai,Φi),i∈[1,M]}表示訓練樣本的集合,其中,M表示訓練樣本總數(shù)。
本文提出的方法由數(shù)據(jù)預處理、特征學習網(wǎng)絡和標簽分布學習網(wǎng)絡三個模塊構成,如圖1 所示。數(shù)據(jù)預處理模塊給出了手部三維點云數(shù)據(jù)的生成方法。特征學習網(wǎng)絡采用PointNet++模型,因為PointNet++能夠直接處理點云數(shù)據(jù),并且已被成功應用于目標分類、檢測和場景分割等任務。標簽分布學習網(wǎng)絡采用全連接回歸手部關節(jié)點的空間概率分布。
圖1 本文手部姿態(tài)估計方法整體框架Fig.1 Overall framework of the proposed hand pose estimation method
1.1.1 點云數(shù)據(jù)生成
深度傳感器采集的是特定視角下手部的深度圖像,而特征學習網(wǎng)絡的輸入是點云數(shù)據(jù),所以需要將原始深度數(shù)據(jù)轉換成三維點云數(shù)據(jù)[18]。手部三維點云數(shù)據(jù)的生成示意圖如圖1(a)所示。
對于深度圖中的任意像素點(u,v) ∈D,將其轉換為世界坐標系中的點p(x,y,z),如式(1)所示:
其中:(u0,v0)表示世界坐標系的中點;fx、fy是深度傳感器的內部參數(shù),分別為水平和垂直焦距;d是像素點(u,v)處的深度值,描述像素點到深度傳感器之間的距離。
1.1.2 數(shù)據(jù)歸一化
如圖1(a)所示,深度網(wǎng)絡要求輸入數(shù)據(jù)的維度一致,本文使用下采樣方法將點云數(shù)據(jù)中點的數(shù)量進行統(tǒng)一;三維手部姿態(tài)估計存在手部全局方位變化大的問題,本文采用定向邊界框(Oriented Bounding Box,OBB)將原始點云進行旋轉歸一化處理,映射到統(tǒng)一的OBB坐標系。
下采樣采用最遠點采樣[19]處理點云數(shù)據(jù)。該算法從初始點集P={p0,p1,…,pN}中任意選取一點pi,計算P中與該點距離最遠的點pij加入到新的點集Psa中;然后,從P的剩余點中,選取與點集Psa距離最大的點放入集合Psa中(點到點集的距離為點到點集中每一點距離的最小值)。依此迭代,直至采樣點的數(shù)量為N,采樣后的點集為Psa={pi1,pi1,…,piN}。
定向邊界框指的是緊密包圍手部點云的一個有向長方體邊界框。通過對所有輸入點云的三維坐標進行主成分分析,計算出定向邊界框的主方向,作為OBB 坐標系的三個坐標軸方向,最后通過定向邊界框的最大邊長確定OBB 坐標系的刻度。
根據(jù)式(2)將點云所在的世界坐標系映射到OBB 坐標系,然后將點平移到以均值為原點的坐標系中,并縮放至單位大小。
其中:pcam和pobb分別是點云在世界坐標系和OBB 參考坐標系中的三維坐標是世界坐標系中OBB 的旋轉矩陣是點云圖中采樣的N個點在OBB 參考坐標系中的平均坐標位置;Lobb是OBB框的最大邊長。
為保證輸入和輸出數(shù)據(jù)的物理意義相同,在訓練階段,各手部關節(jié)點的三維位置坐標也經(jīng)過式(2)映射到OBB 坐標系中;在測試階段,根據(jù)式(3)將OBB 坐標系中的各手部關節(jié)點的三維位置坐標變換回世界坐標系:
特征學習網(wǎng)絡采用PointNet++模型從點云數(shù)據(jù)中提取手部的特征,流程如圖1(b)所示。整體上看,PointNet++包含三個分組采樣層,每一層的采樣、分組和特征提取如圖2 所示。PointNet++以PointNet 為基礎進行特征提取,并且能夠提取局部的幾何特征信息。本節(jié)將先介紹PointNet,再介紹PointNet++。
圖2 PointNet++分組采樣層Fig.2 Grouped sampling level of PointNet++
1.2.1 PointNet
PointNet由多層感知機和最大池化層組成,能夠提取無序點云數(shù)據(jù)的特征。給定一個輸入數(shù)據(jù)點集P={p0,p1,…,pN}∈RD,其中D表示點的維度,定義表示PointNet處理流程的函數(shù)f:P→R將點集P映射到特征向量,如下:
其中:g和h采用多層感知機網(wǎng)絡;max 是最大池化層,最大池化層是一個對稱函數(shù),由于對稱函數(shù)可以解決無序性問題,所以式(4)中的點集輸入可以是無序的,不影響最終效果,并且可以逼近任何連續(xù)函數(shù);h(pi)計算pi的高維特征向量。最終輸出一個表示整個點集的特征向量,然而這個特征向量不能有效表示局部特征,由此引出可以表示局部特征的PointNet++。
1.2.2 PointNet++
為了提取點云數(shù)據(jù)的局部特征,PointNet++采用分層結構提取多層次的幾何特征。PointNet++與PointNet 不同的地方在于采樣和分組,采樣時使用最遠點采樣方法,在進行點集映射時用分組集合G={g0,g1,…,gN}∈RD代替了直接使用點集P,其中gi={pi0,pi1,…,pik}是由pi點通過k近鄰算法選取的周圍的點表示的gi分組。
此外,對于分組后的點云數(shù)據(jù)依舊用PointNet 進行特征學習。如圖2 所示,點集的某一層特征由兩部分特征向量組成:D表示分組所表示的原始采樣點的原始特征向量,C表示本層每個分組從上一層學習到的特征向量。如圖1(b)所示,圖中N1×(D+C1)中N1表示采樣點個數(shù),D表示本層采樣點的原始特征向量,C1代表本層分組的特征向量。在學習過程中,同時學習了整體和局部的特征。
使用標簽分布學習網(wǎng)絡計算關節(jié)點位置在三維空間概率密度分布,和直接計算關節(jié)點位置信息相比較,降低了非線性,這使得網(wǎng)絡更加容易學習。
標簽分布學習網(wǎng)絡將特征學習網(wǎng)絡的輸出特征作為輸入,通過網(wǎng)絡得到關節(jié)點的空間位置分布信息,進而得出關節(jié)點所在位置。為了監(jiān)督關節(jié)點在空間位置的分布,本文運用一種概率密度分布方法估計關節(jié)點的位置信息,將歸一化后的點云數(shù)據(jù)所在空間進行網(wǎng)格化劃分,將OBB 坐標系中的每個維度44等分,則整個空間被劃分為443個空間立方體,關節(jié)點在三維坐標中每個空間立方體內的概率分布表示為:
其中:(xj,yj,zj)是第j個關節(jié)點的真實位置,σ是高斯分布的標準差。為了加快神經(jīng)網(wǎng)絡收斂,本文沒有使用標準的高斯概率分布,而是使用式(5)的表示方法,該方法的最大概率密度為1。為了減小網(wǎng)絡的空間復雜度,本文假定H(x,y,z)在X、Y、Z 三個維度上是獨立同分布的。因此,分別計算X、Y、Z每個維度上的概率密度分布。對式(5)進行化簡得到式(6):
由此,概率密度可以表示為X、Y、Z三個維度上概率密度相乘。將每個維度的概率分布看作一個標簽,關節(jié)點標簽分布如圖3 所示,該圖分別選取了兩個手部姿態(tài)的兩個關節(jié)點的x、y、z標簽概率分布情況,圖中橫坐標表示OBB 的某一維度被劃分成的區(qū)域位置索引,圖中明亮的格子表示相應區(qū)域的概率密度較高。
標簽分布學習網(wǎng)絡的最后一層采用全連接網(wǎng)絡對標簽的分布進行學習,全連接層分別包含1 024、2 048、3× 44 ×J個神經(jīng)元。
本文采用均方誤差作為損失函數(shù)引導網(wǎng)絡進行學習,Loss如下:
其中:Hj和分別是第j個關節(jié)點概率分布的真實值和預測值。
在整個網(wǎng)絡訓練結束后,對各標簽概率分布最大值所在的空間進行再次預估,根據(jù)該方格中點的坐標和該方格的概率H以及該方格周圍方格的概率分布,計算預測值位置與該方格中點的偏差,最終確定預測的手部關節(jié)點坐標。
圖3 手部關節(jié)點標簽分布示意圖Fig.3 Schematic diagram of hand joint point label distribution
為了驗證本文提出的基于標簽分部學習的三維手部姿態(tài)估計網(wǎng)絡的有效性,在公共數(shù)據(jù)集微軟亞洲研究院(Microsoft Research Asia,MSRA)手部姿態(tài)數(shù)據(jù)集[20]上進行了一系列實驗。
MSRA[20]數(shù)據(jù)集使用英特爾的Creative Interactive Gesture深度攝像機采集數(shù)據(jù),具有76 000多張手部姿態(tài)深度圖像,最大分辨率為320×240。數(shù)據(jù)集記錄了9 個不同人的17 個手勢序列,每個手勢序列大約包括500 張圖像。在每幅圖像中都進行了分割,包括J=21 個關節(jié)點的真實值記錄。參考文獻[20]的做法,在訓練階段針對8 個人的手勢進行訓練,訓練集約包含8 500 幀圖片;在測試階段針對剩余1 人進行測試,測試集約包含68 000 幀圖片,針對所有人重復該實驗9 次,并求其平均指標。
本文的實驗環(huán)境為:操作系統(tǒng)為Ubuntu18.04,CPU 為Intel Core-i9(3.60 GHz),內存為32 GB,顯卡為NVIDIA GTX2080TI 11 GB。點云采樣、表面法線計算和分布學習的標簽使用Matlab實現(xiàn),神經(jīng)網(wǎng)絡使用PyTorch框架實現(xiàn)。
首先將深度圖按照深度值進行裁剪后,按照最遠點采樣,采取1 024個點的點云數(shù)據(jù),并進行OBB操作和表面法線計算并選定邊界框,對于分層的PointNet++,使用最遠點采樣:第一層為512 個點,球查詢半徑為0.1;第二層為128 個點,球查詢半徑為0.2。標簽分布采用對有向邊界框進行44等分的方法,生成3× 44 ×J維度的標簽分布,并將該標簽分布作為神經(jīng)網(wǎng)絡的輸出。訓練時,使用Adam 進行優(yōu)化,batch 大小為32,初始學習率為0.001,在50 個epoch 后,學習率下降至0.000 1,總共迭代60個epochs。
參考文獻[21]的方法,本節(jié)在MSRA[20]數(shù)據(jù)集上與將本文方法與目前的主流方法進行客觀評價,評價指標包括:平均距離誤差和所有關節(jié)的最大誤差低于閾值的幀比例。然后,對本文方法各部分的有效性進行驗證,并分析了網(wǎng)絡結構作用。最后,對本文方法的時間復雜度和空間復雜度進行了分析。
2.3.1 客觀評價
將本文方法與Multi-view CNNs[11]、3D CNN[12]和Hand PointNet[13]的平均距離誤差進行比較,結果如圖4 所示。從圖中可以看出,本文方法所有關節(jié)點的平均誤差距離小于Multiview CNNs[11]、3D CNN[12]。本文方法的整體關節(jié)點平均距離誤差為8.43 mm,誤差相比3D CNN[12]的9.56 mm 和Hand PointNet[13]的8.5 mm 分別降低了11.82%和0.83%。在腕部(Wrist)、大拇指根部(Thumb R)、食指根部(Index R)、中指(Middle)、無名指根部(Ring R)、小拇指根部(Little R)的平均誤差距離小于Hand PointNet[13]。其中腕部關節(jié)點誤差由8.90 mm 下降至8.45 mm,下降了5%;食指根部關節(jié)點誤差由6.96 mm 下降至5.83 mm,下降了16%;中指根部關節(jié)點誤差由5.62 mm 下降至5.26 mm,下降了6%;無名指根部關節(jié)點誤差由6 mm 下降至5.22 mm,下降了13%;小拇指根部關節(jié)點誤差由7.68 mm 下降至6.3 mm,下降了18%。在大拇指指尖(Thumb T)、食指指尖(Index T)、無名指指尖(Ring T)、小拇指指尖(Little T)、小拇指根部的平均誤差距離略高于Hand PointNet[13]。其中大拇指指尖關節(jié)點誤差由13.59 mm 上升至13.71 mm,上升了0.8%;食指指尖關節(jié)點誤差由9.75 mm 上升至9.86 mm,上升了1.1%;無名指指尖關節(jié)點誤差由10.11 mm 上升至10.22 mm,上升了1.1%。由此可見,在大多數(shù)指尖關節(jié)本文方法比Hand PointNet[13]略差,這是由于Hand PointNet[13]具有指尖細化網(wǎng)絡,對誤差大的指尖關節(jié)點進行了進一步優(yōu)化造成的。然而根據(jù)以上數(shù)據(jù)分析可以看出,指尖關節(jié)點的誤差上升很小,本文方法在大部分關節(jié)點精度具有很大的提升。由此可以說明本文方法的優(yōu)勢。
圖4 MSRA手勢數(shù)據(jù)集上各方法的關節(jié)點平均距離誤差Fig.4 Average joint distance error of different methods on MSRA hand pose dataset
將本文方法與Multi-view CNNs[11]、Crossing Nets[22]、3D CNN[12]、DeepPrior++[10]和Hand PointNet[13]在所有關節(jié)的最大誤差低于閾值的幀比例上進行比較,結果如圖5所示。從圖5中可以看出,在閾值為0~29 mm時,本文的方法要優(yōu)于對比方法,至此最大誤差小于誤差閾值幀的比例約為81%;在閾值大于29 mm 時,本文方法比Hand PointNet 表現(xiàn)略差。由此可見本文效果在大部分幀上的表現(xiàn)效果要優(yōu)于對比方法;但在部分幀上仍存在著擬合效果稍差的現(xiàn)象,這主要是由于本文方法沒有對誤差較大的指尖關節(jié)點進行優(yōu)化。
圖5 MSRA手勢數(shù)據(jù)集上各方法的最大誤差小于誤差閾值幀比例Fig.5 Proportion of frames with max error less than the error threshold of different methods on MSRA hand pose dataset
2.3.2 網(wǎng)絡結構各組成部分的作用
為了驗證本文所提網(wǎng)絡結構各組成部分的有效性,進行以下實驗(結果如表1):
首先驗證了采樣點數(shù)量對實驗的影響:當分別選取初始點云數(shù)量為1 024、2 048 時,平均誤差幾乎沒有變化,均為8.43 mm;在選取初始點云數(shù)量為512 時,平均距離誤差由8.43 mm 增至8.49 mm,誤差增長較小,由此說明了本文方法對于采樣點數(shù)量具有魯棒性。考慮到精度與時間復雜度,后面的實驗均選取初始點云為1 024點。
其次,為了驗證OBB 操作的有效性,設計了一個不含OBB 操作的實驗進行對比,此時平均誤差增至8.92 mm,增加了0.49 mm,由此可以說明OBB操作的有效性。
而后,為了驗證了特征提取網(wǎng)絡PointNet++的有效性,將PointNet++更換成PointNet,此時平均誤差增至9.31 mm,增加了0.88 mm,由此驗證了本文所用特征提取網(wǎng)絡的有效性。
最后,為驗證標簽分布學習網(wǎng)絡的有效性,將標簽分布學習網(wǎng)絡改為直接回歸關節(jié)點坐標的方式,此時平均誤差增至8.66 mm,增加了約0.23 mm,這是因為標簽學習網(wǎng)絡解決了關節(jié)點與深度圖之間高度非線性映射關系。至此可以說明,本文各部分網(wǎng)絡結構均有效果。
表1 MSRA手勢數(shù)據(jù)集上驗證網(wǎng)絡結構各組成部分有效性的實驗方法及結果Tab.1 Experimental methods and results for verifying effectiveness of each component of the proposed network on MSRA hand pose dataset
2.3.3 復雜度分析
本文方法完整的運行時間為12.8 ms,實際運行速度為61.3 fps(frame per second),其中預處理部分(包括數(shù)據(jù)采樣、標簽分布的生成與還原等)運行時間為9.31 ms,主體網(wǎng)絡部分運行時間為3.5 ms,完整運行時間略高于Hand Pointnet[13]的11.5 ms(與本文方法運行環(huán)境一致),遠遠低于V2VPoseNet[17]的285.7 ms。本文網(wǎng)絡模型參數(shù)數(shù)量為12.2 MB,遠遠低于3D CNN[12]的420 MB,略高于Hand Pointnet[13]的10.3 MB,這是由于本文使用了標簽分布學習網(wǎng)絡,復雜度略有增加,但是預測精度得到了提升。
本文提出了一種基于標簽分布學習的手部姿態(tài)估計方法,通過對點云數(shù)據(jù)進行最遠點采樣和OBB 操作進行歸一化,再按照劃分球體的方式進行分組,然后將點云數(shù)據(jù)通過PointNet++進行特征學習,并將學習到的特征進行標簽分布學習,將預測值還原到原始坐標系下。通過這種方式,提高了特征學習能力,降低了深度圖和手部關節(jié)點之間的高度非線性映射關系,提高了整個網(wǎng)絡的預測能力。