MENU

【论文阅读】PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization

March 16, 2023 • 神经网络

本文介绍一可以通过单张或多张照片来进行三位人体重建的模型 PIFu,这也是 PIFu 系列的第一篇论文。项目地址在这里

Motivation

人体重建是三维重建当中的一个重要的分支,在元宇宙当中也有重要的应用意义。在某些特定的领域,比如人脸、人体或者是已知形状的人造物体当中,现有的技术已经可以做到通过单张照片对其表面进行重建。然而,由于无效的模型表示,即使对于特定领域的建模任务,重建结果的分辨率和准确性通常也是有限的。因此,作者通过引入一种隐式函数的方法,用于解决服装三维人体从单个或多个输入图像进行纹理表面推理的难题。

现有的大多数 2D 图像处理模型都运用了全卷积网络结构来保持输入图像与输出之间的空间对齐。但这在 3D 当中并不能很好的工作。体素表示的方法可以很好的应用到全卷积网络结构当中,但其表示的内存密集型本质限制了它生成精细细节表面的能力。而基于全局上下文的表示拥有更高的内存使用效率,却不能保证保留输入图像的细节。类似地,基于隐式函数的方法依赖于图像的全局上下文来推断整体形状,这可能与输入图像不一致。在 PIFu 当中,其利用全卷积网络结构,将像素级别的局部信息和全局信息进行了对齐,并且不需要像基于体素的表示那样占用大量内存。这在诸如衣服等具有任意拓扑形状、高细节和高形变的物体重建上具有更好的表现。尽管之前也有工作使用了局部信息,但是其缺乏三维感知的特征融合机制,他们的方法无法从单一视图中推理出三维形状。这一点在 PIFu 上面得到了显著的改进。

具体的来说,作者训练了一个编码器来学习图片中每个像素单独的特征向量,这个特征向量还考虑了其相对位置的全局上下文。给定这个每像素特征向量和从这个像素发出的相机光线的指定深度 z,我们学习了一个隐式函数,它可以分类与这个 z 深度对应的 3D 点是在曲面内还是在曲面外。特别的,作者的特征向量在空间上将全局三维表面形状对齐到像素上,这使得其能够保留输入图像中存在的局部细节,同时在不可见区域推断出可信的细节。

此外,通过隐式函数,模型还可以通过回归 RGB 信息来对表面的颜色纹理信息进行预测。

Method

概述

给定一个单一视图或者多视图照片,我们的目标是重建出一个具有几何形状和纹理的 3D 人物,并且其保留照片当中尽可能多的细节。隐式函数将曲面定义为函数的水平集 f

image.png

通过隐式函数,我们虽然不能得到每一个点,但是我们可以很容易的判定一个点和这个曲面的关系。(可以参考这篇文章简单看看),并且这种表示方法对内存非常友好。文章提出的方法包括了一个全卷积的图像编码器 g 和由多层感知机(MLPs)表示的连续隐函数曲面 f。这个曲面可以表示为:

image.png

对于 3D 点 X 来说,x = π(X) 是其在图像上的投影 ,z(X)是在相机坐标空间中的深度值(通过相机内外参数投影计算得到) ,F (x) = g(I(x))是卷积神经网络 g 提取到的图像 I 在 x 点的特征向量。作者假定相机是一个弱透视相机,在这里,由于 X 的投影的值是连续而非离散的,所以文章通过双线性采样来得到其的值。

这么做最终的结果是,我们通过像素级别的信息而不是全局信息在 3D 空间学习了一个隐式函数,这样就保持了图片局部的细节信息。这种方式也具有更高的内存效率,并可以处理任意的拓扑结构。此外,PIFu 可以被转换为一个通用的框架,可以扩展到各种 co-domains ,比如 RGB 颜色。我们不需要更改输入,只需要

image.png

其中有

image.png

这样就可以直接预测颜色信息了。整个的网络结构可以用这个图来看

image.png

单视图重建

上面我们已经讨论了隐式函数的意义,在保持高效的内存效率的同时,隐式函数还可以轻易的判断一个点在平面内还是平面外,换句话说,我们已经变相重建出了整个平面。但是由于隐式函数的性质导致,我们并不能直接获得这个平面上的任一点。因此我们定义:

image.png

当 f(X)=1 的时候,这个点在平面内,反之在平面外。这样当 x=0.5 的时候正好在平面上。为了学习到这个平面,我们通过最小化均方误差来将隐式函数和 ground truth 相接近。在这里,多层感知机和全卷积网络是一同更新的。

image.png

当这两项学习好了之后,在推理阶段,输入就是一张图片,和对应的相机参数,以及该图片中人体所处的一个大致范围(Bounding Box)对于 Bounding Box,我们可以在三个维度上进行离散化,比如每个维度 512,就可以得到 512×512×512 个点阵,对所有的点输入到函数中,那就可以得到如下图一样的 3D Occupacy 信息,然后跑一遍 Marching Cube 就可以得到物体的模型。 Marching Cube 的方法可以参考这篇文章

空间采样

在实际训练过程中,这 512 维度的点的选取也有很大的学问,作者发现,如果在图像中进行均匀的随机采样,会导致大部分的点在人物外部,在等值面上的点会很少。而只在等值面上采样又会导致过拟合。这直接影响了人体重建的性能。我们更需要关注的是隐函数所表达的这一曲面(即人体表面)的信息,因此作者在表面点附近加上了一个高斯抖动来采样这些点。通过调参,作者发现等值面附近加上 5cm 的高斯抖动,与均匀采样 16:1 混合 这样可以更好的采到表面的点。

image.png

纹理颜色推断

上面我们已经讨论过颜色的问题,我们并不需要改变输入,只需要将其输出改变即可。那么我们就有

image.png

这个公式和上述的预测曲面的损失函数差不多。只是换成了 RGB 信息 C。但是这样的预测在实际的颜色预测当中具有严重的过拟合现象。这是因为整个网络即 fc 不只是在预测表面的颜色信息,他还需要去预测看不见的 3D 空间中的纹理信息,这样它才可以推断不同 pose 和不同形状的人体的不可见部分(比如背面顶点)的颜色信息。因此作者做以下改动:基于上一步骤中的到用于重建的深度特征 Fv,将公式改动为:

image.png

此外,作者依照采样那边的方法,在颜色预测方面也加入了一个随机的偏移,这样就可以预测表面周围的颜色信息,这也是增强对看不见的地方的预测能力。

多视图预测

在单视图的基础上,模型还提供了多视图的重建方法。更多的视图提供了额外的信息,重建出来的结果也会有更好的结果。

总的理念来说,作者就是通过单试图进行了简单的推广。就是将提取到的某个 3D 点的特征进行平均 ,再输入到然后输入到 Pixel-Aligned Implicit Function 网络当中进行预测。

image.png

总结

PIFu 的开山之作,也是将隐函数放到三维人体重建当中的一篇经典文章。全篇文章读下来其所用到的方法都比较流畅,也比较有建设性。但是还是有比较多的限制,比如相机 fov 的参数等对重建的结果影响都比较大。在多视图方面,如果多视图相机的 fov、距离等不同,对重建效果都有很大的影响,这些都是亟待改进的地方。