3D Morphable models(简称3DMM),其相关的传统方法和深度学习方法都有较多的研究。

基本思想
3DMM,即三维可变形人脸模型,是一个通用的三维人脸模型,用固定的点数来表示人脸。它的核心思想就是人脸可以在三维空间中进行一一匹配,并且可以由其他许多幅人脸正交基加权线性相加而来。我们所处的三维空间,每一点(x,y,z),实际上都是由三维空间三个方向的基量,(1,0,0),(0,1,0),(0,0,1)加权相加所得,只是权重分别为x,y,z。
转换到三维空间,道理也一样。每一个三维的人脸,可以由一个数据库中的所有人脸组成的基向量空间中进行表示,而求解任意三维人脸的模型,实际上等价于求解各个基向量的系数的问题。
人脸的基本属性包括形状和纹理,每一张人脸可以表示为形状向量和纹理向量的线性叠加。
形状向量Shape Vector:S=(X1,Y1,Z1,X2,Y2,Z2,...,Yn,Zn),示意图如下:

纹理向量Texture Vector:T=(R1,G1,B1,R2,G2,B2,...,Rn,Bn),示意图如下:

任意的人脸模型可以由数据集中的m个人脸模型进行加权组合如下:
其中\(S_i,T_i\) 就是数据库中的第 \(i\) 张人脸的形状向量和纹理向量。但是我们实际在构建模型的时候不能使用这里的 \(S_i,T_i\) 作为基向量,因为它们之间不是正交相关的,所以接下来需要使用PCA进行降维分解。
(1) 首先计算形状和纹理向量的平均值。
(2) 中心化人脸数据。
(3) 分别计算协方差矩阵。
(4) 求得形状和纹理协方差矩阵的特征值 \(α,β\) 和特征向量 \(s_i,t_i\)。
上式可以转换为下式
其中第一项是形状和纹理的平均值,而 \(s_i,t_i\) 则都是 \(S_i,T_i\) 减去各自平均值后的协方差矩阵的特征向量,它们对应的特征值按照大小进行降序排列。
等式右边仍然是m项,但是累加项降了一维,减少了一项。\(s_i,t_i\) 都是线性无关的,取其前几个分量可以对原始样本做很好的近似,因此可以大大减少需要估计的参数数目,并不失精度。
基于3DMM的方法,都是在求解这几个系数,随后的很多模型会在这个基础上添加表情,光照等系数,但是原理与之类似。
3DMM模型求解方法
基于3DMM求解三维人脸需要解决的问题就是形状,纹理等系数的估计,具体就是如何将2D人脸拟合到3D模型上,被称为Model Fitting,这是一个病态问题。经典的方法是1999年的文章"A Morphable Model For The Synthesis Of 3D Faces",其传统的求解思路被称为analysis-by-Synthesis,如下;

- 初始化一个3维的模型,需要初始化内部参数\(α,β\),以及外部渲染参数,包括相机的位置,图像平面的旋转角度,直射光和环境光的各个分量,图像对比度等共20多维,有了这些参数之后就可以唯一确定一个3D模型到2D图像的投影。
- 在初始参数的控制下,经过3D至2D的投影,即可由一个3D模型得到2维图像,然后计算与输入图像的误差。再以误差反向传播调整相关系数,调整3D模型,不断进行迭代。每次参与计算的是一个三角晶格,如果人脸被遮挡,则该部分不参与损失计算。
- 具体迭代时采用由粗到精的方式,初始的时候使用低分辨率的图像,只优化第一个主成分的系数,后面再逐步增加主成分。在后续一些迭代步骤中固定外部参数,对人脸的各个部位分别优化。
对于只需要获取人脸形状模型的应用来说,很多方法都会使用2D人脸关键点来估计出形状系数,具有更小的计算量,迭代也更加简单,另外还会增加一个正则项,所以一个典型的优化目标是如下:
对于Model fitting问题来说,除了模型本身的有效性,还有很多难点。
- 该问题是一个病态问题,本身并没有全局解,容易陷入不好的局部解。
- 人脸的背景干扰以及遮挡会影响精度,而且误差函数本身不连续。
- 对初始条件敏感,比如基于关键点进行优化时,如果关键点精度较差,重建的模型精度也会受到很大影响。
3DMM模型的发展
要使用3DMM模型来完成人脸重建,首先就需要一个数据库来建立人脸基向量空间,Blanz等人在1999年的文章[1]中提出了采集方法,但是没有开源数据集,Pascal Paysan等人在2009年使用激光扫描仪精确采集了200个人脸数据得到了Basel Face Model数据集 (简称BFM模型),基本信息如下:
(1)采用ABW-3D结构光系统进行采集,采集时间约1s,相比于激光平均15s的采集方案更加具有优势。整个数据集包含200张三维的人脸,其中100张男性,100张女性,大部分为高加索人脸。年龄分布8~62岁,平均年龄24.97岁,体重40~123千克,平均66.48千克。每一个人都被采集3次中性表情,并选择其中最自然的一次。
(2)在对采集后的点进行处理的过程中,模型的每一个点的位置都进行了精确匹配,也就是说每一个点都有实际的物理意义,比如属于右嘴角等。经过处理后,每一个模型由53490个点描述。
该数据库的平均人脸形状和平均人脸纹理如下:

