Stetman读论文小记:HumanNeRF:Free-viewpoint Rendering of Moving People from Monocular Video

偶然找到的一篇好论文,抽空精读了一下,记一下笔记。

 

文章简介

文章介绍了一种比较新奇的技术--HumanNeRF,该方法适用于给定的人类复杂肢体动作单目视频。例如 YouTube 上的视频,我们的方法可以在任意帧暂停视频,并从任意新的摄像机视点甚至是 360 度摄像机路径渲染该特定帧和身体姿势的主体。这项任务特别具有挑战性,因为它需要合成从不同摄像机角度看到的逼真的人体细节,而输入视频中可能不存在这些细节,还需要合成布料褶皱和面部外观等精细细节。

将用神经场表示人体的方法

使用一个规范外观体积Fc来表示一个移动的人体,并将其变形为观察到的姿势,以生成输出外观体积Fo: 

 

在公式中,Fc:x → (c, σ) 将位置 x 映射到颜色 c 和密度 σ,并且 T:(xo, p) → xc 定义了一个运动场,将观察空间中的点回映射到规范空间,其受到观察姿势 p = (J, Ω) 的引导。其中,J 包含 K 个标准的三维关节位置,而 Ω = {ωi} 表示局部关节旋转,用轴-角度向量 ωi 表示。 

为了处理复杂的人体运动和复杂的变形,把运动场分解为两部分: 

其中,Tskel代表骨骼驱动的变形,基本上是反向(体积)线性混合皮肤,而TNR则从骨骼驱动的变形出发,产生一个偏移∆x。实际上,Tskel提供了由标准皮肤混合驱动的粗略变形,而TNR则提供了更多的非刚性效果,例如由于服装的变形。

规范体积

我们将规范体积Fc表示为一个连续场,使用一个多层感知器(MLP*),该MLP在给定点x时输出颜色c和密度σ:

其中,γ是一个正弦位置编码,定义如下:
γ = (x, sin(20πx), cos(20πx), ..., sin((2L−1)πx), cos((2L−1)πx))

其中,L是一个超参数,用于确定频率带的数量。

(这里的位置编码是为了在MLP中为输入点x提供更多信息,以帮助网络学习点的位置特征。通过添加这样的位置编码,网络可以更好地理解输入点的空间位置,从而在对颜色c和密度σ进行预测时融入空间信息。这在处理三维数据(如体积表示)时特别有用,因为点的位置信息在该场景中非常重要。)

注:MLP是一种人工神经网络结构,它可以接受输入数据(在这里是点x的坐标),通过一系列隐藏层进行计算,并输出颜色c和密度σ的预测结果。这个MLP用于对规范体积中的每个点进行颜色和密度的预测,从而构建整个规范体积的表示。通过这种方式,我们可以将规范体积表示为一个连续的函数,从而能够在后续的变形和姿势映射中进行更灵活的处理。

骨骼运动

计算骨骼变形Tskel,它是一种逆线性混合皮肤技术,将观察空间中的点映射到规范空间:

