来源
:SIGGRAPH Asia 2022

项目主页
:https://ustc3dv.github.io/NeRFBlendShape/

论文链接
:https://arxiv.org/pdf/2210.06108.pdf

代码路径
:https://github.com/USTC3DV/NeRFBlendShape-code

作者
:Xuan Gao et al.
内容整理:张志宇
本文提出了一种用神经辐射场定义的人脸语义模型。3D 一致性头部模型由一组分离且可解释的基组成,可以由低维表达系数驱动。由于神经辐射场强大的表示能力,构建的模型可以表示复杂的面部属性,包括头发、穿着,这是传统网格混合形状无法表示的。为了构建个性化语义面部模型,作者将基定义为多个多级体素场。以短的单目 RGB 视频作为输入,本文提出的方法可以在十到二十分钟内构建目标的语义面部 NeRF 模型,并可以在几十毫秒内渲染出具有给定表情系数和视角方向的逼真的人脸图像。通过这种新颖的表示,我们将其应用于面部重定位和表情编辑等许多任务。实验结果证明了其强大的表示能力和训练/推理速度。
目录
  • 简介
  • 方法
    • 基于 NeRF 的线性混合表示
    • 渲染
    • 构建
  • 实验
    • 实现细节
    • 比较
    • 多视角合成

简介

图 1 提出了一种用神经辐射场定义的人头语义模型。该模型采用多级体素场作为基,具有相应的表情系数,在渲染和快速训练方面具有很强的表示能力。
3D人脸/头部表示是计算机视觉和计算机图形学中的一个重要研究问题,在AR/VR、数字游戏和电影行业有着广泛的应用。如何从单目 RGB 视频中表示动态头部并真实地重建个性化的人体头部模型是一个重要且具有挑战性的研究课题。基于人头可以嵌入到低维空间的假设,参数化语义头部模型,如 blendshape,已经被研究和改进了很长时间。 以不同面部表情的线性/双线性组合的形式表示的 blendshape 头部模型具有以下优点:它是语义参数化;组合系数作为特定面部表情的强度或影响对于用户具有直观的意义;同时,blendshape 构建了一个合理的形状空间,可以帮助用户在空间中自由控制和编辑。
广义语义头部模型,如 FaceWarehouse 旨在为具有不同表情的不同对象建模,因此可能会忽略个性化的几何和纹理细节。为了构建个性化的混合形状模型,传统的基于网格的方法通常采用变形传递和基于多线性张量的 3DMM。然而,这些方法通常具有以下缺点。首先,基于网格的参数化模型很难表示个性化的非面部部分,如头发和牙齿。其次,要使用 RGB 监督,我们必须使用近似可微分渲染技术来缓解不可微分问题。第三,由于表示能力有限,变形迁移无法逼真地重建表情。最后,面部表情具有许多因素的特征,例如年龄和肌肉运动,这些因素很难通过预定义的混合形状准确表达。
最近,基于 NeRF 的方法使得合成逼真的图像成为可能。一些工作将 NeRF 与 GANs 相结合。然而,这种生成模型将表情、身份和外貌耦合在一起,导致表情不易控制。HeadNeRF 提出分离不同的语义属性,但由于其通用模型能力,它不能表示个性化的面部动态和面部细节。ADNeRF 和 NerFACE 可以生成高度个性化的面部动画,他们针对用户的训练使模型学习到更多个性化的面部细节。但是,他们需要很长时间才能训练出合理的动态头场。根据我们的实验,这是因为他们将表情条件与傅里叶位置信息 concatenate 起来,并直接将其输入到 MLP。傅里叶位置编码和 “concatenate” 策略都不是快速训练的理想选择。傅里叶编码对于快速收敛的 MLP 并不友好,并且 “concatenate” 操作不包含任何组合法则来发现局部和全局特征之间的关系(在 NeRF 情况下,位置信息和表情条件)。 因此,MLP 需要很长时间才能学会如何使用表情条件来预测 RGB 和密度。
最近,局部特征已经被探索以提高 NeRF 的质量和效率。原始 NeRF 的局部特征是傅里叶位置编码,需要很长时间才能收敛。EG3D 采用紧凑高效的三平面架构,实现几何感知合成。TensoRF 将 4D 场景张量分解为多个紧凑的低秩张量分量以分离局部特征。在这些方法中,即时神经图形基元 (INGP) 在训练和渲染方面都表现出了显着的性能提升。它采用高度压缩的紧凑型数据结构,多级哈希表,使存储多级体素场成为可能。INGP 的一个新颖设计是以自适应方式解决特征查询冲突,不同层次的特征可以一起训练。再加上高性能光线步进实现的帮助,它可以在不到 1 分钟的时间内训练一个静态 NeRF 场景,并在几十毫秒内渲染一帧。
尽管已经提出了很多方法来加速静态 NeRF 场的训练和推理,但是要实现动态场景(例如复杂的头部变形)的快速训练仍然是一个问题。正如我们的 baseline 所示,使用直接 “concatenate” 策略将局部特征和表情参数组合在一起作为 MLP 的输入,这在基于 NeRF 的头部应用中很常见,但对于动态头部运动建模效率不高且不够充分。
在本文中,我们提出了一种定义在多级体素场上的个性化语义面部模型架构。 它不仅继承了用于跟踪的 mesh blendshape 的语义,而且还具有更加个性化的面部细节属性,特别是对于无面部部分。我们模型的每个基都是一个特定表请的辐射场,由多级体素场表示。出于性能考虑,我们采用多分辨率哈希表来存储多级特征。对于任何新的表情,它可以表示为体素基与表请系数的加权组合。我们采用 MLP 将体素场解释为用于体绘制的辐射场。为了进一步加速体绘制中的光线行进并使优化集中在头部可能占据的区域,我们设计了一种表达感知密度网格更新策略。由于我们的隐式模型具有强大的表示能力和快速收敛性,我们的方法在建模质量和构建速度上都优于其他类似的头部构建方法。我们的方法可以在大约 10-20 分钟内构建出逼真的个性化语义面部模型,这比相关的基于 NeRF 的头部技术要快得多。由于我们的模型是根据特定人物的视频进行训练并结合潜在空间中的特征,因此它可以捕获个性化细节,包括非线性变形(脸颊褶皱、前额皱纹)和用户特定属性(痣、胡须)。与传统的基于网格的 blendshape 模型相比,我们的模型可以从短的 RGB 视频构建,并生成具有不同表情的高保真视图一致的头部图像。

