FLAME Expression:3D 人脸模型里的表情参数到底是什么

📅 2026/6/27 9:31:21
FLAME Expression:3D 人脸模型里的表情参数到底是什么
FLAME Expression3D 人脸模型里的表情参数到底是什么做 3D face fitting、talking head、face animation 或 avatar retargeting 时经常会看到一组参数叫FLAME expression。它通常是一个几十维的向量比如[B, 50]看起来很小却能控制整张脸的表情形变。这篇文章用技术博客的方式把它讲清楚FLAME expression 是什么、它在 FLAME 公式里处在哪一层、和 jaw pose 有什么区别以及工程上怎么用。1. FLAME 是什么FLAME全称是Faces Learned with an Articulated Model and Expressions是一个参数化 3D 头部模型。它的目标是用少量参数生成一个完整的 3D head mesh。你可以把 FLAME 看成一个函数FLAME parameters → 3D head mesh这些参数大致分成几类参数类型常见符号控制什么Shape / identityβ这个人本来的脸型、头型、五官结构Expressionψ当前表情导致的非刚性面部形变Poseθ头、脖子、下巴、眼球的旋转姿态Camera-渲染到图像平面时的位置、尺度、投影其中FLAME expression就是表里的ψ。FLAME expression 是一组低维连续参数用来控制脸部表情带来的 3D mesh 形变。2. Expression 不是“开心/生气/惊讶”标签很多人第一次看到 expression会以为它是一组语义表情标签happy 1 angry 0 surprised 0但 FLAME expression 不是这样。它更像 PCA 空间里的坐标。比如常见配置里 expression 是 50 维expression_params.shape[batch_size,50]这 50 个数字不是人工命名的$$\psi[0] \text{smile}$$ $$\psi[1] \text{frown}$$ $$\psi[2] \text{mouth open}$$真实情况更接近$$\psi[0] \text{某种统计表情形变方向}$$ $$\psi[1] \text{另一种统计表情形变方向}$$ $$\psi[2] \text{又一种统计表情形变方向}$$ ...某些维度可能看起来和微笑、皱眉、嘴唇运动有关但它们不是稳定可解释的语义旋钮。这点很重要。FLAME expression 是learned expression basis coefficients不是 FACS 或 ARKit 那种强语义 blendshape 控制器。3. 一个直觉图FLAME 如何生成一张脸可以把 FLAME 的生成过程想成平均头部模板 identity shape offset expression offset pose corrective offset → 再经过 jaw / neck / eyes 的 articulated deformation → 最终 3D head mesh稍微展开neutral template face │ ├── shape β: 让它变成某个具体的人 │ ├── expression ψ: 让它做出当前表情 │ ├── pose θ: 让头、脖子、下巴、眼球转动 │ └── skinning: 把关节运动应用到 mesh 上所以 expression 的位置是在“模板脸”到“当前表情脸”的中间层。它不是最终图片也不是纹理也不是神经渲染结果。它只是 3D 几何里的表情形变参数。4. 公式上 expression 在哪里FLAME 的核心模板形变可以粗略写成T(β,ψ,θ)TˉBS(β)BE(ψ)BP(θ) T(\beta, \psi, \theta) \bar{T} B_S(\beta) B_E(\psi) B_P(\theta)T(β,ψ,θ)TˉBS​(β)BE​(ψ)BP​(θ)其中符号含义Tˉ\bar{T}Tˉ平均头部模板 meshBS(β)B_S(\beta)BS​(β)identity shape blendshapesBE(ψ)B_E(\psi)BE​(ψ)expression blendshapesBP(θ)B_P(\theta)BP​(θ)pose-dependent corrective blendshapesexpression 部分就是BE(ψ)∑iψiEi B_E(\psi) \sum_i \psi_i E_iBE​(ψ)i∑​ψi​Ei​也就是expression deformation ψ₁ * expression_basis_1 ψ₂ * expression_basis_2 ψ₃ * expression_basis_3 ...每个EiE_iEi​都是一个完整 mesh 的顶点位移场。如果 FLAME mesh 有 5023 个 vertices那么一个 expression basis 大概可以理解成E_i.shape[5023,3]它告诉每个顶点在 x/y/z 三个方向上应该怎么移动。而 expression 参数ψi\psi_iψi​则决定这个 basis 被激活多少。5. Expression 和 jaw pose 的区别这是 FLAME 里最容易混的点。很多嘴部变化不是只靠 expression 完成的。尤其是“张嘴”这种动作通常还需要jaw pose。可以这样区分部分控制什么例子Jaw pose下巴作为关节整体旋转嘴巴张开、闭合下颌运动Expression嘴唇、脸颊、眉眼等软组织形变嘴角上扬、脸颊鼓起、皱眉、唇形细节比如一个“啊”的口型jaw pose: 下巴打开 expression: 嘴唇变圆、脸颊和口周软组织变化一个微笑jaw pose: 可能几乎不动 expression: 嘴角上扬脸颊抬起眼周挤压一个说话中的嘴型jaw pose expression 通常都需要所以如果你在做 talking head只预测 expression 而不预测 jaw pose嘴巴开合容易不自然只预测 jaw pose 而没有 expression嘴唇和脸颊又会很僵。6. FLAME expression 和传统 blendshape 有什么不同传统动画或 ARKit 里的 blendshape 通常是语义化的jawOpen mouthSmileLeft mouthSmileRight browDownLeft eyeSquintRight这些控制器比较容易手调也容易解释。FLAME expression 更偏统计学习expr_basis_0 expr_basis_1 expr_basis_2 ... expr_basis_49对比一下表情表示是否语义化优点缺点FACS / ARKit blendshapes高可解释、可手动控制表达能力依赖人工设计FLAME expression中低紧凑、连续、适合拟合和学习单维不容易解释Neural latent expression低表达力强更难约束和 debugFLAME expression 的优势是它比 raw mesh 小很多又比完全黑盒的 latent representation 更有几何约束。7. 工程里怎么用 FLAME expression7.1 3D face fitting最常见用途是从图像或视频中拟合 FLAME 参数。流程通常是input image / video frame │ ▼ estimate $\beta$, $\psi$, $\theta$, camera │ ▼ render FLAME mesh │ ▼ compare with landmarks / pixels / masks │ ▼ optimize or train regressor这里 expression 负责让 FLAME mesh 的表情对齐图像中的表情。常见 loss 包括landmark loss photometric loss silhouette / mask loss regularization on expression params temporal smoothness for videoexpression regularization 很关键。因为如果不约束优化器可能会用奇怪的 expression 去解释 identity、camera 或 landmark 误差导致表情空间被滥用。7.2 Talking head / audio-driven face animation在 audio-driven talking head 里可以让模型从音频预测 FLAME 表情参数audio features → expression $\psi_t$ → jaw pose $\theta_{\text{jaw},t}$ → maybe head pose $\theta_{\text{head},t}$ → FLAME mesh sequence这样做的好处是维度很低。如果直接预测 mesh5023 vertices × 3 15069 dimensions per frame如果预测 FLAME expression50 expression dims a few pose dims低维表示让模型更容易训练也更容易加 temporal smoothness、identity consistency、expression regularization 等约束。但缺点也明显FLAME expression 只能表示 FLAME 空间里能表达的几何变化。要生成 photorealistic video还需要 renderer、texture model、neural decoder 或 image-space refinement。7.3 Expression transfer / retargetingFLAME expression 也常用于表情迁移。假设有 source 人脸source identity $\beta_A$ source expression $\psi_t$ source pose $\theta_t$现在想让 target 人脸做同样表情可以构造target identity $\beta_B$ same expression $\psi_t$ same or adjusted pose $\theta_t$直觉上就是保留表情 $\psi$ 替换身份 $\beta$这也是很多 avatar animation 和 retargeting pipeline 的基础。不过实际效果不一定完美。因为 identity 和 expression 不是完全解耦的同一个 expression coefficient 作用在不同脸型上视觉效果可能不同。高质量系统通常会额外做 identity-aware correction 或 neural refinement。8. 什么时候 FLAME expression 不够用FLAME expression 很实用但它不是完整的表情/人脸生成解决方案。8.1 极端表情可能出界FLAME 是从真实扫描数据中学习出来的统计空间。太夸张、卡通化或训练集中少见的表情可能无法自然表达。8.2 口腔、牙齿、舌头较弱FLAME 主要建模外部 head surface。说话视频里很重要的牙齿、舌头、口腔内部不是 FLAME expression 的强项。8.3 没有纹理细节Expression 只改变几何。它不会自动生成皱纹 皮肤褶皱 法令纹纹理变化 眼周细纹 口腔内部 appearance这些通常需要 texture model、displacement map、dynamic wrinkle model 或 neural rendering。8.4 单维不可解释如果你想要一个可手动编辑的表情系统FLAME expression 不如 ARKit/FACS blendshape 直观。你可以优化、学习、插值它但不太适合直接拿某一维当“笑容强度”。9. 和 face generation 的关系如果放到 face generation 或 talking head 语境里FLAME expression 最适合当中间几何表示。一个典型 pipeline 可以是audio / text / driving video │ ▼ predict expression $\psi$, jaw pose, head pose │ ▼ FLAME generates 3D geometry │ ▼ renderer / neural decoder │ ▼ photorealistic face video它的价值在于◆ 比 raw pixels 更结构化◆ 比 raw mesh 更低维◆ 有明确 3D 几何含义◆ 可以自然拆分 identity、expression、pose但它通常不是最终生成目标。如果目标是 full-face photorealistic video仅靠 FLAME expression 往往不够。你还需要处理 texture、lighting、occlusion、mouth interior、hair、skin dynamics、image-space realism 等问题。10. 最小代码视角很多 FLAME-based project 里你会看到类似输入shape_paramstorch.zeros(batch_size,100)# βexpression_paramstorch.zeros(batch_size,50)# ψpose_paramstorch.zeros(batch_size,pose_dim)# θvertices,landmarksflame(shape_paramsshape_params,expression_paramsexpression_params,pose_paramspose_params,)这里$\text{shape\_params}$ 控制身份identity $\text{expression\_params}$ 控制表情expression $\text{pose\_params}$ 控制头部/颈部/下巴/眼睛的旋转pose如果你固定 shape只改变 expressionsame_shapeshape_params new_expressionexpression_paramsdelta你得到的是“同一个人做不同表情”。如果你固定 expression只改变 shapenew_shapeanother_identity same_expressionexpression_params你得到的是“不同人做类似表情”。这就是 FLAME disentanglement 的核心用法。总结FLAME expression 是 FLAME 3D head model 里的表情参数通常是一个几十维向量。它通过一组 learned expression blendshapes 控制 mesh 的非刚性面部形变。它需要和几个概念区分开shape $\beta$ 这个人长什么样 expression $\psi$ 当前表情造成的软组织形变 jaw pose 下巴作为关节怎么旋转 head pose 头整体怎么动 texture 脸长什么颜色、有什么皮肤细节在工程上FLAME expression 很适合作为 3D face fitting、talking head、expression transfer、avatar animation 的中间表示。它紧凑、连续、可优化也比纯 neural latent 更容易约束。但它不是完整的 photorealistic face generation 方案。它主要解决的是几何表情表示问题而不是最终图像真实感问题。如果用一句话概括FLAME expression 是一种低维 3D 表情几何坐标它告诉 FLAME mesh 当前这张脸应该如何因为表情而变形。