原文:4D Association Graph for Realtime Multi-person Motion Capture Using Multiple Video Cameras
收录:CVPR2020
本文提出了一种基于多视图视频输入的实时多人运动捕捉算法,由于严重的自遮挡,多视图运动相互作用密切,对多视图和多时间帧进行关节点优化是必不可少的,这就对实时性提出了挑战。为此,首次将 逐视图解析、跨视图匹配和时间跟踪 统一到一个单一的优化框架中。即一种4D关联图,可以同时处理图像空间、视角和时间的各个维度。
多人的无标记动作捕捉仍然具有挑战性。利用单视图来估计二维和三维位姿,由于存在严重的自遮挡问题,最后估计的结果保真度低。相比之下,多视图对自遮挡问题有一定缓解,现如今多视图方法发展取得一定成功,但是没有实现实时性和高质量捕捉目标。
4D包含哪些? 即:2D空间、1D视角和1D时间;多视点视频输入,实时高质量的多人动作捕捉成功的关键在于如何利用4D数据输入;
在4D结构中存在三种基本的关联。即:① 单视图图像关联 (例如解析) 来形成人体骨架;② 跨视图关联 (例如匹配) 来建立不同视图之间的关联;③ 时间关联 (例如跟踪) 建立序列帧之间的关联。而现有的方法很难做到同时有效地处理所有这些关联。
首先在当前帧的每个输入视图上使用现有的自底向上人体姿态检测器来生成每个视图的低维人体特征,本文的4D关联图(4D association graph)以 人体多视图候选部位 (2D 热图位置) 和 人体各部位之间的连接置信度(PAF分数的范围[0 , 1]) 作为输入,并与之前重建的3D骨架相结合(图2(a))
实际上,4D关联图模型类似于可用的单视图关联问题,只是更加复杂。作者将其分为4D肢体解析(4.1节)和一个骨架组装(4.2节)问题。
notation | meaning |
---|---|
c | t 时刻视角序号,c∈{1,2,……,N} |
D j ( c ) = d j m ( c ) D_{j}(c)={d_{j}^{m}(c)} Dj(c)=djm(c) | 骨架关节点 j∈{1,2,…,J}的第m个候选位置(m为候选索引) |
f i j m n ( c ) f_{ij}^{mn}(c) fijmn(c) | 连接 d i m ( c ) {d_{i}^{m}(c)} dim(c)和 d j n ( c ) {d_{j}^{n}(c)} djn(c)的PAF分数 |
ε P \varepsilon _{P} εP | 逐视图解析边缘 |
ε V \varepsilon _{V} εV | 跨视角匹配边缘 |
ε T \varepsilon _{T} εT | 时间跟踪边缘 |
p(z) = p(z=1) | 边缘的连接权重 |
当不考虑时间跟踪边缘,引入重构后的三维骨架后,解析边缘和匹配边缘形成了一个3D关联图 G3D(一般用于处理整个序列的第一帧或者一个新人进入场景的时候)。
※ G3D上的可行解 z i j m n ( c 1 , c 2 ) z_{ij}^{mn}(c_{1},c_{2}) zijmn(c1,c2) 必须满足下面不等式:
对于逐视图解析边缘 ε P \varepsilon _{P} εP,直接将输入边缘权重定义为其PAF得分:
对于跨视图匹配边缘 ε V \varepsilon _{V} εV,权值由极线距离定义,表示为三维空间中的线对线距离:
其中,Kc是视角c的内参矩阵,d(·,·)表示从摄像机视角 c1 和 c2 发出的两条射线之间的线对线距离,Z是根据经验来定义的归一化因子,调节外极距离到范围[0,1];且 d ~ = [ d T , 1 ] T \tilde{d}=[d^{T},1]^{T} d~=[dT,1]T。
在非常拥挤或严重遮挡的场景中求解 G3D 可能会出现故障,为了提高人体骨骼重建的鲁棒性,加入了时间先验,形成4D关联图 G4D 。
然后将跟踪边缘连接概率定义为:
其中,d′(X,d) 表示点—线距离,即3D关节点 X 和从相机中心发射到关节候选区域 d 射线的点线距离,T是归一化因子,调节 p ( z i m k ( c ) ) p(z_{i}^{mk}(c)) p(zimk(c)) 到范围[0,1];
※ 与上面 G3D 满足不等式相似,也有一个不等式需要满足:
&3.1和&3.2中预定义解析边缘、匹配边缘和跟踪边缘的概率,那么4D关联优化可以表述为满足上面不等式条件下,最大化目标函数的边缘选择问题。具体来说则是:让 q(z) = p(z)·z 表示一条边缘的最终能量(z是一个bool变量),那么最终目标函数可以写成三类边缘中所有被选择的边的能量之和。
4D关联与之前的2D关联的关键区别在于:候选肢体不仅分散在单个图像中,而且分散在整个空间和时间中,并且一些肢体是相同的物理肢体。因此,在四维骨架组装之前,需要首先在视图和时间中关联那些可能是同一肢体的肢体。基于此思路,实时求解分为两个步骤:① &4.1的4D肢体束关联;② &4.2的bundle Kruskal算法的4D人体骨骼关联。值得注意的是,这两个步骤都依赖于上面的目标函数进行优化。
通过视图和时间来提取肢体束,理论上来说,每一个真实的肢体束包含两个关节点团(cliques),clique(团)是指每两个节点连接的图,为清楚起见,如上图(a)所示。这意味着,在肢体束中相同类型的每两个关节必须共享一个跨视图边缘或一个时间边缘,图3(b)枚举了图3(a)的所有可能的肢体团,通过计算每一个肢体团的目标函数(&3.3),然后找到真正的肢体束,但是直接最大化目标函数会鼓励这个肢体团选择尽可能多的边,甚至是假边。因此,为解决上述问题,需要对目标函数进行改进。
在生成所有的4D肢体束后,我们需要将它们组装成多个4D人体骨骼结构。我们首先根据修改的目标函数(Eq.8)值对所有的4D肢体束进行排序,并建立一个优先队列来存储它们,在每一次迭代中,我们从队列中取出一个具有最大数值(基于Eqn. 8)的4D肢体束,并将其合并到4D骨架中。
在这个合并过程中,所有的2D关节(属于这个关节束bundle,来自不同的视图)应该有相同的标签person ID,但是,由于一个新添加的肢体束可能与一些已经分配的肢体束共享相同的4D关节,所以当这些二维关节在之前的迭代中已经在不同视图上用不同的person ID进行了标记,冲突产生了,如图5(a)所示。
为了消除这种冲突,提出了一种简单而有效的方法,即根据关节被分配到的人将新增加的肢体束分割成小的肢体束(图5(b)),然后重新计算每个小bundle的目标函数,并push到前面的队列进行进一步的组装。如果没有冲突,我们将bundle合并到骨架中,并标记2D关节。我们迭代pop和合并,直到队列为空(图5 ( c ) (c) (c))。
基于在2D视图图像上的4D骨架装配结果,我们可以通过嵌入参数骨架来进一步优化完整的3D人体姿态。
其中 E2D 是将每个视图上的2D投影与检测到的关节点对齐的数据项,Eshape 优先考虑人体形状(例如骨骼长度和对称),Etemp 是时间平滑项(w2D、wshape和wtemp是平衡权重,如果没有时间信息,wtemp = 0)。在时间上,我们跟踪每个人,并使用前五帧的平均骨骼长度(在超过3个摄像机中可见)作为后一帧中人的骨骼长度。如果这个人丢失了然后再重新出现,我们只是把他/她当作一个新的人,重新计算骨头的长度。
本文还创建了一个新的用于多人3D骨骼跟踪的评估数据集 — Optitrack marker mocap,该数据集是通过商用动作捕捉系统来获取3D骨骼的GT值 —> OptiTrack下载