论文笔记:OpenPose(Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields)

1、主要成果

提出将人体部位与个体联系起来的非参数化方法— P A F s PAFs PAFs,实现自底向上的实时多人姿态估计,在性能和效率上均实现当时最优的结果。


2、算法细节

2.1、算法原理

首先预测一组图像中人体部位位置的 2 D 2D 2D 置信图 S S S,以及一组表示部位相似性的 2 D 2D 2D 矢量场 L L L,它们表示部位之间的关联程度。集合 S = ( S 1 , S 2 , … , S J ) S=\left(\mathbf{S}_{1}, \mathbf{S}_{2}, \ldots, \mathbf{S}_{J}\right) S=(S1​,S2​,…,SJ​) , S j ∈ R w × h \mathbf{S}_{j} \in \mathbb{R}^{w \times h} Sj​∈Rw×h, j ∈ { 1 … J } j \in\{1 \ldots J\} j∈{1…J}。集合 L = ( L 1 , L 2 , … , L C ) \mathbf{L}=\left(\mathbf{L}_{1}, \mathbf{L}_{2}, \ldots, \mathbf{L}_{C}\right) L=(L1​,L2​,…,LC​) 有 C C C 个矢量场,每个肢体一个。其中, L c ∈ R w × h × 2 \mathbf{L}_{c} \in \mathbb{R}^{w \times h \times 2} Lc​∈Rw×h×2, c ∈ { 1 … C } c \in\{1 \ldots C\} c∈{1…C}, L c \mathbf{L}_c Lc​ 中的每个图像位置编码一个 2 D 2D 2D 向量。最后,通过贪婪推理解析置信度图和亲和场,以输出图像中所有人的 2 D 2D 2D 关键点。
在这里插入图片描述


2.2、实现细节

2.2.1、网络结构

在这里插入图片描述

  1. 使用 V G G − 19 VGG-19 VGG−19 前 10 10 10 层提取图像特征 F \mathbf{F} F
  2. 将 F \mathbf{F} F 输入到 s t a g e − 1 stage-1 stage−1 置信图分支网络和亲和场分支网络,分别输出 S 1 = ρ 1 ( F ) \mathbf{S}^{1}=\rho^{1}(\mathbf{F}) S1=ρ1(F) 和 L 1 = ϕ 1 ( F ) \mathbf{L}^{1}=\phi^{1}(\mathbf{F}) L1=ϕ1(F)
  3. 重复 s t a g e − 1 stage-1 stage−1,输入为前一阶段的 S t \mathbf{S^t} St 和 L t \mathbf{L^t} Lt 以及图像特征 F \mathbf{F} F 的 C o n c a t e n a t e Concatenate Concatenate。即, S t = ρ t ( F , S t − 1 , L t − 1 ) , ∀ t ≥ 2 L t = ϕ t ( F , S t − 1 , L t − 1 ) , ∀ t ≥ 2 \begin{aligned} \mathbf{S}^{t} &=\rho^{t}\left(\mathbf{F}, \mathbf{S}^{t-1}, \mathbf{L}^{t-1}\right), \forall t \geq 2 \\ \mathbf{L}^{t} &=\phi^{t}\left(\mathbf{F}, \mathbf{S}^{t-1}, \mathbf{L}^{t-1}\right), \forall t \geq 2 \end{aligned} StLt​=ρt(F,St−1,Lt−1),∀t≥2=ϕt(F,St−1,Lt−1),∀t≥2​

2.2.2、损失函数

