肖 金,翟 倩,陳永樂,張 彬,陳偉全,嚴繼超,李武初
(廣東工業大學華立學院,廣州 511325)
手部交互是目前計算機圖像處理中的重要研究內容。手語識別,社交互動,虛擬現實和增強現實中,手是人機交互的主要輸入設備[1-2]。目前的二維手部關鍵點識別及手部姿態追蹤相關研究已日趨成熟。如過去通過傳統圖像算法,如膚色分割,掌心分割等來實現手部區域的分割,但這種處理方法的依賴靜態的圖像處理,對圖像的彩色空間(RGB,HSI)等要求甚高。其次是依賴特征點提出,通過提出手部相關特征進行識別,一旦手部特征缺失,識別準確度就大幅下降[3]。并且這類傳統的手勢識別算法對雙手遮擋交互、障礙物遮擋、夜間、強光照等環境下的識別問題難以解決。隨著人工智能的發展,越來越多的手勢識別算法引入了深度神經網絡,通過各種環境下采集的數據集進行訓練,大幅度提高了在遮擋,日夜光線等苛刻環境下的識別準確度,由此二維的手部追蹤算法日趨完善[4-5]。但是二維的手部追蹤僅有兩個維度的信息,交互僅停留在平面階段,從而無法實現在空間中對手部的位置進行定位,而許多手部的交互動作是縱深的,如手語交流中的許多動作,影音娛樂中的動作捕捉,虛擬現實中的交互等,二維手部追蹤中缺失的第三維度信息就難以解決這些問題。而且通過二維的圖像去預測三維的手部姿態非常困難,因為手部的膚色相似,從三維空間中辨認手部關鍵點非常困難,其次手部動作中非常容易產生遮擋問題[6-8]。許多非視覺的研究中研究采用慣性傳感器解決遮擋問題,但在普通RGB相機中就非常困難[9]。
由于實現具備空間定位及SLAM 信息的三維手部模型重建需要三維度數據,而普通的RGB 相機僅能獲取二維數據。本文對普通RGB相機如何實現二維升三維的重建及對某一特征的識別與追蹤進行研究,從而實現了三維視覺手部追蹤。
圖1 神經網絡架構圖
如圖1所示,整個神經網絡由3個網絡塊構建成,輸入的圖像在手部位置分割網絡中定位手部在整個圖像中的位置,然后將輸出圖像經過裁剪和尺寸變換并將手部位置放大輸入到下層的二維手部關鍵點識別網絡中。放大后的手部圖輸入到二維手部關鍵點識別網絡中,經過計算輸出圖像中的手部21 個骨骼關鍵點的位置,在手勢識別的相關研究中,得出通過手部21 個關鍵點即可確定手部的位置。第3 層的二維轉三維網絡是整個神經網絡的核心,它需要兩個輸入:第一個輸入是原圖像通過雙目立體匹配算法計算后轉換的深度圖,圖像中包含深度數據,可以通過矩陣變換轉換成距離信息;第二個輸入是二維手部關鍵點識別的結果。通過兩個輸入,將手部關鍵點結果賦值在深度圖上,輸出21個關鍵點的深度信息,然后在網絡中進行匹配運算,預測在三維空間中最有可能的關鍵點坐標位置(xi,yi,zi),然后將這些坐標位置通過矩陣變換進行三維重建,得到三維空間中的手部位置。
手部位置分割網絡是圖像分割網絡,原理主要是通過一些手部姿態數據訓練集進行訓練,這些被當成是圖像位置切割的樣本,在圖像輸入的時候,檢測輸入圖像中手部位置并將其分割出來。
該網絡中的輸入主要是經普通圖像輸入后矩陣變換處理后的張量,數據類型為tf.float32,及訓練中用于判斷真假的樣本權重train。網絡的輸出為輸入圖像中分割出來手部位置的得分圖,輸出得分最高的手部位置float32 張量,并且將其分割出來生成新圖像輸入到下層網絡中。
二維手部關鍵點識別網絡是圖像識別網絡,原理主要是通過一些標注好的帶關鍵點的二維手部姿態數據集進行訓練,讓網絡不僅可以識別手部圖像的關鍵點,還可以從某個關鍵點的位置在推理出其他關鍵點的的位置可能性信息。從上層分割出來的手部位置圖輸入后,通過訓練中用于判斷真假的樣本權重train 進行檢測,并且輸出二維手部關鍵點的得分圖,輸出每個得分最高,即置信度最高的關鍵點到下層網絡中。需要注意的是,這里輸出的得分圖為[B,256,256,21],包含手部骨骼21個關鍵點的得分。
二維升三維網絡是這個神經網絡的核心。在得到手部21個關鍵點的位置及深度數據后,首先是根據這些數據判斷該手型是左手還是右手,通過訓練中用于判斷真假的的樣本權重train 進行檢測,估計最有可能的空間手部三維姿態,并且輸出標準化的三維坐標點,格式為[21,3],意為輸出21個關鍵點的三維坐標。
如圖2 所示,硬件模塊由成像模塊,主板模塊及AI 芯片模塊組成。攝像頭模塊通過單目/雙目/TOF攝像頭采集圖像/視頻并且輸入到主板處理。算法模塊進行算法運算,該過程由AI 芯片模塊對其進行加速,首先將原始圖像的手部位置分割出來,輸入的圖像在手部位置分割網絡中定位手部在整個圖像中的位置,然后將輸出圖像經過裁剪和尺寸變換并將手部位置放大輸入到下層的二維手部關鍵點識別網絡中,經過計算輸出圖像中的手部21個骨骼關鍵點的位置,這與人體生理及運動學有關,在手勢識別的相關研究中,得出通過手部21個關鍵點即可確定手部的位置。
第3 層的二維轉三維網絡是整個神經網絡的核心,它需要兩個輸入:第一個輸入是原圖像通過雙目立體匹配算法計算后轉換的深度圖,圖像中包含深度數據,可以通過矩陣變換轉換成距離信息;第二個輸入是二維手部關鍵點識別的結果。通過兩個輸入,將手部關鍵點結果賦值在深度圖上,輸出21個關鍵點的深度信息,然后在網絡中進行匹配運算,預測在三維空間中最有可能的關鍵點坐標位置(xi,yi,zi),然后將這些坐標位置通過矩陣變換進行三維重建,得到三維空間中的手部位置。
圖2 硬件模塊設計
在公開數據集上實驗之前,這里先抽選了來自不同程度,不同環境下的一些圖片,這些圖片部分來源于純手部圖像,來自網絡的人像寫真,一些隨機搜索的包含手的圖像。從“相機角度”、“光源強度”、“膚色”、“復雜環境”、“手部遮擋”來測試該神經網絡在應對各種苛刻環境下的泛化性,為了排除可能會出現的偶然性和相似性,每組有3張程度因素從小到大的圖像集,一共7 組數據,包含21 張測試圖。測試集的圖像數據如圖3所示。
圖3 測試集范例
為了驗證實驗結果,同時也為了方便觀察每一層神經網絡輸出圖像是否滿足需求和及時觀察到可能出現的識別錯誤,這里將每層神經網絡輸出的結果都作為實驗結果。測試集上的原圖經過該三維手部追蹤神經網絡中,首先經過第一層“手部位置分割網絡”將手部位置從整張圖片中分割出來,輸出到第二層“二維關鍵點識別網絡”中,通過分割出來的手部圖像,識別二維中的21個手部骨骼關鍵點,并且為了方便可視化效果,通過人體關節點間的生理學連接,進行matplotlib 畫圖連線,渲染出來。此時可看到二維圖像的識別效果。輸出的二維關鍵點結果及雙目立體匹配得到的該位置的深度信息將會輸出到第三層“二維轉三維”網絡中,通過該層網絡預測缺失的第三維度信息,最終經過手掌根部root點確定,標準化坐標處理等過程輸出在三維空間中的21個手部關鍵點三維坐標,通過matplotlib中的3D畫圖庫,在三維空間中進行生成。圖4所示為測試集的輸出效果圖。
圖4 范例實驗結果
可以看到,在大部分約束條件下,該網絡的識別準確率都比較可觀,除了一些手部信息缺失過多的圖像發生了關鍵點丟失,錯亂等情況;同時也有部分圖像關鍵點位置不明確,稍微扭曲。因為這些測試集來源都大相徑庭,圖像的尺寸差異巨大,輸入到神經網絡中的圖像最終會被縮放,裁剪成同一尺寸,這些圖像因為某些尺寸比例的關系,經過縮放后比例失調,例如手掌變寬,手指壓長等扭曲現象,因此關鍵點發生了位置不明確的問題。
但在實時攝像頭測試中,因為攝像頭輸入尺寸是每幀固定的,因此實時效果良好,整體實驗效果可以基本滿足手部追蹤的效果,同時,及時在某幀中發現識別錯誤,關鍵點連線錯亂等情況,在第三層中也會在預測過程中根據來自真實的三維數據進行修正,簡單來說,就是盡管手部識別效果異?!芭で?、“不似人形”也會因為第三層的訓練數據是來自真實的“手”,因此會強行將異常的數據轉換為正常數據,不會出現在三維重建中手部形象“畸形”的情況出現。
由收集的測試數據集范例和公開測試集的實驗結果來看,可以看到,該網絡在應對各種復雜條件下的泛化能力比較高,即使實驗場景包含可能的各種條件約束,成功實現手部位置分割的成功率達到了78%,同時二維關鍵點識別達到60%,這相對第一層中必然是更低的,因為首先網絡需要分割出手部的位置圖像,才能進一步對其進行關鍵點識別,雖然60%并不是十分優秀的結果,但足以證明該網絡在應對復雜環境下的能力,它包含的是圖像背景復雜,存在多個檢測角色,光源復雜,圖像存在關鍵位置遮擋等約束條件。而在三維重建中成功率達到了72%,即使在某幀中發現關鍵點識別錯誤、連線錯亂等情況,在第三層也會根據來自真實的已訓練三維數據進行修正。
進一步分析觀察,簡單背景(男性)的數據集中三層網絡的準確率達到了90%、80%、86.7%,說明該網絡的訓練結果良好,應對實驗室簡單背景環境的識別性能相對較高;而簡單背景(女性)中三層網絡的識別準確率達到了90%、80%、90%,這樣的對比結果也說明了,該網絡應對異性的能力是相似的,同時這兩組數據的相似性,也排除了簡單背景(男性)中的實驗結果的偶然性。因為這兩組數據的背景不一樣,足以驗證該網絡在簡單背景下的識別能力。
本文提出了一種從普通RGB圖像中預測三維空間手部姿態并實現實時手部追蹤的神經網絡。這個神經網絡分為三層,首先通過一個神經網絡進行手部位置的識別與分割,第二層網絡結構基于上一層輸入的二維手部分割裁剪后的手型圖,這層的處理主要是實現識別二維圖像中的21個手部骨骼關鍵點。第三層網絡首先通過一個隱式的合成三維手部模型數據和三維手部數據集進行訓練,訓練后的網絡模型就可以實現從二維的手部關鍵點中與前置訓練的三維手部數據集進行匹配,估計缺失的第三維度信息,這樣就可以獲得手部骨骼關鍵點的三維數據,進而可以通過OpenGL 或者Matplotlib等進行實時三維重建,將二維的手部追蹤進行升維。簡而言之,整個神經網絡的結構分為三層,最終的目的是從普通的RGB相機中實現三維的手部姿態估計。