【笔记】Neural Parameterization for Dynamic Human Head Editing

Neural Parameterization

Introduction

mesh方法易于编辑,但表现能力有限,NeRF的效果好,但是难以编辑;这篇工作用隐式方法完成一致性强的动态场景重建,同时可以显式地编辑几何及纹理。

之前的工作中,对NeRF进行编辑,采用的都是latent code的方式,这样无法得到好的结果。NeuTex用2D的texture maps对隐式场的表面建模,通过编辑2D texture maps来改变纹理,但只局限于静态场景,且无法改变几何。Nerual Atlas提出视频所有帧共享一个texture atlas space,将每个像素映射到这里,从而只需要修改texture atlas space就能一致地编辑视频纹理。

这篇工作将人头分解为三个部分,density volume,UV volume和2D texture,从而可以分别编辑几何和纹理。这三部分都是隐式建模的,从而获得更高的精度,以及更少的内存需求;为了显式编辑几何以及纹理,在MLP中加入explicit layers,从而获得一致性强的编辑结果。

直接对网络进行优化,会陷入局部最优解,因此引入了一些regularization,以及两步优化的策略。

Overview

重建的目标是获得一个模型F

\[(\mathbf{c},\mathbf{\sigma}) = F(\mathbf{x},\mathbf{d},t) \]

即给一个空间坐标\(\mathbf{x}=(x,y,z)\),一个视角方向\(\mathbf{d} = (\theta,\phi)\)和时间戳\(t\),求得该点的颜色\(\mathbf{c}\)和密度\(\sigma\)

时间戳\(t\)被encode成一个latent code,并对\(\mathbf{x}\)\(\mathbf{d}\)做position encoding

编辑则分为几何和纹理的编辑,又各有2个模型,显式和隐式

\(V\)表示几何模型,\(T\)表示纹理模型,下标\(I\)\(E\)表示隐式和显式

image-20220808205239525

Geometry Modeling

几何重建的目标是,输入一个空间坐标和时间,输出UV坐标和density

如果只用隐式方法重建几何,将难以编辑

这里加入了\(V_E\),进行显式变形,理想的变形场需要满足三个要求

  1. 为了进行volumetric rendering,\(V_E\)要有density定义
  2. \(V_E\)要可微分,才能进行学习
  3. \(V_E\)可由部分参数控制,达到更精细的控制效果

\(V_E\)形如

\[V_E(\mathbf{x}) = \bar{\mathbf{x}}+ \dfrac{\sum_i\psi(\bar{\mathbf{x{}}})(\bar{\mathbf{t}}_i-\bar{\mathbf{s}}_i)}{\sum_i\psi(\bar{\mathbf{x}})} \]

其中的\(\psi(\cdot)\)是高斯核函数

\[\psi(\bar{\mathbf{x}}) = \exp\left(\dfrac{-(\bar{\mathbf{x}}-\bar{\mathbf{s}}_i)^2}{r_i^2}\right) \]

为了获得一致性强的编辑,控制点要精心选取

如果一个控制点在所有帧中都有着相同的语义信息(即在人脸上的位置相同)

那么在任意一帧内修改这个控制点,便能将改变传播到其余所有帧中

作者在face landmark的基础上,挑了96个顶点,作为控制点

image-20220808205216196

由于tracked face mask可能不准确,添加了一个loss监督控制点尽量贴近顶点

\[\mathcal{L}_{semantic} = \sum_i \sum_t ||\mathbf{s}_i^{(t)}-\hat{\mathbf{s}}_i^{(t)}|| \]

最终的UV模型为

\[V = V_I(V_E(x,t),t) \]

这里\(V_I\)用来建模一些短暂的变化,比如眨眼

Appearance Model

为了对view dependent和time dependent的texture进行建模,选择了隐式模型

但这将导致难以编辑,因此加入显式texture maps

显式的\(T_E\)存储大部分texture信息,而隐式\(T_I\)则负责建模瞬间的变化(如皱纹的变化)

