南洋理工大学 - 商汤科技联合研究中心 S-Lab 团队提出了基于 Gaussian Splatting 的高质量 3D 人体快速重建 (1~2 分钟) 和实时渲染 (高达 189 帧每秒) 框架 GauHuman。GauHuman 可以基于用户输入的一段单目人体视频,以及相应的相机和人体动作体型(SMPL)参数,快速重建该 3D 人体,并实时渲染该 3D 人体。
论文名称:GauHuman: Articulated Gaussian Splatting from Monocular Human Videos 论文下载地址:https://arxiv.org/abs/2312.02973 项目主页:https://skhu101.github.io/GauHuman 代码开源:https://github.com/skhu101/GauHuman 图1 GauHuman可以快速重建(1~2分钟)和实时渲染(高达189帧每秒) 高质量3D人体。 背景 3D 数字人重建对于一系列应用场景,比如虚拟现实和辅助现实,有着非常大潜在性的影响。基于人体神经辐射场,现有方法可以从 sparse-view 的视频甚至单张图片中恢复出 3D 数字人。然而这些方法往往需要昂贵的计算时间(高达 10 小时)和资源去完成训练和渲染,极大限制了他们在现实场景中的应用。为了加速建模过程,可泛化三维人体建模方法采用预训练加微调(pretrain-finetune)的范式。这类方法通常需要几个小时的预训练去获取可泛化的 3D 人体表征,再对每一个 3D 数字人额外微调一个小时完成建模。由于这类方法依赖的输入图片只能提供有限的信息,3D 人体重建的质量还有待提升。另一类研究针对人体建模引入更加高效的 3D 人体表征,比如多精度的哈希表征(multi-resolution hash encoding)或者 neural volumetric primitives。多精度的哈希表征提升了训练收敛速度,但渲染速度限制了他们的实际应用;neural volumetric primitives 提升了渲染速度,但训练速度和最终渲染质量还有提升的空间。得益于 Gaussian Splatting 在静态和动态场景中的实时渲染特性,本方法针对单目人体视频提出基于 Gaussian Splatting 的快速训练(1~2 分钟)和实时渲染(高达 189 帧每秒)的 3D 人体建模框架。 图2 基于一段单目人体视频,GauHuman可以快速训练(1~2分钟)和实时渲染(高达189帧每秒)高质量的3D人体。 基本原理 利用 Gaussian Splatting 对单目人体视频中的 articulated 3D 人体进行建模,我们需要解决两个难点问题:1)如何将单目人体视频中的 articulated 3D 人体信息引入 Gaussian Splatting 的框架;2)如何实现高效优化 articulated Gaussian Splatting。针对以上的问题,一个比较容易想到的方案是利用 Gaussian Splatting 对标准空间(canonical space)下的 3D 人体进行建模,并利用线性蒙皮算法(Linear Blend Skinning, LBS)将 3D 高斯球从标准空间转换到目标空间,从而渲染得到目标空间下的图像并构建损失函数。以上方案存在的一个问题是线性蒙皮算法定义的是3D人体顶点(vertex)的旋转和偏移,如何从人体先验比如SMPL中不准确的LBS系数和姿态(pose)信息中去学习标准空间中3D高斯球的旋转和偏移仍是一个难点问题。此外,现有的 Gaussian Splatting 方法利用 Structure-from-Motion(SFM)或随机初始化产生的点云去初始化 3D 高斯球的中心坐标。这一初始化方式主要是针对静态场景设计,忽略了人体的结构信息,不适用于快速人体建模。针对建模过程中出现的 over-reconstruction 和 under-reconstruction 现象,Gaussian Splatting 论文提出分裂(split)和克隆(clone)的操作来动态控制 3D 高斯球的数目。尽管以上操作可以显著提升重建的质量,它也产生了大量数目的 3D 高斯球,限制了优化的效率并占用了大量的硬盘空间(比如对一个静态场景需要 734MB 的存储空间)。另一个值得关注的点是,现有的Gaussian Splatting框架包含了大量冗余的3D高斯球,留给了我们进一步提升优化效率的空间。 针对以上提到的一些难点问题,我们从建模框架和快速优化算法两个方面去考虑解决。【将单目人体视频中的 articulated 3D 人体信息引入 Gaussian Splatting 的框架】受到之前人体神经辐射场(Human NeRF)的启发,我们利用 Gaussian Splatting 对标准空间(canonical space)下的 3D 人体进行建模,并将 3D 高斯球从标准空间转换到目标空间。基于高斯函数的变换性质,我们可以通过 LBS 算法将 3D 高斯球从标准空间旋转和偏移变换到目标空间。以上变换涉及到如何估 LBS 系数的问题,直接用神经网络来估计 LBS 系数往往需要很长时间的优化,最后渲染得到的效果也是差强人意。为了快速得到较为准确的 LBS 系数,我们 1)基于 SMPL 的 LBS 系数,并利用神经网络来提供一个偏置值;2)对人体的姿态(pose)信息基于训练数据进行纠正。当渲染一张 1024p 的图片时,以上建模框只需要对有限数目(比如 13k)的 3D 高斯球进行滚雪球处理,然而之前的人体神经辐射场需要对整个 3D 空间内百万级的采样点就行体渲染操作。这极大降低了在训练和渲染中的计算资源耗费。【高效优化 articulated Gaussian Splatting】1)3D 高斯球初始化。我们利用 3D 人体先验比如 SMPL 对 3D 高斯球进行初始化,极大提升了优化的效率。2)分裂/克隆/合并。通过实验分析,我们发现分裂和克隆操作忽略了将3D高丝球之间距离作为度量指标。基于以上分析,我们引入3D高丝球的Kullback-Leibler (KL)散度去约束分裂和克隆操作。对于大量冗余的3D高斯球,我们提出了一个合并操作去有效减小这部分3D高斯球。3)剪枝。考虑到 3D 人体有着特定的结构,我们将远离 3D 人体的 3D 高斯球进行剪枝操作。基于以上的快速优化算法,我们可以用大约 13k 的 3D 高斯球(大约占用 3.5MB 的硬盘空间)在一到两分钟内完成对 3D 人体的建模。 图3 GauHuman框架原理图。GauHuman首先基于人体先验SMPL去初始化3D高斯球位置,紧接着基于LBS系数偏差和人体姿态纠正模块去学习3D高斯球从标准空间转换到目标空间的转换矩阵。在后续优化过程中,GauHuman基于tile的可微分渲染器去快速渲染图片,并利用人体先验和KL散度去约束分裂,克隆,合并和剪枝操作,以达到有效控制3D高斯球数目的目的。 结果比较 本文在ZJU_MoCap和MonoCap两个单目人体数据集上进行了实验。该研究对比了对比了多个先进的3D人体重建方法:NB,AN, AS, HumanNeRF, DVA, InstantNVR, InstantAvatar, PixelNeRF和NHP,并在peak signal-to-noise ratio (PSNR),structural similarity index (SSIM),以及Learned Perceptual Image Patch Similarity (LPIPS)指标上进行了比较。如下图所示,GauHuman可以快速重建(1~2分钟)和实时渲染(高达189帧每秒) 3D人体,并在性能指标上超越了之前的方案。 3D 人体 Novel View Synthesis 结果如下图所示:图4 ZJU_MoCap上Novel View Synthesis结果比较图 图5 MonoCap上Novel View Synthesis结果比较图 应用前景 在游戏电影制作,虚拟现实增强现实或者其他需要数字人建模的场景,用户可通过输入一段单目人体视频,以及该角度下相机的参数和相应的人体动作体形参数(SMPL),就可以达到重建该 3D 数字人的目的。 结语 本文提出一种基于 Gaussian Splatting 的高质量 3D 人体快速重建 (1~2 分钟) 和实时渲染 (高达 189 帧每秒) 框架 GauHuman。可以承认的是,本文依然存在一定的缺陷。首先,如何从 3D 高斯中提取人体 mesh 还有待进一步研究。其次,从单目人体视频中恢复 3D 人体细节,比如说衣服皱褶,依旧是一个很难的问题。一个可行的方案是在 3D 人体重建中引入衣物物理仿真模型。最后,我们的代码已经全部开源,欢迎大家下载玩耍!