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