最终的texture表示为

\[T(\mathbf{u},\mathbf{d},t) = T_E(\mathbf u) * \exp (T_I(\mathbf u,\mathbf d,t)) \]

由于我们希望\(T_E\)存储主要信息,\(T_I\)存储其余的信息,因此加入loss

\[\mathcal{L}_{sparsity} = \sum_k |T_I(\mathbf{u}_k,\mathbf{d}_k,t)| \]

这样会鼓励\(T_I\)尽量小,从而使得\(T_E\)的贡献更大

Rendering

采用和NeRF一样的volume rendering

Training

Main Supervision

\[\mathcal{L}_{MSE} = \sum_{i}^{B}||\mathbf{c}_i - \hat{\mathbf{c}}_i ||_2 + ||\alpha_i - \hat\alpha_i||_2 \]

添加了对\(\alpha\)的监督,从而防止网络用伪影来仿造材质效果

Texture Unwrap Regularization

网络已经可以获得不错的重建质量了,但是UV field噪声非常多,导致难以进行下一步编辑

image-20220809110449578

首先用tracked 3D face进行监督

\[\mathcal{L}_{uv} = \sum_i^P||V(\mathbf p_i,t)-\mathbf u_i||_2 \]

由于tracked face不够精确,所以这个loss的weight在20000轮左右指数衰减到0

同时,添加了cycle loss,更合理地建模头部表面信息

\[\mathcal{L}_{cycle} = \sum_{i}^{B} ||\mathbf{x}'_i - \hat{\mathbf{x}}'_i||_2 \]

其中\(\hat{\mathbf{x}}'_i = V_I^{-1}(\mathbf{u},t)\)\(V^{-1}_I\)将UV坐标映射回3D坐标

为了更平滑地建模,添加了保角loss

\[\mathcal{L}_{angle} = \sum_i^{B} \dfrac{|\nabla_{\mathbf x}u_{\perp} \cdot \nabla_{\mathbf x}v_{\perp}|}{||\nabla_{\mathbf x}u_{\perp} ||\ ||\nabla_{\mathbf x}v_{\perp}||} \]

Two-stage Training

为了更好地编辑,希望texture尽量静止,因此采用了两步训练法

首先固定材质(实际上是让所有时间戳映射到统一输出),让UV field尽可能学习

然后再加入动态材质,进行进一步优化,学习UV field没能成功建模的部分

Experiments

Reconstruction

image-20220809212102292

比NeRF系列略差一些,因为为了增强可编辑性,做了许多regularization

做完regularization后,效果应该更好才对?

Editing

在UV maps上,这篇工作的一致性更好,同一点始终在脸上的同一位置

并且能覆盖到整个头部,其他方法只能追踪部分

这是不同帧texture maps的情况,这篇工作的变化更少,一致性更强

Ablations

\(\mathcal{L}_{sparsity}\)旨在降低\(T_I\),让\(T_E\)完成主要材质,\(T_I\)作为辅助

可以看到,\(\lambda_{sparsity}\)过小,会让\(T_I\)学太多信息;过大则会让\(T_I\)学不到重要的temporal variations

最终选了0.05,兼顾了\(T_E\)\(T_I\)

Two-stage Training让texture maps更趋于静态,一致性更强,从而易于编辑

\(\mathcal{L}_{angle}\)的权重小,会有更好的重建效果(因为regularization更弱)

但这样一来,UV maps噪声太多,难以编辑

若权重过大,模型不收敛,性能急剧下降

最终选了\(\lambda_{angle}=0.5\)作为重建和编辑最好的trade-off

\(\mathcal{L}_{semantic}\)的加入,让控制点保持一致的位置,便于编辑

\(V_E\)本意是便于几何编辑,但意外地能增强重建的质量

posted @ 2022-08-10 14:12  GhostCai  阅读(190)  评论(0编辑  收藏  举报