科学怪物!3D人体全身运动捕捉系统,港中文联合Facebook出品
作者 | VVingerfly
编辑 | 陈大鑫
3D人体姿态和形状估计在最近几年是一个重要的研究热点,但大部分工作仅仅关注人体部分,忽略了手部动作,港中文联合Facebook AI研究院提出了一种从单张图片同时估计人体姿态和手部动作的新方法,展示效果好似科学怪物。
如下图左下和右下所示,易看出本文提出的方法姿态估计效果更好。
1 介绍
本文作者提出了一个3D人体全身运动捕捉系统 FrankMocap,能够从单目视频同时估计出3D人体和手部运动,在一块GeForce RTX 2080 GPU上能够达到 9.5 FPS。作者提到 “FrankMocap” 是对现代普罗米修斯 (The Modern Prometheus)中科学怪人 (Frankenstein) 的怪物的致敬。
人们每天会拍大量的日常活动视频上传到网络,如果有一种基于普通摄像头的运动捕捉系统,能够捕捉视频中人体的运动,将在人机交互、人工智能、机器人等众多方向有所应用。
同时捕捉人体和人手的运动对这些应用同样重要,但人手只占身体的很小一部分,要想直接捕捉两者的运动是一个很难的问题。当前的大部分相关工作都只顾及图片中人体的3D姿态,忽略图片中人手的动作。有部分工作关注从单张图片同时估计人体的全身运动,但这些工作都是基于优化的方法,将参数化的人体模型拟合到图像信息,速度较慢不适合实时应用。
这篇文章提出了一个快速准确的方法来从RGB图片或视频估计人体和人手的姿态。作者采用 SMPL-X 人体模型,首先通过两个回归模块来从输入图片分别估计人体和人手的3D姿态,然后再通过一个整合模块将预测的结果组合在一起,得到最终的3D全身人体。文章代码将会开源。
项目主页:
https://penincillin.github.io/frank_mocap
项目论文:
https://arxiv.org/pdf/2008.08324.pdf
2方法
作者使用 SMPL-X 人体模型,给定一张彩色图片,通过两个网络模块分别预测手部姿态和人体姿态,然后再通过整合模块将手和身体组合在一起,得到最终的3D全身模型,整个流程如下图所示。
SMPL-X 模型
SMPL-X 人体模型是一个参数化的3D人体模型,是 SMPL 模型的扩展,能够通过低维的人体形状和姿态参数的组合来表达不同形状和姿态的3D人体,其与 SMPL 模型的最大差异在于 SMPL-X 模型通过引入额外参数,能够同时表达人体的手指运动和面部表情。
SMPL-X 人体模型可以用如下数学公式来表达:
这里
是人体的整体旋转,
是人体姿态相关的变形参数,
是人体和人手形状相关的参数。作者将姿态参数
拆分为人体相关的参数
和左右手相关的参数
、
,所以
。所有的姿态参数由轴角表达,是某关节点相对于其父节点的相对旋转。最终得到的 SMPL-X 人体模型包含 10,745 个顶点
。人体关节点的3D位置可以通过在顶点上作用关节点回归矩阵
得到:
这里
。人手模型来自 SMPL-X 的手部,定义为
其中
是手的姿态参数,
是手的形状参数,
是手的整体旋转。最终手部的网格包含 788 个顶点,即
,其中
的一个子集。同样手部关节点的位置可以通过关节点回归矩阵计算得到
这里
包含一个手腕关节点、15个手指关节点和5个指尖点。手部网格和骨架层级关系如下图所示:
3D手部估计模块
手部预测模块基于一个端到端的神经网络,直接回归手部姿态参数,其定义如下:
其
是从输入图像中截取的手部区域图片块,
是弱透视投影的相机参数,能够将手部模型投影到输入图像。
网络架构
手部模块的架构如下图所示,其由一个编码器和解码器组成,编码器使用 ResNet-50,将手部图像块作为输入输出编码的图像特征,解码器由全连接层构成,从图像特征回归手部模型参数。
损失函数
手部姿态和形状估计的网络训练时使用的损失函数主要由4个部分组成:
其中
是在有3D人体参数时的关节点轴角损失:
是3D关节点标注数据时添加的关节点损失:
是2D关节点损失,其对预测相机参数非常重要:
是手部形状参数的正则项,用于惩罚不自然的手部形状。
3D手部姿态数据集
3D手部姿态数据集通常是在受限的实验室环境下采集的,用这些数据集训练的模型经常会遇到过拟合的问题,在室外数据表现较差。
作者注意到,现有3D人体姿态估计方法表明利用不同的数据集可以大大提高模型的泛化能力,因此作者使用尽可能多的公开数据集来训练手部姿态估计网络,包括 FreiHAND、HO-3D、MTC (Monocular Total Capture) 、STB (Stereo Hand Pose Tracking Benchmark)、RHD (Rendered Hand Dataset)、MPII+NZSL 数据集。由于部分数据集的手部骨架与文字不同,作者以中指长度为参考,对这些数据集的3D手部关节点缩放到与文章手部模型近似一致的尺寸,并将关节点顺序按照文章的层次结构重新排列。
3D人体估计模块
3D人体姿态和形状估计网络参考自 SPIN 的网络结构,SPIN 是一个从单张图片估计 SMPL 人体模型参数的 SOTA 的方法,作者将其输出从 SMPL 的参数修改为 SMPL-X 模型参数,并对网络进行了微调。3D人体姿态估计模块的定义如下
其中
是从输入图像中截取的人体部分,
分别是人体全局旋转、人体姿态参数和人体形状参数。同样这里使用弱透视投影相机参数
。
损失函数和数据集
3D人体估计网络使用了 Human3.6M 数据集和 EFT 数据集,其中 EFT 数据集包含 COCO 和 MPI 中的人体图片及其对应的 SMPL 模型参数。由于 SMPL 的形状参数和 SMPL-X 不兼容,作者在训练时只使用这些数据集的人体姿态参数。损失函数和 SPIN 原始论文中使用的一样,但是没用使用 SMPLify 损失部分。
全身整合模块
整合模块将3D人体和手部模块输出的结果组合在一起得到 SMPL-X 模型的参数表达,作者提供了两种方法来整合:
复制粘贴方式:直接将人体和手部组合起来,速度快;
优化拟合方式:使用2D关键点来优化人体参数以得到更加准确的结果,但速度较慢。
复制粘贴组合
由于人体和手部模块的输出与 SMPL-X 人体模型的参数是兼容的,因此可以很简单地将两者合并在一起。只需将左右手从世界坐标系变换到人体模型腕关节的局部坐标系下即可。
优化拟合方式
优化拟合方式通过优化人体模型的参数来拟合人体的2D关键点,以得到与图片更加对齐、更加准确的人体网格。优化的目标函数如下:
这里
是3D关键点的投影与目标图像中检测的2D关键点之间的投影误差,
是一个先验项,使得人体的姿态和形状参数处在一个合理的范围。作者参考 EFT[3] 文章中的方法,通过微调网络来最小化目标函数,只需迭代少数几次便能得到不错的结果。
下图展示了复制粘贴组合和优化拟合组合两种方法的结果对比,可以看到优化后人体的姿态更加准确,但速度会有所下降。
3 结果
下面表格展示了文章方法和其他方法的运行时间对比,文章的复制粘贴组合方式在 GeForce RTX 2080 GPU 上能够达到9.5FPS,优化的方法也有0.95FPS,均高于 SMPLify-X 和 MTC 方法。
下图展示了文章方法在手部姿态估计方面与当前 state-of-the-art 的方法的比较,文章方法的结果更加准确,与图片更加一致。
下图展示了文章方法和 Monocular Total Capture,SMPLify-X 结果的比较,文章方法估计的人体、人手姿态更加准确,而且速度会快很多。
更多演示结果
不如跳舞~
熟练地玩抽纸~
倒杯水喝~
参考论文
FrankMocap: A Fast Monocular 3D Hand and Body Motion Capture by Regression and Integration. Yu Rong, Takaaki Shiratori, Hanbyul Joo. ArXiv, 2020.
Expressive Body Capture: 3D Hands, Face, and Body from a Single Image. Georgios Pavlakos, Vasileios Choutas, Nima Ghorbani, Timo Bolkart, Ahmed A. A. Osman, Dimitrios Tzionas, and Michael J. Black. CVPR, 2019.
Exemplar Fine-Tuning for 3D Human Pose Fitting Towards In-the-Wild 3D Human Pose Estimation. Hanbyul Joo, Natalia Neverova, Andrea Vedaldi. ArXiv, 2020.