CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark 論文解讀

paper title:CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
paper link:https://arxiv.org/pdf/1812.00324.pdf
project:https://www.mvig.org/research/alphapose.html
oral or demo video:https://www.youtube.com/watch?v=fNlMGWm7bbk&pbjreload=10 [37:16]
github:https://github.com/MVIG-SJTU/AlphaPose
conf & anthor:CVPR 19, Jiefeng Li et al.
arXiv submit v1: 2018.12

姿態估計系列:

主要內容:

這篇文章是AlphaPose項目的文章之一,提出了一種密集場景下的人體姿態估計方法,並創建了一個密集場景下人體姿態估計的數據集CrowdPose。文章中主要是用過全局優化的方法來提高密集場景下人體姿態估計的準確性。
由於密集場景下的人靠的很近,很容易出現關節點的誤識別(連接),SPPE可以看作是一個局部的優化,通過全局的優化能夠減少誤匹配的情況。比如在A人體的proposal中有A的所有人體關節點和B的leftKnee和leftFoot兩個關節點,由於靠的很近,在SPPE的檢測結果中,B的leftFoot的置信度可能比A的真實的leftFoot的置信度還高,那直接根據SPPE的結果就會選擇實際上是B的leftFoot作爲A的leftFoot的預測值。這篇文章在每個人體proposal進行SPPE之後,進行全局優化,因爲B的letfFoot在其本身的proposal預測爲B的letfFoot的置信度較高,那麼在全局優化的步驟中,就有可能將A的leftFoot預測爲其真實的leftFoot,儘管它的置信度是較小的,但是全局優化彌補了這一點。後面詳細介紹全局優化的方法。

網絡結構:

文章提出的方法的主要流程如下(圖片來自原論文),主要包括two-stage的人體姿態估計和全局關節點連接優化。文中主要側重全局關節點連接優化部分。
crowdPose pipeline

下面主要介紹human-joint圖的建立和優化過程。如下圖,一共檢測到兩個人的三個proposal,紅色和黃色是同一個人的proposal,各色實現圓圈表示檢測到的真實屬於當前人的關節(這裏只畫了左手臂上的三個關節點),虛線圓圈表示檢測到的非真實屬於當前人的關節點,各色方塊表示human節點。
human-joint graph

1.Joint Candidate Single Person Pose Estimation(JC-SPPE)
在密集人羣的場景中,某個人的boundingbox中常常會包含其他人的人體關節點,文中將當前檢測的人的關節點稱爲目標關節點,其他包含在圖像中但是不屬於這個人的關節點稱爲干擾關節點。對於這兩類關節點,不是直接抑制干擾關節點,而是對這兩類關節點在結果中輸出不同的強度,那些干擾關節點可以用於其他人的姿態估計,從而得到一個全局的優化。
一般的抑制干擾關節點的SPPE對干擾關節點的groundtruth全部設置爲零,而在JC-SPPE中爲了讓干擾關節點也有一個較小強度的輸出,將他們也算到損失函數中。在第i個人的boundingbox中有K個關節點,包括目標關節點和干擾關節點。第k個關節點的輸出的heatmap表示爲PikP_i^k,groundtruth中目標關節點和干擾關節點分別表示爲TikT_i^kCikC_i^k,均爲高斯分佈。那麼這第i個的boundingbox在JC-SPPE中的損失函數表示爲:
Lossi=1Kk=1KMSE[Pik,Tik+μCik] Loss_i=\frac{1}{K}\sum_{k=1}^{K} MSE[P_i^k,T_i^k+\mu C_i^k]
其中μ\mu通過交叉驗證設置爲0.5;

