張風雷
(武漢郵電科學研究院 武漢 430074)
現今主要的人機交互媒介為鼠標和觸摸屏;在混合現實時代,主要的人機交互媒介將為手[1~2]。故而,學術界和產業界都在積極開展與手有關的計算機視覺研究,手的關鍵點估計也成為近年來的研究熱點之一。所謂“手的關鍵點估計”是指根據一張包含手的RGB圖像,估計手的關鍵點在圖像上的位置。
姿態機[3](Pose Machine)是一種成熟的2D 人體姿態估計方法,其具有強大的對人體關鍵點間復雜的上下文關聯的表示力(representation power)。卷積神經網絡廣泛應用于計算機視覺領域中,其具有出色的圖像特征提取能力[4~5]。
本文提出了一種基于姿態機和卷積神經網絡的手的關鍵點估計方法。該方法的要點如下:
1)鑒于手的關鍵點估計和2D人體姿態估計的相似性,將姿態機應用于手的關鍵點估計問題;
2)為了利用卷積神經網絡的出色的圖像特征提取能力,用卷積神經網絡來實現姿態機的各個組件。
本文比較了該方法與目前先進的手的關鍵點估計方法Multiview Bootstrapping[6];測試表明,兩者具有相當的預測性能。
本節按照發展脈絡,依序介紹推斷機[7](Inference Machine)、姿態機。
概率圖模型廣泛應用于計算機視覺中,對其中的大多數來說,精確的推斷難以實現,從而需要采用 MCMC(Markov Chain Monte Carlo)、置信傳播(Belief Propagation)等近似推斷算法。
推斷機將消息傳遞(message-passing)類的概率圖模型近似推斷算法(如置信傳播)視為依次在圖模型中某些節點進行的分類過程的序列。
假定因子圖G,令 x1,x2,…為G中的變量節點,a1,a2,…為G 中的因子節點;令 ne(d)為與節點d相鄰的節點的集合,φa(Xa)為因子節點a的勢函數。
置信傳播算法中變量節點至因子節點、因子節點至變量節點的消息分別如式(1)、式(2)所示:

消息傳遞過程收斂后,變量節點的分布如式(3)所示:

將式(2)分別代入式(1)、式(3),得到式(4)、式(5):

式(4)可 視 為 輸 入 為 {μy→b|y∈ne(b)x,b∈ne(x)a},輸出為 μx→a的分類過程;式(5)可視為輸入為{μy→b|y∈ne(b)x,b∈ne(x)},輸出為 p(x)的分類過程;如此,置信傳播可視為依次在G中所有變量節點進行的分類過程的序列。
圖1為置信傳播中進行的兩種分類過程的示意圖。

圖1 置信傳播中進行的兩種分類過程的示意圖
圖2 為將概率圖模型展開為分類過程的序列的一個例子。深色方塊表示變量節點至因子節點的一次消息傳遞,如深色方塊A1表示變量節點A至因子節點1的一次消息傳遞;淺色方塊表示獲得變量節點的分布的分類過程,如淺色方塊A表示獲得變量節點A的分布的分類過程;方塊間的箭頭表示過程間的依賴關系,如淺色方塊A以C2、B1兩者的輸出為輸入。

圖2 將概率圖模型展開為分類過程的序列的一個例子
于是,用置信傳播算法訓練一個概率圖模型可視為訓練一組分類器。
更進一步,不將分類器的形式局限于式(4)、式(5),就能使用Logistic回歸、支持向量機等各種分類算法。
概率圖模型大多顯式地建模變量節點間的上下文關聯;與之不同,在推斷機中,變量節點間的上下文關聯由分類器在訓練過程中“習得”。事實上,推斷機的(潛在的)表示力等價于一個變量節點間全連接的概率圖模型。
在消息傳遞類的概率圖模型近似推斷算法中,消息的傳遞可以是同步的,也可以是異步的;對應地,推斷機分為同步推斷機和異步推斷機兩種。
姿態機將推斷機應用于人體姿態估計。推斷機并不對概率圖模型中的變量節點間的上下文關聯顯式地建模,而是讓其由分類器在訓練過程中“習得”,這使得姿態機在人體姿態估計中具有比概率圖模型更強的表示力。
姿態機將人體姿態估計視為一個結構化預測問題:令輸入圖像的寬度、高度分別為W、H,令人體關鍵點的個數為 P ,令 Z={(x,y)|x∈[0,W),y∈ [0,H)},則輸出為 Y=(Y1,…,YP),其中 Yp∈Z為第p個關鍵點在圖像上的位置。
姿態機可視為一個同步推斷機,其中的變量節點為Y1,…,YP。姿態機的推斷過程分為T個階段,每個階段對應于一輪消息傳遞;對t=1,…,T,“多類”分類器gt根據輸入圖像的特征,以及前驅階段的“多類”分類器的輸出,得到Y1,…,YP的“置信圖隨著t的增大,分類器給出變量節點分布的漸進改善的估計,如式(6)所示。

圖3為姿態機的示意圖,圖中只畫出了前兩個階段。

圖3 姿態機的示意圖
鑒于手的關鍵點估計與2D人體姿態估計的相似性,本文將姿態機應用于手的關鍵點估計問題。用于手的關鍵點檢測的卷積神經網絡結構的設計思路如下:對姿態機的每個階段,將其中的特征提取器和分類器用一個卷積神經網絡來實現。經過反復實驗、分析、改進,得到如表1所示的卷積神經網絡結構。“Conv.”表示卷積層,“ks=3,nf=64”表示卷積核的尺寸為3×3,卷積核的個數為64;“max_pool”表示池化層,“池”的大小為2×2。

