文章目录
- NeRF
- AD-NeRF
- 模型
- NeRF
- 体渲染
- 个体NeRF表示
- 背景和姿态编辑
- loss
- 参考
NeRF
将一个连续的场景表示为一个输入为5D向量的函数,这个函数为NeRF函数,它的输入由一个空间点的3D位置 x = ( x , y , z ) \mathbf{x} = \left( x, y, z \right) x=(x,y,z)和它的2D视角方向 d = ( θ , ϕ ) \mathbf{d} = \left( \theta, \phi \right) d=(θ,ϕ)组成,输出为对应3D位置的颜色 c = ( r , g , b ) \mathbf{c}=\left( r, g, b \right) c=(r,g,b)和体素密度 σ \sigma σ。NeRF函数用公式表示为 F : ( x , d ) → ( c , σ ) F : \left( \mathbf{x}, \mathbf{d} \right) \rightarrow \left(\mathbf{c}, \sigma \right) F:(x,d)→(c,σ),在具体的实现中,可以使用一个MLP网络近似拟合NeRF函数。
NeRF 函数得到的是一个3D空间点的颜色和密度信息,但用一个相机去对这个场景成像时,所得到的2D 图像上的一个像素实际上对应了一条从相机出发的射线上的所有连续空间点,因此需要通过渲染算法从这条射线上的所有点得到这条射线的最终渲染颜色。
体素密度 σ ( x ) \sigma\left( x \right) σ(x)可以解释为:一个射线终止于 x x x处的无穷小粒子的微分概率。
将一个相机射线表示为 r = o + t d \mathbf{r} = \mathbf{o} + t \mathbf{d} r=o+td,其中 o \mathbf{o} o为射线原点, d \mathbf{d} d为射线2D视角。 t t t的近端和远端边界分别表示为 t n t_{n} tn和 t f t_{f} tf, T ( t ) T\left( t \right) T(t)为射线从 t n t_{n} tn到 t t t时的累积透射率(通俗点理解就是射线 t n t_{n} tn到 t t t一路上未击中任何例子的概率)。一条射线上的点是连续的,那么这条射线的颜色 C ( r ) C\left( \mathbf{r} \right) C(r)是可以通过积分的方式得到,用公式表示为:
从连续神经辐射场渲染视图需要估计虚拟相机中每个像素追踪相机射线的积分 C ( r ) C\left( \mathbf{r} \right) C(r),可以使用求积分的方式对 C ( r ) C\left( \mathbf{r} \right) C(r)进行数值估计。但是现实中,MLP只作用于离散位置集。
NeRF论文中提到了分层抽样的方法,将 [ t n , t f ] [t_{n}, t_{f}] [tn,tf]划分为 N N N个等分的区间,然后从每个区间中随机均匀地抽取一个样本。虽然使用了一组离散的样本估计积分,但是分层采样保证了采样位置的连续性,它能够使得优化过程中在连续的位置上对MLP进行评估。(直观地思路是在求积分的区域均匀地采样N个点进行近似计算,但这样的方式导致MLP只学习到了一系列离散点的信息,会限制NeRF的分辨率)。
第 i i i个采样点可以表示为:
基于这些采样点,将 C ( r ) C\left( \mathbf{r} \right) C(r)简化为:
其中 δ i = t t + 1 − t i \delta_{i} = t_{t+1} - t_{i} δi=tt+1−ti为两个相邻样本之间的距离。
基于分段采样的渲染方式也是可微的。因此,基于这样的渲染方式,我们就可以用NeRF函数从任意角度中渲染出图片
AD-NeRF
AD-NeRF这篇论文收录于ICCV 2021,在神经辐射场的基础上提出一种直接将语音信号的特征送入到一个条件隐式函数以生成一个动态神经辐射场,然后利用体渲染(
volume rendering)从中合成与音频信号相对应的高保真头部视频和上半身视频。
具体来说,我们采用一个包含目标说话人视频和音频轨道的短视频序列作为输入。通过DeepSpeech模型提取音频特征和面部解析图,我们旨在构建一个音频条件隐式函数,该函数存储用于头部场景表示的神经辐射场。由于头部运动与上半身运动不一致,我们进一步将神经光线场表示分为两部分,一部分用于前景面部,另一部分用于前景躯干。这样,我们就可以从收集的训练数据中生成自然的头部视频序列。
论文主要包括三方面的贡献:
-
提出了一种音频驱动的头部说话方法,该方法无需任何可能导致信息丢失的中间模态,直接将音频特征映射到用于肖像渲染的动态神经辐射场。
-
为了能够生成更自然的头部说话结果,将人类肖像场景的神经辐射场分解为两个分支,分别建模头部和躯干。
-
借助音频驱动的NeRF,AD-NeRF能够实现头部视频编辑,比如姿势操纵和背景替换。
模型
下图是AD-NeRF模型的整体框架图,对于给定的一个人的肖像视频序列,训练两个神经辐射场来合成具有高保真度的头部说话视频,并使用体渲染进行合成。
在推理阶段,头部模型 F θ h e a d F_{\theta}^{head} Fθhead和躯干模型 F θ t o r s o F_{\theta}^{torso} Fθtorso都接受相同的输入参数,包括音频条件代码 a \mathbf{a} a和姿态系数 Π \Pi Π。体渲染过程将首先通过头部模型,为所有像素累积采样的密度和RGB值。渲染的图像期望在静态背景上覆盖前景头部区域。然后,躯干模型将通过预测躯干区域的前景像素来填充缺失的身体部位。
NeRF
AD-NeRF方法是一种使用条件隐式函数和额外的音频编码作为输入的条件光线场来生成头部说话视频。相比于标准的NeRF,除了视角方向 d \mathbf{d} d和3D位置 x \mathbf{x} x作为输入之外,又额外增加了语音 a \mathbf{a} a的语义特征作为饮食函数 F θ F_{\theta} Fθ的另一个输入, F θ F_{\theta} Fθ的公式表示为:
F θ ( d , x , a ) → ( c , σ ) F_{\theta} \left( \mathbf{d}, \mathbf{x}, \mathbf{a} \right) \rightarrow \left( \mathbf{c}, \sigma \right) Fθ(d,x,a)→(c,σ)
语音语义特征:采用DeepSpeech模型预测每个20毫秒音频片段的29维特征代码。在具体实现中,将多个连续的音频特征帧联合送入时间卷积网络,以消除原始输入中的噪声信号。具体来说,使用来自十六个相邻帧的特征 a ∈ R 16 × 29 \mathbf{a} \in \mathbb{R}^{16 \times 29} a∈R16×29来表示音频模态的当前状态。
体渲染
Π \Pi Π用于将采样点变换到正则空间。在训练阶段,网络仅使用头部姿态信息,而不是任何3D面部形状。具体来说,首先使用粗网络来预测沿光线的密度,然后在精细网络中密度较高的区域中采样更多的点。
个体NeRF表示
将头部姿态纳入渲染过程的原因是:与静态背景相比,人体部位(包括头部和躯干)在每一帧中都在动态移动。因此,对于辐射场训练,将变形点从相机空间变换到正则空间是至关重要的。
为何要使用两个独立的神经辐射场(头部和躯干)来建模?
Gafni等人试图通过基于自动预测的密度将前景和背景解耦来处理动态运动,即对于穿过前景像素的分散射线,将使用高密度预测人体部位,而背景图像将被忽略,具有低密度。由于头部运动和躯干运动不一致,并且姿态参数 Π \Pi Π仅针对面部形状进行估计,因此将相同的刚性变换(rigid transformation)同时应用于头部和躯干区域将导致上半身出现不满意的渲染结果。
刚性变换,也称为欧几里德变换或欧几里德等距,是欧几里德空间的几何变换,它在每一对点之间保持欧几里得度量。这种变换只包括旋转、平移、反射或其中的任何序列,并且保持物体的形状和大小不变。换句话说,经过适当的刚性变换后,物体的形态和大小都将保持不变。
训练数据: 对于一个给定的人,假定录制摄像机和背景都是静态的,收集有关他的有音频的一小段视频序列,一般视频长度为3-5分钟,视频帧率为25fps。
数据预处理: 首先利用自动人脸解析方法将训练图像分为三部分:静态背景、头部和躯干。然后基于解析结果从每个帧中删除人类区域,计算所有背景图像的聚合结果,对于缺失的区域,我们使用泊松混合[34]来修复具有邻域信息的像素,构建一个无任务的干净背景图像。应用多帧光流估计方法来获取前额、耳朵和头发等近刚性区域中视频帧之间的密集对应关系,然后使用束调整来估计姿态参数。
训练: 训练个体NeRF时,分成两个阶段。
首先训练头部的隐式函数 F θ h e a d F_{\theta}^{head} Fθhead。将由解析图确定的头部区域视为前景,其余部分视为背景。头部姿态 Π \Pi Π应用于通过每个像素投射的射线上的采样点。假设射线上的最后一个样本位于具有固定颜色的背景上,即背景图像中像素的颜色与射线对应。然后,我们将 F θ h e a d F_{\theta}^{head} Fθhead的渲染图像转换为新的背景,并将躯干部分设置为前景。记下来继续训练第二个隐式函数 F θ t o r s o F_{\theta}^{torso} Fθtorso。对于躯干区域,没有可用的姿态参数。因此,我们假设所有的点在正则空间中并且将头部姿态 Π \Pi Π作为NeRF的额外条件输入。
背景和姿态编辑
由于两个神经辐射场都采用语义音频特征和姿态系数作为输入来控制说话内容和说话头部的运动,因此我们可以通过分别替换音频输入和调整姿态系数来实现音频驱动和姿态操纵的说话头部视频生成。由于我们将背景图像上对应的像素作为每条射线的最后一个样本,因此隐式网络学会预测低密度的前景样本值和高密度的前景像素值。这样,我们将前景和背景区域解耦,并且只需替换背景图像即可实现背景编辑。
loss
假设 I r ∈ R W × H × 3 I_{r} \in \mathbb{R}^{W \times H \times 3} Ir∈RW×H×3为渲染图像, I g ∈ R W × H × 3 I_{g} \in \mathbb{R}^{W \times H \times 3} Ig∈RW×H×3为真实图像,优化的目标则是减少 I r I_{r} Ir与 I g I_{g} Ig之间的重建误差,因此,损失函数公式如下所示:
参考
- AD-NeRF: Audio Driven Neural Radiance Fields for Talking Head Synthesis
- NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
- YudongGuo/AD-NeRF