https://www.infoq.cn/article/6Btg0-1crfmb7svRGa6H
人體骨架是以圖形形式對一個人的方位所進行的描述。本質上,骨架是一組坐標點,可以連接起來以描述該人的位姿。骨架中的每一個坐標點稱為一個“部分(part)”(或關節、關鍵點)。兩個部分之間的有效連接稱為一個“對(pair)“(或肢體)。注意,不是所有的部分之間的兩兩連接都能組成有效肢體。下圖是一個典型的人體骨架舉例。
人體姿態估計有多個應用場景,其中一些應用將在本博客的最后討論。多年來,人們發展出了多種人體姿態估計算法。最早(也是最慢)的方法通常針對圖像中僅有一個人的情景,只估計單個人的姿態。這些方法通常首先識別出各個部分,然后在它們之間形成連接以創建姿態。
自然,這種單人姿態估計不太適用於很多現實生活中的情形,因為在真實情況下往往圖像中包含很多個人。
多人姿態估計
多人姿態估計比單人姿態估計要難一些,因為圖像中的人數以及每個人的位置是未知的。一般來說,我們可以用以下兩種方法之一來解決這些問題:
-
比較簡單的方法是先使用一個人體檢測器,然后再估計檢測器檢出的每個人的關節,進而恢復每個人的姿態。這種方法被稱為自頂向下的方法。
-
另外一種方法是先檢測出一幅圖像中的所有關節(即每個人的關節),然后將檢出的關節連接 / 分組,從而找出屬於各個人的關節。這種方法叫做自底向上方法。
一般情況下,自頂向下的方法比自底向上的方法更容易實現,因為添加檢測算法比增加連接 / 分組算法要簡單得多。很難去評判這兩種方法哪種的整體性能更好,因為這種性能比較的本質是在比較人體檢測器和連接 / 分組算法哪個更好(實際上是沒有可比性的)。
在本文中,我們主要介紹基於深度學習算法的多人人體姿態估計。在下一節中,我們將介紹一些當前比較流行的自頂向下和自底向上方法。
深度學習方法
1. OpenPose
OpenPose(https://arxiv.org/pdf/1812.08008.pdf)是當前最流行的幾種多人人體姿態估計算法之一。OpenPose 大獲成功的一部分原因是它在 GitHub 上開源了其實現代碼(https://github.com/CMU-Perceptual-Computing-Lab/openpose),並配有詳細的說明文檔。
和很多自底向上的方法一樣,OpenPose 首先檢測出圖像中所有人的關節(關鍵點),然后將檢出的關鍵點分配給每個對應的人。下圖展示了 OpenPose 模型的架構。
OpenPose 網絡首先使用前面的幾個網絡層(在上面的流程圖中使用的是 VGG-19),從圖像中提取特征。接下來,這些特征被傳給兩個平行的卷積層分支。第一個分支用來預測 18 個置信圖,每個圖代表人體骨架中的一個關節。第二個分支預測一個集合,該集合中包含 38 個關節仿射場(Part Affinity Fields,PAFs),描述各關節之間的連接程度。
接着,OpenPose 用一連串的步驟來優化每個分支的預測值。使用關節置信圖,可以在每個關節對之間形成二分圖(如上圖所示)。使用 PAF 值,二分圖里較弱的連接被刪除。通過上述步驟,可以檢出圖中所有人的人體姿態骨架,並將其分配給正確的人。針對該算法更詳細的解釋,請參考其論文:
https://arxiv.org/pdf/1812.08008.pdf
和這篇博客:
https://arvrjourney.com/human-pose-estimation-using-openpose-with-tensorflow-part-2-e78ab9104fc8。
2. DeepCut
DeepCut(https://arxiv.org/abs/1511.06645)是一個自底向上的多人人體姿態估計方法。針對人體姿態估計任務,作者定義了以下問題:
-
生成一個由 D 個關節候選項組成的候選集合。該集合代表了圖像中所有人的所有關節的可能位置。在上述關節候選集中選取一個子集。
-
為每個被選取的人體關節添加一個標簽。標簽是 C 個關節類中的一個。每個關節類代表一種關節,如“胳膊”“腿”“軀干”等。
-
將被標記的關節划分給每個對應的人。
上述幾個問題可以被建模為整數線性規划問題(ILP,鏈接:https://en.wikipedia.org/wiki/Integer_programming),從而被一起解決。考慮二值隨機變量的三元組 (x,y,z),其中的二值變量的域如下圖所示:
考慮候選集 D 中的兩個候選關節 d 和 d’,以及類別集 C 中的兩個類 c 和 c’。關節候選項是通過 Faster RCNN(https://arxiv.org/abs/1506.01497)或稠密 CNN 獲得的。現在,我們有下述聲明:
-
如果 x(d,c) = 1,代表候選關節 d 屬於類別 c。
-
同樣,x(d,d’) = 1 代表候選關節 d 和 d’屬於同一人。
-
作者還定義了 z(d,d’,c,c’) = x(d,c) * y(d,d’)。如果上式值為 1,則代表候選關節 d 屬於類別 c,候選關節 d’屬於類別 c’,且候選關節 d 和 d’屬於同一人。
最后一個聲明可以用於划分不同人的姿態。顯然,上述聲明可以表示成關於 (x,y,z) 的線性方程組。這樣一來,整數線性規划(ILP)的模型就建立好了,多人姿態估計就可以化為解這組線性方程的問題。想要了解線性方程組的具體形式和更詳細的分析,請參見原論文(鏈接:https://arxiv.org/pdf/1511.06645.pdf)。
3. RMPE(AlphaPose)
RMPE(https://arxiv.org/abs/1612.00137)是一個流行的自頂向下姿態估計算法。該論文的作者認為,自頂向下方法的性能通常依賴於人體檢測器的精度,畢竟人體姿態估計是在檢測器檢出的框的區域內進行的。因此,錯誤的定位和重復的候選框會使姿態檢測算法的性能降低。
為解決這一問題,作者提出了使用對稱空間變換網絡(Symmetric Spatial Transformer Network,SSTN)來從不准確的候選框中抽取高質量的單人區域。然后,作者使用了一個單人的姿態估計器(Single Person Pose Estimator,SPPE)來從抽取到的區域中估計此人的姿態骨架。接着,作者用一個空間逆變換網絡(Spatial De-Transformer Network,SDTN),將估計出的姿態重新映射到圖像坐標系下。最后,用一個參數化的姿態非極大抑制(Non-Maximum Suppression,NMS)方法來處理重復預測的問題。
另外,作者還引入了一種姿態候選生成器(Pose Guided Proposals Generator),來增廣訓練樣本,以便更好地訓練 SPPE 和 SSTN 網絡。RMPE 的顯著特征是,該方法可以推廣到任意的人體檢測算法和 SSPE 的組合。
4. Mask RCNN
Mask RCNN(https://arxiv.org/abs/1703.06870)是一個非常流行的語義和實例分割架構。該模型可以同時預測圖像中多個物體的候選框位置及分割其語義信息的 mask。該模型的基礎架構很容易被擴展到人體姿態估計上來。
其基本架構首先使用 CNN 從圖像中提取特征圖。這些特征接着被用於一個區域候選網絡(Regin Proposal Network, RPN)來為各個對象生成候選框。候選框會從 CNN 提取出的特征圖中選取一個區域。由於候選框可能會有多種尺寸,網絡接下來會采用一個層,稱為 RoIAlign,用來減小特征圖的尺寸,使它們具有相同的尺寸。現在,抽取出的特征被傳給平行的 CNN 分支,用來輸出候選框和分割 mask 的最終預測。
我們現在主要關注一下分割的分支。假設我們圖像中的對象可以屬於 K 個類別中的一個。分割分支輸出 K 個尺寸為 m*m 的二值 mask,每個二值 mask 代表只屬於該類別的所有對象。我們可以將每種特征點建模為一個類別,然后將姿態估計任務看作一個分割任務,從而提取圖像中每個人的特征點。
與此同時,可以訓練一個對象檢測算法來確定每個人的位置。通過組合每個人的位置信息和他們的特征點集合,我們可以得到圖像中每個人的人體骨架。
該方法和自頂向下方法比較類似,但不同的是,其人體檢測步驟和關鍵點檢測步驟是同時進行的。換句話說,人體檢測步驟和關鍵點檢測步驟是相互獨立的。
5. 其他方法
多人人體姿態估計是一個很大的問題,有許多其他方法。限於篇幅,我們只選擇了其中的幾種方法在本文中加以介紹。如需要獲取更詳盡的方法列表,請參見以下鏈接:
-
人體姿態估計的優秀方法(Awesome Human Pose Estimation,https://github.com/cbsudux/awesome-human-pose-estimation)
-
論文及代碼(Papers with Code,https://paperswithcode.com/sota/multi-person-pose-estimation-on-mpii-multi)
應用
姿態估計可以應用在很多領域。接下來就列舉其中的一些。
1. 動作識別
追蹤一段時間內一個人姿態的變化也可以應用在動作、手勢和步態識別上。在這方面有好幾個應用場景,包括:
-
用於檢測一個人是否摔倒或疾病
-
用於健身、體育和舞蹈等的自動教學
-
用於理解全身的肢體語言(如機場跑道信號、交警信號等)
-
用於增強安保和監控
2. 運動捕捉和增強現實
人體姿態估計的一個有趣應用是 CGI(computer graphic image,一種電影制造技術)應用。如果可以檢測出人體姿態,那么圖形、風格、特效增強、設備和藝術造型等就可以被加載在人體上。通過追蹤人體姿態的變化,渲染的圖形可以在人動的時候“自然”地與人“融合”。
姿態估計的一個很好的可視化例子是 Animoji(https://www.wired.com/story/all-the-face-tracking-tech-behind-apples-animoji/)。雖然在 Animoji 中只是跟蹤了人臉的結構,但這個技術可以被擴展到人體關鍵點上。同樣的概念可以被用於渲染增強現實(AR)元素,使其能夠模仿人的運動。
3. 訓練機器人
除了手動為機器人編程、讓它們跟隨特定的路徑,我們也可以讓機器人跟隨一個做特定動作的人體骨架。人類教練可以僅通過演示特定的動作,來教機器人學習這一動作。接着,機器人就可以計算如何移動自己的活動關節,來進行相同的動作。
4. 控制台中的運動追蹤
姿態估計的一個有趣應用是在交互游戲中追蹤人體對象的運動。比較流行的 Kinect 使用 3D 姿態估計(采用 IR 傳感器數據)來追蹤人類玩家的運動,從而利用它來渲染虛擬人物的動作。
結論
人體姿態估計領域發展迅速,因此可以應用在越來越多的任務上。另外,相關領域的研究,例如姿態追蹤,可以大大增強姿態估計的應用范圍。本文列舉的概念並不全面,但介紹的幾個算法和應用較為典型,適合入門者閱讀。
本文首發於 medium 平台,英文原文鏈接:https://medium.com/beyondminds/an-overview-of-human-pose-estimation-with-deep-learning-d49eb656739b