(文章來源:VR陀螺網)
當我們通過攝像頭得到深度圖后,下一步就是把深度圖輸入給算法,算法可以輸出我們手部所有關鍵點的 3D 位置。手部關鍵點也可以理解為手部骨架的關節點,通常用 21 個 3D 關鍵點來描述。每個 3D 關鍵點有 3 個自由度,那么輸出維度就是 21*3。目前學術界已經提出各種算法用于解決“基于深度的手勢姿態估計問題“,這些算法大體可以分成模型驅動(model-driven)和數據驅動(data-driven)兩種方式。
1、模型驅動類算法,此類算法通常是預先用手部 pose(pose 指位姿參數或節點位置,后文將統稱為 pose)生成一系列手的幾何模型,并建立一個搜索空間(所有可能的手勢幾何模型的集合),然后在搜索空間內找到與輸入深度圖最匹配的模型。此時,模型對應的參數就是所求的 pose。模型驅動類算法通常需要設計一種方式把 pose 轉換成對應的幾何模型。
此論文用了 linear blend skinning(一種骨骼蒙皮動畫算法):意思就是給骨架蒙上一層皮膚,并讓皮膚跟隨骨骼運動一起變化,多用于動畫領域。先把 pose 轉換成對應的 mesh(下圖左側),在進一步轉換成光滑曲面模型。我們可以理解為 pose 是自變量,幾何模型可由 pose 算出,且幾何模型與 pose 一一對應。
輸入的手部深度圖可轉化為點云, 此點云就相當于在真實的手表面上采集到的一些 3D 點,如下圖中的紅點和藍點:這樣就可以定義損失函數為點云中的點到模型表面的距離(上圖中的紅線),以此描述深度圖和pose的相似度。損失函數的輸入是深度圖和 pose,輸出是差異度。損失函數的輸出值越小,說明輸入的深度圖和pose越相似。
因此,只要在搜索空間中找到令損失函數最小的 pose 即為所求的pose。但因搜索空間不能寫成解析形式,沒法一次性求出損失函數的最小值,通常只能用數值計算方法,如PSO,ICP等,不斷迭代計算得到最優解。迭代的數值解法通常對初始化要求較高,若初始化的不好,則需要很長時間才能迭代收斂,還有可能無法收斂到全局最小值(因為損失函數是非凸函數),所以算法實現時,通常利用上一幀的pose來初始化當前幀的計算。
這種模型驅動類方法需要手工設計幾何模型和損失函數。簡單的幾何模型計算量小,復雜的幾何模型準確度高。通常設計模型時需要在準確度和性能之間做權衡。模型驅動類的算法優勢是不需要任何訓練數據,只要設計的好,寫完就可以直接用。 缺點是需要手工設計模型,計算量較大,容易誤差累計導致漂移,對初始化要求高,通常只能用在手勢追蹤領域。
2、數據驅動類算法,此類算法是指利用收集數據中訓練樣本與其對應的標簽關系,讓機器學習一個從樣本到標簽的映射。 此類算法屬于判別式方法(Discriminative Approaches)。
這樣的機器學習算法有很多,可以是早期使用的隨機森林,SVM 或是最近研究的火熱的神經網絡等。此類方法的優點是不需要設計復雜的模型,缺點是需要大數據。但現在大數據時代數據量已經不是問題,這種數據驅動的方式已經成為目前的主流研究方向。
早期學術界研究手勢關鍵點回歸的經典方法有 Cascade regression, Latent Regression Forest 等。近些年研究主要集中在各類神經網絡如:DeepPrior 系列、REN、pose guided、3D-CNN、Multi-View CNNs、HandPointNet、Feedback Loop 等。
由于此處討論的用于手勢的神經網絡與普通的圖的神經網絡并無本質差異,而神經網絡的科普文章已經很多,這里就不做科普了,我們僅挑幾個有代表性的網絡結構介紹一下:DeepPrior:網絡結構大體如下圖,通過初始網絡得到粗略的 pose,再用 refine 網絡不斷優化, 并且在最后的全連接層前加了一個低維嵌入,迫使網絡學習把特征空間壓縮到更低維度。 此網絡后續有更優化的版本 DeepPrior++。
網絡在預測 pose 之后,反過來用 pose 生成深度圖,并與輸入的深度圖一起預測更優的 pose,此 pose 又可用來生成更優的深度圖,以此迭代循環優化pose。3D CNN:網絡結構如下圖,此網絡把2D深度圖上用像素的描述的深度信息,以TSDF的方式轉化為體素(3D的像素),并用3D 卷積代替了普通的2D卷積。
此處最大的貢獻就是在網絡結構上從2D走到了3D,因為傳統2D卷積網絡是為2D圖像設計的,并不一定適合3D信息的提取,而用3D卷積網絡則更容易獲取3D特征,也就更適用于3D手部關鍵點回歸的問題。HandPointNet:網絡輸入時把深度圖轉成點云,然后用 PointNet 做手部 3D 關鍵點回歸。
HandPointNet的主要貢獻是首次把PointNet用在了手勢關鍵點回歸上,其中的PointNet是很有代表性的網絡。PointNet 首次用 3D 點云來作為網絡輸入而不是 2D 圖片。PointNet 比上一個介紹的 3DCNN 更進一步探索了在 3D 空間中的神經網絡架構,以及如何更有效的提取 3D 特征,PointNet后續有更優化的版本PointNet++。
? ? ?(責任編輯:fqj)
評論