2.Person-Joint Graph
這一步主要是構建人-關節點構成的圖。
(1)joint node build
一方面,密集場景下,A人的部分關節點會出現在B的proposal中並被檢測出來,另一方面,A的關節點在自己的proposal中也會被檢測出來,這樣同一個groundtruth關節點會有兩個檢測結果(當SPPE的檢測性能較好的時候,這兩個檢測的關節點的位置是很近的),對這些屬於同一個關節點的根據距離進行合併;另一方面,一個人通常會有多個proposal,分別會有各自的關節點檢測結果,也進行合併,如上圖中的紅色和黃色實線圓圈。
對於檢測到人體的第k個關節點的兩個預測輸出的位置p1(k)p_1^{(k)}p2(k)p_2^{(k)},合併的規則是:
p1(k)p2(k)2<min{u1(k),u2(k)}δ(k) ||p_1^{(k)}-p_2^{(k)}||_2<min\{u_1^{(k)},u_2^{(k)}\}\delta^{(k)}
其中:

  • u1(k),u2(k)u_1^{(k)},u_2^{(k)}分別表示heatmap上兩個檢測的關節點的高斯響應的尺寸,由方差控制;
  • δ(k)\delta^{(k)}是方差控制量,直接使用COCO數據集中的值,具體如下:
keyponits hip ankles knees shoulders elbows wrists ears nose eyes
deviation 0.107 0.089 0.087 0.079 0.072 0.062 0.035 0.026 0.025

合併後可以得到整張圖像上的關節點的表示vjkv_j^k,表示檢測結果中第k個(類)的關節點的第j個關節點(即第k類關節點一共有j個,如圖像中leftFoot關節點一共有三個,並且這裏的關節點是指合併後的關節點)。得到集合J=vjk:for k{1,..,K},j{N1,...,NK}J={v_j^k: for \ k \in \{1,..,K\},j \in \{N_1,...,N_K\} }

(2)human node build
每個human proposal對應一個human node,得到集合H=hi,i{1,...,M}H={h_i, i \in \{1,...,M\}},M爲圖像中的human proposal的樹木,hih_i表示第i個human proposal的human node。

(3)graph construct
建立好joint node和human node之後就可以建立它們之間的連接,邊表示爲ei,j(k)e_{i,j}^{(k)},邊的權重爲wi,j(k)w_{i,j}^{(k)},值爲檢測的關節點的置信度,得到邊得集合爲E={ei,j(k),i,j,k}E=\{e_{i,j}^{(k)}, \forall i,j,k\}建立圖:
G=((H,J),E) G=((H,J),E)

3.Global Optimizing Association
建立上述的圖G之後,通過全局優化得到最優的human-joint連接結果,如上圖中的連線。
優化過程最大化:
maxdG=maxdwi,j(k)di,j(k) max_dG = max_d\sum{w_{i,j}^{(k)}*d_{i,j}^{(k)}}
其中d()d()表示連接關係,取值爲0,1{0,1};
優化中滿足一下約束關係:
jdi,j(k)1;i{1,...,M}k{1,...,K} (cons.1)idi,j(k)1;j{1,...,NK}k{1,...,K} (cons.2) \sum_{j}d_{i,j}^{(k)} \le 1 ; \forall i\in\{1,...,M\} \forall k \in \{1,...,K\} \ (cons.1) \\ \sum_{i}d_{i,j}^{(k)} \le 1 ; \forall j\in\{1,...,N_K\} \forall k \in \{1,...,K\} \ (cons.2) \\
上面的約束cons.1表明第k類關節點的一個joint只能且只能最多與一個human連接;約束cons.2表明一個human能且只能最多與一個第k類關節點連接。由於約束cons.1,會使得同一個人的冗餘的proposal的human node之間相互競爭,一些poor(比如只檢測到人體的上半身)的人體proposal的candidate joint的置信度會較低,會在競爭中出於劣勢,最後被無法完成人體關節點連接,被去掉,實現了NMS的功能
上述優化可以拆分爲每類關節點的子圖分別進行優化。

論文實驗和結果:

在人體姿態估計方面使用YOLOv3進行人體proposal提取,hourglass進行人體關鍵點檢測。全局關節點連接如前所述,在crowdPose數據集上的結果如下(圖片來自原論文):
crowdPose experiment result

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章