Robust 3D Self-portraits in Seconds
快速、准确、鲁棒、高效的3D人体重建一直是一个研究热点,在游戏、 VR/AR、虚拟试衣等众多领域都有着重要的应用。
本文已经被 CVPR 2020 接收为 Oral 文章,作者来自清华大学的刘烨斌老师团队,BodyFusion
、DoubleFusion
、UnstructuredFusion
、HybridFusion
、DeepHuman
等一系列人体重建、捕捉方面的优秀工作都出自该团队。
项目主页:http://www.liuyebin.com/portrait/portrait.html
作者将深度学习和传统的优化方法相结合,提出了一种基于 RGBD 相机的3D人体快速重建方法,只需要在相机前面自转一圈,数秒时间便可以重建出穿着衣服的 3D 人体模型,且模型表面有丰富的几何细节。下面是文章方法的Demo视频。
3D自画像 (人体重建) 方法可以被分为三类:
- 基于学习的方法 (learning-based methods):主要从单张 RGB 图片恢复人体的三维模型,但由于遮挡和深度歧义,重建精度较低;
- 基于融合的方法 (fusion-based methods):通过递增的方式重建几何,但不可避免地存在累计误差,尤其是非刚性的情况下,导致重建闭环问题;
- 基于光束法平差的方法 (bundle-adjustment-based methods):该类方法采用光束法平差算法来改善渐进式融合的累积误差问题。首先将输入序列分割为一些块,在每个块之间进行融合得到光滑的部分扫描结果,最后基于显式的回环对应和光束对应将所有的部分扫描数据同时非刚性地注册在一起得到最终模型。虽然结果不错,但该方法需要多个 RGBD 相机或者电子转盘,效率较低。
文章方法将以上三种方法组合在一起,汲取各自的优点和长处,提出了一种高效、鲁棒的基于RGBD相机的人体重建方法。
Overview
给定一段捕捉了人体自然旋转一圈的 RGBD 视频序列,文章通过下面三个步骤来进行重建:
- RGBD-PIFu:通过神经网络从第一帧 RGBD 图片预测一个大致准确的人体模型;
- PIFusion:对于每一帧,首先使用前面估计的人体模型作为内层,进行基于双层表达的非刚性追踪,然后使用传统的非刚性融合方法将深度数据融合到参考帧中。再使用非刚性体变形进一步优化内层模型,以提高追踪和融合的精度。最后将整个序列分为几个小块并在每个块中分别进行融合,得到部分扫描结果。
- Lightweight bundle adjustment:使用 BA 算法对部分扫描网格进行回环优化,在每次迭代中,选择合适的关键帧来构建深度对齐和轮廓对齐能量项,然后通过联合优化,使得所有部分扫描能够组合在一起形成闭环,还能将其变形对齐到每一个关键帧深度图。
RGBD-PIFu
作者将像素对齐的隐式函数 (Pixel-aligned Implicit Functions, PIFu)[2] 进行推广,提出 RGBD-PIFu 来从单张 RGBD 图片重建 3D 人体模型。PIFu[2] 是 ICCV 2019 的一篇文章,其通过水平集函数
这里
PIFusion
Initialization
首先将第一帧深度图直接投影来初始化截断符号距离函数 (Truncated Signed Distance Function, TSDF) 体并将 RGBD-PIFu 得到的内层模型拟合到 TSDF 体中,然后基于测地距离 (geodesic distance) 在内层模型上均匀采用得到变形节点图,以对融合的外层表面和内层模型的非刚性形变进行参数化。
Double-layer Non-rigid Tracking
给定第
这里
整个目标函数通过迭代最近点 (Iterative Closest Point, ICP) 算法求解,通过高斯牛顿法求解优化问题,优化过程中,随着 ICP 迭代次数的增加,权重
Outer and Inner Term
两个数据项能量衡量了双层表面与深度图之间的对齐程度,其有着相似的数学表达:
其中
这里
其中
Smooth Term
光滑项定义在节点图的所有边上,用来保证局部变形尽可能刚性,其定义如下:
这里
Non-rigid Volumetric Deformation
通过 RGBD-PIFu 预测的初始内层模型可能并不足够准确,从而会影响整个追踪效果。作者参考 DoubleFusion[3] 中的方法,通过非刚性的体变形算法将内层模型拟合到融合的网格 ( TSDF 的零等值面) 来持续地矫正内层模型。
给定更新后的 TSDF 体,非刚性体变形的能量函数如下:
其中
这里
Partial Scan Fusion
为了确保后面的 BA 只在少数部分扫描之间进行,作者将整个序列分为5段,覆盖人体前后、左右侧面的视角。由于累积误差,第一个和最后一个部分扫描结果可能不是非常对齐,无法形成一个闭环,因此作者提出了一个轻量级的 BA 算法来解决这个问题。
Lightweight Bundle Adjustment
为了使得所有的部分扫描能够形成一个封闭完整的模型,且能够通过变形场非刚性地拟合到每帧深度图,作者提出了一个高效的算法来联合优化 BA 变形 (用于闭环重建) 和变形场 (用于深度图拟合),如下图所示。
作者首先对每个部分扫描构建了一个变形节点图用于参数化 BA 变形,然后通过优化节点图的参数使得所有部分扫描能够形成一个闭环重建。除此之外,同时优化变形场使得所有部分扫描能够同时变形到每帧深度图,每个部分扫描有着自己的BA变形,同时所有的部分扫描共享同一个到深度图的变形场。为了确保算法的高效性,作者根据变形后的部分扫描和对应深度图之间的几何不对齐误差选择深度图关键帧
Formulation
整个优化目标函数如下所示:
其中
在每一次迭代过程中,交替优化
Loop Term
闭环重建能量项衡量所有部分扫描之间的对齐程度:
其中
Live Depth Term
深度拟合能量项确保部分扫描能够和
其中
Live Silhouette Term
轮廓对齐能量项衡量部分扫描变形后渲染得到的人体轮廓与输入的人体Mask轮廓之间的对齐程度,和 LiveCap 和 DeepCap 中的方法类似,基于距离变换 (distance transform) 表示:
这里
光滑能量项即前面介绍的 ARAP 能量项。整个能量函数通过高斯牛顿法求解,每次迭代构建一个大型稀疏线性方程组,通过高效的预分解共轭梯度 (Preconditioned Conjugate Gradient, PCG) 求解器计算更新值。
Non-rigid Multi-texturing
在 BA 之后,再将所有的部分扫描融合在一起,通过泊松重建得到封闭的网格。最后再针对每帧彩色图,将每个可见点投影到图像空间,并根据顶点法向将每个可见视角的颜色进行融合得到该顶点最后的颜色值。
Results
Performance
整个算法在 NVIDIA Geforce RTX 2080Ti GPU 上实现,初始化阶段 (包括 RGBD-PIFu 生成初始内部模型和 PIFusion 的初始化) 最多需要 10s,PIFusion 以 30ms 每帧的速度实时运行,对于每一帧,追踪、非刚性体变形和融合分别消耗20ms、3ms 和 6ms。BA 消耗 15s,计算纹理颜色需要 1s。
Results
下图展示了文章的部分重建结果。
下面左图展示了文章方法 PIFusion 与 DynamicFusion 和 DoubleFusion 的结果比较,文章方法能够得到更加准确的重建闭环,尤其是特别宽松的衣服情况下。右图展示了与当前 state-of-the-art 的非刚性 BA 算法的结果比较,文章方法能够得到更加准确、具有更多细节的重建结果。
参考
- Robust 3D Self-portraits in Seconds. Zhe Li, Tao Yu, Chuanyu Pan, Zerong Zheng, Yebin Liu. CVPR(Oral), 2020.
- PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization. Shunsuke Saito, Zeng Huang, Ryota Natsume, Shigeo Morishima, Angjoo Kanazawa, Hao Li. ICCV, 2019.
- DoubleFusion: Real-time Capture of Human Performances with Inner Body Shapes from a Single Depth Sensor. Tao Yu, Zerong Zheng, Kaiwen Guo, Jianhui Zhao, Qionghai Dai, Hao Li, Gerard Pons-Moll, Yebin Liu. CVPR(Oral), 2018.
欢迎关注公众号“人脸人体重建”,和您分享值得关注的人脸人体相关技术最新文章。