XNect:单RGB相机实时多人3D动作捕捉
XNect: Real-time Multi-Person 3D Motion Capture with a Single RGB Camera
图1: 实际测试效果
论文提供一种基于RGB视频的实时多人运动捕捉,该方法分为三个阶段:在第一个阶段,通过卷积神经网络估计每个人的2D和3D姿态特征,该部分设计了一个快速的网络结构SelecSLS;在第二个阶段,通过全连接的神经网络将遮挡部分2D姿态和3D姿态特征推理成完整的3D姿态;在第三个阶段,应用时空骨架模型拟合每个人预测的2D和3D姿态,目的是为了进一步协调2D和3D姿态和加强时间一致性,最终以关节角度信息返回整个骨骼姿态。
论文地址:https://gvv.mpi-inf.mpg.de/projects/XNect/
马普所的工作成果链接:https://vcai.mpi-inf.mpg.de/GVV_Projects.html
1. 背景介绍
在视觉计算及其相关领域中,光学人体动作捕捉技术是当今世界最重要的技术之一。例如,它被广泛使用在视觉特效中动画虚拟人物和人类。它是许多人机接口的关键组成部分,也是生物医学的核心运动分析。近年来,计算机图形学与计算机视觉研究人员开发了新的动作捕捉算法。
这些算法不需要特殊的服装,密集的相机阵列,演播室录音,或者标记。只需要几个校准的摄像机来捕捉穿着日常服装的户外人群,从一个单色图像得到三维人体姿势,打开了虚拟现实和增强现实应用的大门。但是仍然存在极具挑战性问题,比如深度模糊,遮挡,和外观和场景的多样性。
更重要的是,大多数方法会因为遮挡导致失败,或者只研究单个人。最近的一些方法侧重于自我中心设置。由外向内设置的单人跟踪(非自我中心)是已经受到严格的约束;因此多人跟踪变得异常困难,由于多重遮挡,挑战身体部分人员分配,计算上要求更高。这为许多应用程序(如游戏)带来了实际障碍以及社交VR/AR。
2. 相关工作
接下来重点讨论相关的2D和3D人体姿态估计,数据集和神经网络架构。
多人2D姿态估计:多人二维姿态估计方法可分为自顶向下(top-down)和自底向上(bottom-up)两种。top-down的方法先进行目标检测(人),再对每个检测到的人进行单人的关键点检测(单人姿态估计);bottom-up方法先检测所有人的关键点,然后再对关键点进行分组关联。一般来说,top-down方法精度更高,而bottom-up方法速度更快。
单人3D姿态估计: 单人3D姿态估计以前是通过使用物理先验的生成方法进行的,或者半自动综合分析拟合参数体模型。最近的一些方法在网络中集成了3D身体模型,并使用2D和3D姿势的混合训练从单个图像中预测三维姿态和形状。其他方法优化人体模型或模板来适应2D姿势和轮廓。
多人3D姿态估计: 本文的方法是自底向上的,不会对每个人进行多次检测。自底向上的方法使用固定数量的特征映射来预测场景中所有个体的2D和3D姿势,并且为每个个体进行编码。3D编码将每个肢体和躯干视为不同的物体,并对特征中的每个“物体”的3D姿势进行编码映射到与“对象”的2D关节对应的像素位置。因此,该编码可以处理部分个人之间的遮挡通过不同的身体部位。
3D姿态数据集: MarCOnI、Panopticon、MuCo-3DHP等3D姿态数据集。
卷积网络设计: ResNet、Inception 和ResNext 等等变种;本文提出的CNN架构背后的关键是使用选择性的远距离和近距离合并连接,而不是DenseNet的密集连接模式。这使得网络速度明显快ResNet-50 同时保持相同的精度水平,避免精度和网络复杂度之间的平衡,消除内存瓶颈。
3. 整体方法
图2:整体思路
整体方法的大概的计算分为三个阶段,前两个阶段分别为每帧局部(每个身体关节)和全局(所有身体关节)推理,第三个阶段执行时序推理:第一个阶段为使用新的SelecSLS网络架构可见的身体关节推断2D姿态和中间3D姿态编码。每个关节的三维位姿编码仅考虑运动序列中的局部上下文。第二个阶段是一个紧凑的全连接网络为每个被检测到的人(并行运行),并通过利用全局上下文重建完整的3D姿势,包括被遮挡的关节。第三阶段提供了时序的稳定性,相对于摄像机的定位,以及通过运动学骨架拟合的关节角度参数。
4. 姿态估计
给定一个尺寸为 \(w\times h\) 图像 \(I\), 估计3D姿态 \(\{P_k^{3D}\}_{k=1}^K\) ,其中 \(K\) 表示场景中人的个数。\(P_k^{3D}\in \mathbb{R}^{3\times J}\) 表示 \(J\) 身体关节的根(骨盆)相对三维坐标。接下来在下面详细介绍。
4.1 阶段一预测
第一阶段使用核心网络CNN提取特征,该网络为分成两个独立分支的网络2D姿态预测和3D姿态编码,如图2所示。核心网络输出特征图大小为 \(\frac{w}{16}\times\frac{h}{16}\) , 2D和3D分支网络的输出特征图大小为 \(\frac{w}{8}\times\frac{h}{8}\) 。3D分支网络利用了2D分支网络提取的特征。接下来详细介绍两个网络分支和阶段一的训练过程。
4.1.1 2D分支:2D位姿预测和部位关联
2D姿态预测为2D热图 \(H=\{H_j\in\mathbb{R}^{\frac{w}{8}\times \frac{h}{8}}\}\) ,每个热图代表每个像素的置信度,使用部分亲和场 \(F=\{F_j\in \mathbb{R}^{\frac{w}{8}\times \frac{h}{8}\times 2} \}_{j=1}^{J}\) 来编码身体关节所有权,使用单位向量场从关节指向其运动学父关节,并跨越各自肢体的宽度。对于输入图像,这些部分关联字段可用于检测个人在场的场景和可见的身体关节,并以将可见关节与个体联系起来。如果一个人的颈部关节(假设在大多数情况下是可见的)没有被检测到,将从随后的阶段中完全抛弃了未检测到的个体。对于 \(K\) 个检测到的个体,该阶段以绝对图像坐标 \(P_k^{2D}\in \mathbb{Z}^{2\times J}_{+}\) 输出二维身体关节位置。进一步,从热图最大值中得到了每个身体部位的检测置信度 \(c_{j,k}\) 。
4.1.2 3D分支:预测中间3D位姿编码
如图4:基于局部运动学背景的三维姿态编码
图4所示,对 \(1×1×(3\cdot J)\) 预测的三维位姿编码向量 \(l_j\)(右图所示)进行每个关节 \(j\) 监督(左图骨骼所示),\(l_j\) 只编码关节 \(j\) 相对于其在运动链中直接连接的关节的三维位姿信息。这导致了如下所示的信道稀疏监督模式,而不是每个 \(l_j\) 编码全身姿势。标记为紫色的区域是不受监督的,网络可以自由地预测那里的任何值。例如右肩(\(j=3\))连接关节点 \(j=2\) 和 \(j=4\) ,因此在 \(l_3\) 中, \(j=3\) 的关节点相对于 \(j=2\) 为 \((x_3,y_3,z_3)\) , \(j=4\) 的关节点相对于 \(j=3\) 为 \((x_4,y_4,z_4)\) 都是被监督的。
3D分支:第一阶段网络的3D分支使用核心网络和2D分支的特征,来预测3D位姿编码映射 \(L=\{L_j\in R^{\frac{w}{8}\times \frac{h}{8}\times 3}\}\) 。每个可见关节的空间位置编码仅封装其相对于其在运动链中直接连接的关节的3D姿态。在 \(L\) 中的具体编码工作如下:在像素位置 \((u,v)_{j,k}\) 提取 \(1\times 1\times (3\cdot J)\) 向量 \(l_{j,k}\) ,\((u,v)_{j,k}\) 表示第 \(k\) 个人的第 \(j\) 人体关键点,这个特征向量 \(1\times 1\times (3\cdot J)\) 是完整的三维身体姿态,其中每个关节的相对三维位置位于单独的通道中。
4.1.3 训练过程
第一阶段的网络是多重训练的阶段。首先,在MPII和LSP单人2D数据集上,对核心网络和2D姿态分支网络进行训练,然后使用这些权重作为初始值,最后在MS-COCO数据集上训练多人2D姿态估计。随后添加3D姿态分支,并分别在MS-COCO和MuCo-3DHP数据集上训练两个分支。发现在引入3D分支前,先对多人二维姿态数据进行预训练很重要。
4.2 阶段二预测
如图3:2D姿态和3D编码合并
阶段二采用全连接网络预测每个个体的相对根结点的3D姿态 \(\{P_k^{3D}\}_{k=1}^K\) ,在阶段一的输出作为输入,将2D关节位置的预测 \(P_k^{2D}\) 转化为相对于颈关节的表示方法。 对于每个个体 \(k\) 中每个关节点位置,可以提取 \(1\times 1 \times(3\cdot J)\) 形式的3D姿态编码向量 \(l_{j,k}\) ,输入到阶段二的 \(S_k\in \mathbb{R}^{J\times(3+3\cdot J)}\) 是关键点坐标 \((u,v)_{j,k}\) ,关节点检测置信度 \(c_{j,k}\) 和特征向量 \(l_{j,k}\) 的合并状态。如果节点处于不可见状态,那么就采用零向量代替(如图3)。阶段二采用5层全连接层将 \(S_k\) 转化成3D姿态 \(P^{3D}_k\) 。(如图5)
如图5:全连接层
4.2.1 训练过程
第二阶段的网络在MuCo-3DHP数据集上训练。第一阶段提取了2D姿态和3D姿态编码,然后对于每个被检测到的个体,使用真实标签的3D姿态为监督对象 \(\left\{\left(X_{j}, Y_{j}, Z_{j}\right)\right\}_{j=1}^{J}\)。当有不同有严重的遮挡时,姿态预测可能与真实标签截然不同,可以使用smooth-L1损失函数减轻这些异常值的影响。
5. 动作捕捉:阶段三
在第一阶段和第二阶段之后,得到每个个体的每帧相对于根节点的姿态估计。然而,没有估计人的大小或离相机的距离,人的身份是不跨帧跟踪,和重建不是根据关节角度。为了弥补这一点,随着时间推断和跟踪人的外貌,可选地平面几何推断绝对高度,并在时空运动学姿态拟合方法中,融合带有时序平滑和关节点限制的二维和三维的姿态预测。
5.1 身份跟踪和重新识别
为了区分在不同帧下估计的姿态,扩展了之前的姿态符号,在方括号中包含时间指标。到目前为止,每帧2D和3D姿势已经被估计为当前和过去的帧。因此需要一种快速的方法来维护被检测到的人在帧之间的身份,并在完全遮挡一段时间后重新识别出来。为此,在当前时间步长 \(t\) 分配人员检测之间的通信,\(\{P_i[t]\}^{K[t]}_{i=1}\) 为当前时刻的姿态信息。利用上半身区域的HSV颜色直方图对人的外观进行建模和跟踪,将色调和饱和度通道离散为每个30个箱子,并确定外观 \(A_{i[t]}\) 作为包含肢体关节点的 \(\{P_i^{2D}[t]_i\}\) 类概率。这种描述方式可以有效地计算和模拟宽松和紧身的服装,但在着装相似的人中可能会出现颜色模糊。
为了能够稳健地匹配人体,可以将当前检测分配给之前已识别的身份,而不仅仅是基于外观相似度 \(S_{i, k}^{A}=\left(A_{i}[t]-A_{k}[t-1]\right)^{2}\),而且基于2D姿态相似度 \(S_{i, k}^{P 2 D}(i, k)=\left(P_{i[t]}^{2 D}-P_{k[t-1]}^{2 D}\right)^{2}\) 和3D姿态相似度 \(S_{i, k}^{P 3 D}(i, k)=\left(P_{i[t]}^{3 D}-P_{k[t-1]}^{3 D}\right)^{2}\),在异常情况下设置一个阈值来检测遮挡、人员离开视场和新人员进入视场。这意味着 \(K[t]\) 的数量可以改变。人在消失后保持一定的帧数,以允许在瞬间遮挡(如被跟踪的受试者经过一个遮挡器后造成的遮挡)后重新识别。每30秒更新一次已知对象的外观直方图,来应对不同光照导致的外观变化。
5.2 相对骨长和绝对高度的计算
身体各部分之间的相对长度是一个尺度不变的属性,在第二阶段很容易估计 \(P^{3D}_k\) 。为了增加鲁棒性,可以对将骨骼长度 \(b_k\) 进行归一化作为 \(P^{3D}_k\) 中连接关节之间的距离。将像素坐标的相对姿态估计转换为以厘米为单位的绝对3D坐标是一项困难的任务,因为它需要已知位置和比例的参考对象和人的身高信息。
5.3 运动骨架拟合
通过二维和三维关节位置预测,对在视场所有人 \(K[t]\) 的骨骼姿态 \(\{\theta_k[t]\}^{K[t]}_{k=1}\) 进行优化,其中 \(\theta_k[k]\in \mathbb{R}^D\) 中 \(D=29\) 表示骨骼中自由度的数量。在骨架拟合之前,每帧2D和3D的姿态估计都要经过时序过滤。注意,\(θ_k∈R^D\) 描述了一个人的姿态,根据固定骨架的关节角度加上全局根位置,这意味着最终输出是直接与CG角色动画是兼容的。因为这样会导致重投影误差,所以通过联合拟合了2D和根相关的3D预测结果,保持合理和稳健的3D关节信息。通过能量函数估计 \(\theta_k[t]\) :
通过梯度下降法来进行最小化求解函数,为了平衡各项因子的影响,将 \(w_{3D}=9e-1\) , \(w_{2D}=1e-5\) , \(w_{lim}=5e-1\) , \(w_{temp}=1e-7\) , \(w_{depth}=8e-6\) 按经验设置为固定值。接下来,详细解释每一项的具体功能。
三维逆运动学项:该项计算相对根的3D关节点位置 \(P^{3D}_{k}[t]\) 和每个人 \(k\) , \(j\) 关节点和之前估计的相对骨骼长度 \(b_k\) 的正向动力学 \(\overline{\mathcal{P}}\left(\theta_{k}[t], b_{k}\right)\) 预测的相对根的关节点位置之间的3D距离:
二维重投影项:该项计算预测2D关键点 \(P^{2D}_k[t]\) 和正向动力学 \(\overline{\mathcal{P}}\left(\theta_{k}[t], b_{k}\right)\) 的2D投影之间的距离:
其中 \(c\) 表示2D预测的置信度,\(w_j^{2D}\) 是每个关节点的相对权重,\(\Pi\) 表示相机投影矩阵,与躯干关节(臀部、颈部、肩部)相比,下肢关节相对重量为1.7,肘关节为1.5,腕关节为2.0。注意 \(\mathcal P\) 输出单位高度,用 \(h_k\) 缩放将其映射到度量坐标,投影约束重构世界坐标中的绝对位置。
关节点角度限制项:在关节旋转极限 \(θ^{min}\) 和 \(θ^{max}\) 解剖结构的基础上,对关节角度的旋转量进行了软限制。把它写成:
从 \(j =7\) 开始,因为没有对全局位置和旋转参数的限制。注意,神经网络被训练来估计关节位置,因此没有关于关节角度限制的明确知识。因此,\(E_{lim}\) 确保了得到的结果在生物力学上的合理性。
时序平滑项:由于神经网络在每帧的基础上估计姿态,结果可能显示时间抖动。通过下面公式让估计的姿态的时间稳定性得到了改进
其中参数值的变化率 \(∇θk\) 是用后向差来近似的。此外,使用平滑项 \(E_{\text {depth }}=\| \theta_{k, 2}[t]_{z}-\theta_{k, 2}[t-1]_{z} \|\) 更强地惩罚了约束较少的深度方向的变化,其中 \(θ_{k,2}\) 是根位置 \(z\) 分量的自由度。
逆运动学跟踪初始化:对于新进入视场的人的第一帧,骨架的局部关节角与三维预测拟合时仅考虑 \(E_{3D}\) 和 \(E_{lim}\)。当最小化 \(E_{2D}\) 时,局部角度被固定,以找到最适合骨架的全局平移和旋转。
6. 结果
6.1 系统特点及应用
首先系统提供了有效和准确的3D动作捕捉,为实时角色动画和其他交互式CG应用做好了准备,尽管只使用单一的RGB视频源,但仍然可以与基于深度的解决方案竞争。
实时性能:实时系统使用标准的网络摄像头作为输入帧,处理512×320像素分辨率的输入帧。对于有10个人的场景,系统运行在桌面上有一个支持3.5 GHz的Intel Xeon E5和Nvidia GTX 1080Ti处理速度在每秒30帧以上。
6.2 在单人3D姿态数据集上的性能
在MPI-INF-3DHP数据集上,通过三个评价指标:正确关键点的3D百分比3DPCK(越高越好),曲线下面积AUC(越高越高),平均3D关节点误差MJPE(越小越好)。
6.3 多人3D位姿数据集的性能
在MuPoTS-3D monocular multi-person benchmark数据集上定量评价了该方法的精度
6.4 网络结构评估
SelectSLS网络与ResNet-50的对比
6.5 信道稀疏三维姿态编码评价
channel-sparse监督编码,这样只能在局部进行运动学上下文的解释,比channel-dense表现得更好。
6.6 骨骼拟合的评估(第三阶段)
尽管第三阶段的定量精度略有下降,但它在位姿估计的质量和时间稳定性方面产生了显著改善,并提高了末端执行器的精度。由此产生的时间平滑的关节角估计可以用于交互式图形应用程序。
7. 讨论和未来工作
本文方法是第一个采用RGB相机对多人场景进行实时三维运动捕捉。尽管如此,它有一定的局限性,将在今后的工作中加以解决。
与其他方法一样,本文方法的准确性是还不能与多视图捕获算法的精度相比。在该算法系统中,失败的案例可能来自于每个组成部分。如果是二维姿态估计可能是不正确的或部分关联是不正确的,那么三维的姿态估计也会不正确。此外,由于我们需要颈部可见才能成功地识别一个人,颈部被遮挡的情况会导致患者无法被检测到。
本文算法成功地捕捉了被遮挡的对象的姿态,即使在人与人之间出现相互遮挡的情况。然而,这种方法仍然不能可靠地捕捉到非常密切的交互,比如拥抱。结合运动约束可以进一步改善位姿的稳定性,增加时序稳定性,从而能够捕获人与其他物体的细粒度交互。
在某些情况下,个别姿势在几帧中有更高的误差,例如,强烈相互遮挡。然而,本文方法设法从中恢复姿态。在严重的自遮挡和相互遮挡情况下,拟合阶段可能存在误差,会使相机相对定位不稳定。不过重建的准确性和稳定性适合许多实时应用程序。
本文的算法速度很快,但相对简单的身份追踪器可能会交换人们的身份尤其是出现遮挡,较大的外观变化,和相似的服装外观。需要更复杂的时空跟踪解决这一问题。与所有基于学习的姿态估计方法一样,姿态估计精度退化不同于训练阶段。为了解决这个问题,需要扩展该的算法,使它可以在无监督或用半监督的方式处理未标记的多人视频。
8. 结论
与之前的方法不同,本文方法采用单个GPU可以达到实时的效果,以25 - 30帧/秒的帧率,并且输出骨骼关节角度和相对相机人的位置,这可以可用于控制虚拟环境中的动画角色,而且本文方法在遮挡情况下,仍然能够预测完整的身体姿态。