为每一阶段的两个分支网络分别设计损失函数,对损失进行空间加权,来解决一些数据集不能完全标记所有人的问题。
f S t = ∑ j = 1 J ∑ p W ( p ) ⋅ ∥ S j t ( p ) − S j ∗ ( p ) ∥ 2 2 f L t = ∑ c = 1 C ∑ p W ( p ) ⋅ ∥ L c t ( p ) − L c ∗ ( p ) ∥ 2 2 \begin{aligned} f_{\mathrm{S}}^{t} &=\sum_{j=1}^{J} \sum_{\mathrm{p}} \mathbf{W}(\mathbf{p}) \cdot\left\|\mathbf{S}_{j}^{t}(\mathbf{p})-\mathbf{S}_{j}^{*}(\mathbf{p})\right\|_{2}^{2} \\ f_{\mathrm{L}}^{t} &=\sum_{c=1}^{C} \sum_{\mathbf{p}} \mathbf{W}(\mathbf{p}) \cdot\left\|\mathbf{L}_{c}^{t}(\mathbf{p})-\mathbf{L}_{c}^{*}(\mathbf{p})\right\|_{2}^{2} \end{aligned} fSt​fLt​​=j=1∑J​p∑​W(p)⋅∥∥​Sjt​(p)−Sj∗​(p)∥∥​22​=c=1∑C​p∑​W(p)⋅∥∥​Lct​(p)−Lc∗​(p)∥∥​22​​
其中, W \mathbf{W} W 为二进制 m a s k mask mask,当图像位置 p p p 没有注释时, W ( p ) = 0 \mathbf{W(p)=0} W(p)=0,避免训练时惩罚 T P \mathbf{TP} TP 预测。每个阶段的中间监督通过定期补充梯度来解决梯度消失问题。总损失为:
f = ∑ t = 1 T ( f S t + f L t ) f=\sum_{t=1}^{T}\left(f_{\mathrm{S}}^{t}+f_{\mathrm{L}}^{t}\right) f=t=1∑T​(fSt​+fLt​)


2.2.3、GT 置信图生成

G T GT GT 置信图根据标注的人体关键点位置生成,以多人为例,第 k k k 个人的第 j j j 个可见部位的置信图表示为 S j , k ∗ \mathbf{S}_{j, k}^{*} Sj,k∗​:
S j , k ∗ ( p ) = exp ⁡ ( − ∥ p − x j , k ∥ 2 2 σ 2 ) \mathbf{S}_{j, k}^{*}(\mathbf{p})=\exp \left(-\frac{\left\|\mathbf{p}-\mathbf{x}_{j, k}\right\|_{2}^{2}}{\sigma^{2}}\right) Sj,k∗​(p)=exp(−σ2∥p−xj,k​∥22​​)
其中, p ∈ R 2 \mathbf{p} \in \mathbb{R}^{2} p∈R2, x j , k \mathbf{x}_{j, k} xj,k​ 为关键点标注位置。则,
S j ∗ ( p ) = max ⁡ k S j , k ∗ ( p ) \mathbf{S}_{j}^{*}(\mathbf{p})=\max _{k} \mathbf{S}_{j, k}^{*}(\mathbf{p}) Sj∗​(p)=kmax​Sj,k∗​(p)


2.2.4、PAFs 生成

