本文是CMU在CVPR2017上的一篇论文。写此文是为了梳理一下自己看这篇论文的思路,以及会对自己自己尚未明确的地方做一个记录。本人在计算机视觉方面纯属一个小白,若有不足之处恳请各位大佬不吝赐教,谢谢。
Introduction
这篇文章提出了一种识别多人姿态的有效方法。目前多人人体姿势估计最困难的三个点分别为一是我们不知道一张图像中包含多少人,这些人的姿态和尺寸位置;二是多个人体之间的接触、遮挡使得情况更加复杂;三就是实时性的要求,人数越多则复杂程度也增加。现在的 方法主要依赖以下两个部分:人体检测和单人姿势估计。这种自上而下的方法非常依赖这两部分,一旦人体检测失败,整个方法就不奏效了。
2.方法
图2解释说明了这篇论文提出的全部思想。这个系统采用一张彩色的大小为w*h(Fig.2a)并生成一张如图(Fig.2e)的对每个人的2D关键点定位解剖图作为输出。首先,一个前向网络同时得出一个表示人体部位的2D置信图集合S以及一个用来说明关节点连接关系的向量场L(Fig.2c)的集合。集合S = (S1 , S2 , ..., SJ ) 有J个置信图,对于Sj ∈Rw×h, j ∈ {1...J}。集合L = (L1,L2,...,LC) 有C个向量场,对于每一个肢干,Lc ∈ Rw×h×2, c ∈ {1...C},每一个在Lc的图像定位被编码成一个2D向量,正如Fig.1所示。最后置信图集向量场通过贪婪推理(Fig.2d)产生图像中所有人的2D关键点。
2.1. Simultaneous Detection and Association
本文方法的结构如图3.模型同时计算检测出置信图集及表示人体各部分之间的关系域。这个网络被分为两个分支,第一个分支正如Fig.3的米色部分,预测出置信图,而第二个蓝色部分的分支则预测的是关系域。每个分支都是迭代预测结构,整个模型包含T个stage,每个stage都加入中间监督(intermediate supervision)。
图像首先经过一个微调过的初始化前十层的VGG-19卷积网络并生成一个F的特征集合F作为每一个分支的第一个stage输入。在第一层stage,网络生成一个检测出的置信图S1 = ρ1(F)以及一个部位关联关系L1 = φ1(F),其中ρ1和ϕ1表示第一个stage的CNN结构。随后的每一个stage 中,从前一个stage中的到的两个分支的预测结果及最初的图像特征F,被结合起来并产生提炼的预测。
St = ρt(F, St−1, Lt−1), ∀t ≥ 2, (1)
Lt = φt(F, St−1, Lt−1), ∀t ≥ 2, (2)
Fig.4展示了经过不同阶段之后置信图和关系域的结果。为了指导网络去迭代预测第一分支中的置信图及第二分支中的PAFs,本文在每一个阶段的每一个分支末尾提供了一个损失函数。我们在标注的图、关系域及计算出的预测结果之间使用一个L2正则损失。对于stage t,损失函数如下图:
对于S*j 是标注过的置信图,L*c是标注过的部位关系域。当图像位置p中的标注丢失时,W(P)=0。这个被用来避免在训练过程中惩罚真实的阳性预测。每个阶段的中间监督通过周期性地补充梯度来解决消失梯度问题。完整表达式如下:
2.2. Confidence Maps for Part Detection
为了计算式(5)中的fS,下边给出根据标注数据计算groundtruth confidence maps S∗的方法,每个confidence map都是一个2D表示。理想情况下,当图像中只包含一个人时,如果一个关键点是可见的话对应的confidence map中只有一个峰值;当图像中有多个人时,对于每一个人k的每一个可见关键点j在对应的confidence map中都会有一个峰值。首先给出每一个人k的单个置信图S*j,k,xj,k∈R2表示图像中人k对应的位置j对应的标注位置,数值如公式(6)所示,其中σ用来控制峰值在置信图中的传播范围。对应多个人的置信图见公式(7),这里用最大值而不是平均值能够更准确地将同一个置信图中的峰值保存下来。
2.3. Part Affinity Fields for Part Association
给定一组检测到的身体部位(如图5A中的红色和蓝色点),我们如何将它们组装起来,形成未知人数的全身姿势呢?我们需要检测每一对身体部位关联的置信度,即它们属于同一个人。测量关联的一种可能的方法是检测肢体上每一对部位之间的附加中点,并检查其候选部位之间的关系,如图5B所示。然而,当人们聚集在一起时,这些中间点可能会得出错误的连线(如图5B中的绿色线所示)。这种虚假关联是由于两个限制而产生的:(1)它只编码每个肢体的位置,而不是方向,(2)它将肢体的支撑重新减小到一个点。
为了解决这些限制,我们提出了称为part affinity fields的特征表示来保存躯体的支撑区域的位置信息和方向信息,如Figure 5(c)所示。对于每一条躯干来说,the part affinity是一个2D的向量区域。在属于一个躯干上的每一个像素都对应一个2D的向量,这个向量表示躯干上从一个关键点到另一个关键点的方向。每一种类型的肢干有一个相符的关系域。
考虑下图中给出的一个躯干(手臂),令Xj1,k和xj2,k表示图中的某个人k的两个关键点j1和j2对应的真实像素点,如果一个像素点p位于这个躯干上,值L∗c,k(p)表示一个从关键点j1到关键点j2的单位向量,对于不在躯干上的像素点对应的向量则是零向量。下面这个公式给出了the groundtruth part affinity vector,对于图像中的一个点p其值L*c,k(p)的值如下:
其中,v = (xj2,k − xj1,k)/||xj2,k −xj1,k||2 是表示肢体方向的单位向量。这些P点必须满足以下条件:
其中,σl 表示像素点之间的距离,lc,k = ||xj2,k − xj1,k||2 表示肢体长度,v⊥ 表示垂直于v 的向量。每张图像中第c肢体的标注PAFs,Lc*,为k个人在位置p的平均向量:
nc(p) 是所有k个人到p点的不为0的向量个数。
在预测的时候,我们用候选关键点对之间的PAF来衡量这个关键点对是不是属于同一个人,具体地,对关键点对应的像素点dj1 和dj2,我们去计算这个PAF,如下式所示。
其中,p(u)表示两个像素点dj1和dj2之间的像素点:
2.4. Multi-Person Parsing using PAFs
通过非极大值抑制,本文从预测出的置信图得到一组离散的关键点候选位置。因为图像中可能有多个人或者假正,每个关键点可能会有多个候选位置,因此也就组成了很大数量的关键点对,如fig 6(b)所示。从这些关键点对中找到最优结果,是一个NP-Hard问题。下面给出本文的方法。
假定模型得到的所有候选关键点构成集合DJ = {dmj : for j ∈ {1...J},m ∈ {1...Nj}} ,其中Nj表示关键点j的候选位置数量,dmj ∈ R2 是关键点j的第m个候选位置的像素坐标。我们需要做的是将属于同一个人的关键点连成躯干(胳膊,腿等),为此我们定义变量zmnj1j2 ∈ {0,1} 表示候选关键点dmj1 和dnj2 是否可以连起来。如此以来便得到了集合Z = {zmn : j1 j2 for j1,j2 ∈ {1...J},m ∈ {1...Nj1},n ∈ {1...Nj2}} 。现在单独考虑第c个躯干如脖子,其对应的两个关键点应该是j1和j2,这两个关键点对应的候选集合分别是Dj1和Dj2,通过这两种放松,优化被简单地分解为:
其中,Ec表示躯干c对应的权值总和,Zc是躯干c对应的Z的子集,Emn是关键点dmj1和dnj2对应的part affinity,公式(13)和公式(14)限制了任意两个相同类型的躯干(例如两个脖子)不会共享关键点。问题扩展到所有C个躯干上,当找到多人的全身姿态时,确定Z是k维匹配问题。这个问题是NP-hard(32),存在许多松弛。在这项工作中,我们添加两个松弛的优化,专门针对我们的领域。首先,我们选择最小数量的边缘来获得胡曼姿态的生成树骨架,而不是使用完整的图,如图6c所示。其次,我们进一步将匹配问题分解为一组二部匹配子问题,并对相邻树节点中的匹配进行去定义。如图6d所示,我们在3.1节中给出了详细的比较结果,它证明了最小贪婪参数以计算成本的一小部分很好地逼近全局解。其原因在于,相邻树节点之间的关系由PAF显式建模,而在内部,非相邻树节点之间的关系由CNN隐式建模。这种特性出现是因为CNN被训练有大的接收场,并且来自非相邻树节点的PAF也影响预测的PAF。
在这两个松弛条件下,优化被简化为:
因此,我们使用EQNS独立地获得每个肢体类型的肢体连接候选。12—14。对于所有的肢体连接候选,我们可以将共享相同部位检测候选的连接组装成多个人的全身姿势。我们在树结构上的优化方案比在全连通图[22,11]上的优化快了数量级。
,
网友评论