表1 用于手的關鍵點估計的卷積神經網絡結構

名稱 類型 參數 “尺寸”conv6_1 conv6_2 conv6_3 conv6_4 conv6_5 conv6_6 conv6_7 ks=7,nf=128 ks=7,nf=128 ks=7,nf=128 ks=7,nf=128 ks=7,nf=128 ks=1,nf=128 ks=1,nf=21(32,32,128)(32,32,128)(32,32,128)(32,32,128)(32,32,128)(32,32,128)(32,32,21)(32,32,149)conv7_1 conv7_1 conv7_1 conv7_1 conv7_1 conv7_1 conv7_1 Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Concat(conv4_7,conv6_7)Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU Conv.+ReLU ks=7,nf=128 ks=7,nf=128 ks=7,nf=128 ks=7,nf=128 ks=7,nf=128 ks=1,nf=128 ks=1,nf=21(32,32,128)(32,32,128)(32,32,128)(32,32,128)(32,32,128)(32,32,128)(32,32,21)
表1所示的卷積神經網絡由3個階段組成。conv1_1至 conv5_2為階段 1,其中 conv1_1至conv4_7用于提取圖像特征;conv6_1至conv6_7為階段2;conv7_1至conv7_7為階段3。分別對conv5_2、conv6_7、conv7_7進行雙線性插值,將其“尺寸”縮放為(256,256,21),得到手的21個關鍵點在圖像中的位置的“得分圖”score_maps5_2、score_maps6_7、score_maps7_7。
訓練數據來自數據集 Rendered Hand Pose[8]和數據集Stereo Hand Pose[9]。為了適配本課題的需求,分別對兩者進行了簡單的預處理,得到數據集R(包含43986個實例)、數據集S(包含36000個實例)。數據集R和數據集S中的實例包含的項如表2所示。

表2 數據集R和數據集S中的實例包含的項
損失函數定義為score_maps與score_maps5_2、score_maps6_7、score_maps7_7的“差異”之和。
具體的訓練過程如下:
1)將數據集R按9∶1的比例劃分為訓練集R-train和驗證集R-val,將數據集S按8∶2的比例劃分為訓練集S-train和驗證集S-val;
2)用數據集R-train、S-train聯合訓練(交替地將數據集R-train、S-train的實例輸入系統),說明如下:批的大小為8;優化方法為Adam;總共迭代30000次;學習率為中為n迭代次數。
對score_maps7_7—手的21個關鍵點在圖像中的位置的“得分圖”—中的每張“得分圖”,取其中“亮度”最高的點的位置為其對應的手的關鍵點在圖像中的位置。如此,便由score_maps7_7得到uv7_7—手的21個關鍵點在圖像中的位置。
評估模型的預測性能的指標為其估計的手的關鍵點在圖像中的位置的平均偏差?。圖4為訓練時模型的?曲線,橫軸為迭代次數(單位為k),豎軸為?的值(單位為像素)。

圖4 訓練時模型的?曲線
作者用若干張包含手的RGB圖像測試了本文提出的手的關鍵點估計方法的預測性能。
圖5是手的關鍵點估計成功的一個例子,輸入圖像為2018年1月作者拍攝的自己的右手。

圖5 手的關鍵點估計成功的一個例子
圖6 是手的關鍵點估計失敗的一個例子,輸入圖像為2018年1月作者拍攝的自己的右手。
通常用PCK曲線來評估手的關鍵點估計方法的預測性能;若PCK曲線上有一點(6,0.10),則表示估計出的關鍵點中有百分之十與其真實位置的距離小于6像素。

圖6 手的關鍵點估計失敗的一個例子
作者比較了本文提出的方法與當前先進的手的關鍵點估計方法Multiview Bootstrapping的預測性能,圖7為兩者的PCK曲線,可以看出兩者具有相當的預測性能。

圖7 本文提出的方法和Multiview Bootstrapping方法的PCK曲線
本文提出的手的關鍵點估計方法是數據驅動的,這意味著訓練數據的質量對其預測性能至關重要[10~12]。數據集R、S存在手勢的多樣性不夠的問題,尤其是手指間有重疊的實例十分少見;這解釋了圖6中手的關鍵點估計的失敗。
本文提出了一種手的關鍵點估計方法,其將姿態機應用于手的關鍵點估計問題,并用卷積神經網絡來實現姿態機的各個組件。測試表明,本文提出的方法具有與目前先進的手的關鍵點估計方法相當的預測性能。
進一步的研究應當著力于探討如何獲取高質量的訓練數據。獲取訓練數據的方式有以下兩種:1)利用3D建模軟件(如Blender)和游戲引擎(如Unity),在“虛擬世界”中合成[13~15];2)通過攝像機等設備,在“真實世界”中采集,再由人工標注。方式1)成本低(絕大部分工作可自動化),且數據精度高;方式2)成本高(需要耗費大量人力),且數據精度低。通常用由方式1)獲取的數據和由方式2)獲取的數據聯合訓練,以利用后者補償前者中“虛擬”與“真實”的差異,這對于保證系統在“真實世界”中的預測性能是十分重要的。用方式1)獲取高質量的訓練數據的關鍵是可編程的手的3D模型組件,通過將其設定成各種不同的手勢,“融合”進各種不同的“虛擬場景”,以實現數據集的多樣性,這可以作為進一步研究的一個課題。