PHORHUM:从二维照片到三维动画模型的谷歌

323 阅读9分钟

资料来源Alldieck 等,谷歌(2022),PHORHUM

谷歌发布了一篇论文,介绍了一种新的最先进的机器学习模型,名为PHORHUM,它能够从一张2D照片中创建一个3D模型,其纹理与照片中的照明源分离。

只有一个坏消息。谷歌还没有发布源代码或演示供人尝试。

我们提出了一个用于高质量人类数字化的端到端可训练系统 - 我们的方法首次计算了反照率和阴影信息 - 我们的渲染损失极大地提高了结果的视觉保真度 - 我们的结果比目前最先进的技术更准确,具有更多的细节

Alldieck 等,谷歌(2022),PHORHUM

摄影测量

摄影测量法可能是最著名的从二维照片中创建三维模型的方法。但这种方法需要多张照片和大量的时间、计算资源,以及额外的手工工作,因为3D网格通常需要由3D建模艺术家进行修补。结果也不能保证,因为照片需要在理想的照明条件下拍摄。
如果你想尝试摄影测量,那么我建议你试试Meshroom,它在GPU的帮助下,能够将一个物体的多个360照片变成一个带有纹理的3D模型。

3D深度学习研究

从一张2D照片创建一个3D模型是3D建模的圣杯。如果用传统的方法,创建物体的三维模型可能是相当费力的。因此,每个人都在寻找一种更简单的方法。

近来有很多研究和论文都是为了让2D照片一键转换为3D。

PHORHUM 是3D深度学习研究中另一个受欢迎的发展。他们的杰出成果的关键是使用了Pifu,即像素对齐的隐式函数。这是由Sato等人在他们的Pifu论文中介绍的东西。

但谷歌通过计算有符号的距离,而不是简单的进出隐含函数,改进了皮夫的原始用途。稍后会有更多关于这个问题的介绍。

它是如何工作的

边界框

对于推断,PHORHUM首先使用一个盒子检测器,在图像中的人周围创建一个二维边界盒。

从照片中提取人物

特征提取

特征提取器用于将二维边界框中的图像尺寸缩小到更小的、更容易管理的图像,这称为特征图像。一个特征图像是原始图像的一个过滤版本,只包含它要寻找的核心特征。

我们可以把特征图像的集合称为特征图像向量,也可以简单称为特征图。在PHORHUM的案例中,有256个特征被特征提取器计算出来,用于一张图像。

由特征提取器产生的特征向量的例子

像素对齐的特征

一个三维包围盒被创建,其大小与特征图像成正比。我们把它称为空间S

对于这个空间内的每一个三维点,我们称之为P,这个点用一个透视相机投射到二维空间的特征向量上。

考虑到我们的特征向量有256个特征,P点将有256个像素被存储,每个特征图像一个像素。

如果我们对曲面S中的所有点重复这一步骤,那么我们就得到F(S)。因此,我们称它为像素对齐的特征向量

计算距离和纹理

推理管道的下一步是应用一个有符号的距离函数。对于表面F(S)内的每个点,我们计算距离d 和 albedo color a 从每个点到最近的表面。这就产生了三维空间中的有符号的 距离和颜色域,以后我们可以用它来重建图像中检测到的人的三维几何表面纹理。

资料来源Alldieck et al, Google(2022), PHORHUM

使用行进立方体重建三维几何图形

为了重建由上一步的有符号距离函数定义的表面的三维几何形状,我们使用了Marching Cubes算法。

行进立方体算法是一种流行的算法,在计算机图形学中使用一组三角形规则从三维空间中的一组点构建一个三维拓扑结构。如果你想快速了解行进方块算法的工作原理,我建议你观看下面的Youtube视频。

请注意,只有在三维人的表面上,并且在一定的公差范围内的点才被考虑,即签名距离=0。

此外,网格纹理是使用上一步计算出的无阴影/无遮挡的颜色场来重建的。

估算照明模型

为了估计照明模型,我们只需要使用特征提取器的瓶颈。
什么是瓶颈?一个神经网络的瓶颈只是一个没有最后一个全连接层的神经网络。

计算着色的三维模型

使用上一步估计的照明模型l和步骤X中重建的网格的表面法线,一个阴影网络被用来将照明模型l应用于重建的三维模型。其结果是一个有阴影的三维网格。
你可能会问,如果我们已经有了反照率颜色,为什么还要对网格进行着色?