(笔记:线性混合皮肤是一种常见的动画技术,用于将角色的骨骼动画应用到3D模型上。在该技术中,每个顶点都与骨骼关联,并且通过权重对骨骼进行线性混合,从而影响顶点的位置。这使得角色的皮肤在骨骼动画的控制下变形,产生流畅的动画效果。

而在这里,作者是将这个过程反转过来。通过Tskel将从观察空间中的点映射回到规范空间,相当于逆向计算了顶点的位置。这样做的目的是在观察空间中获得角色的姿势,并将其映射回规范空间,从而使角色在标准姿势下进行变形。这种逆向计算可以使我们更方便地处理复杂的人体运动和变形。

在上述公式中,表示第i个骨骼的混合权重,而Ri和ti分别是旋转和平移参数,它们将该骨骼的坐标从观察空间映射到规范空间;Ri和ti可以通过p来明确计算(参见补充说明)。我们的目标是优化这些混合权重。

(笔记:优化混合权重的目的是寻找最佳的权重分配,使得在观察空间中的点经过混合皮肤变换后能够正确地映射回规范空间,从而达到最接近原始规范体积的效果。优化过程会考虑输入视频帧和规范体积之间的差异,通过调整权重,使得变形后的外观尽可能地符合观察到的姿势和形状。

通过优化,我们能够得到在给定观察姿势下最佳的规范体积变形效果,从而为后续的动画渲染提供更准确和逼真的人体表示。

在实践中,我们通过在规范空间中求解(在规范空间中定义的混合权重)来实现,同时将K个混合权重存储为一组体积,然后通过这些体积来导出观察空间中的权重,具体表达如下:

在规范空间中解决单一权重体积集,而不是在观察空间中解决N个权重体积集(对应于N个输入图像),可以更好地泛化,因为它避免了过拟合的问题。我们将一组打包成一个具有K个通道的单一体积Wc(x)。我们选择显式体积表示,而不是使用MLP来对Wc进行编码,原因有两点:

(1)从上式中可以看出,计算每个需要进行K次MLP评估,在优化中会变得不可行;

(2)通过使用有限分辨率的显式体积,并通过三线性插值进行重采样,可以提供平滑性,有助于后续优化的正则化。

在实验中,进行优化时,作者并没有直接解决体积Wc,而是解决CNN的参数,该CNN从一个随机(常数)潜在编码z生成体积:

作者还添加了一个额外的通道,作为背景类别,并将Wc表示为具有K + 1个通道的体积。然后,对CNN的输出应用通道级别的softmax,确保在通道之间形成单位划分。

上式中的可以用于近似计算点x属于主体的概率f(x)。当f(x)接近零时,很可能处于远离主体的自由空间中,这在体积渲染过程中会用到。

非刚体运动

非刚性运动TNR被表示为相对于骨骼驱动运动的偏移∆x,取决于该运动,即

为了捕捉细节,我们使用一个多层感知器(MLP)来表示TNR:

在这里,使用标准的位置编码γ,并将MLP条件化在Ω上,Ω表示人体姿势p的关节角度。

(笔记:通过使用位置编码γ和姿势的关节角度Ω,MLP能够将非刚性运动TNR建模得更加精确。位置编码提供了空间信息,帮助MLP理解点的位置关系,而姿势的关节角度Ω则提供了有关姿势变化的信息,使得MLP能够根据姿势来调整非刚性运动的表现。这样的组合使得我们的模型能够更好地捕捉复杂的人体运动和细节,从而得到更真实的人体外观。

姿势校准

从图像中估计的人体姿势p = (J, Ω)通常是不准确的。为了解决这个问题,作者提出了求解姿势的更新的方法:

 在姿势校正过程中,我们将关节J固定不动,并优化关节角度的相对更新∆Ω = (∆ω0, ..., ∆ωK)。然后将这些更新应用于原有的关节角度Ω,得到更新后的旋转向量。

经验上我们发现,与直接优化∆Ω相比,求解一个MLP的参数θpose,该MLP根据Ω生成∆Ω,可以更快地收敛:

使用姿势校正后,我们可以重新编写从观察空间到规范空间的变形方程:

模型构建

模型目标

输入帧{I1, I2, ..., IN}、人体姿势 {p1, p2, ..., pN} 和相机 {e1, e2, ..., eN}

目标:

在上式中,L{·}代表损失函数,Γ[·]代表体积渲染器,通过最小化损失函数来优化所有的网络参数 Θ = {θc, θskel, θNR, θpose}。正如我们所看到的,Fc是由参数 θc 确定的,而从观察空间到规范空间的转换T依赖于参数 θskel、θNR 和 θpose。

体积渲染

作者在文中提及使用由Mildenhall等人所描述的体积渲染方程来渲染神经场。对于具有D个样本的射线r,其期望颜色C(r)可以写为:

在上述体积渲染方程中,∆ti表示第i个样本与第i + 1个样本之间的间隔。这个间隔表示了在沿着射线的方向上,每个样本之间的距离。

 

延迟优化非刚性运动场

在同时解决方程中的所有网络参数时,我们发现优化得到的骨骼驱动和非刚性运动并不是解耦的 ,即: 部分主体的骨骼运动由非刚性运动场建模 , 这是由于非刚性运动过度拟合到输入图像。这导致当渲染未见过的视角时,质量下降。

为了解决这个问题,作者对优化过程进行了管理。具体来说,在优化开始时禁用非刚性运动,然后以粗到精的方式逐步引入它们 。为了实现这一点,对于非刚性运动的MLP,我们对其位置编码的频率带应用了截断的汉宁窗口,以防止过度拟合数据 ,并随着优化的进行逐渐增加窗口大小。遵循Park等人的方法,我们定义了位置编码的每个频率带j的权重:

其中,τ ∈ [0, L) 确定了一个截断汉宁窗口的宽度,L是位置编码中总的频率带数。然后,我们将τ定义为优化迭代次数的函数:

 

在这里,t表示当前的优化迭代次数,Ts和Te是超参数,用于确定何时启用非刚性运动优化以及何时使用完整的位置编码的频率带。作者在位置编码中删除了位置标识(position identity),通过这样,使用时可以通过设置τ = 0 来完全禁用非刚性运动的优化。

 

损失设置

在优化过程中,作者采用了两种损失函数,分别是均方误差(MSE)损失和感知损失(LPIPS,即Learned Perceptual Image Patch Similarity),以提供对像素级外观的匹配,并提高对细微不对齐和光照变化的鲁棒性,同时改善重建的细节。文中最终的损失函数为 。其中,λ = 0.2,并选择VGG作为LPIPS的基础网络。 

(笔记:

- 均方误差(MSE)损失:MSE损失用于衡量规范体积和观测数据之间的像素级差异。它计算规范体积和观测数据之间每个像素值之间的差异,通过最小化这些差异来促进匹配和拟合。

- 感知损失(LPIPS):LPIPS是一种感知损失函数,它使用预训练的深度学习网络(如VGG)来衡量两个图像之间的感知相似性。LPIPS损失能够提供对外观的感知质量评估,这对于在像素级别的微小不对齐和光照变化情况下,提供鲁棒性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值