Basel Face Model数据集只有200个人,而近期研究者基于此模型采集了9663个人得到LSFM模型,能够进一步提升表达能力。
2009年发布的Basel Face Model版本中没有表情系数,而2017年发布的版本BFM 2017中提供了表情系数,同样还是一个线性模型。

当然了,在国内也有一个著名的数据集,就是FaceWarehouse,不过不开源,一般研究者拿不到数据。

当然也有一些商业号称会开源更好的模型,这个大家可以拭目以待。人脸的三维模型数据之所以不公开,是因为使用高精度的三维模型可以很容易仿真真实人脸,容易发生安全事故。
当前基于3DMM的表情模型主要有两个思路,分别是加性模型和乘性模型。加性模型就是线性模型了,将表情作为形状的一个偏移量,\(E^s,E^e\)分别表示形状和表情基,\(W^s,W^e\) 分别表示对应的系数。
但是因为表情也会改变人脸的形状,因此它和形状并非完全正交的关系,所以有的研究者提出了乘性模型,如下。
其中 \(d_e\) 是一个表情迁移操作集合,第 \(j\) 个操作即为\(T_j\),\(δ\) 都是校准向量
另一方面,纹理模型也被称为表观模型,它相对于形状模型来说更加复杂,受到反射率和光照的影响,不过大部分的3DMM模型不区分两者,所以我们将其视为一个因素,即反射率。
光照模型通常采用的是球面模型,光照模型比较复杂,我们这里就不列出具体的表达式,大家可以自行阅读相关论文。
在2009年提出的BFM模型中,纹理模型是一个线性模型,即由多个纹理表情基进行线性组合。后续的研究者们在整个基础上增加了纹理细节,用于仿真脸部的皱纹等。
尽管在大多数情况下,我们使用的都是线性3DMM模型,但是非线性3DMM模型同样也被研究,由于不是主流,就不展开讲了。
深度学习3DMM重建
传统的3DMM及其求解核心思路我们上面已经讲述了,接下来要重点说的是基于深度学习的3DMM重建及其研究进展。
全监督方法
前面给大家介绍了3DMM模型,传统的方法需要去优化求解相关系数,基于深度学习的方法可以使用模型直接回归相关系数,以Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network中提出的3DMM CNN方法为代表。

3DMM CNN是一个非常简单的回归模型,它使用了ResNet101网络直接回归出3DMM的形状系数和纹理系数,形状系数和纹理系数各有99维,除此之外还有几个核心问题。
- 首先是数据集的获取。由于真实的三维人脸和二维人脸图像对非常缺乏,采集成本高,作者们用CASIA WebFace数据集中的多张照片进行model fitting求解生成了对应的三维人脸模型,将其作为真值(Ground Truth),从而得到了二维三维图像对。
- 然后是优化目标的设计。因为重建的结果是一个三维模型,所以损失函数是在三维的空间中计算,如果使用标准的欧拉损失函数来最小化距离,会使得到的人脸模型太泛化,趋于平均脸。对此作者们提出了一个非对称欧拉损失,使模型学习到更多的细节特征,使三维人脸模型具有更多的区别性,公式如下:
$$
\mathcal{L}(\gamma_{p},\gamma)=\lambda_{1}\cdot\underbrace{||\gamma^{+}-\gamma_{\mathrm{max}}||{2}^{2}}{\mathrm{over-estimate}}+\lambda_{2}\cdot\underbrace{||\gamma_{p}^{+}-\gamma_{\mathrm{max}}||{2}^{2}}{\mathrm{under-estimate}}, \\text{using the element-wise operators:}\\gamma^{+}\doteq\mathrm{abs}(\gamma)\doteq\mathrm{sign}(\gamma)\cdot\gamma;\quad\gamma_{p}^{+}\doteq\mathrm{sign}(\gamma)\cdot\gamma_{p},\quad\\gamma_{\mathrm{max}}\doteq\mathrm{max}(\gamma^{+}\gamma_{\mathrm{p}}^{+})
$$
\(γ\) 是标签,\(γ_p\) 是预测值,通过两个权重 \(λ_1\) 和 \(λ_2\) 对损失进行控制,作者设定\(λ_2\) 权重更大,所以是期望 \(γ_p\) 能够更大一些,从而提供更多的细节。
除了预测形状系数外,3DMM的研究者们还提出了ExpNet 预测表情系数,FacePoseNet 预测姿态系数,验证了基于数据和CNN模型学习出相关系数的可行性。
真实数据集的获取是比较困难的,而且成本高昂,导致数据集较小,所以基于真实数据集训练出来的模型鲁棒性有待提升。很多的方法使用了仿真的数据集,可以产生更多的数据进行学习,但是仿真的数据集毕竟与真实的数据集分布有差异,以及头发等部位缺失,导致模型泛化到真实数据集的能力较差。
自监督方法
三维人脸重建中真实的数据集获取成本非常高,研究者往往基于少量数据或者仿真数据进行研究,所训练出来的模型泛化能力会受到限制,自监督的方法则是一个解决该问题的重要思路。这一类方法不依赖于真实的成对数据集,它将二维图像重建到三维,再反投影回二维图,这一类方法以MoFa为代表,整个流程如下图所示:

