0 - Abstract
我們提出了一種方法去在一張圖片中有效地識別多個人體的2D姿勢。這個方法使用了一個無參數表示法,我們將其叫為Part Affinity Fields(PAFs),其是去在圖片中根據個體識別身體各部分的聯合。這個架構編碼了全體信息,並且允許一個貪婪的從底向上的解析步驟,這在實現實時性能的時候有着高度的精度而無須考慮圖像中個體的數量。這個架構被設計成使用了兩個分支的相同序列預測過程,從而來聯合學習部分定位以及他們的聯系。我們的方法在the inaugural COCO 2016 keypoints challenge中首次提出,並且不管在性能還是有效性上都超過了之前在MPII Multi-Person基准上的最佳方法。
1 - Introduction
人體2D姿勢評估是定位解剖學上關鍵點或者部分的問題,其中尋找個體的身體部位被高度廣度。在圖像中推測多個人,特別是社群參與的個體,顯示出了一個獨特的挑戰集合。首先,每一張圖片可能包含不確定數目的人,並且這些人能夠以各種尺寸出現在任何位置。其次,人與人之間的交互將產生復雜的空間推理,由於接觸、咬合和肢體的關節,使得各部分的聯系變得困難。第三點,運行時復雜度隨着圖片中個體數量的增加而變得更加復雜,從而使得做好實時性能是一個挑戰。
常見的方法是運用一個人物檢測器並且對於每一個檢測對象執行單人的姿勢評估。這種自頂向下的方法直接利用已有的技術來做單人姿勢評估,但是需要前期的保證:如果人物檢測器失敗了(因為它很容易在人物接近時候失誤),那么檢測結果中將沒有可以恢復本源的方法。更進一步,這些自頂向下方法的運行時間與人物的數量成比例:對於每一個檢測,一個簡單的人物姿勢評估器需要運行,如果那里的人物越多,那么需要的計算花銷越多。與之相反,自底向上方法是吸引人的,因為他們提供了早期結果的魯棒性並且具有使得圖片中人物數量與運行時間復雜性解耦合的潛力。並且,自底向上方法不用直接使用來自別的身體部分以及別的個體的全局信息。實際上,之前的自底向上方法不能保證效率的提高,因為最后的解析需要代價高昂的全局推理。例如,Pishchulin等人提出的種子工作,提出了一種聯合了標簽部分檢測候選以及將它們聯系到個體上的自底向上的方法。然而,在一個全連接圖上解決整數線性規划問題是一個NP難問題,並且其平均處理時間大約需要幾小時。Insafutdinov等人結合基於ResNet的有效的部分檢測器以及圖像從屬成對分數(image-dependent pairwise scores)構建模型,極大的提高了運行效率,但是這個方法對每張圖片的處理時間仍然需要幾分鍾,這是受限於部分檢測器的數量。成對表現(pairwise representations)在[11]中使用了,其很難做精確的回歸,因此需要獨立的邏輯回歸。
在這篇文章中,我們提出了一個用於多人體姿勢評估的在多個公開基准上有着當前最佳准確率的有效方法。我們提出第一個利用Part Affinity Fields(PAFs)表示自底向上聯系分數,這是一個在圖片維度上編碼了四肢的定位和方向的2D集合向量。我們證明了同時推到這些檢測表示以及全局信息聯系編碼有效的允許了使用一個貪婪解析步驟去實現高質量的結果,而只需要少量的計算花銷。我們已經將代碼開源以至於可以完全復現,提出了用於多個體2D姿勢檢測的實時系統。
2 - Method
圖2圖解了我們方法的整體架構。這個系統將一張彩色的尺寸為$w \times h$的圖像作為輸入然后產生關於對於圖像中的每一個個體的聯系關鍵點的2D定位作為輸出(圖2 e)。首先,一個前向網絡同時用來預測身體部位定位的一個2D置信度圖S的集合(圖2 b)以及一個部位密切關系的2D向量域L,其編碼了各個部位之間的關聯度(圖2 c)。集合$S=(S_1, S_2, ..., S_j)$有$J$個置信度圖,每個部位一個,其中$S \in R^{w \times h},j \in \{1...J\}$。集合$L=\{L_1, L_2, ..., L_C\}$有$C$個向量域,每一個一個肢體,其中$L_C \in R^{w \times h \times 2},c \in \{1...C\}$,每一張圖片在定位$L_c$處編碼一個2D向量(見於圖1)。最后,置信度字典和關聯域通過貪婪推理進行解析(圖2 d)從而輸出圖像中所有個體的2D關鍵點。
圖1:上子圖:多個體姿勢評估。屬於同一個個體的身體部位被連接起來。左下子圖:對應於右手腕和右手肘的部位連接域(PAFs)。不同方向用不同顏色編碼。右下子圖:PAFs預測的放大圖像。在域中的每一個像素,一個2D向量編碼了肢體的位置和方向。
圖2:整體架構。我們的方法將整張圖片作為兩個分支CNN的輸入並且聯合對於身體部位檢測的預測置信圖(見於(b))以及部位關系的部位聯合域(見於(c))。解析步驟執行一組雙邊匹配,以關聯身體部位候選(d)。我們最后將它們組合成圖像中全部個體的全身姿勢。
2.1 - Simultaneous Detection and Association
我們的架構見於圖3,同時預測檢測置信度字典以及編碼部位到部位聯系的關聯域。這個網絡被划分為兩個分支:頂部分支,用米黃色標注,預測了置信度字典,而底部分支,用藍色標注,預測關聯域。每一個分支都是一個重復預測架構,跟隨着Wei等人提出的方法,即通過依次重復步驟來調整預測結果,$t \in \{1, ... ,T\}$,在每個階段中都加入了監督。
圖3:兩個分支多步驟CNN的架構。第一個分支中的每一個階段預測置信字典,第二個分支的每一個階段預測PAFs。在每個階段之后,兩個分支的預測結果加上圖片特征將傳遞給下一個階段。
圖像首先通過一個卷積網絡分析(采用VGG-19的前面10層進行初始化以及微調),產生一個集合的特征字典$F$,這個字典被作為每一個分支第一個階段的輸入。在第一個階段中,這個網絡產生了一個集合的檢測置信度圖$S^1=\rho^1(F)$以及一個部位關聯域集合$L^1=\phi^1(F)$,其中$\rho^1$以及$\phi^1$是在第一個階段的CNNs推理。在每一個隨后的階段中,來自前一階段的每一個分支的預測結合原始圖像特征$F$,被結合起來使用來產生確認預測,
$$S^t=\rho^t(F, S^{t-1}, L^{t-1}),\ \forall t \geq 2,\ (1)$$
$$L^t=\phi^t(F, S^{t-1}, L^{t-1}),\ \forall t \geq 2,\ (2)$$
其中$\rho^t$以及$\phi^t$是在步驟$t$中CNNs的推理。
圖4展示了貫穿幾個步驟的置信圖以及關聯域的進行設計。為了引導網絡迭代地在第一個分支中預測身體部位的置信度圖以及在第二個分支中預測PAFs,我們在每一個階段的末尾加入了兩個損失函數,每一個分支各有一個損失函數。我們在預測評估和真實圖和域之間使用一個$L_2\ loss$。這里,我們在空間上分配損失函數的比重以解決有些數據集不能完全給所有個體打上標簽的問題。特別地,在第t個階段,在兩個分支中的損失函數為:
$$f_S^t = \sum_{j=1}^{J}\sum_{P}W(p)\cdot \left \| S_j^t(P)-S_j^*(p) \right \|_2^2,\ (3)$$
$$f_L^t = \sum_{c=1}^{C}\sum_{P}W(p)\cdot \left \| L_c^t(P)-L_c^*(p) \right \|_2^2,\ (4)$$
其中$S_j^*$是真實的部位置信度圖,$L_c^*$是真實的部位聯系向量域,$W$是一個二進制編碼,當在圖像的位置$p$處缺少標注時,$W(p)=0$。該編碼用來避免懲罰在訓練過程中的正確的積極預測。每一個階段的中間監督通過定期補充梯度的方式而被用來解決梯度消失問題。整體的目標如下:
$$f=\sum_{t=1}^{T}(f_S^t+f_L^t)\ (5)$$
2.2 - Confidence Maps for Part Detection
為了在訓練過程中評估公式(5)中的$f_S$,我們從有標注的2D關鍵點來生成真實置信圖$S^*$。每一個置信圖是一個對特定身體部位出現在每一個像素位置的可信度的2D表示。理想上,如果一個個體出現在圖片中,只要其相應部位是可見的,那么在每一個置信圖中將會有一個峰值出現。如果有多個個體出現,那么對於每一個個體$k$的每一個可見部位$j$都有一個相對應的峰值。
我們首先為每一個個體$k$產生個體的置信圖$S_{j,k}^*$。用$x_{j,k} \ in R^2$表示個體$k$的身體部位$j$的真實位置。在$S_{j,k}^*$中的位置$p \in R^2$的值定義為:
$$S_{j,k}^*(p)=exp\left (-\frac{\left \| p-x_{j,k} \right \|^2_2}{\sigma^2}\right )\ (6)$$
其中$\sigma$控制峰值的傳播。網絡預測的置信圖是通過一個最大操作(取最大值)將各個置信圖聚合在一起:
$$S_j^*(p)=\mathop{max}\limits_{k}S^*_{j,k}(p)\ (7)$$
我們采用置信圖的最大值而不是平均值從而使得將近峰值的精確度是不同的,如右圖所示(下圖)。在測試時,我們預測置信圖(如圖4第一行所示),並且通過非極大值抑制來獲得身體部位候選。
圖4:貫穿各個階段的(第一行)右手腕的置信圖以及右前臂PAFs(第二行)。雖然在早先階段中有着左右身體部位和肢體的混淆,但是通過在后續的全局推理中,評估結果得到了改善,如上圖圈出的區域。
2.3 - Part Affinity Fields for Part Association
給定一個集合的身體部位檢測結果(如圖5中紅色和藍色點所示),怎樣在不知道個體數量的情況下去整合它們從而構成各個個體整個身體的姿勢?我們需要一個對於每一對身體部位檢測聯合的置信度衡量,也就是它們屬於同一個個體。一種可能的方案是通過檢測一個額外的在肢體上的每對部位的中點,並且檢查其在候選部位檢測之間的發生率,如圖5b所示。然而,但個體擁擠到一塊(因為他們很容易這樣做),這些中點有可能表達了錯誤的聯系(如圖5b中綠線所示)。這些錯誤聯系會因為兩個表達局限性而增加:(1)它只對每一個肢體的位置編碼,而不對方向編碼;(2)它將一個肢體的支持域縮小到一個簡單的點。
圖5:部位聯系策略。(a)對於兩個身體部位類別的身體部位檢測候選區域(紅點和藍點)以及所有候選連接(灰色線)。(b)使用中點(黃點)的連接結果表示:正確連接(黑線)以及錯誤連接(綠線),綠線其實也滿足發生率約束。(c)使用PAFs的結果(黃色箭頭)。通過肢體的支持,對位置和方向進行編碼,PAFs消除了錯誤關聯。
為了解決這些局限性,我們提出一種新穎的特征表達,叫做part affinity fields,其不僅保存了肢體支持域的位置信息,並且保存了方向信息(如圖5c所示)。對於每一個肢體的部位聯系是一個2D向量域,如圖1d所示:對於區域內的每一個像素,其屬於某一個特定肢體,一個2D向量編碼了肢體中從一個部位到另一個部位的方向。每一個類型的肢體都有對應的聯系域來聯系其關聯的兩個部位。
考慮下圖所示的簡單肢體。讓$x_{j_1,k}$和$x_{j_2,k}$表示個體$k$的肢體$c$的部位$j_1$和$j_2$的真是坐標。如果一個點$p$落在肢體上,則$L_{c,k}^*(p)$的值是一個從$j_1$指向$j_2$的單位向量;對於其它點,向量的值為0。
為了在訓練過程中評估公式5中的$f_L$,我們定義真實部位聯合向量域,$L_{c,k}^*$,對於圖片中的點$p$有:
$$L_{c,k}^*(p)=\begin{cases} v\ if\ p\ on\ limb\ c,k\\ 0\ otherwise \end{cases}\ \ (8)$$
其中,$v=(x_{j_2,k}-x_{j_1,k})/\left \| x_{j_2,k}-x_{j_1,k} \right \|$是肢體的單位向量。肢體上的點集合定義為那些線段在距離閾值內的點,也即是說,那些點$p$可以定義為:
$$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$的向量。
真實部位聯合域平均了圖片中所有個體的聯合域:
$$L_c^*(p)=\frac{1}{n_c(p)}\sum_{k}L_{c,k}^*(p)$$
其中$n_c(p)$是所有$k$個個體中在點$p$不為0的向量的數量(也即是,不同個體肢體重疊的平均像素)。
在測試時,我們通過計算對應PAF的沿着部位坐標的線段的線積分來測量候選部位檢測之間的聯系。也就是,我們測量了預測PAF和通過聯系檢測的身體部位構成的候選肢體間的一致性。特別地,對於兩個候選部位位置$d_{j_1}$和$d_{j_2}$,我們從預測部位聯系域中取樣,$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.4 - Multi-Person Parsing using PAFs
我們在檢測置信圖上運用非極大值抑制來獲得對於候選部位位置的離散集合。對於每一個部位,我們可能有多個候選位置,因為在圖像中有多個個體或者錯誤定位(如圖6b所示)。這些候選部位定義了一個可能肢體的大集合。我們使用在PAF上的線積分運算來給每一個候選肢體打分,由公式10定義。找到最理想的解析存在的問題對應於一個K維度匹配問題,這是一個NP難問題(如圖6c所示)。在這篇文章中,我們提出了一種貪婪松弛策略其始終可以產生高質量的匹配。我們推測其原因是,成對的聯系分數能夠潛在地編碼全局信息,因為PAF網絡有着大的接收域。
圖6:圖匹配。(a)標上部位檢測結果的原圖(b)K分割圖(c)三種構造(d)一個二分圖集合
形式上,我們獲得了對於多個體的一個身體部位檢測候選集合$D_J$,其中$D_J=\{d_j^m\ :\ for\ j \in \{1...J\},m \in \{1...N_j\}\}$,$N_j$是候選部位$j$的數量,並且$d_j^m \in R^2$是對於候選身體部位$j$的第$m-th$個檢測的坐標。這些候選的身體部位檢測仍然需要同同一個體的其它部位相聯系,換句話說,我們需要去找到成對的部位檢測,它們事實上就是在同一個肢體上的。我們定義一個變量$z_{j_1j_2}^{mn} \in \{0,1\}$來表示兩個候選檢測$d_{j_1}^m$和$d_{j_2}^n$是否能夠連接,同時我們的目標是去找到最優的可能連接分配,$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}\}\}$。
如果我們對於第$c$個肢體考慮一個單一部位對$j_1$和$j_2$(例如,頸部和右肩),找到最佳的聯系從而轉換成最大化權重二分圖匹配問題。這種情形如圖5b所示。在這個圖匹配問題中,圖的結點是身體部位候選檢測$D_{j_1}$和$D_{j_2}$,而邊是在成對的候選檢測中的所有可能的連接。此外,每一條邊通過公式10分配權重——the part affinity aggregate。在二分圖中的一個匹配是一個沒有兩條邊共享一個結點的邊選擇的子集。我們的目標是去尋找一個匹配使得對於所有選擇的邊有最大權重:
$$\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}$$
其中$E_c$是從肢體類型$c$中進行匹配的總權重,$Z_c$是肢體類型$c$中的子集$Z$,$E_{mn}$是通過公式10定義的在身體部位$d_{j_1}^m$和$d_{j_2}^n$之間的聯系。公式13和公式14規定了兩條邊不能共享一個結點,即是說,沒有兩個屬於同一種類型的肢體(例如左前臂)共享一個部位。我們能夠使用匈牙利算法去獲得最佳匹配。
就尋找多個體整體身體姿勢來說,需要在K維度匹配問題中測定$Z$。這個問題是NP難問題並且有許多松弛(relaxations)存在。在我們的工作中,我們加入了兩個松弛去做優化,特別是對於我們的維度。首先,我們選擇一個最小限度的邊數量去獲得一個個體姿勢生成樹概要而不是使用全圖,如圖6c所示。其次,我們進一步分解匹配問題為一個集合的二分圖匹配子問題並且獨立地在相鄰樹決定匹配問題,如圖6d所示。我們在3.1部分將展示詳細的比對結果,其證明了最小貪婪推理近似於全局處理而計算開銷只有全局處理的一小部分。其原因在於臨近樹結點的聯系明確地通過PAFs建模,但是其內部,不相鄰的樹結點由CNN明確建模。這個屬性的出現是因為CNN是基於一個大接收域進行訓練的,並且來源於不相鄰樹結點的PAFs也會受已預測的PAF影響。
加入這兩個松弛之后,優化可以簡單分解為:
$$\mathop{max}\limits_{Z}E=\sum_{c=1}^{C}\mathop{max}\limits_{Z_c}E_c.\ (15)$$
我們因此可以獨立地使用公式12-14對於每一個肢體類別獲得肢體聯系候選。有了全部的候選肢體連接,我們就可以將共享同個候選檢測部位的連接綜合起來形成對於多個體的全身姿勢檢測。我們在三個結構上的優化策略比在整個連接圖上的優化快了幾個數量級。
3.2 - Results on the COCO Keypoints Challenge
COCO訓練集包含了超過10萬個個體實例以及總共超過一百萬的標注的關鍵點(也即是身體部位)。測試集合包括了“test-challenge","test-dev"以及"test-standard"三個子集,每一個子集大約有2萬張圖片。COCO驗證定義了object keypoint similarity(OKS)以及在10個OKS閾值上使用平均准確率(AP)來作為主要計算度量標准。OKS在目標檢測中有着與IoU相同的作用。其是通過個體規模以及預測點和GT點之間的距離來計算的。表3展示了在挑戰中最好的幾個結果。值得注意的是,我們的方法的准確率低於對較小尺度($AP^M$)的個體的自頂向下方法。其原因是我們的方法需要處理在所有個體在一張圖片的一個對焦中的更大的范圍尺度。相反,自頂向下方法能夠將每一個檢測區域放縮到一個更大的尺寸因此相比小尺度受到更少的影響。
表4:在COCO驗證集上的比較實驗。
在表4中,我們展示了在COCO驗證集子集上的比較結果,也即是,隨機選取1160張圖片。我們使用了GT邊界框以及一個單一人體CPM,我們使用CPM能夠實現的自頂向下性能上界是62.7%的AP。如果我們使用當前最先進的目標檢測器,Single Shot MultiBox Detector(SSD),性能下降了10%。這個比較表明了自頂向下方法很依賴於個體檢測器。相反,我們的自底向上方法是達到了58.4%的AP。如果我們通過應用一個簡單的人體CPM對從我們方法的結果解析出的每一個評估個體的每一個尺度區域進行確認,我們獲得了2.6%的AP提升。注意到我們只更新了對這兩種方法有足夠優化的預測評估,使得其提高准確率和召回率。我們一個更大的尺度搜索能夠進一步提高我們的自底向上方法的性能。圖8展示了我們方法在COCO驗證數據集上的錯誤。除了背景混淆之外,大部分的錯誤來自於不精確定位。這說明了在空間依賴捕獲上相比身體部位識別有着更大的提高空間。
3.3 - Runtime Analysis
為了衡量我們方法的運行性能,我們收集了有不同數量個體的視頻。每一個原始幀的尺寸為$1080 \times 1920$,在測試時候為了適應GPU的內存將其放縮到$368 \times 654$。實時分析在有着一塊NVIDIA GeForce GTX-1080 GPU的筆記本上進行。在圖8d,我們使用了個體檢測以及單一個體CPM作為自頂向下的代表方法的與我們的方法進行比較,其運行時間大致和圖片中出現的個體數量成比例。相反,我們的自底向上方法的運行時間幾乎不隨個體數量的增加而增加。運行時間主要包括兩個部分:(1)CNN處理時間,其運行復雜度為$O(1)$而不管什么數量的個體;(2)多個體解析時間的運行復雜度為$O(n^2)$,其中n表示個體數量。然而,解析時間並不會很是影響整體時間,因為它比CNN處理時間小了兩個數量級,例如,對於9個個體,解析用了0.58ms而CNN用了99.6ms。我們的方法對於有19個個體的視頻達到了8.8fps的速度。
圖8:在COCO驗證集上的AP性能(a)(b)(c),部分3.2,運行性能分析(d),部分3.3。
4 - Discussion
具有社會意義的時刻相比於任何其它東西都更能促使人們做出圖片和視頻。我們的圖片收集總是趨向於捕獲某個個體具有意義的時刻:生日,結婚,假期,游玩,運動事件,畢業,全家福等等。為了使得機器能夠解釋這些圖片,他們需要對圖像中的人有一個了解。機器,在現實中被賦予此類感覺,便能夠對這些東西做出反應甚至是參加到人類的個體和社會行為中去。
在這篇文章中,我們考慮感覺的一個關鍵組成部分:用於檢測圖片中多個體的2D姿勢的實時算法。我們提出了一種明確的非參數化的關鍵點聯系表示,其將個體肢體的位置和方向進行編碼。其次,我們設計了一個架構用來融合部位檢測和部位聯系。並且,我們證明了貪婪解析算法能夠有效地產生高質量個體姿勢解析,並且隨着圖像中個體數量的增長,其依然保持有效。我們在圖9中展示了典型的錯誤情況。我們已經將我們的代碼開源(https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation)(包括訓練模型),從而去保證整個模型的復現性以及激勵在該領域更深入的研究。
圖9:常見錯誤類型:(a)少有的姿勢或者外觀,(b)缺少或者錯誤的部位檢測,(c)重疊部位,也就是說,同一個部位檢測被兩個個體共享,(d)兩個個體間錯誤的部位連接,(e-f)錯誤的檢測到雕像或者動物。
Acknowledgements
我們由衷感謝MPII和COCO人體姿勢數據集的作者。這些數據集使得自然情況下進行2D人體姿勢評估變得可能。這個研究在一定程度上得到了ONR Grants N00014-15-1-2358和N00014-14-1-0595的支持。