Drivable 3D Gaussian Avatars 论文笔记
- 主要的算法架构和贡献是什么?
- 如何使用这个deformation 呢?
主要的算法架构和贡献是什么?
这篇文章主要使用了两个当前流行的概念,一是3D高斯溅射,二是cage-based deformation。 这篇文章主要是通过多视角视频来实现逼真的人体三维建模 (3D Human Avatar modeling)。 首先大致记录一下对cage-based deformation 的理解。首先这种方法是将一个object 看成是很多 cages, 然后每一个cages 只负责在它里面的点。比如说,把一个3D人体模型看成是一个密集点云, 我们将人体模型拆分成 脸,手,身体,和腿,每一个部位用不同的cages来表示,比如之前表示脸的点,现在都在表示脸的cage里面,当cage发生形变到时候,里面所有的点也会跟着发生形变。 所以cage 可以被看成是一个proxy。
那么在这篇文章里是如何来使用这个概念的呢? 这个方法是如何工作的? 为了提取出关键的语义信息,比如哪里是人的手,哪里是人的身子。 首先会将输入帧进行语义分割,分割的目的是提取出图片当中人的脸,四肢,身子,和衣服,为之后的cage-based deformation 做准备。 文中使用的网络结构是 EfficientNet backbone with PointRend refinement。在得到了语义信息之后,将sementic map 投射到一个 human mesh M 上 去获得 per vertices labels。换句话来说就是通过以上的操作,Human mesh 也间接的被做了segmentation。那么既然是整个Mesh的segmentation, 可见这里肯定是需要用到多张照片的semantic map的同时投射,如果只使用一张照片的话,很难判断其他视角的语义信息是什么样的。(我感觉这里可能成为拓展成单张照片的一个点)。这个3D human mesh 实则是一个低分辨率的LBS Model, 现将这个LBS 模型 fit 到 3D scan里面,然后再把这个LBS模型 fit 到segmentation map里面。 所以现在的这个human mesh 是一个低分辨率的, 有posed的 triangle surface。
为了使用 cage-based deformation, 文中首先将这个低分辨率的人体模型从姿态空间(pose space )转移到 canonical space 里面。 我的理解就是通过一变换将human mesh 变成 T pose。 接下来就是cage-based deformation 很重要的一个步骤,就是把vertices mesh 变成 tetrahedral meshes。 我个人的理解是这里需要一个volume的概念, 因为cage-based deformation的核心其实是将cage看成是coarse proxy,所以在cage里面的点就显得很重要,而一般triangle surface 它很难提供volume的概念,因为一个triangle在空间中只是平面的一个小部分, 而四面体 tetrahedra 本身就可以提供volume的概念。很多需要volume信息的人体三维重建的论文,都会有将triangle surface 变成 tetrahedral surface 的步骤,比如 Pamir, 在求取volume之前,也有将SMPL Mesh 变成 tetrahedral 的步骤。 这篇文章使用的是TetGen 来将unposed 的Mesh变成 tetrahedral meshes。转换出来的Mesh 就包括了三个板块,cages for garments, cages for body, and cages for face。每一个cage的形变是根据之前triangle surface的 LBS weights来的,这也就意味这每一个cage里的点也都是按照LBS weights 来做的形变。 文中将在tetrahedron 中的点定义为如下:
b
j
b_j
bj指的就是这个点的重心坐标 (barycentric coordinates) 以上公式,在 tetrahedral surface 根据LBS weights 从canonical space 转到 pose space的时候,依然成立。这就给形变转移(deformation transfer)提供了可能性
以上公式中的
E
i
E_i
Ei ,
E
^
i
\hat{E}_{i}
E^i 分别表示 形变前后的 tetrahedra,
J
i
J_i
Ji表示的是形变梯度(deformation gradient)。这个也是之后引导3D 高斯形变的核心。
如何使用这个deformation 呢?
文中把形变的表示方式和3D高斯溅射联系到了一起。 文中首先对3D高斯进行了初始化,说白了就是将3D 高斯和一些特定的特征输入联系到了一起。 比如文中将 3D 高斯的Mean 表示成了从低分辨率的Mesh 采样的点的位置。 Rotation的前两个axes 和triangle surface联系了起来,最后一个axe和和相对应的法向量(normal)联系了起来. Scale 就是根据 inter-point distance 的距离做的初始化(现在有一些论文是将3D高斯的covariance 拆分成了rotation和scale)。 文中将3D高斯的covariance和之前提到的deformation gradient 通过一下方程联系到了一起:
这么做就等于是将之前的形变表示,转移到的高斯上。
最后就是将上述提到的方法在整合到神经网络中。 文中提到了三个主要的结构,都是MLP。第一个 Cage node correction network 它只要控制的是形变,它的输入是pose 还有vertices的positional encoding, 输出的是cage nodes的offset。 听上去很想 deformation field 的感觉。第二是Gaussian correction network 它只要掌管是高斯参数的预估,它的输入是canonical space里面的高斯参数,输出的是对这些参数的矫正(correction)。 最后一个就是 Shading network 主要是预测3D 高斯里的成color 和 opacity, 它的输入是原始的颜色以及view direction。