ECCV 2020 实时人体运动捕捉,现在一颗普通摄像头就足够了
Monocular Real-Time Volumetric Performance Capture
想象一下,只需一颗普通摄像头就能实时捕捉你的人体运动,并实时传送到网络的另一端,是不是很酷,这一天可能很快就到来了。
本文作者来自南加州大学和 Pinscreen,作者提出了一个实时的单目人体动作捕捉方法,只需一颗普通摄像头,外加两块 NVIDIA GV100s 显卡,便能以 15 FPS 的帧率实时捕捉人体的动作。
该论文已被 ECCV 2020 接收,同时 SIGGRAPH 2020 Real Time Live (RTL) 项目 Volumetric Human Teleportation 背后的技术便源自该论文,RTL 是计算机图形学顶会 SIGGRAPH 的一个实时演示环节,会现场实时展示一些具有娱乐性、实时性、交互性和创新性的技术demo,大家到时候 (就在北京时间8月26日8点到10点) 可以看一下该论文的实时效果。今年 RTL 有九个项目,其他八个我放在 文章末尾,感兴趣的可以关注下。(Update: 项目获得了 ACM SIGGRAPH 2020 Real-Time Live! “Best in Show” Award !)
虚拟/增强现实和3D显式技术在过去几年取得了长足的进步,给人们带来了沉浸式的体验和全新的交互方式,但基于彩色相机的视频会议仍然是人们远距离面对面交流的最常见方式,原因很简单,Oculus、HTC Vive、Hololens,大部分人可能都没有,倒是彩色相机方便便捷,笔记本电脑、智能手机都有。因此,如果能够通过单个消费级相机就能捕捉到一个人的外观和运动,便能缩小普通用户在虚拟环境中进行沉浸式通信的差距。
然而,由于 深度歧义 (depth ambiguity)、自身遮挡 (self-occlusions)、拓扑变化 (topology changing) 等原因,仅从单个视角的彩色图片序列重建人体的几何和纹理是一个相当困难的问题。为了克服这些困难,大部分方法采用数据驱动的方式,通过深度神经网络来进行高精度、高鲁棒性的人体建模。Pixel-Aligned Implicit Function (PIFu) 便是其中的一种优秀方法,其能够以较高精度重建出穿衣服人体的几何和纹理信息。但 PIFu 在重建时需要对空间进行密集划分并计算,然后通过 Marching Cubes 算法提取等值面,还要以同样的方式预测纹理信息,对于 256^3 的空间划分整个过程需要 数十秒,速度较慢无法用于实时应用。为此作者提出了一种新颖的表面重建和渲染方法:
- 表面重建 方法以一种由粗到精的方式来逐步定位人体表面3D点,使得只需在少量点上计算便可以构建出 3D 占据场 (3D occupancy fields)。其能够在保持重建精度的基础上,比基线方法快2个数量级。
- 表面渲染 方法基于隐式纹理表达,能够直接从其他视角进行渲染,不需要显式地提取表面网格,也不需要几何细分或纹理映射,从而将渲染所需的时间减少了一半。
最终,在 256^3 的空间分辨率上,文章方法能够以 15 FPS 的帧率进行人体运动捕捉。文章代码已经开源,普通摄像头没问题,可问题是我没有两块显卡啊!
项目主页:
项目代码:
Method
文章方法的流程如下图2所示,给定实时的RGB图片流,文章的目标是实时重建出表演者的完整的3D几何形状和表面纹理。由于基于追踪的方案易于累积误差并对初始化敏感,从而导致漂移和不稳定,作者这里 独立处理每一帧图片。对于每一帧输入图片,首先从背景中实时分割出人体,然后将分割后的图片输入到 PIFu 中预测连续的 3D 占据场,其0.5等值面便是人体模型表面。然后再使用 PIFu 预测几何表面的纹理,从而允许从任意角度进行渲染以进行各种应用。
Pixel-Aligned Implicit Function (PIFu)
关于 PIFu,前面已经介绍过两篇文章,这里不再赘述。PIFu 是一个由神经网络表示的隐式函数 O(\mathbf{P}),其计算了标准化设备坐标系 (normalized device coordinates) 中的一点 \mathbf{P} = (P_x, P_y, P_z) \in \mathbb{R}^3 处的二进制占据值,即该点是处于物体的内部还是外部,数学表达为
O(\mathbf{P})=f_{O}\left(\Phi\left(\mathbf{P}_{x y}, g_{O}(\mathbf{I})\right), P_{z}\right)=\left\{\begin{array}{ll}1 & \text { if } \mathbf{P} \text { is inside surface } \\ 0 & \text { otherwise }\end{array}\right. \\
其中 g_{O} 是全卷积图像编码器,\Phi 是双线性采样函数,f_{O} 是由多层感知机 ( Multilayer Perceptron, MLP) 表达的函数,O(\mathbf{P}) 预测了 \mathbf{P} 处的占据值,即该点是位于人体内部还是外部。作者将 PIFu 中使用的 L2 损失替换为交叉熵损失 (Binary Cross Entropy, BCE),能够取得更快的收敛速度。
对于纹理/颜色预测,使用同样的网络框架,只是预测的不再是一个标量,而是一个RGB颜色向量:
\mathbf{T}(\mathbf{P}, \mathbf{I})=f_{T}\left(\Phi\left(\mathbf{P}_{x y}, g_{T}(\mathbf{I})\right), \Phi\left(\mathbf{P}_{x y}, g_{O}(\mathbf{I})\right), P_{z}\right)=\mathbf{C} \in \mathbb{R}^{3} \\
在训练纹理预测时使用采样点处颜色的 L1 损失。更多关于 PIFu 的资料,可以参考 [2] [3]。
Real-Time Inference and Rendering
PIFu 重建三维人体模型时需要对3D空间进行密集细分,并计算每一个点处的函数值,然后使用 Marching Cubes 提取三角网格,为了获得带纹理的网格,还需在每个网格顶点处通过 Tex-PIFu 计算颜色值。虽然隐式函数表达能够重建任意分辨率的3D形状,但在整个3D空间中的计算却非常缓慢,需要数十秒才能处理一帧。因此,加速至少两个数量级对于实时性能至关重要。
为了减少实时人体捕捉所需的计算量,作者引入了两种新颖的加速技术。首先,作者提出了一种有效的表面定位算法,该算法与基于八叉树的算法具有相同的复杂度,同时能保留蛮力重构的精度。然后,由于最终的输出是从新的角度渲染的图片结果,因此作者通过直接从 PIFu 生成新视角下的渲染图片来绕过显式的网格重建过程。通过结合这两种算法,可以实时从任意角度渲染得到人体图片。
Octree-based Robust Surface Localization
整个流程的主要瓶颈是在数量过多的3D点上对由神经网络表达的隐式函数进行评估,因此 减少要计算的3D点数目是提高性能的关键。八叉树是一种用于形状重构的通用数据结构,其层次结构大大减少了存储的节点数量。为了对由神经网络表示的隐式曲面应用八叉树,OccupancyNetworks[4] 提出先对预测的占据值进行二值化,然后只在内部和外部点之间进行空间网格细分,但作者发现该方法与基线方法相比会产生不准确的重建结果 (见下图3)。另一种方法是在相邻格点的最大偏差大于阈值时细分空间网格,该方法虽然能够权衡重建精度和速度,但该方法很难在精度和速度上同时取得令人满意的结果。为此作者提出了一种新的表面定位算法,能够分层逐步准确定位边界点。
表面定位算法的目标是在所需的分辨率下定位真实人体表面的空间格点,作者使用由粗到精的方式,通过剔除不必要的点来逐步更新边界格点,整个算法的流程如下图所示。
给定粗糙级别的占据值预测,首先以0.5为阈值对占据值进行二值化,再使用线性插值将插值得到的占据值临时分配给当前级别的网格点 (图4(a));然后提取占据值既不是0也不是1的网格点来作为边界候选点,为了覆盖足够大的区域,使用膨胀操作将一邻域点也加入到边界候选点 (图4(b));接下来再在这些候选点上计算占据值,在进入下一级别前,为了避免错误剔除边界点,需比较插值的占据值和网络预测占据值的差异来检测冲突格点,若两者不一致则存在缺失的表面区域,此时通过不断计算冲突节点一邻域格点的占据值来解决冲突 (图4(c))。
图4下面一行展示了文章方法和基于八叉树方法重建结果的比较,虽然在阈值较低时八叉树方法也可以取得准确的重建结果,但会计算过多的格点,相比文章的方法不仅可以提取准确的表面,还可以有效减少计算的格点的数量 (蓝色格点表示不需要网络计算占据值的格点)。
Mesh-free Rendering
虽然表面定位算法成功地加快了人体表面定位的速度,但最终的目标是从新的视角进行渲染。由于 PIFu 能够直接推断3D空间中任意点的纹理颜色,因此如果目标视角的表面位置能够给定,则可以直接生成该视角下的图像。受此启发,作者提出了一种基于视角的剔除算法,以及针对隐式数据表示的直接渲染方法。虽然最近有可微的 sphere tracing 和 ray marching 方法被提出来用于渲染隐式场,但这些方法都不适用于实时渲染。
上图5展示了基于视角的表面提取算法的流程。注意空间占据体与目标视角的标准化设备坐标系 (而不是模型坐标系或世界坐标系) 对齐,也就是说空间x轴和y轴对应于像素坐标,z轴与摄影机射线对齐。针对每个像素 \mathbf{q} 沿z轴搜索以定位表面几何形状存在的前两个连续格点 i_{max}(\mathbf{q})-1 和 i_{max}(\mathbf{q}),然后计算这两点处的占据值并插值得到人体表面的 3D 点 \mathbf{P}(\mathbf{q}),则图片 \mathbf{R} 通过如下公式渲染得到:
\mathbf{R}(\mathbf{q})=\left\{\begin{array}{ll}\mathbf{T}(\mathbf{P}(\mathbf{q}), \mathbf{I}) & \text { if } O_{\max }(\mathbf{q})=1 \\ \mathbf{B} & \text { otherwise }\end{array}\right. \\
其中 \mathbf{B} 是背景颜色。
Online Hard Example Mining for Data Sampling
PIFu 论文中提到,训练过程中的空间点采样方法非常重要,对结果影响很大,虽然其提出的混合采样效果较好,但对于训练集中出现较少的复杂人体姿态和相机视角,重建结果较差。虽然数据增强可以改善这一问题,但由于众多因素如姿态、视角、光照、服装都有可能影响,数据增强的策略很难设计。为此作者提出了一种在线困难样本挖掘 (Online Hard Example Mining) 方法,能够让网络无需人工干预自动发现困难样本,并自适应地更改采样概率。
Implementations
作者使用 NVIDIA GV100 训练网络,训练图像大小为 512×512。 在推断过程中,作者使用配备了 62GB RAM、6-core Intel i7-5930K 处理器和2个 GV100 显卡的台式机,并使用 Logitech C920 网络摄像头。 两块 GPU,一个用于几何和颜色推断,另一个执行表面重建,两者以异步方式并行处理,整个系统的总体延迟平均为0.25秒。
Network Architectures
文章的网络架构如下图所示,作者将图片编码器从 PIFu 中使用的沙漏结构替换为 HRNetV2-W18-Small-v2,HRNet 不仅重建精度更高,速度也更快。更多网络结构细节参加原始论文。
Datasets
数据集来源和 PIFu 类似,主要来自 RenderPeople 和 BUFF,具体数据处理、划分参加原始论文。
Results
下图展示了文章方法的几何重建结果,对于不同的光照、人体姿态、衣服类型,文章方法都能得到较为准确的结果。
下图展示了在网络图片上重建的结果,几何细节还是蛮丰富的。
下面是视频序列重建的结果。
Comparisons
下图展示了文章方法和 PIFu、DeepHuman 和 VIBE 重建结果的比较,文章的结果无悬念胜出。
下图展示了文章方法和基于模板的方法 LiveCap 结果的比较,文章方法重建的纹理更清晰,与输入图片更加匹配。
参考
- Monocular Real-Time Volumetric Performance Capture. Ruilong Li, Yuliang Xiu, Shunsuke Saito, Zeng Huang, Kyle Olszewski, Hao Li. ECCV, 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.
- PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization. Shunsuke Saito, Tomas Simon, Jason Saragih, Hanbyul Joo. CVPR (Oral), 2020.
- Occupancy Networks: Learning 3D Reconstruction in Function Space. Lars Mescheder, Michael Oechsle, Michael Niemeyer, Sebastian Nowozin, Andreas Geiger. CVPR, 2019.
欢迎关注公众号“人脸人体重建”,和您分享值得关注的人脸人体相关技术最新文章。