1. 程式人生 > >2D多人關鍵點--《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》

2D多人關鍵點--《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》

《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》
 來源:CMU,OpenPose開源多人姿態模型
 原始碼:https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation

 本文雖然是2016年的論文,但其文中提出的方法還是很值得學習和借鑑的

文章目錄

0 摘要

 本文提出了一種區域性關聯場(PAF,Part Affinity Fields)方法,來實現自底向上(bottom-up)多人2D姿態估計
PAF:它是一種將單個人的各個區域性進行關聯;即同一個人的相鄰部位關聯度強(更具親和力),如肘部和腕部,不同人之間的部位關聯度弱,甚至沒有關聯,並用一個2D向量場來表示;且將這種關聯關係同關鍵點一起放入到CNN網路進行學習,從而達到端到端的自底向上的多人姿態估計
 在COCO 2016 keypoints challenge多人場景上,大大超越了之前的方法,效率和效果都取得非常大的進步

1介紹

 1)單人場景,略過
 2)多人場景,難點
  A)每張影象上的人數未知,位置不定,佔比不定
  B)人與人之間,相互接觸,相互遮擋,部分交叉等增加了關聯難度
  C)人數越多,複雜度越大,實時性難保證
 3)多人場景,自上向下(top-dwon
  也就是先用目標檢測手段,定位每個個體,將問題轉化為單人場景;這種方法有2個隱患:
  A)對目標檢測要求高,且有時間開銷
  B)人數較多時,每個人都需要跑一次前向網路,時間開銷太大
 4)多人場景,自底向上(bottom-up)
  類似於本文的方法,CNN網路可能複雜度高,但不會因人數多少增加時間開銷,也不用目標檢測

 文中對這兩種方案進行了時間開銷對比,如下圖:

在這裡插入圖片描述

2 PAF

2.1 Overall pipeline

在這裡插入圖片描述

 首先,輸入 w h w * h 影象Fig. 2a,2D關鍵點Fig. 2e;
 然後,two-branch CNN:
 1)一路預測身體關鍵點的2D置信度對映圖集S(part confidence map),如Fig. 2b
S = ( S 1 , S 2 , . . . , S J ) S j R w h S = (S_1,S_2,...,S_J),S_j \in \mathbb{R}^{w * h}
  J表示對映圖個數,一般為關鍵點個數+1(背景)
 2)另一路預測區域性關聯場對2D向量場集L(part affinity vector field),如Fig. 2c
L = ( L 1 , L 2 , . . . , K C ) S c R w h 2 L = (L_1,L_2,...,K_C),S_c \in \mathbb{R}^{w * h *2}
  L用來編碼部位之間的關聯程度,對於每個肢體(成對的部位)具有C個向量場;每個點編碼成一個2D向量場Lc,如圖:

在這裡插入圖片描述

  肢體:由關鍵點對組成,如右肘關節和右腕關節,儘管這裡的某些肢體可能不是人的真正肢體;2D向量編碼這個肢體的位置和方向
 最後,通過對置信度對映和關聯場進行貪婪推理得出所有人的關鍵點,如Fig. 2d

2.2 Simultaneous Detection and Association

