3DMM 技术详解:从 PCA 人脸空间到可拟合的三维先验

📅 2026/7/1 9:56:17
3DMM 技术详解:从 PCA 人脸空间到可拟合的三维先验
3DMM 技术详解从 PCA 人脸空间到可拟合的三维先验3DMM3D Morphable Model三维可变形模型最值得记住的地方不是“把脸变成参数”这个说法本身而是它把一个原本严重欠定的问题改写成了一个可优化的问题给定一张二维人脸图像我们不再直接猜每个三维顶点在哪里而是在一个由真实扫描数据学出来的低维人脸空间里找答案。这也是 3DMM 直到今天还没完全过时的原因。NeRF、Gaussian Splatting、扩散模型、神经渲染都能生成更复杂的外观但只要任务里还需要可控的身份、表情、姿态、光照分解3DMM 这套参数化先验仍然经常被放在系统的底层。本文按机制讲清楚 3DMM它怎么建模为什么 PCA 有用单图拟合到底在拟合什么BFM 和 FLAME 分别补了哪些短板以及今天做 3D face / avatar / talking head 时该怎样理解它的边界。先把 3DMM 看成一个“带统计约束的三维生成器”Blanz 和 Vetter 在 1999 年的 SIGGRAPH 论文里提出 3D Morphable Model。那篇文章的核心描述很直接先把一组 3D 人脸的形状和纹理都变成向量再用这些原型的线性组合生成新的脸。论文强调两个点一是所有样本人脸必须处在稠密的一一对应关系里二是用统计约束避免生成“不像真人”的脸。可以把一张已经配准好拓扑的人脸写成两个向量S(x1,y1,z1,…,xN,yN,zN)T S (x_1, y_1, z_1, \ldots, x_N, y_N, z_N)^TS(x1​,y1​,z1​,…,xN​,yN​,zN​)TT(r1,g1,b1,…,rN,gN,bN)T T (r_1, g_1, b_1, \ldots, r_N, g_N, b_N)^TT(r1​,g1​,b1​,…,rN​,gN​,bN​)T这里SSS是 shape包含所有顶点的三维坐标TTT是 texture 或 albedo包含每个顶点的颜色。所有训练人脸都必须有同样的顶点数、同样的拓扑、同样的语义位置。第 327 个顶点如果在一张脸上是鼻尖在另一张脸上也必须是鼻尖附近否则线性组合就会变成几何噪声。有了对应关系以后最朴素的 3DMM 可以写成S(α)SˉAsα S(\alpha)\bar S A_s \alphaS(α)SˉAs​αT(β)TˉAtβ T(\beta)\bar T A_t \betaT(β)TˉAt​βSˉ\bar SSˉ和Tˉ\bar TTˉ是平均脸AsA_sAs​和AtA_tAt​是从训练数据里学到的主成分基α\alphaα与β\betaβ分别控制形状和纹理。直觉上α\alphaα的某些方向可能对应脸宽、鼻梁高度、下颌形状等变化但不要把每个 PCA 维度理解成干净的语义滑杆。PCA 只保证方差最大化和正交不保证每一维都符合人类命名习惯。3DMM 的漂亮之处在于它同时给了生成方式和概率先验。PCA 会得到每个主成分的方差σi2\sigma_i^2σi2​常见正则项会惩罚偏离平均脸太远的参数Eprior(α)∑iαi2σi2 E_{prior}(\alpha)\sum_i \frac{\alpha_i^2}{\sigma_i^2}Eprior​(α)i∑​σi2​αi2​​这句公式很关键。没有这个先验优化器可以为了匹配输入图像把人脸拉成训练集中从未出现过的怪形状有了这个先验拟合会倾向于留在“统计上像人脸”的区域里。建模难点其实在“对应关系”不是 PCA很多入门文章会把 3DMM 讲成“PCA 建模人脸”。这没错但容易让人误会。PCA 是后半段前半段更痛苦怎样把一堆真实 3D 扫描注册到同一个模板拓扑上。原因很简单。PCA 需要每个样本是同一维度向量而且每个维度的语义一致。对于图像所有样本 resize 到同一分辨率后勉强能做 PCA对于 3D 扫描人脸的点云数量、孔洞、姿态、细节都不同。你必须先选一个模板 mesh再把每个扫描都变形到模板上建立稠密点到点对应。这一步做不好后面的统计模型会把配准误差当成真实变化。眼角、嘴角、鼻翼这些区域尤其敏感因为小范围错位会直接污染 expression 或 identity 的主成分。早期模型的很多 artifacts其实不是 PCA 理论的问题而是扫描质量、模板注册、纹理采样共同留下来的痕迹。Basel Face Model 2009 的论文和官网都把这件事说得很清楚BFM 发布了一个生成式的 3D shape 和 texture 模型并强调更好的扫描设备与注册算法能减少 correspondence artifacts。BFM 官网说明它由 100 名男性和 100 名女性的注册 3D 扫描计算得到这也是它后来成为经典基准的原因之一它把可复现的数据模型带给了社区。如果用工程语言概括一个传统 3DMM 的构建流水线大概是原始 3D 扫描 / 多视角数据 ↓ 清洗、对齐、去噪、补洞 ↓ 模板 mesh 非刚性注册建立稠密对应 ↓ 把每张脸展平成 shape / texture 向量 ↓ PCA 或其他统计学习方法 ↓ 得到均值、基向量、方差和可采样参数空间这里最容易被低估的是模板注册。一个“干净”的 3DMM 往往不是因为公式复杂而是因为数据和对应关系足够干净。单图 3D 重建在优化哪些变量3DMM 最经典的应用是从单张人脸图像恢复三维人脸。这个问题本来没有唯一解同一张 2D 图像可能来自不同的 3D 几何、不同光照、不同相机参数和不同材质。3DMM 的做法是把未知量限制在一组参数里然后用 analysis-by-synthesis 拟合。给定参数θ\thetaθ系统先生成一张脸再通过相机和光照模型渲染到图像平面。优化目标通常包含几类项E(θ)EphotoλlmElandmarkλpriorEpriorλregEreg E(\theta)E_{photo}\lambda_{lm}E_{landmark}\lambda_{prior}E_{prior}\lambda_{reg}E_{reg}E(θ)Ephoto​λlm​Elandmark​λprior​Eprior​λreg​Ereg​其中EphotoE_{photo}Ephoto​衡量渲染图和输入图像的像素差ElandmarkE_{landmark}Elandmark​让投影后的 3D 关键点对齐 2D 人脸关键点EpriorE_{prior}Eprior​限制身份、纹理、表情参数别跑出统计空间EregE_{reg}Ereg​则放一些额外的平滑或约束。完整变量一般包括变量作用常见问题身份 shape 参数α\alphaα控制骨相、脸型、五官比例太强的先验会回归平均脸纹理 / albedo 参数β\betaβ控制皮肤颜色、局部纹理容易和光照混淆表情参数ψ\psiψ控制张嘴、皱眉、眨眼等变形静态 3DMM 表达能力有限pose 参数头部旋转和平移大姿态下可见区域少camera 参数投影方式和尺度弱透视简化会带来误差illumination 参数球谐光照或其他光照模型复杂阴影、妆容、反光难处理这也是为什么单图重建看起来像“从图像回归 3D”本质却是一个分解问题身份、表情、姿态、光照、相机、纹理都在争夺同一批像素误差。拟合失败时不一定是 shape 模型差也可能是光照解释错了或者 landmark 把嘴角拖偏了。传统优化会直接最小化上面的能量函数深度学习方法则常用 CNN 或 Transformer 从图像回归参数再用 differentiable rendering 或 landmark loss 训练。两者看起来差别很大但底层思想相通3DMM 仍然提供一个低维、可渲染、可正则化的脸空间。BFM 解决“身份平均脸”FLAME 补上表情和头颈运动如果只用最早的 3DMM 思路人脸 identity 可以建得不错但表情、眼睑、嘴部、脖子运动会比较尴尬。静态扫描 PCA 学到的是身份差异和少量表面变化不等于一个完整的可动画人头模型。BFM 的价值主要在 identity 和 texture 的统计建模。它用注册扫描构建形状与纹理空间适合做人脸识别、重建、pose / illumination invariant 任务。BFM 这类模型回答的是“一张中性或接近中性的人脸合理的三维身份空间长什么样”FLAME 则更接近今天 avatar 和 talking head 系统需要的参数化头模。FLAME 论文题目是 Learning a model of facial shape and expression from 4D scans。论文摘要明确说它从数千个准确对齐的 3D 扫描中学习目标是在高端离线 rig 和低端实时捕捉模型之间找一个中间点。搜索结果和论文页也给出一个常被引用的数字FLAME 的线性 shape space 来自 3800 个头部扫描。FLAME 的常见形式可以粗略理解为M(β,θ,ψ)W(TP(β,θ,ψ),J(β),θ,W) M(\beta, \theta, \psi)W(T_P(\beta,\theta,\psi), J(\beta), \theta, \mathcal W)M(β,θ,ψ)W(TP​(β,θ,ψ),J(β),θ,W)这里β\betaβ控制 identity shapeθ\thetaθ控制 pose包括下颌、颈部等关节ψ\psiψ控制 expressionWWW是类似线性混合蒙皮的函数。公式细节可以先不背重点是 FLAME 不再只是一套“中性脸 PCA”而是把形状、姿态关节、表情 blendshape / corrective blendshape 放进同一套可拟合模型里。这解释了为什么很多现代 3D face 项目会选 FLAME 而不是只选 BFM。做 identity 重建BFM 很经典做动态表情、说话头、可驱动 avatarFLAME 的参数设计更顺手。3DMM 和深度网络不是替代关系一个常见误解是深度学习出现后3DMM 就只是老方法。实际工程里更常见的情况是两者叠在一起用。网络可以直接预测 3DMM 参数。例如输入一张图backbone 输出 identity、expression、pose、lighting再通过 3DMM 生成 mesh 并渲染训练时用 2D landmarks、photo loss、perceptual loss 或多视角监督。这样做的好处是网络不用凭空发明三维拓扑输出天然有语义参数。网络也可以预测 3DMM 之外的 residual。3DMM 给出一个稳定的 coarse face神经网络再补头发、皱纹、牙齿、眼球细节、皮肤高频纹理。很多效果好的系统并不指望 3DMM 解释所有像素而是让它负责低频几何和可控参数把剩下的复杂外观交给 neural rendering。在视频驱动里3DMM 参数还常被当作中间表示。相比直接用图像特征驱动生成器3DMM expression / pose 参数更容易做平滑、约束、编辑和跨身份迁移。代价也明显它会丢掉一些真实表情细节尤其是眼神、嘴唇接触、皮肤褶皱和个体化动态习惯。我的判断是3DMM 在现代系统里的位置更像“可解释骨架”而不是最终画质的全部来源。它让系统有几何锚点、有身份一致性、有可调参数但如果你要求照片级头发、口腔、牙齿、细微肌肉运动只靠传统 3DMM 通常不够。几个实现细节容易踩坑第一shape 和 texture 不要混成一个黑盒参数。传统 3DMM 明确区分几何、反照率、光照和相机这是它可解释的来源。深度模型如果只回归一个 latent看起来指标可能好但编辑和诊断会困难很多。第二landmark loss 不能当成完整几何监督。2D landmarks 对轮廓、眼角、嘴角很有用但它只约束稀疏点。仅靠 landmark 对齐得到的 3D mesh 可能侧脸深度、鼻梁厚度、嘴部内外关系都不稳定。第三identity 参数和 expression 参数会串扰。训练数据、模型结构或 loss 设计不干净时张嘴可能改变脸型身份拟合可能吃掉表情误差。动态任务里这点很要命因为用户会看到身份漂移。第四纹理参数经常和光照纠缠。输入图像里的阴影、妆容、肤色、相机白平衡都会影响拟合。没有合理 illumination model 或多图约束时把阴影误学进 albedo 很常见。第五平均脸不是好结果。强先验会让优化稳定但也会把个体特征抹平。很多系统的 reconstructed mesh 看起来“像个人”却不像输入的人原因往往就是正则权重压得太重。3DMM 的边界在哪里3DMM 的优势是低维、可控、可解释、容易和渲染器连接。它尤其适合这些场景单图或少图 3D face reconstruction、face alignment、pose normalization、expression transfer、avatar 初始化、talking head 的几何中间表示。它的短板也同样清楚。线性 PCA 空间很难覆盖细粒度局部几何固定拓扑不擅长处理头发、牙齿、舌头、眼镜等非脸部结构单图拟合里 identity、expression、lighting 的歧义无法完全消除训练数据如果族群、年龄、扫描条件不均衡模型先验也会带偏。这几年很多方法用 neural implicit、radiance field、Gaussian 表示补足 3DMM 的外观表达力但它们通常又会牺牲一部分显式可控性。于是一个很实用的组合出现了用 3DMM / FLAME 提供粗几何和语义参数用神经场或生成模型负责细节和渲染质量。这比单纯争论“3DMM 是否过时”更接近现实。3DMM 不再是最强的视觉生成器但它仍然是人脸三维建模里少数几种能把身份、表情、姿态、光照拉开解释的工具。只要任务需要控制和诊断它就还有位置。小结3DMM 的核心不是一套神秘公式而是三件事把人脸放到稠密对应的模板拓扑上把 shape / texture 的变化学成统计空间再通过渲染和先验把 2D 图像拟合回 3D 参数。Blanz 和 Vetter 的 1999 论文奠定了这套框架BFM 把更可用的公开人脸统计模型带给社区FLAME 则把 identity、表情、下颌和头颈姿态组织成更适合动画与重建的参数化模型。今天的深度学习方法没有消灭 3DMM更多是在它外面接上更强的回归器、渲染器和细节补偿模块。如果你在做 3D face 或 talking head比较稳的理解方式是先让 3DMM 负责“脸应该长在什么几何空间里”再决定哪些部分交给神经网络补。这样系统会少一些玄学多一些可以调、可以查、可以解释的结构。参考资料Volker Blanz and Thomas Vetter, “A Morphable Model for the Synthesis of 3D Faces”, SIGGRAPH 1999. https://cseweb.ucsd.edu/~ravir/6998/papers/p187-blanz.pdfPascal Paysan et al., “A 3D Face Model for Pose and Illumination Invariant Face Recognition”, AVSS 2009. https://shapemodelling.cs.unibas.ch/gravis-site-archive/publications/2009/BFModel09.pdfBasel Face Model 官网说明 BFM 由 100 名男性和 100 名女性的注册 3D 扫描计算得到。https://faces.dmi.unibas.ch/bfm/?nav1-0idbasel_face_modelBernhard Egger et al., “3D Morphable Face Models - Past, Present and Future”, ACM TOG 2020 / arXiv 2019. https://arxiv.org/pdf/1909.01815Tianye Li et al., “Learning a model of facial shape and expression from 4D scans”, SIGGRAPH Asia 2017. https://flame.is.tuebingen.mpg.de/