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