原文:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
代码:ZheC/Realtime_Multi-Person_Pose_Estimation
文章提出了一种高效的检测2D多人姿态的方法。文章提出了一种Part Affinity Fields (PAFs)的方法来联系不同个体之间的关节。该体系结构编码来全局上下文,允许贪婪的bottom-up的解析步骤,该步骤在实现实时性能的同时保持高精度,而与图像中的人的数量无关。该体系结构被设计为通过同一顺序预测过程的两个分支来联合学习关节点的位置及关节点之间的关联。方法在首届COCO 2016关键点挑战赛中排名第一,在性能和效率上都大大超过了之前MPII多人基准测试的SOTA结果。
略
Figure 2. 展示了文章方法的整个pipeline。文章输入一张彩色的 w × h w \times h w×h 的图像,输出图像中每个人的2D关节点。
一个前向网络同时预测出一系列的身体部位的2D置信图 S S S ,和一系列part affinities的2D 向量场 L L L, L L L 编码了两个部位之间的连接角度。 S = ( S 1 , S 2 , . . . , S J ) S=(S_1,S_2,...,S_J) S=(S1,S2,...,SJ) 有 J J J 张置信图, S j ∈ R w × h S_j \in\mathbb{R}^{w \times h} Sj∈Rw×h, 一个关节点一副图。 L = ( L 1 , L 2 , . . . , L J ) L=(L_1,L_2,...,L_J) L=(L1,L2,...,LJ)有 J J J 个向量场, L j ∈ R w × h × 2 L_j \in\mathbb{R}^{w \times h \times 2} Lj∈Rw×h×2, L L L中的每个位置都编码了一个2D vector。
最后,置信度图 S S S 和affinity fields L L L 共同来解析出图中所有人的2D关键点。
略
略
给定一个关键点的集合,我们如何把他们组装成位置人体个数的完整姿态呢?我们需要一个置信量来度量关节点集合中每一对节点之间的关联度。
文章提出了一种特征表达 part affinity fields,同时保留了肢体区域内的位置和方向信息。对于每个关节点的part affinity 都是一个2D的向量场。在指定肢体的区域内的每一个像素,都有一个从肢体的一个部位指向另一个部位的方向,每个肢体都有对于的PAF来连接其对应的相关联的身体部位。
对于图中的单个肢体而言,假设 x j 1 , k x_{j_1 ,k} xj1,k and x j 2 , k x_{j_2 ,k} xj2,k 是第 k k k 个人的第 c c c 个肢体的所连接的身体部位 j 1 j_1 j1 和 j 2 j_2 j2 的GT位置。对于肢体上的某点 p \bf p p, L c , k ( p ) \mathbf L_{c,k}(\bf p) Lc,k(p) 是从 j 1 j_1 j1 到 j 2 j_2 j2 的单位向量,其他点的值为0.
具体定义为:
L c , k ( p ) = { v , i f p o n l i m b c , k 0 , o t h e r w i s e L_{c,k}(p) = \left\{\begin{matrix} \mathbf v,\ if \ \mathbf p\ on \ lim\ b_{c,k} \\ 0, otherwise \end{matrix}\right. Lc,k(p)={v, if p on lim bc,k0,otherwise
其中
v = ( x j 2 , k − x j 1 , k ) / ∣ ∣ x j 2 , k − x j 1 , k ∣ ∣ 2 \mathbf v = (\mathbf x_{j2,k} − \mathbf x_{j1,k})/||\mathbf x_{j2,k} −\mathbf x_{j1,k}||_2 v=(xj2,k−xj1,k)/∣∣xj2,k−xj1,k∣∣2
即从 x j 1 , k \mathbf x_{j1,k} xj1,k 到 x j 1 , k \mathbf x_{j1,k} xj1,k 的单位向量。
对于肢体的区域范围的确定,是以连接线为中心线,左右各宽为 σ l \sigma_l σl 的矩形位置。
具体定义为:
0 ≤ v ⋅ ( p − x j 1 , k ) ≤ l c , k a n d ∣ v ⊥ ⋅ ( p − x j 1 , k ) ∣ ≤ σ l , 0≤v·(p−x_{j1,k})≤l_{c,k} \ and \ |v_⊥ ·(p−x{j1,k})|≤σ_l, 0≤v⋅(p−xj1,k)≤lc,k and ∣v⊥⋅(p−xj1,k)∣≤σl,
其中 v ⊥ \bf v_⊥ v⊥是 v \bf v v的垂直向量, l c , k = ∣ ∣ x j 2 , k − x j 1 , k ∣ ∣ 2 l_{c,k} = ||x_{j2,k} − x_{j1,k}||_2 lc,k=∣∣xj2,k−xj1,k∣∣2。
对于最终的 part affinity field 的GT,取每个人的part affinity field的均值:
L c ( p ) = 1 n c ( p ) ∑ k L c , k ( p ) L_c(p) = \frac{1}{n_c(p)} \sum_{k}L_{c,k}(p) Lc(p)=nc(p)1k∑Lc,k(p)
在测试阶段,我们用两个关节点连线上的PAF积分来表示两个关节点之间的关联度。具体地,对于两个候选部位的位置 d j 1 d_{j1} dj1 和 d j 2 d_{j2} dj2,两关节点之间的关联度为:
E = ∫ u = 0 u = 0 L c ( p ( u ) ) ⋅ d j 2 − d j 1 ∥ d j 2 − d j 1 ∥ 2 d u E = \int_{u = 0}^{u = 0} L_c(p(u)) \cdot \frac{d_{j2}-d_{j1}}{\left \| d_{j2}-d_{j1} \right \|_2}du E=∫u=0u=0Lc(p(u))⋅∥dj2−dj1∥2dj2−dj1du
其中 p ( u ) p(u) p(u) 表示 d j 1 d_{j1} dj1 和 d j 2 d_{j2} dj2之间的位置:
p ( u ) = ( 1 − u ) d j 1 + u d j 2 p(u) = (1−u)d_{j1} +ud_{j2} p(u)=(1−u)dj1+udj2
在得到所有关节点之间的关联度之后,我们构建了一系列的二分图,用 Hungarian algorithm 来选取每个二分图之间的最佳连接。在确保每个关节点只有一个连接的情况下,求去总关联置信度最高的连接方式。