参与实验室相关项目,精读了这一篇论文,记录一下笔记。
模型概览
作者提出了一种新模型:InstantAvatar,这是一个可以在几秒钟内从单目视频中重建人类头像的模型,并且这些头像可以以交互速率进行动画和渲染。为了实现这种高效率,作者提出了一个经过精心设计和优化的系统,它利用了新兴的神经场加速结构,结合了用于动态场景的高效的空间跳过策略。
关于神经场,这里放一个感觉很不错的介绍:一文搞懂 神经辐射场(Neural Radiance Fields,NeRF)_沃洛德.辛肯的博客-CSDN博客
作者对文章提出的模型具体描述如下:
在本文中,我们旨在进一步推进单目神经头像重建在真实世界中的应用性,通过提出一种在重建过程中所需的时间不超过输入视频捕捉时间的方法。为此,我们提出了InstantAvatar,一个系统,通过给定单目视频、姿势参数和遮罩,可以在60秒内重建高保真度的头像,而不是几小时。一旦学习了头像,它可以以交互速率进行动画和渲染。实现这样的加速显然是一个具有挑战性的任务,需要仔细设计方法,需要快速可微分的渲染和关节算法,并需要高效的实现。
我们的简单而高效的流程结合了几个关键组件。首先,为了学习规范形状和外貌,我们利用了最近提出的神经辐射场变种[42]。Instant-NGP [42]通过用更高效的哈希表作为数据结构替代多层感知器(MLP),加速了神经体积渲染。然而,由于空间特征被明确地表示,Instant-NGP 仅适用于刚体对象。其次,为了从姿势观察中学习并能够给头像添加动画,我们将规范的 NeRF 与高效的关节模块 Fast-SNARF [7] 进行了接口连接,Fast-SNARF 可以有效地导出连续的变形场,将规范辐射场变形到姿势空间。Fast-SNARF 比其较慢的前身 [9] 快了几个数量级。
最后,仅仅整合现有的加速技术是不足以实现所需的效率的。在规范空间中使用加速结构并且使用快速关节模块后,渲染实际体积成为计算的瓶颈。要计算像素的颜色,标准的体积渲染需要在射线上查询和累积数百个点的密度。常见的加速方法是维护一个占用格网来跳过空间中的采样。然而,这种方法假设场景是刚性的,不能应用于动态场景,比如运动中的人体。
我们提出了一种针对具有已知关节模式的动态场景的空间跳过方案。在推理时,对于每个输入的身体姿势,我们在姿势空间中对规则网格上的点进行采样,并将它们映射回规范模型以查询密度。对这些密度进行阈值处理得到规范空间中的占用格网,然后在体积渲染过程中可以利用该格网跳过空间中的采样。在训练过程中,我们在所有训练帧上维护一个共享的占用格网,记录各个帧上占用区域的并集。这个占用格网每隔几个训练迭代就用随机采样帧的姿势空间中随机采样点的密度进行更新。这种方案在计算效率和渲染质量之间取得了平衡。
模型方法
基础知识
1.高效的规范神经辐射场
文中使用一个规范空间中的辐射场 来对人体的形状和外貌进行建模,它预测规范空间中每个3D空间内点 x 的密度 σ 和颜色 c:
这个辐射场 是一个神经网络,它接受规范空间中的位置 x 作为输入,并输出对应点的密度和颜色。它可以看作是对整个人体头像的隐式表示,其中每个点都有一个密度值和颜色值,从而形成了一个完整的人体模型。通过学习这个辐射场 的参数,我们可以在规范空间中对人体进行建模和重建。
作者使用 Instant-NGP来对 进行参数化,该方法通过使用哈希表在不同粗糙度尺度上存储特征网格,实现了快速的训练和推理速度。为了预测空间中查询点的纹理和几何属性,它们读取并三线性插值其相邻网格点处的特征,然后将不同层次的插值特征进行拼接。最后,使用一个浅层的 MLP 进行解码。
2.变形神经辐射场(个人理解:"Articulating Radiance Fields" 指的是对辐射场进行变形以实现动画和姿势重建的过程)
为了创建动画并从姿势图像中学习,我们需要生成目标姿势下的变形辐射场 。姿势辐射场被定义为:
其中,σ 和 c 分别表示位于特定姿势下空间中的每个点 x′ 的密度和颜色。我们使用一个位于规范空间中的人体模型权重场 w 来建模关节的变形,其中 是它的参数:
这里,nb 是骨骼中的骨头数量。为了避免计算成本,文中采用低分辨率的体素网格来表示这个人体模型权重场。每个网格点的值由其在 SMPL [35] 模型上的最近顶点处的权重来确定。有了这个规范的人体模型权重场和目标骨骼变换 B = {B1, ..., B_nb},可以通过线性混合蒙皮来将规范空间中的点 x 变换到变形空间 x′,具体公式如下:
变形点 x′ 的规范对应点 x∗ 是通过方程的逆映射定义的。在 Fast-SNARF 中,可以通过根据 x′ 在规范空间中找到对应的点 x∗ 来高效地建立映射。然后可以通过 x∗ 来确定姿势辐射场,即:
从辐射场产生图像的方法
姿势关节辐射场 可以通过体积渲染方法渲染为新的视角。给定一个像素,我们发射一条射线 r = o + td,其中 o 是相机中心,d 是射线方向。我们在近平面和远平面之间沿着射线采样 N 个点 ,并通过将 映射回规范空间,并从规范神经辐射场 查询每个点的颜色和密度。然后,我们沿着射线累积查询得到的辐射和密度,得到像素的颜色 C。
其中 为样本间距离。
空白空间跳过方法
这里直接放一下译文:
我们注意到,围绕人体的3D边界框由于3D人体肢体的关节结构而主要由空白空间组成。这导致在渲染过程中有大量的冗余样本查询,从而显著减慢渲染速度。对于刚体对象,可以通过缓存一个粗糙的占用格子并跳过非占用的格子内的样本来消除这个问题。然而,对于动态对象,由于姿势的不同,空白空间的精确位置在不同的帧之间变化。
推理阶段:在推理时,对于每个输入的人体姿势,在姿势空间中采样64×64×64网格上的点,并从姿势辐射场f′_σ^f查询它们的密度。然后,将这些密度阈值化为二值占用值。为了消除由于低空间分辨率而被错误标记为空白的格子,我们膨胀占用区域以完全覆盖被检测的主体。由于这个网格的低分辨率以及渲染图像所需的大量查询,构建这样一个占用格子的额外计算开销是可以忽略不计的。在体积渲染过程中,对于位于非占用格子内的点样本,我们直接将其密度设置为零,而无需查询姿势辐射场。这将把不必要的计算降到最低,从而提高了推理速度。
训练阶段:然而,在训练阶段,每个训练迭代构建这样一个占用格子的额外开销不再可以忽略。为了避免这种开销,我们通过记录每个单独帧中占用区域的并集来构建整个序列的单个占用格子。具体地说,我们在训练开始时构建一个占用格子,并每隔k个迭代更新一次,通过取当前迭代中从姿势辐射场查询的密度值与当前迭代中的占用值的移动平均值。请注意,这个占用格子在一个标准化的空间中定义,其中全局方向和平移被分解出来,以使占用空间的并集尽可能紧凑,从而进一步减少了不必要的查询。
训练目标与正则化
训练目标
作者通过最小化预测像素颜色C与相应的真实颜色C_gt之间的鲁棒Huber损失ρ来训练模型:
正则化
硬表面规范化(Hard Surface Regularization)是为了进一步鼓励NeRF模型预测实体表面而添加的正则化方法。在头像重建或三维场景重建中,为了NeRF模型能够准确地预测实体物体的表面,而不是只生成空洞或不稳定的表面,作者通过硬表面规范化引入额外的约束,使模型更倾向于预测实心的、稳定的表面。
其中,const. 是一个常数,用于确保损失值为非负数。鼓励生成实心表面有助于加快渲染过程,因为一旦累积的不透明度达到1,我们就可以提前终止射线的计算。