在上图中,输入首先经过一个Deep Encoder提取到语义相关的系数,系数包含了人脸姿态,形状,表情,皮肤,场景光照等信息。然后将该系数输入基于模型的decoder,实现三维模型到二维图像的投影,模型可以使用3DMM模型。最后的损失是基于重建的图像和输入图像的像素损失。当然,还可以添加关键点损失,系数正则化损失作为约束。
人脸的三维特征编码
通常的3DMM模型预测3DMM的系数,这没有充分发挥出CNN模型对于像素的回归能力,如果我们基于3DMM模型将三维人脸进行更好的特征编码,预期可以获得更好的结果。
这里我们介绍一下两个典型代表,其一是3DDFA,它使用Projected Normalized Coordinate Code(简称PNCC)作为预测特征。

一个三维点包括X,Y,Z和R,G,B值,将其归一化到0~1之后便称之为Normalized Coordinate Code。如果使用3DMM模型将图像往X-Y平面进行投影,并使用Z-Buffer算法进行渲染,NCC作为Z-buffer算法的color-map,便可以得到PNCC图。
论文《Face Alignment Across Large Poses: A 3D Solution》基于此提出了3DDFA框架,输入为100×100的RGB图和PNCC(Projected Normalized Coordinate Code)特征图,两者进行通道拼接。算法的输出为更新后的PNCC系数,包括6维姿态,199维形状和29维表情系数。
整个网络如下:包含4个卷积层,3个pooling层和2个全连接层,前两个卷积层局部共享,后两个卷积层不采用局部共享机制。这是一个级连迭代的框架,输入为第k次更新的PNCC特征,更新它的误差,损失使用L1距离。

由于不同维度的系数有不同的重要性,作者对损失函数做了精心的设计,通过引入权重,让网络优先拟合重要的形状参数,包括尺度、旋转和平移。当人脸形状接近真值时,再拟合其他形状参数,实验证明这样的设计可以提升定位模型的精度。
由于参数化形状模型会限制人脸形状变形的能力,作者在使用3DDFA拟合之后,抽取HOG特征作为输入,使用线性回归来进一步提升2D特征点的定位精度。
其二是PRNet,论文Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network 中提出了PRNet(Position map Regression Network),它利用UV位置图(UV position map)来描述3D形状。

在BFM模型中,3D顶点数为53490个,作者选择了一个大小为256×256×3的图片来进行编码,其中像素数目等于256×256=65536,大于且接近53490。这个图被称为UV位置图(UV position map),它有三个通道,分别是X,Y,Z,记录了三维位置信息。值得注意的是,每个3D的顶点映射到这张UV位置映射图上都是没有重叠的。
有了上面的表示方法,就可以用CNN网络直接预测UV位置图,采用一个编解码结构即可。

另外,作者们为了更好的预测坐标,或者说为了使预测出来的结果更有意义,计算损失函数时对不同区域的顶点误差进行加权。不同区域包括特征点,鼻子眼睛嘴巴区域,人脸其他部分,脖子共四个区域。它们的权重比例为16:4:3:0,可见特征点最重要,脖子不参与计算。

难点和展望
从1999年被提出,至今3DMM模型已经有超过20年的历史,技术已经发展到从早期基于传统的优化方法到如今基于深度学习模型的系数回归,不过当前的3DMM模型还面临着许多的挑战。
- 当前的模型基本上都受限于人脸,没有眼睛,嘴唇以及头发信息,然而这些信息对于很多的应用却非常有效。
- 3DMM模型参数空间是一个比较低维的参数空间,并且纹理模型过于简单。基于3DMM模型的方法面临的最大问题就是结果过于平均,难以重建人脸皱纹等细节特征,并且无法恢复遮挡。对此有的方法通过增加局部模型进行了改进,而最新的生成对抗网络技术也开始被用于纹理建模。
- 遮挡脸的信息恢复。二维的人脸信息一旦被遮挡,也难以被精确地重建,除了利用人脸的对称先验信息进行补全外,有的方法借鉴了检索匹配的思路,即建立一个无遮挡的数据集,将重建的模型进行姿态匹配和人脸识别相似度匹配,然后经过2D对齐,使用基于梯度的方法来进行纹理迁移,也有的方法使用GAN来进行遮挡信息恢复
- 当前3DMM模型中主要使用PCA来提取主成分信息,但是这不符合我们通常对人脸的描述,因此这并非是一个最合适的特征空间。
- 当前存在着各种各样的3DMM模型的变种,但是没有一个模型能够在各种场景下取得最优的效果。
另一方面,3DMM模型也与许多新的技术开始结合,比如与生成对抗网络模型一起进行人脸的数据增强,姿态编辑,人脸的特征恢复,对于提升人脸识别模型在具有挑战性的大姿态以及遮挡场景下的性能中具有非常重要的意义。