在這裡插入圖片描述

 如上述所說,本文采用two-branch multi-stage CNN作為最終CNN框架;如上圖,上半部分為關聯場預測網路,下半部分為關鍵點預測網路,並採用多級(stage)級聯方法 ,每級之後,將影象和兩個支流融合到一起供下一級使用;且在訓練過程中,每級都會進行loss監督(中間監督
 用數學式表達框架為:

在這裡插入圖片描述

2.3 Loss Function

 loss function:


在這裡插入圖片描述

 其中,t表示第幾級,
S j ( p ) S^*_j(p) 表示groundtruth part confidence map;
L c ( p ) L^*_c(p) 表示groundtruth part affinity vector field;
 W表示二值mask, W ( p ) = 0 W(p)=0 就表示當前點p缺失(不可見或不在影象中),用來避免訓練時錯誤懲罰
 且在訓練時,增加中間級監督,防止梯度消失(vanishing gradient problem)
 最終loss為:


在這裡插入圖片描述

2.4 Confidence Maps for Part Detection

 理論上每個confidence map是對應groundtruth位置單個畫素響應(為1),其他畫素點位0;但在實際應用中,我們是用高斯函式生成對應groundtruth位置,周圍畫素響應(高斯響應)
 對於單人場景來說,一個響應圖只有一個峰值響應;
 而多人場景,就複雜得多了,一個響應圖中,每個人k對應可見點j都應該有峰值響應:


在這裡插入圖片描述

 在預測階段,通過對個體置信度響應進行max操作和非最大化抑制獲取候選點:


在這裡插入圖片描述

2.5 Part Affinity Fields for Part Association

  如圖:


在這裡插入圖片描述

 1)如上圖中Fig. 5a,給定檢測到身體的候選點(紅色和藍色點),在人數未知情況下,我們如何確定那些點是同一個人的呢???這就是自底向上(bottom-up)多人姿態估計面臨的最大挑戰
 2)面對這樣一個問題,我們就需要一個描述部位(點)之間關係的一種度量,一種表示方法,來判定;
 3)測量關聯的一種可能方法是檢測肢體上每對點之間的額外中點,並檢查候選點之間的關聯,如圖Fig. 5b所示;然而,當人們聚集在一起時,這些中點很可能支援錯誤的關聯(如圖Fig. 5b中的綠線所示),這種錯誤的關聯是由表示中兩個侷限引起的:
  (1)它只編碼每一肢體的位置,而沒有方向;
  (2)將肢體的支撐區域縮小到單點(中點)。
 4)針對一些侷限,本文提出了一種新的表示方法,即區域性關聯場(PAF),它將整個肢體區域作為支撐域,並同時編碼位置和方向資訊,如圖Fig. 5c;對於屬於肢體的每個畫素,PAF對從肢體的一點到另一點的方向進行編碼,每種型別的肢體都有一個2D向量場來表示。

向量場表示


在這裡插入圖片描述

 1)上圖表示一個肢體, x j 1 , k x_{j1,k} x j 2 , k x_{j2,k} 表示影象種第k個人的肢體c中的兩個groundtruth點j1和j2
 2)點p是肢體上的點,當然它有界定範圍:


在這裡插入圖片描述

  其中:
   v = ( x j 2 , k x j 1 , k ) / x j 2 , k x j 1 , k 2 v=(x_{j2,k}-x_{j1,k})/||x_{j2,k}-x_{j1,k}||_2 表示肢體單位方向向量
   v v_{\bot} 表示v的垂直向量
   l c , k = x j 2 , k x j 1 , k 2 l_{c,k} = ||x_{j2,k}-x_{j1,k}||_2 表示肢體長度
   σ l \sigma_l 表示肢體寬度
 3)則肢體區域的向量場表示為:


在這裡插入圖片描述

 4)最終向量場groundtruth是平均影象中的所有個人:


在這裡插入圖片描述

  其中 n c ( p ) n_c(p) 表示非0點數的平均值
 5)預測階段,我們計算相應向量場上的線段積分來衡量關聯關係;換句話說,我們計算PAF連線候選肢體的線佇列,如候選點 d j 1 d_{j1} , d j 2 d_{j2}


在這裡插入圖片描述

  在實際應用中,我們通過取樣和等間距u值的累加來近似積分。

2.6 MultiPerson Parsing using PAFs

 我們對檢測置信度對映進行非最大抑制操作,以獲取候選點位置的離散集,如圖:


在這裡插入圖片描述

 1)對於每個部位,可能有多個候選項,因為影象中有多個人或誤報(Fig. 6b),這些候選部位定義來大量可能的分支;
 2)我們使用PAF來對這些分支進行評分,如式10,找到這個最有解問題是一個NP-Hard的K維匹配問題;本文中提出來一種貪婪鬆弛方法,它可以持續的產生高質量的匹配,這也得益於PAF進行全域性上下文編碼,擁有很大的接受域
 3)定義 Z j 1 j 2 m n { 0 , 1 } Z_{j_1j_2}^{mn} \in \{0,1\} 來表示候選點 d j 1 m d_{j_1}^m d j 2 n d_{j_2}^n 是否連線,從而我們優化目標就變成找到最優匹配,從可能連線中: Z = { z j 1 j 2 m n : f o r j 1 , j 2 { 1 , . . . , j } ; m { 1 , . . . , N j 1 } ; n { 1 , . . . , N j 2 } } Z = \{z_{j_1j_2}^{mn}: for j_1,j_2\in\{1,...,j\};m \in\{1,...,N_{j_1}\};n\in\{1,...,N_{j_2}\}\}