Openpose 人體姿態辨識

WKWang
Taiwan AI Academy
Published in
6 min readJul 24, 2020

論文名稱:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

原始論文連結:https://arxiv.org/abs/1812.08008

這篇主要講解 OpenPose的原理及成果,以下分成幾個段落

  1. 前言
  2. 任務目標
  3. 方法
  4. 結論

1. 前言

人體姿態辨識在電腦視覺中一直都是重要的分支,在 paperwithcode 的網站上的任務中一直都有在更新許多現有的比賽與模型。

可以參考下列網站:

詳見 :https://paperswithcode.com/task/pose-estimation

2. 任務目標

主要的任務目標為

  1. 在一張2D圖片(或影像中的一個frame)偵測多人的姿態
  2. 解決多人重疊的問題
  3. 達成即時偵測(real-time 30fps以上)

主要關鍵字大概是:2D圖片、多人、即時

因為一個畫面中只有一個人與多人的情況下,模型的制定方式會差很多,看完這篇論文大概就會有感覺了,那麼來討論一下多人的情況會遇到什麼些難題吧!

在畫面中只有單人的情況下可以看到 (圖1-a) 中的人體點位都被預測出來了,那只要將這些點位相連就是人的軀幹了,也就是 (圖1-b)

圖1

那如果是 (圖2) 呢?

當圖片中有多人的時候,那身體就會有多個候選,在(圖2) 中,每個紅點都要連到其中一個藍點,成為一個軀幹,但是如果是沒有一個良好的策略,每個紅點則有三個藍色的候選,三個人就共有3*3=9種選擇方法。

圖2

3. 方法

那圖片怎麼去預測多人呢?本文提出了一種想法,如果每個人都可以預測出身上每個關節點,那只要多預測出這個關節應該如何連到下一個關節,也就是預測該往哪個方向連線,那就可以把肢體預測出來了,見(圖3)。

圖3. 在關節點中多預測連線

這種連線的方法在文章中稱為 PAF (Part Affinity Fields),後面會介紹這個向量怎麼得到的。

流程圖:

圖4. 流程圖

其中 (圖4.a) 為輸入圖片,接著由模型同時預測(圖4.b)關節點的Confidence Maps和(圖4.c)的PAF向量,接著(圖4.d)將第二步驟的預測做後處理,最後得到整體的姿態(圖4.e)。

Part Affinity Fields for Part Association (PAF):

圖5. PAF 設定
圖6. PAF 中 p點不等式

這張圖中 Xj1,k 及 Xj2,k 為原始圖中label好的關節點,k 代表第k張圖。
V 為Xj1到Xj2的向量,另一個為法向量。
p 為圖上任一點。

假設 p 點在這個手臂之中,那這個點的值為 v, 也就是v向量,
如果 p 點不在手臂中,那這個點的值設定為0。

如何去找到 p 點是否在手臂中呢?先找到 p 點,接著如果滿足(圖6)的不等式,則 p 點的值為 v。

也就是 Xj1,k 到 p 的向量,分別對手臂長及手臂寬做投影的值,要分別小於手臂長及寬。

模型架構:

圖6. 模型架構

模型可以分成兩個顏色的區塊
藍色:用來預測 PAF
橘色:用來預測 Confidence Maps
紫色底的為 Convolution Block,借鑑於 Densenet 的架構把權重往前送

另外提一下,網路上有其他圖跟這張架構圖有些不一樣,原因是作者後來更新一次模型架構,目前這版為最新版本。

一開始送進去的 input 為VGG19的前十層產出的 Feature maps,最後箭頭連出來的部分會在連到頭,當作下一次訓練的 input,有種遞迴的感覺。

在這裡分別代表藍底與橘底神經網路都用了L2 Loss,其中的ti, c等等的代表前一段傳進來的stage等等。

圖7. 不同Stage的狀態

從(圖7)可以看得出來,在不同的Stage下,越後面的Stage呈現出來的值會越深。

簡言之,用上述的模型架構,把圖形的PAF算出來,接著設定好loss,就能開始訓練網路,不過還有一個比較難的是(圖4.d)到(圖4.e)的過程,原文說將這些組合起來是一個 NP-hard問題,文章中有提出一個方法來加速這個過程,這部份可以詳細的看原文。

4. 結論

論文中有給了不少預測出來的圖片比較,以及如何擴展,例如加入不同的資料集,就可以增加預測的點,例如(圖8.c)就是從(圖8.a)+(圖8.b)來的,原本的身體關節加上額外的腳底資訊,能夠增加預測的點之外,還能幫助如(圖8.c)右腳關節的部分,預測的更準確了。

圖8

同時也可以應用在其他的案例上,例如車子骨架的預測:

圖9

論文也很佛心的給了不少他們做出來的失敗案例,例如角度或是遮蔽的時候會出現一些失敗案例:

圖10

還有更多的案例可以在原論文中看到,官方的github也有釋出如何訓練及套用,可以到作者群的官網看看唷

github連結:https://github.com/CMU-Perceptual-Computing-Lab/openpose

--

--