姿態估計中位置十分顯眼的巨作:Openpose
-
Abstract
重點查看論文,需要看下它的abstract,本文提出了一個2D的單張圖片的多人姿態估計,(現在都出3D的姿態估計了),后面主要采用了PAF的方法以及組合數學中的K分圖匹配方法,很優雅的解決了CPM中的多人肢干連接的問題。本文提出的網絡結構,首先對全圖進行了一個encode,在達到實時性要求的情況下,同時保持了很高的accuracy。本文使用的是聯合的多branch分支,一個分支負責關鍵點的檢測,以及關鍵點的連接成骨架,再通過二分圖匹配的匈牙利算法,這樣的bottom-up的結構。在2016的coco keypoints的比賽取得了第一名,且在MPII這樣的數據集中達到了sota(后續就是hrnet,以及kaiming最近的moco的無監督方法也刷到了sota,實在跟不上了。) -
Introduction
在文章中,提出了pose estimation的以下挑戰。
(1). 圖像中的人數位置,他們可能出現在任何位置,且大小不一。
(2). 在相互接觸,以及遮擋等不好的情況都會對關鍵點的檢測造成困難,同時隨着人數的數量增加,運行時間的復雜度,也會上升,使得實時的表示成為一個挑戰。這種方法,主要采用的是檢測+singel person eatimation。但是這種方法十分依賴檢測的准確率,如果檢測涼了,那么后面的key point還找啥呀。
(3). 如果檢測極其叼,但是有30個人,那么需要進行30重復的單人人體姿態估計,這樣使這個方法在復雜場景下就會變得十分緩慢。 -
Method
本文,主要針對的還是bottom-up的方式,采用PAF(Part Affinity Fieilds)(咋翻譯?部件親和場?),來進行自下而上的人體姿態估計。首先借鑒的CPM的方法,檢測出人關鍵點的位置,比如圖片上人體右肩膀的位置,得到檢測結果是通過預測人體關鍵點的heatmap,這樣就可以看到每個人體關鍵點上都有一個高斯的峰值,代表網絡預測出這里是一個人體的關鍵點,同樣對其他所有人的關鍵點進行同樣的結果,得到這個檢測結果,在得到檢測結果之后,對關鍵點加測結果進行連接。在進行連接的時候,主要采用的就是PAF(后續進行說明,一堆數學問題)。
所以整個過程如下所示:
首先輸入一張圖片,如圖a所示,經過網絡,得到b為一堆heatmap,其實每個heatmap都表示不同人的同一個關鍵點,如圖是左手的中間軸點,以及左肩的位置,和c圖的PAF這樣的集合,再通過d的二分圖匹配,得到e的解析后的結果,emmm。。。perfect。 -
Simultaneous Detection and Association
主要的網絡示意圖等如下。
其中PAFs是用來描述像素點在骨架中的走向,用\(L(p)\)來進行表示,關鍵點的相應用\(S(p)\)來進行表示。首先網絡通過VGG-19前10層進行初始化並微調,在經過pretrain-model進行骨架后,會有兩個branch,來分別進行回歸\(L(p\)以及\(S(p)\)。在每一個stage都算一次loss之后,將L以及S以及原始的輸入F進行concatenate,送入下一個stage再進行訓練。其中訓練的loss采用的是l2范數。S和L的gt都是采用標注的關鍵點,如果某個關鍵點在標注中不存在,就不標注這個點。經過途中所示的網絡,網絡氛圍上下兩個分支,每個分支都是t個階段進行不斷的微調,且每個階段都會將feature maps進行融合,其中\(\rho \varphi\)表示的是網絡。
其中上圖是比較粗糙的輸出結果。
主要的L2 loss為:
- Confidence Maps for Part Detection
對於部件的檢測等:
再給出標注數據計算gt \(\mathbf{S}^{*}\)的時候,每個confidence map都是一個2D的表示,理想情況下,當圖像中值包含一個人時,如果一個關鍵點是可見的話,對應的confidence map中只會出現一個峰值,而當圖像中有多個人時,對於每一個人k的每一個可見關鍵點j在對應的confidence map都會有一個峰值。如上圖所示,首先給出每一個人k的單個confidence maps,\(x_{j, k}\in\mathbb{R}^{2}\)表示圖像中人k對應的位置j對應的gt position。\(\mathbf{S}_{j, k}^{*}(\mathbf{p})=\exp \left(-\frac{\left\|\mathbf{p}-\mathbf{x}_{j, k}\right\|_{2}^{2}}{\sigma^{2}}\right)\)其中\(\sigma\)用來控制峰值在confidence map中的傳播范圍,對應多個人的confidence map如下所示。這里用最大值能夠更加准確的將同一個feature maps中confidence map的峰值進行保存起來。網絡在位置P的預測值對應的GT位置 計算是如上圖所示,取最大值\(\mathbf{S}_{j}^{*}(\mathbf{p})=\max _{k} \mathbf{S}_{j, k}^{*}(\mathbf{p})\)。在預測階段網絡通過NMS來獲得最終的置信度。 - Part Affinity Fields for Part Association
在找到了很多關鍵點之后,我們怎么將它連接起來,這是一個很難的問題。特別是多人姿態估計的時候,上圖中關鍵點之間存在的關系可能存在很多種可能。本文提出了PAFs部件親和場同時保持了肢體區域之間的位置關系跟方向關系,每種類型的肢體都會有連
接其兩個關聯部位對應的親和場。
以論文中圖為例子:
圖像中的\(\mathbf{X}_{j_{1}}, k\)以及\(\mathbf{X}_{j_{2}}, k\)分別表示第k個人的肢體c的兩個身體部件j1以及j2的gt位置,如果點p落在了肢體c上,那么\(\mathbf{L}_{c, k}^{*}(\mathbf{p})\)的值為j1指向j2的單位向量,不在這個肢體上的點p為0.
為了在訓練過程中評估\(f_{L}\),定義PAF在點p的GT值為\(\mathbf{L}_{c, k}^{*}(\mathbf{p})=\left\{\begin{array}{ll}{\mathbf{v}} & {\text { if p on } \operatorname{limb} c, k} \\ {0} & {\text { otherwise }}\end{array}\right.\),其中\(\mathbf{L}_{c, k}^{*}(\mathbf{p})=\left\{\begin{array}{ll}{\mathbf{v}} & {\text { if p on } \operatorname{limb} c, k} \\ {0} & {\text { otherwise }}\end{array}\right.\)表示的是肢體的單位向量。
在\(0\leq\mathbf{v}\cdot\left(\mathbf{p}-\mathbf{x}_{j_{1}, k}\right)\leq l_{c, k}\text{and}\left|\mathbf{v}_{\perp}\cdot\left(\mathbf{p}-\mathbf{x}_{j_{1}, k}\right)\right|\leq\sigma_{l}\)范圍內的點p被定義為在肢體c上,其中\(\sigma_{l}\)代表肢體的寬度,\(l_{c, k}=\left\|\mathbf{x}_{j_{2}, k}-\mathbf{x}_{j_{1}, k}\right\|_{2}\)代表肢體的長度。
點p在部件親和場GT值為所有人在此點上PAF的平均值,\(\mathbf{L}_{c}^{*}(\mathbf{p})=\frac{1}{n_{c}(\mathbf{p})} \sum_{k} \mathbf{L}_{c, k}^{*}(\mathbf{p})\),其中\(n_{c}{(p)}\)表示非零向量的個數。
而在預測的階段中,對於兩個候選的部件點\(d_{j1}\)和\(d_{j2}\),我們沿着線段采樣預測得到PAF \(L_{c}\),以測量兩個部分之間的關聯置信度,\(E=\int_{u=0}^{u=1} \mathbf{L}_{c}(\mathbf{p}(u)) \cdot \frac{\mathrm{d}_{j_{2}}-\mathbf{d}_{j_{1}}}{\left\|\mathbf{d}_{j_{2}}-\mathbf{d}_{j_{1}}\right\|_{2}} d u\),其中\(p{(u)}\)代表兩個身體部件之間的位置:\(\mathbf{p}(u)=(1-u) \mathbf{d}_{j_{1}}+u \mathbf{d}_{j_{2}}\),實際預測時對u區間進行均勻間隔采樣求和來求解近似的積分值。 - Multi-Person Parsing using PAFs
多人的PAF解碼解析工作:
接下來就是最后將PAFs的結果進行解碼了,我們對預測的置信圖進行nms操作后,可以得到一組離散的候選身體部位,對於每一個部件存在多個候選,因為圖像上有多個人的情況,從這些候選部件可以定義為一個很大的可能肢體結合,通過上面的積分公式,計算每一個候選肢體得到的分數。
在本文中,提出了greedy relaxation的方法來產生高質量的匹配:
(1). 首先根據預測置信圖得到離散的候選部件\(\mathcal{D}_{\mathcal{J}}=\left\{\mathbf{d}_{j}^{m}: j \in\{1 \ldots J\}, m \in\left\{1 \ldots N_{j}\right\}\right\}\),其中\(d_{j}^{m}\)代表身體部件j的第m個候選關鍵點的位置,\(N_{j}\)表示j的候選點的個數。
(2). 我們的匹配目標是要求候選部位和統一個人的其他候選部件進行連接,首先定義變量\(z_{j_{1} j_{2}}^{m n} \in \{0,1\}\)用來表示兩個候選部件\(\mathbf{d}_{j_{1}}^{m}\) and \(\mathbf{d}_{p}^{n}\)之間是否有連接。所有候選部件的連線集合為
\(\mathcal{Z}=\left\{z_{j j_{2}}^{m n}: \text { for } j_{1}, j_{2} \in\{1 \ldots J\}, m \in\left\{1 \ldots N_{j_{1}}\right\}, n \in\left\{1 \ldots N_{j_{2}}\right\}\right\}\)
(3). 單獨考慮肢體\(c\)所對應的兩個身體部件\(j_{1}\)和\(j_{2}\),目的是找到總親和值最高的圖匹配方式,定義總親和值為:\(\max _{\mathcal{Z}_{c}} E_{c}=\max _{\mathcal{Z}_{c}} \sum_{m \in \mathcal{D}_{N}} \sum_{n \in \mathcal{D}_{j_{2}}} E_{m n} \cdot z_{\text {Jil }}^{m n}\), 其中\(\forall m \in \mathcal{D}_{j_{1}}, \sum_{n \in \mathcal{D}_{j_{2}}} z_{j_{1} j_{2}}^{m n} \leq 1\)
\(\forall n \in \mathcal{D}_{j_{2}}, \sum_{m \in \mathcal{D}_{j_{1}}} z_{j_{1} j_{2}}^{m n} \leq 1\), \(E_{mn}\)代表的是\(d_{j1}^{m}\)和\(d_{j2}^{n}\)之間的親和度。注意:同類型的兩個肢體沒有公共點。
(4). 當考慮多人的全身姿態估計是,就是一個K分圖匹配問題了,可以簡化成\(\max _{\mathcal{Z}} E=\sum_{t=1}^{T}\max _{z_{c}} E_{c}\), 人體個肢體獨立優化配對,然后將享有相同身體部分的連接組裝成人體的全身姿態