方法

在这项工作中,我们提出了一种新颖的个性化人体头部表示,它采用一系列专门设计的神经辐射场作为人体头部的基。类似于 FaceWarehouse,所提出模型的每个基都具有特定的语义含义,例如闭眼和下巴向前,这使得用户可以轻松地使用低维代码生成所需的人头图像。
我们的头部模型将多级体素场与潜在空间中的表情系数线性结合,多分辨率特征可以有效地学习不同尺度的头部细节。我们的线性混合设计可以提前调制局部特征以适应 MLP 的输入分布,从而减轻 MLP 的训练负担并表达更逼真的面部细节。我们通过集中采样近表面来提高模型的渲染效率。通过这些设计,所提出的方法可以在不到 20 分钟的时间内构建一组 NeRF 表情基。同时,训练后的模型具有交互渲染速度,可以渲染出逼真的人头图像。此外,我们基于 NeRF 的个性化 blendshape 生成的结果可以进一步进行语义编辑,例如自由调整相机参数和独立地将主体的表情更改为任何所需的表情,同时保持其他属性不变。所提出的算法的概述如图 2 所示,算法细节将在下面介绍。
图 2 Pipeline:首先跟踪 RGB 序列并获得表情系数、姿态和内参。然后使用跟踪到的表情系数,将多个多级哈希表组合起来,得到一个特定表情对应的哈希表。然后在哈希表中查询采样点以获得体素特征,使用 MLP 将体素特征解释为 RGB 和密度。 固定表达式系数并优化哈希表和 MLP 以获得头部模型。

基于 NeRF 的线性混合表示

线性混合表示基于神经辐射场,我们用基于 MLP 的隐函数表示它。此外,我们将表情基与多级哈希表相关联并通过精心设计的训练策略赋予每个哈希表指定的语义属性。将模型表示为 ,基于 NeRF 的线性混合表示的公式为:
其中 表示 MLP 的可学习权重参数。 是用于渲染的相机参数,包括外参和内参。 是表示潜在空间中 blendshape 平均形状的多级哈希表,其中 是哈希表的层数, 是哈希表大小, 是特征维度数。 是表示潜在空间中表情位移基的多级哈希表。 是模型的表情基数, 为表情系数。 就是 根据以上参数渲染出来的人头图像。

渲染