事实证明,将阴影网络作为管道的一部分,有助于在神经网络的训练过程中,使其能够将颜色环境光分开。

收集数据

为了创建训练和测试数据,谷歌从商业网站上获得了总共217张人的三维扫描图。

使用图像增强技术,谷歌的研究人员创建了大约19万个变化的图像,在不同的背景和不同数量的位置,以及不同的光照条件下,将3D人类渲染成2D(共5个)。

使用少量3D资产的缺点是,神经网络偏向于3D扫描中包含的服装和人物类型。这意味着

宽松的、超大的和非西方的服装项目在我们的训练集中没有得到很好的覆盖。

Alldieck et al, Google(2022), PHORHUM

训练

当训练一个神经网络来做好它的工作时,我们需要引导它走向完美
我们通过定义一个或多个数字**(损失**)来告诉神经网络它的结果是好是坏。提供这样一个数字的想法是,在训练过程中,神经网络的可训练参数和权重也可以被调整,从而使损失尽可能地减少。

三维深度学习中的正则化

不仅需要损失来帮助机器学习模型尽可能地接近预期的形状,而且损失也被用于正则化。严格来说,正则化通常是通过给损失增加一个参数来避免神经网络的过度拟合。但在更实际的意义上,正则化被用来调节神经网络给出的三维形状。例如,拉普拉斯平滑(Laplacian Smoothing)是一种损失,经常用于避免锯齿状的表面。

谷歌使用了稀疏三维监督渲染的组合,针对几何颜色损失,来训练神经网络。

什么是稀疏的三维监督?

让我澄清一下稀疏三维监督的含义。
如前所述,当评估一个物体从二维领域的三维重建时,在训练过程中,重要的是向神经网络发出信号,告诉它是否离预定的三维几何形状越来越近或越来越远,以及在哪个方向需要改变可训练的参数和权重。

这不是很容易做到的。但是,通过一些聪明的数学方法,根据表面法线和距离计算启发式方法,从采样点,可以得到一个或多个数字,告知神经网络是否越来越接近预期的几何形状。

它之所以被称为稀疏,是因为我们没有使用从几何图形中获得的全部信息。我们只是在使用一些抽样的点。

渲染损失是用来做什么的?

渲染是指用相机拍摄三维物体的二维图像,并应用一个照明模型。在这种情况下,因为神经网络需要学习如何在没有阴影的情况下估计颜色,所以所使用的照明模型要尽可能的均匀。

这种渲染是在训练期间进行的,以计算渲染损失,这进一步提高了重建的三维模型的视觉质量,此外还有上一步的三维稀疏监督。

然而,在PHORHUM的情况下,渲染不是对整个物体的渲染。相反,我们只是用光线追踪法渲染均匀分布在物体表面的小图像斑块。总共有512个图像补丁,经过光线追踪,投射到二维的特征图上,从而计算出渲染损失。

计算损失的方法并不简单。我建议你阅读

具体细节见PHORHUM论文。

未来的工作

本文使用的是真人扫描的3D模型,这意味着它使用的数据集非常有限(总共217个扫描)。

三维资产的增强可以帮助将数据拉长,但局限性仍然很明显。它所能重建的人物和衣服的多样性较少。

如果有一种方法可以只使用二维监督来训练PHORHUM呢?这意味着,我们突然可以使用二维图像进行训练了!?

做到这一点的方法是使用差异化渲染器。

差异化渲染在行动

事实证明,这一点以前就有过,由Nvidia的研究人员和其他许多人做过,幸运的是,我在以前的文章中已经介绍了差分渲染的方法。

如何使用Nvidia Kaolin和PyTorch将2D照片变成3D模型--3D深度学习教程

资料来源

Thiemo Alldieck和Mihai Zanfir和Cristian Sminchisescu,谷歌
穿着衣服的人类的光感单眼三维重建,2022年,
phorhum.github.io/static/asse…

Shunsuke Saito, Zeng Huang, Ryota Natsume, Shigeo Mor- ishima, Angjoo Kanazawa, and Hao Li.
PIFu:Pixel-aligned implicit function for high-resolution clothed human digitization.

arxiv.org/pdf/1905.05…