英文参考文献:https://medium.com/offnote-labs/3d-face-and-body-reconstruction-95f59ada1040
一个训练好的FLAME模型的输入是一个参数向量,包括形状参数、姿势参数和表情参数¹。这些参数分别控制人脸的身份特征、头部的旋转和平移、面部的表情变化²。一个训练好的FLAME模型的输出是一个三维人脸网格,它是由模板网格和混合形状函数相加并经过皮肤函数变换得到的²。这个三维人脸网格可以用来表示不同的人脸形状和姿势,也可以用来拟合三维扫描数据或二维图像数据¹²。
“人脸形状、头部姿态和面部表情的参数”是指FLAME模型的输入参数,它们是一些实数向量,用来控制模型的输出网格的形状和姿势。具体来说:
- 人脸形状参数是一个300维的向量,它表示人脸的身份特征,例如性别、年龄、种族等。这个向量是从3800个人的头部扫描数据中学习得到的一个线性形状空间的系数。不同的人脸形状参数可以生成不同的人脸形状。
- 头部姿态参数是一个6维的向量,它表示头部的旋转和平移。这个向量是由欧拉角和平移向量组成的,用来描述头部相对于世界坐标系的变换。不同的头部姿态参数可以生成不同的头部姿势。
- 面部表情参数是一个100维的向量,它表示面部的表情变化,例如微笑、皱眉、张嘴等。这个向量是由全局表情参数和姿态相关表情参数组成的,用来描述面部相对于中性状态的变化。不同的面部表情参数可以生成不同的面部表情。
举个例子,如果我们想要生成一个年轻女性的微笑面孔,我们可以设置人脸形状参数为[0.5, 0, 0, ..., 0](表示性别为女性,其他特征为中性),头部姿态参数为[0, 0, 0, 0, 0, 0](表示头部没有旋转和平移),面部表情参数为[0.2, 0, 0, ..., 0](表示有微笑表情,其他表情为中性)。然后将这些参数输入FLAME模型,就可以得到一个年轻女性的微笑面孔的三维网格。
FLAME模型是一种用来表示人脸的三维模型,它基于SMPL模型,并增加了表情混合形状的功能。FLAME模型包括以下几个部分:
- 模板网格T,表示中性姿势下的人脸。
- 形状混合形状函数S(),处理与身份相关的形状变化,例如性别、年龄、种族等。
- 姿势混合形状函数P(),修正头部的姿势变形,例如转头、点头等。
- 表情混合形状函数E(),捕捉面部的表情变化,例如微笑、皱眉、张嘴等。
这些函数都是从SMPL模型中派生出来的,它们都是用参数向量作为输入,并输出与模板网格的偏差。将这些函数与模板网格线性地相加,就可以得到一个描述人脸形状和姿势的网格。然后,将这个网格作为输入传递给皮肤函数W(),它会生成最终的三维人脸。皮肤函数也会根据关节J和混合权重W来旋转人脸的顶点,并保证输出的三维人脸是平滑无缝的。这样就完成了带有表情的三维人脸重建。
表情混合形状函数E()是用来表示面部表情变化的函数,它可以分为全局表情变形和姿态相关表情变形两部分。全局表情变形表示不依赖于头部姿态的表情变化,例如微笑、皱眉等;姿态相关表情变形表示由于头部姿态的变化而产生的表情修正,例如转头时眼睛的微调等。
对FLAME模型的表情混合形状函数E()的训练过程:
“正交表情基”E表示表情空间E的列向量构成的基,满足:1) 列向量之间互相垂直,即〈Ei, Ej〉 = 0, i ≠ j。这意味着不同的表情混合形状对应的形状偏移是相互独立的。2) 每个列向量的长度为1,即〈Ei, Ei〉 = 1。这产生单位长度的表情混合形状。
正交表情基E可以通过主成分分析(PCA)从表情扫描数据中学习得到。具体步骤是:1) 收集多个人物在不同表情下的面部扫描数据。每个扫描包含一个模板形状T以及表情导致的形状偏移ΔT。2) 对所有这些形状偏移ΔT进行PCA分析,提取其主成分。这些主成分对应的特征向量组成初始的E。3) 对E的每个列向量单位化,使之满足上述条件2)。这得到正交表情基E。4) E的列向量按对应特征值的大小排序,取前多少个(如10个)列向量构成表情空间E。特征值较大的列向量表示表情变化更加显著的方向。所以总之,正交表情基是一个从表情扫描数据中学习到的、用于参数化和表示表情形状变化的基。通过在这个基上投影,我们可以用较低维度的表情参数ψ⃗来表示丰富的表情变化。