V2V-PoseNet算法和应用详解(3D关节点估计领域)
- 本文主要梳理V2V關(guān)節(jié)點(diǎn)估計(jì)算法的原理、網(wǎng)絡(luò)結(jié)構(gòu)、以及工程應(yīng)用。
- 雖然V2V是2017年的算法,但是其3D點(diǎn)云處理流程和效果還是很經(jīng)典的,值得作為入門3D深度學(xué)習(xí)領(lǐng)域的一個(gè)窗口。
1 算法部分
V2V-PoseNet基本介紹
- 發(fā)明時(shí)間:2017年
- 功能:3D關(guān)節(jié)點(diǎn)估計(jì)(如應(yīng)用于手掌關(guān)節(jié)點(diǎn)估計(jì))
- 輸入數(shù)據(jù):一張包含目標(biāo)的depth圖。(如用Kinect、realsense等傳感器采集的的depth圖)
- 輸出結(jié)果:目標(biāo)物體關(guān)節(jié)點(diǎn)的X,Y,Z坐標(biāo)值。
- 兩句話概括創(chuàng)新點(diǎn):
- 第一句話:傳統(tǒng)方法是基于2D深度圖直接回歸關(guān)節(jié)點(diǎn)坐標(biāo),而我們是把2D深度圖投影到3D空間,然后用3D卷積去操作,這能解決2D深度圖的透視畸變問(wèn)題。(透視畸變問(wèn)題見(jiàn)下面)
- 第二句話:我們不是直接回歸關(guān)節(jié)點(diǎn)坐標(biāo),而是估計(jì)每個(gè)點(diǎn)云所屬某關(guān)節(jié)點(diǎn)的概率值。(用熱圖表示)
- 所獲榮譽(yù):
- CVPR2018
- 大大領(lǐng)先優(yōu)勢(shì),獲得當(dāng)年基于幀的3D手部姿態(tài)估計(jì)挑戰(zhàn)賽第一名。
- 在當(dāng)前(2021年8月)手勢(shì)姿態(tài)估計(jì)領(lǐng)域,效果排名第3。
算法結(jié)構(gòu)介紹
論文中結(jié)構(gòu)圖如下:
自己繪制的更詳細(xì)版結(jié)構(gòu)圖如下:
V2V網(wǎng)絡(luò)輸入的預(yù)處理過(guò)程見(jiàn)后面內(nèi)容,這里說(shuō)明下網(wǎng)絡(luò)輸出及其后處理過(guò)程。
- 網(wǎng)絡(luò)輸出的[16, 44, 44, 44]是什么意思?
- 答:16代表關(guān)節(jié)點(diǎn)個(gè)數(shù),每個(gè)關(guān)節(jié)點(diǎn)的XYZ坐標(biāo)信息單獨(dú)用一個(gè)44x44x44立方體來(lái)預(yù)測(cè)表示。此時(shí),網(wǎng)絡(luò)輸出的立方體(44x44x44的矩陣)里面每個(gè)元素值有正有負(fù),值越大的元素位置,即代表關(guān)節(jié)點(diǎn)在此處的概率越大。把這立方體里面所有元素值經(jīng)過(guò)一個(gè)softmax后,每個(gè)元素值就能轉(zhuǎn)換成一個(gè)0~1之間的概率值了。
- 在輸出的44x44x44立方體中,怎么找到關(guān)節(jié)點(diǎn)的具體XYZ位置?
- 44x44x44立方體矩陣經(jīng)過(guò)softmax后,44x44x44=85184個(gè)元素值能夠轉(zhuǎn)換成關(guān)節(jié)點(diǎn)落在此處的概率值,最簡(jiǎn)單的獲取關(guān)節(jié)點(diǎn)XYZ位置的方法就是取這立方體中,概率最大的那個(gè)值,看這個(gè)最大的值在44x44x44立方體的什么位置,那個(gè)位置就判定為網(wǎng)絡(luò)預(yù)測(cè)的關(guān)節(jié)點(diǎn)位置。但是,這種方法有很多弊端,第一個(gè)大弊端是,這種方式得到的關(guān)節(jié)點(diǎn)XYZ只能是整數(shù)值([0, 44]之間的整數(shù)),這就導(dǎo)致預(yù)測(cè)的精度損失。第二個(gè)大弊端是,概率最高的那個(gè)位置點(diǎn),可能是個(gè)離群點(diǎn),即有可能并不是概率密度最高區(qū)域的中心點(diǎn)。既然這樣,那怎么根據(jù)這85184個(gè)概率值,在44x44x44的立方體中,找到關(guān)節(jié)點(diǎn)最佳位置呢?方法就計(jì)算所有位置概率的平均!我還不知道怎么用簡(jiǎn)短的語(yǔ)言描述,讓我用一幅圖來(lái)解釋:(我用2D圖中找熱圖中心點(diǎn)位置為例子,3D立體找熱圖中心點(diǎn)同理)
- 上圖,關(guān)鍵是理解構(gòu)造的那兩個(gè)X、Y方向的遞增矩陣就好了,它們和概率圖按位點(diǎn)乘然后25個(gè)元素累加,其結(jié)果的物理意義,就是所有25個(gè)點(diǎn)位置的平均值!看熱圖的X方向,熱圖中概率最高點(diǎn)0.37,它左邊是0.15,右邊是0.21,所以,按道理中心點(diǎn)會(huì)在0.37網(wǎng)格的右邊,而0.37所在的X值為2,所以,中心點(diǎn)的X方向值,應(yīng)該大于2!實(shí)際上按上圖這樣計(jì)算,結(jié)果也一定會(huì)大于2!?
損失函數(shù)
就是把預(yù)測(cè)的3D熱圖(每個(gè)關(guān)節(jié)點(diǎn)有一個(gè)3D熱圖)和標(biāo)簽生成的熱圖計(jì)算均方誤差:
作者認(rèn)為3D識(shí)別關(guān)節(jié)點(diǎn)的好處
作者如何制作數(shù)據(jù)集的?
算法數(shù)據(jù)流圖詳情
2 工程部分
需求
通過(guò)手勢(shì)來(lái)虛擬觸控激光投影,其中就需要使用V2V算法,識(shí)別手掌的16個(gè)關(guān)節(jié)點(diǎn),并計(jì)算手指3關(guān)節(jié)點(diǎn)的空間延長(zhǎng)線和桌面的交匯點(diǎn)坐標(biāo)。?
16個(gè)手指關(guān)節(jié)點(diǎn)位置:
?
?Kinect2相機(jī):
16位深度圖轉(zhuǎn)8位灰度圖?
Kinect2相機(jī)采集的depth圖是16位存儲(chǔ)的,原因是depth圖中包含距離信息,值在0~2000mm之間。但是實(shí)際上我們只需要手部區(qū)域的depth圖用于后續(xù)的V2V做關(guān)節(jié)點(diǎn)估計(jì)。最簡(jiǎn)單方法是,用YOLO目標(biāo)檢測(cè)器訓(xùn)練一個(gè)depth圖的手掌目標(biāo)檢測(cè)模型,讓YOLO算法裁剪人的手掌區(qū)域。
YOLO檢測(cè)的是depth區(qū)間在1200mm至1800mm高度區(qū)間的圖像,得到手部區(qū)目標(biāo)框位置后,我們需要基于原始16位的depth圖,去找到手部區(qū)的“中心點(diǎn)”,這個(gè)中心點(diǎn)物理意義大概是手掌在空間中的幾何中心,后續(xù)我們需要基于這個(gè)中心點(diǎn),去在depth轉(zhuǎn)3D點(diǎn)云圖上,以這個(gè)中心點(diǎn)為立體中心,去裁剪一個(gè)手部區(qū)空間,并最終送到V2V網(wǎng)絡(luò)去預(yù)測(cè)手掌關(guān)節(jié)點(diǎn)位置。計(jì)算出這個(gè)中心點(diǎn)位置的方法有很多,這里我們簡(jiǎn)單的用16個(gè)“網(wǎng)格點(diǎn)”去獲取中心點(diǎn)的Z值,XY值就取YOLO裁剪的手部depth圖的XY值。
中心點(diǎn)選取方案的測(cè)試方法如下:(評(píng)估到底有多少手部點(diǎn)被排除在立方體之外)
V2V樣本的標(biāo)注
?最開始,我們?cè)?D RGB圖上標(biāo)注16個(gè)關(guān)節(jié)點(diǎn),然后通過(guò)RGB圖坐標(biāo)轉(zhuǎn)depth圖坐標(biāo)轉(zhuǎn)3D點(diǎn)云坐標(biāo),來(lái)獲取手掌在3D空間的XYZ標(biāo)簽信息。但是,這種方法導(dǎo)致非常大的標(biāo)注誤差,原因在于,depth圖精度并不是特別高,而且有很多噪音。RGB圖上標(biāo)注的點(diǎn),人眼看上去標(biāo)的很準(zhǔn),但很可能通過(guò)公式,映射到3D空間時(shí),這個(gè)點(diǎn)會(huì)落在噪音點(diǎn)上。
計(jì)算手指關(guān)節(jié)點(diǎn)的空間延長(zhǎng)線和桌面點(diǎn)云的交點(diǎn)
V2V得到手掌16個(gè)關(guān)節(jié)點(diǎn)后,我們使用食指尖和食指末2個(gè)關(guān)節(jié)點(diǎn)的XYZ值,可以計(jì)算出其連接線射線與桌面點(diǎn)云的交點(diǎn)位置。
具體計(jì)算代碼如下:
?3 效果
YOLO目標(biāo)檢測(cè)器檢測(cè)手掌區(qū)域效果
V2V算法對(duì)手掌16關(guān)節(jié)點(diǎn)預(yù)測(cè)的效果?
?3D仿真
在開發(fā)過(guò)程中,我們?cè)O(shè)計(jì)了一個(gè)3D仿真程序,用于測(cè)試各模型及其語(yǔ)義邏輯在虛擬空間的操控效果。初版仿真程序是用一個(gè)簡(jiǎn)單的立方體來(lái)表示,后期仿真使用pyqtgraph庫(kù)設(shè)計(jì)了一個(gè)更全功能的虛擬仿真,包括實(shí)時(shí)可視化如下內(nèi)容:環(huán)境空間中的所有點(diǎn)云、RGB圖、虛擬立方體(用于測(cè)試手掌非接觸控制它的效果)、手指方向延長(zhǎng)線與環(huán)境中點(diǎn)云的交匯點(diǎn)等等。
初版仿真程序如下:
最終版仿真程序如下:
后續(xù)更新截圖。
總結(jié)
以上是生活随笔為你收集整理的V2V-PoseNet算法和应用详解(3D关节点估计领域)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Yolo5算法详解
- 下一篇: 度量学习:ArcFace算法和工程应用总