模型的渲染过程如图 2 右侧所示。首先计算给定表达式系数 对应的哈希表为:
我们在多级体素空间中组合基,而不是将显式空间中的混合形状基组合为网格混合形状。我们将 NeRF 的基于 MLP 的隐函数 表示为:
$$\begin{equation} g_\theta:(\eta(\mathbf{x} ; \mathbf{h}), \gamma(\mathbf{d})) \mapsto(\sigma, c) \end{equation $$
其中 是从一条射线采样的 3D 点。 表示表示视图方向的单位向量。 是 关于 的编码,由 的变换整数角点的哈希值索引的特征向量线性插值得到。 是 的位置编码,它将 投影到球谐函数基的前 16 个系数上。 和 分别表示 的预测密度和颜色。
实际上,表情系数可以结合由多级哈希表编码的局部特征,这有效地增强了我们模型的表示能力。因此,我们可以使用轻量级 MLP 来表示隐函数 。 的网络架构是一个具有 64 个神经元宽度的 4 层 MLP。这意味着我们的模型渲染可以高效执行。最后,我们通过以下体积渲染生成渲染图像 :
表示从相机原点发出的光线,头部 mask 可以用类似的方式生成:
总之,模型的渲染过程包括以下步骤:首先,使用表情系数线性组合表示潜在空间中不同表情基的多级哈希表。然后投射光线以获得采样点。通过查询组合哈希表中的这些点,生成样本点哈希编码。之后进一步使用基于轻量级 MLP 的隐式函数将生成的哈希编码映射到 RGB 和密度以进行体积渲染。需要指出的是,这些步骤可以快速计算,我们将在构建模型时进一步跳过空白区域。因此,模型的渲染是高效的,构建的个性化语义头部模型可以快速生成具有给定目标表情系数的目标头部图像。此外,高效的渲染实际上也加快了模型的构建。

构建

由于上述精心设计,仅使用 3-5 分钟的单目 RGB 视频即可构建所提出的基于 NeRF 的个性化语义面部模型。在下文中,我们将介绍构建模型的算法细节。
数据预处理
首先,我们使用 Facewarehouse 的方法跟踪输入视频中的人脸。然后我们可以得到每一帧的表情系数和头部姿势参数。像 HeadNeRF,我们将人体头部姿势参数作为相应帧的相机外参,隐式地将每个帧的底层几何图形对齐到相同的空间位置。最后,我们从输入视频中随机提取 帧来训练我们的模型,所选帧的头部掩码由现成的分割方法生成。我们将所选帧的优化表达系数表示为 。
训练
我们模型的可学习变量包括隐函数 的网络参数 和表示表情基的多级哈希表 。同时,我们取 作为我们个性化的基于 NeRF 的混合形状的表情系数,并在训练我们的模型时冻结它们。 用于训练我们模型的损失项包括以下三个项:
光度损失
这种损失要求渲染结果与输入 RGB 图像一致,这对于基于 NeRF 的重建很常见,可以表示为:
其中 是每个 batch 中的一组光线,、 分别是光线 的预测 RGB 颜色和真实颜色。
掩码损失
这种损失需要式 (5) 的渲染掩码与 GT 的头部掩码一致,它被表述为:
其中 和 分别是射线 的预测掩码值和真实值。这种损失确保头部区域之外的密度为零,并且还让头部区域迅速变成不透明物体。
感知损失
感知损失 用于提供对轻微错位和阴影变化的鲁棒性,并改善重建中的细节。我们选择 VGG 作为 LPIPS 的骨干。由于 LPIPS 使用卷积来提取特征,我们采样 块大小为 的 patch,并在每 batch 中渲染总共 条射线( 也是每 batch 中的帧数)。将渲染的 patch 与输入图像上具有相同位置的 patch 进行比较。
总之,训练模型的总体损失定义为:
其中 是用于平衡不同项的标量。为了最小化总损失,我们提出了一个精心设计的训练策略,它包含三个步骤: 在前 2 个 epoch,我们将 、 设为 1, 设为 0。掩码损失可以使模型快速学习 3D 密度分布,因为它是直接对密度分布的监督。稳定的密度分布也有利于后续的密度网格更新。
虽然掩码损失可以帮助密度场收敛,但我们发现解析掩码不是很准确,尤其是对于头发部分。因此,对于第 2-7 个 epoch,我们将 、 设置为 0 并仅使用光度损失。我们使用 RGB 数据来监督 NeRF 训练以学习精细的颜色和几何形状。
最后,我们不仅对光线进行随机采样,还对 patch 进行采样。对于随机采样的光线,我们将 设置为 1,将 、 设置为 0,对于采样块,我们将 设置为 0.1,将 设置为 0.1。我们以 1/2 的概率对口部中的 patch 进行采样,否则对整个图像进行采样。
表情感知密度网格更新
我们使用 密度网格来存储局部密度信息,以指示光线行进跳过空白空间。与静态场景不同,捕捉到的动态人头随着时间的推移而变化着不同的姿势和表情。如图 3 所示的示例,特定表情的密度场无法覆盖所有表情情况。我们不应该使用某个表情的密度场来确定密度网格。在我们的实现中,我们将每个基的密度网格计算为:
是 的第 个元素。我们计算所有 的密度网格的逐元素最大值,以获得最终的密度网格来近似头部表情的自然 3D 范围。
图 3 特定表情的密度网格可能无法覆盖所有表情示例。某些帧中的头部可能超出范围。

实验

实现细节

我们使用 Pytorch 实现我们的语义面部模型,并使用 Pytorch 的 CUDA 扩展来实现光线行进和体积渲染部分。我们的模型使用 Adam 优化器进行训练并设置 batch size 为 4。我们的表情系数的维度为 46,我们将感知损失的 patch 大小设置为 32。我们的哈希表的参数列在表 1 中。所有结果均在一张 RTX 3090 卡上测试。
表 1 哈希表参数
对于每个目标人物,我们收集了一个 3-5 分钟的单目 RGB 视频,分辨率为 512×512,帧率为 30 fps。因此,我们为一个人捕获了 5000-10000 帧图像。最后 500 帧作为测试数据集,我们从其余的随机抽取 3000-4000 帧作为我们的训练数据集。

比较

我们将模型的渲染质量和表示能力与现有最先进的面部重现或头部建模方法进行比较。具体来说,FOMM 使用参考图像和驱动视频作为输入来生成运动视频序列。NerFACE 和 NHA 使用与我们相同的训练数据。NerFACE 是基于 NeRF 的头部建模,它将表情参数和位置编码信息的串联作为输入。Neural Head Avatars 在 FLAME 模型上显式的重建了完整的头部。
图 4 显示了我们的模型与上述方法之间的定性比较。可以看出我们的模型优于其他模型。我们发现 FOMM 的 3D 一致性不如其他。这个缺点可能源于它的 2D CNN 架构没有足够的 3D 空间知识。NerFACE 倾向于学习低频信号并努力对头部详细信息进行建模。Neural Head Avatars 比 NerFACE 具有更多个性化细节。然而,显式网格域限制了它的表示能力。如此图所示,NHA 结果中出现了不需要的几何伪影。相比之下,我们的结果与 ground truth 最一致,可以表示和渲染人头的精细级细节。
图 4 与最先进的头部建模和面部重现方法的比较。可以看到我们的模型重建了高保真表情和面部细节。
表 2 显示了我们的模型与其他方法之间的定量比较,其中均方误差 (MSE)、L1 距离、峰值信噪比 (PSNR)、结构相似性指数 (SSIM) 和学习感知图像补丁相似性 (LPIPS) 被计算出来。值得注意的是,我们的方法在任何重建误差方面都优于这些现有方法,这进一步验证了我们模型的有效性和优越性。
表 2 与基于自我重演的最先进面部重演方法相比,对我们的方法进行定量评估。我们计算每种方法的平均值和标准差。
由于用于跟踪的表情系数空间与身份空间分离,我们可以使用基于网格的混合形状的任何人的面部表情系数来组合我们的基并使用给定视图渲染辐射场。基于这一观察,我们应用我们的模型来执行面部重现,我们将面部表情从一个人转移到另一个人。具体来说,我们跟踪源对象的视频并获取姿势、相机内在参数和表情系数。姿势和内参用于投射光线,我们进一步使用表情系数来组合目标的基。然后在最终的哈希表中查询采样点并由 MLP 解释以预测 RGB 和密度。与其他方法相比,我们的方法还展示了更个性化的面部细节,并在交叉身份重演中以表情系数为条件合成了更合理的人头(见图 5),这表明我们的基础在语义上是正确的,适合重演。
图 5 我们的模型可以很容易地用于面部重现。与其他方法相比,我们的方法还展示了更多个性化的面部细节,并在交叉身份重现中以表情系数为条件合成了更合理的人头。

多视角合成

我们的模型可以自由调整模型的相机参数,以生成具有任何所需渲染视图的目标结果。图 6 显示了基于我们模型的新视图合成应用。我们首先使用测试集中的一组表情参数来组合基以获得相应的辐射场。然后通过体渲染生成具有不同渲染视图的渲染图像。由于 NeRF 的 3D 一致性,这些渲染结果具有显着的多视图一致性。
图 6 多视角合成
继续阅读
阅读原文