在这里插入图片描述
在这里插入图片描述
L c , k ∗ ( p ) = { v  if  p  on limb  c , k 0  otherwise  \mathbf{L}_{c, k}^{*}(\mathbf{p})=\left\{\begin{array}{ll}{\mathbf{v}} & {\text { if } \mathbf{p} \text { on limb } c, k} \\ {0} & {\text { otherwise }}\end{array}\right. Lc,k∗​(p)={v0​ if p on limb c,k otherwise ​
当点 p p p 在 k k k 的肢体 c c c 上时, L c , k ∗ ( p ) \mathbf{L}_{c, k}^{*}(\mathbf{p}) Lc,k∗​(p) 等于从关键点 j 1 j_1 j1​ 指向关键点 j 2 j_2 j2​ 的单位向量。否则为零向量。肢体上的点必须满足以下条件:
0 ≤ v ⋅ ( p − x j 1 , k ) ≤ l c , k  and  ∣ v ⊥ ⋅ ( p − x j 1 , k ) ∣ ≤ σ l 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} 0≤v⋅(p−xj1​,k​)≤lc,k​ and ∣v⊥​⋅(p−xj1​,k​)∣≤σl​
其中肢体长度: l c , k = ∥ x j 2 , k − x j 1 , k ∥ 2 l_{c, k}=\left\|\mathbf{x}_{j_{2}, k}-\mathbf{x}_{j_{1}, k}\right\|_{2} lc,k​=∥xj2​,k​−xj1​,k​∥2​
肢体宽度: σ l \sigma_{l} σl​ 为像素距离
最终 P A F s PAFs PAFs 为图像中所有人的平均亲和场:
L c ∗ ( p ) = 1 n c ( p ) ∑ k L c , k ∗ ( p ) \mathbf{L}_{c}^{*}(\mathbf{p})=\frac{1}{n_{c}(\mathbf{p})} \sum_{k} \mathbf{L}_{c, k}^{*}(\mathbf{p}) Lc∗​(p)=nc​(p)1​k∑​Lc,k∗​(p)
其中, n c ( p ) n_c(\mathbf{p}) nc​(p) 为点 p \mathbf{p} p 处所有人产生的非零向量个数。

测试阶段,通过沿着连接候选部位位置的线段,计算相应 P A F PAF PAF 上的线积分来测量候选部位检测之间的关联。
E = ∫ u = 0 u = 1 L c ( p ( u ) ) ⋅ d j 2 − d j 1 ∥ d j 2 − d j 1 ∥ 2 d u E=\int_{u=0}^{u=1} \mathbf{L}_{c}(\mathbf{p}(u)) \cdot \frac{\mathbf{d}_{j_{2}}-\mathbf{d}_{j_{1}}}{\left\|\mathbf{d}_{j_{2}}-\mathbf{d}_{j_{1}}\right\|_{2}} d u E=∫u=0u=1​Lc​(p(u))⋅∥dj2​​−dj1​​∥2​dj2​​−dj1​​​du
p ( u ) \mathbf{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 \mathbf{p}(u)=(1-u) \mathbf{d}_{j_{1}}+u \mathbf{d}_{j_{2}} p(u)=(1−u)dj1​​+udj2​​
实际中通过对 u u u 均匀采样,然后求和来近似积分。


2.2.5、PAFs 多人分析

通过对检测置信度图执行非最大值抑制,以获得一组离散的部位候选位置。每个部位可能生成多个候选,经过组合生成大量的候选肢体。通过在 P A F PAF PAF 上计算线积分来对每个候选肢体打分。找到最优解的问题对应于一个已知为 N P NP NP 难的 K K K 维匹配问题。
在这里插入图片描述
在这篇文章中,作者提出了一种贪婪的简化方法,能够始终产生高质量的匹配。推测原因是成对关联分数隐含地编码了全局上下文,这是由于 P A F PAF PAF 网络的感受野很大。
D J = { d j m : j ∈ { 1 … J } , m ∈ { 1 … N j } } \mathcal{D}_{\mathcal{J}}=\left\{\mathbf{d}_{j}^{m} :\right.j \in\{1 \ldots J\}, m \in\left\{1 \ldots N_{j}\right\} \} DJ​={djm​:j∈{1…J},m∈{1…Nj​}}
d j m \mathbf{d}_{j}^{m} djm​ 表示部位 j j j 的第 m m m 个候选。接下来需要确定部位对构成的肢体。 z j 1 j 2 m n ∈ { 0 , 1 } z_{j_{1} j_{2}}^{m n} \in\{0,1\} zj1​j2​mn​∈{0,1}表示 d j 1 m \mathbf{d}_{j1}^{m} dj1m​ 和 d j 2 n \mathbf{d}_{j2}^{n} dj2n​ 是否相连。目标是找到最优分配方案:
Z = { z j 1 j 2 m n : j 1 , j 2 ∈ { 1 … J } , m ∈ { 1 … N j 1 } , n ∈ { 1 … N j 2 } } \mathcal{Z}=\left\{z_{j_{1} j_{2}}^{m n} :\right.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\} \} Z={zj1​j2​mn​:j1​,j2​∈{1…J},m∈{1…Nj1​​},n∈{1…Nj2​​}}
寻找最佳关联简化为最大权重二部图匹配问题。该问题中,结点为 D j 1 D_{j1} Dj1​ 和 D j 2 D_{j2} Dj2​,边是两组结点间所有可能的连接。每条边的权重为之前计算的线积分 E E E。二部图中的匹配是以没有两条边共享一个结点的方式选择的边的子集。优化的目标是为选定的边找到最大权重的匹配:
max ⁡ Z c E c = max ⁡ Z c ∑ m ∈ D j 1 ∑ n ∈ D j 2 E m n ⋅ z j 1 j 2 m n \max _{\mathcal{Z}_{c}} E_{c}=\max _{\mathcal{Z}_{c}} \sum_{m \in \mathcal{D}_{j_{1}}} \sum_{n \in \mathcal{D}_{j_{2}}} E_{m n} \cdot z_{j_{1} j_{2}}^{m n} Zc​max​Ec​=Zc​max​m∈Dj1​​∑​n∈Dj2​​∑​Emn​⋅zj1​j2​mn​
 s.t.  ∀ m ∈ D j 1 , ∑ n ∈ D j 2 z j 1 j 2 m n ≤ 1 ∀ n ∈ D j 2 , ∑ m ∈ D j 1 z j 1 j 2 m n ≤ 1 \begin{aligned} {\text { s.t. } \quad \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} \end{aligned}  s.t. ∀m∈Dj1​​,n∈Dj2​​∑​zj1​j2​mn​≤1∀n∈Dj2​​,m∈Dj1​​∑​zj1​j2​mn​≤1​
通过 H u n g a r i a n Hungarian Hungarian 算法获取最优匹配。

当涉及到寻找多人的全身姿态时,确定 Z Z Z 是一个 K K K 维匹配问题。这个问题是 N P NP NP 难并且有许多松弛存在。作者为优化添加两个松弛。

  1. 选择最小数量的边来获得人体姿态的生成树骨架,而不是使用完整的图,如图 6 c 6c 6c 所示。
  2. 进一步将匹配问题分解成一组二部匹配子问题,并独立地确定相邻树节点中的匹配,如图 6 d 6d 6d 所示。

结果表明最小贪婪推理很好地近似了全局解,只需要计算成本的一小部分。原因是相邻树节点之间的关系是由 P A F s PAFs PAFs 显式建模的,但在内部,不相邻树节点之间的关系是由 C N N CNN CNN 隐式建模的。这一特性的出现是因为 C N N CNN CNN 有一个大的感受野,并且来自非相邻树节点的 P A F s PAFs PAFs 也影响预测的 P A F PAF PAF 。因此,优化可以被简化为:
max ⁡ Z E = ∑ c = 1 C max ⁡ Z c E c \max _{\mathcal{Z}} E=\sum_{c=1}^{C} \max _{\mathcal{Z}_{c}} E_{c} Zmax​E=c=1∑C​Zc​max​Ec​
因此,可以独立地获得每种肢体类型的肢体连接候选。对于所有肢体连接候选,可以将共享相同部位检测候选的连接,组合成多人的全身姿势。在树结构上的优化方案比在全连接图上的优化快几个数量级。


2.2.6、结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、总结

主要贡献—— P A F s PAFs PAFs:

  1. 部位置信图生成:对图像中所有人的同一类部位的高斯分布置信图取上限得到
  2. 亲和场生成:对图像中所有人的同一类肢体的亲和场求平均得到
  3. 预测结果生成:
    1. 将所有部位全连接图简化为树状图(类似传统方法的姿态树)
    2. 树形图也嫌麻烦,再拆分为二部图优化,每次解决一类肢体的生成问题
    3. 通过匈牙利算法求解,获得最大权重匹配的节点分配策略
  4. 边权重的确定:沿着部位位置连接成的线段,计算 P A F PAF PAF 上的线积分即为权重

4、感想

主要是贡献— P A F s PAFs PAFs,论文中涉及的具体的深度学习的实现细节不多,感觉这一块有一些提升的空间,可以尝试结合深度学习网络设计、损失函数设计方面的一些新的方法。