Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields(理解)


0 - 人體姿態識別存在的挑戰

  • 圖像中的個體數量、尺寸大小、位置均未知
  • 個體間接觸、遮擋等影響檢測
  • 實時性要求較高,傳統的自頂向下方法運行時間隨着個體數越多而越長

1 - 整體思路

  整個模型架構是自底向上的,先識別出關鍵點和關節域,然后通過算法組合成個體的姿勢圖。

1.1 - 求所有關鍵點(頭部,肩膀,手肘,手腕...)

  • 第一個CNN將原圖所為輸入,輸出熱圖(每一個熱圖包含一種特定關鍵點)
  • 第二個CNN將第一個CNN的輸出(熱圖)和原圖作為輸入,輸出熱圖

  循環直到收斂。示意圖如上圖(b)所示。

1.2 - 求所有關聯區域

  • 第一個CNN將原圖作為輸入,輸出是熱圖(每一個熱圖包含某一種特定的連接區域)
  • 第二個CNN將第一個CNN的輸出(熱圖)和原圖作為輸入,輸出熱圖

  循環直至收斂。示意圖如上圖(c)所示。

(注:上述的熱圖是為了便於了解整體流程,其對應於下面詳細描述的置信圖或者PAFs)

1.3 - 根據關鍵點和關聯區域進行矢量連接

  由上述兩步得到的關鍵點和關聯區域,而后需要依據關聯區域將關鍵點連接以組成人體真正的骨骼結構。如果全局的每對點都試驗一遍然后找到最優的划分和組合結構,是一個NP難問題。因此作者提出了以一個最小限度的邊數量來獲得個體姿勢的生成樹圖(用了二分圖+匈牙利算法等),在保證不錯的准確度的同時,大大減少了復雜度,提高了實時性。

2 - 具體方法

  將輸入圖像通過上述兩個分支,得到關鍵點(confidence maps,集合$S$)和關聯區域(PAFs,集合$L$)。而后便是一個匹配問題,將其划分為二分圖再運用匈牙利算法使得邊權最大從而構出個體姿態。

2.1 - 架構

  原圖經過VGG-19得到F(feature maps),然后經過上下分支,每個分支有t個階段(表示越來越精細),每個階段將feature maps進行融合。

2.2 - 損失函數定義

  通過不同損失函數引導不同分支做不同預測任務。

$$f_S^t = \sum_{j=1}^{J}\sum_{P}W(p)\cdot \left \| S_j^t(P)-S_j^*(p) \right \|_2^2$$

$$f_L^t = \sum_{c=1}^{C}\sum_{P}W(p)\cdot \left \| L_c^t(P)-L_c^*(p) \right \|_2^2$$

$$f=\sum_{t=1}^{T}(f_S^t+f_L^t)$$

2.3 - 個體區域檢測置信圖

  置信圖由ground truth的關鍵點生成,每一個置信圖都是對特定關鍵點的2D表示(如果圖像中有$j$個對應關鍵點可見,則應該有$j$個峰值)。置信圖可以理解為圖像該點屬於對應關鍵點的概率。

  對於第$k$個人產生部位$j$的置信圖蔓延程度$S_{j,k}^*(p)=exp\left (-\frac{\left \| p-x_{j,k} \right \|^2_2}{\sigma^2}\right )$,其中$p$表示圖像中的坐標,那么總的置信圖(多個個體)為$S_j^*(p)=\mathop{max}\limits_{k}S^*_{j,k}(p)$。

2.4 - PAFs(部位聯系場)

        

  PAFs是一個2D矢量場,保留了位置和方向。如果坐標$P$在這個肢體上面,則值為$j_1$指向$j_2$的單位矢量,否則為零向量。

$$L_{c,k}^*(p)=\begin{cases} v\ if\ p\ on\ limb\ c,k\\ 0\ otherwise \end{cases}$$

  其中,對應的單位向量由下式得到:

$$v=(x_{j_2,k}-x_{j_1,k})/\left \| x_{j_2,k}-x_{j_1,k} \right \|$$

  通過下式定義肢體上的點:

$$0 \leq v \cdot (p-x_{j_1,k}) \leq l_{c,k} \ and \ \left | v_{\perp} \cdot (p-x_{j_1,k}) \right | \leq \sigma_l$$

  其中,肢體寬度$\sigma_l$是像素級上的距離,肢體長度$l_{c,k}=\left \| x_{j_2,k}-x_{j_1,k} \right \|_2$,並且$v_{\prep }$是正交於$v$的向量。

  一張圖像中肢體$c$的PAFs通過下式計算:

$$L_c^*(p)=\frac{1}{n_c(p)}\sum_{k}L_{c,k}^*(p)$$

  (此處存疑問:多個人的PAFs必定不同,這樣子平均難道不會削弱精確度嗎?還是因為這種情況很少出現而做得一個滿足模型簡易性的讓步?)

  根據預測出來的PAFs沿着候選區域計算兩個關鍵點之間的線積分。對於兩個候選部位位置$d_{j_1}$和$d_{j_2}$,我們從PAFs中取樣,$L_c$表示的是沿着線段去衡量它們間聯系的置信度:

$$E=\int_{u=0}^{u=1}L_c(p(u))\cdot \frac{d_{j_2}-d_{j_1}}{\left \| d_{j_2}-d_{j_1} \right \|_2}du,\ (10)$$

  其中$p(u)$是在兩個身體部位$d_{j_1}$和$d_{j_2}$間插入的位置:

$$p(u)=(1-u)d_{j_1}+ud_{j_2}.\ (11)$$

  實際上,我們通過抽樣和求和等間距的$u$的值來近似積分。

2.5 - 多人PAFs

  如果圖像中有多個個體,那么識別出來的多個關鍵點需要划分為多個個體,算法的目標事找到所有最佳的關聯,用如下集合表示:

$$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}\}\}$$

  考慮一對關鍵點$j_1$和$j_2$(如脖子、右臂)組成的肢體$c$,可以抽象層二分圖問題,其中節點為候選集合,邊的權重由上面積分公式計算,二分圖匹配選擇最大權重的邊,使得沒有共享結點。

$$\begin{matrix}\mathop{max}\limits_{Z_c}E_c=\mathop{max}\limits_{Z_c}\sum_{m \in D_{j_1}}\sum_{n \in D_{j_2}}E_{mn}\cdot z_{j_1j_2}^{mn},\ (12)\\s.t.\ \forall m \in D_{j_1}, \sum_{n \in D_{j_2}}z_{j_1j_2}^{mn} \leq 1,\ (13)\\\forall n \in D_{j_2}, \sum_{n \in D_{j_2}}z_{j_1j_2}^{mn} \leq 1,\ (14)\end{matrix}$$

2.6 - 兩個松弛(還沒理解透,待補充)

  • 選擇一個最小限度的邊數量去獲得一個個體姿勢生成樹概要而不是使用全圖
  • 進一步分解匹配問題為一個集合的二分圖匹配子問題並且獨立地在相鄰樹解決匹配問題

3 - 結果

  准確率高,實時性好。且貪心策略可行,效率高很多,效果也更好。

  

  自底向上方法的運行時間幾乎不隨個體數量的增加而增加。運行時間主要包括兩個部分:(1)CNN處理時間,其運行復雜度為$O(1)$而不管什么數量的個體;(2)多個體解析時間的運行復雜度為$O(n^2)$,其中n表示個體數量。然而,解析時間並不會很是影響整體時間,因為它比CNN處理時間小了兩個數量級,例如,對於9個個體,解析用了0.58ms而CNN用了99.6ms。我們的方法對於有19個個體的視頻達到了8.8fps的速度。

         

4 - 存在挑戰

 

  我們的方法的准確率低於對較小尺度($AP^M$)的個體的自頂向下方法。其原因是我們的方法需要處理在所有個體在一張圖片的一個對焦中的更大的范圍尺度。相反,自頂向下方法能夠將每一個檢測區域放縮到一個更大的尺寸因此相比小尺度受到更少的影響。

5 - 補充知識點

5.1 - 非極大值抑制

  • 將所有框按照得分排序,選中最高分的框
  • 遍歷其它框,如果和當前最高分框的重疊面積(IOU)大於一定閾值,刪除之
  • 從未處理的框中繼續選擇得分最高的,重復上述過程

  最后獲得各個待檢測區域最佳的檢測框。

5.2 - 匈牙利算法

  在我的另一篇博客中有詳細解析。

6 - 參考資料

https://blog.csdn.net/yxr403614258/article/details/77977330

 http://www.bubuko.com/infodetail-2691352.html

https://www.cnblogs.com/CZiFan/p/9708746.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM