《Learning to Estimate 3D Hand Pose from Single RGB Images》2017.3
本文介紹了從2D彩色圖像進行3D hand pose estimation的一種方法,總體來說方法很直觀
project page
主要流程
如圖所示,依次有以下幾個環節:
- 1)HandSegNet, 輸入256x256x3, 輸出256x256x1的一個hand mask。用一個FCN網絡進行手的語義分割,分割之后的結果用來對手附近區域進行截圖,以減少計算量及提高准確性
- 2)PoseNet,用來計算手的21個keypoint, 輸入256x256x3,輸出32x32x21, 即21張不同keypoint的score map
- 3)PosePrior,有兩個子stream,每個的網絡結構除了最后一層不一樣其他都一樣,輸入32x32x21,輸出兩個層。一個是正則化的手的坐標,以手掌的點為原點,且長度進行了normalize, 即維度為21x3。另一個是相對於實際圖片的空間的變換關系,即維度為3
在論文中還用這個結構進行了手語識別,手語識別的網絡直接根據手的指示來, 是一個3層的全連接網絡,輸入維度63, 輸出維度35
代碼細節解讀
使用自帶的工具tfprof進行性能分析,發現主要的耗時在於, 2/3耗時在single_obj_scoremap中的tf.nn.dilation2d
操作, 1/6耗時在HandSegNet,1/6耗時在PoseNet2D。
同時,為了復用前人訓練好的網絡參數,將手部截圖重新上采樣到256x256來使用PoseNet。可見整個網絡還有很大的優化空間。cpu上做到實時也不是沒有希望。
訓練流程解讀
《Online Detection and Classification of Dynamic Hand Gestures with Recurrent 3D Convolutional Neural Networks》2016.11
這篇文章的思路就不一樣,它主要在於訓練一個end-to-end的手勢識別結果,不進行具體的hand pose estimation。從視頻效果來看也不錯
《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》2016.6
目標
多人同時Pose Estimation, 如下圖所示
框架
分兩個部分,檢測部分和匹配部分,如下圖所示
(b)關鍵點檢測,(c)part affinity fields即四肢關系檢測,(d)二分圖匹配
檢測部分
如下圖所示,上下分為兩個brach,分別用來檢測關鍵點 Part Confidence Maps 以及 四肢關系Part Affinity Fields
分stage的思路和《Convolutional Pose Machines》一致(畢竟是一個團隊)。其中的F來自於VGG-19的前十層finetuned的結果,對於stages t>=2, 每個branch的輸入都是$$F, S^{t-1}, L^{t-1}$$ 的聯合,即
類似於《Convolutional Pose Machines》,計算每層的loss為
其中的W(p)代表本該存在的單位是否在groud true中存在(有些關節或者四肢沒有標注)。而對應的total loss為
注意Part Affinity Fields(PAF)是一些矢量區域,可以通過指定四肢粗細然后在訓練數據中根據關節點來標注。
匹配部分
這里首先要明確 Part Confidence Maps和PAF是如何協同確定四肢和關節的預測的
如上圖,對於圖中的任意點P,在PAF的對應點的投影可以用來表示該點在四肢上的相關性。對於 Part Confidence Maps中任意的兩個極值點A,B,可以通過插值A,B中的幾個點p0, p1, p2, p3, p4...求這些點在PAF上的投影的積分來確定A,B兩點作為同肢節的關節點的可能性,如下圖
有了上面的兩點同肢節判定的方法,我們就可以通過匹配每組能相連的點來決定連接與點的有效性。即通過右手腕的confidence map 和右手肘的confidence map的極值點之間的二分圖匹配問題
其中
用來表示兩個關節點是否相連。這個問題可以用Hungarian algorithm來解決,相對的總體的error,可以通過簡單的相加來衡量
兩個子問題:
-
non-maximum suppression非極大值抑制
定義:處理一份數據,講非極大值的部分設置為0,是不是非常直觀^^
實現:常見的高效算法可以參見 ICPR2006-《Efficient Non-Maximum Suppression》,核心是減少重復比較
應用:檢測算法中常見,本質是從眾多的滑動窗口的sore中找到局部極值作為檢測結果。參見很不錯的人臉檢測的NMS例子 -
Hungarian algorithm
目標:解決二分圖的最大匹配問題 or 任務分配問題,用在文中是解決不同關鍵點之間的同肢體匹配問題
《Convolutional Pose Machines》
目標
實現關鍵部位的檢測,生成scoremap,如下圖所示
框架
常規的思路類似FCN,但是由於網絡層數變深會有不好訓練的問題。文章的重點在於分stage來訓練,每個stage的結果目標都是最終的score map,通過把原圖的feature和上一個stage的輸出一起傳遞到下個stage作為輸入,來實現迭代。注意下圖中的x'這個網絡的權重在所有的stages t>=2中都是共享的,用來提取圖像的feature
要點
- 通過分階段stage的方式,用來迭代並擴大receptive field,每個stage都可量化以及可視化
- 由於總體網絡層數教深,很容易出現gradient vanish的問題, 由於每個stage的輸出都可以計算loss,如下,ground true未真實位置點的高斯分布的max
, 同時,total loss 為每層loss的和
。即文中所謂的Intermediate supervision,每層的gradient都有部份來自於當層的loss。End-to-end learning。
TODO: 不懂如果用了上面的loss卻不intermediate supervision的方法