⭐ 设为星标 · 第一时间收到推送
不是 AI 捏脸,而是把人头写成方程
GNM 的全名是 Generative aNthropometric Model,读音故意做成了 “genome”。名字有点拗口,东西倒不玄:它属于经典的 3D Morphable Model(3D 可变形模型) 路线。
可以把它想成一颗标准人头,加上两套“变形字典”。一套负责这个人天生长什么样,另一套负责他此刻在笑、眨眼还是张嘴;再叠加颈部、头部与眼球的骨骼旋转,最后用线性混合蒙皮算出完整网格。
这里的关键不是“能生成人脸”,而是 每一次变化都有明确坐标。同一组参数永远得到同一个网格,改一个系数只影响对应区域,结果可以保存、插值、回放,也能被跟踪算法实时驱动。
这和扩散模型、NeRF 或 Gaussian Splatting 的长处不一样。后几类方法更擅长从图片或文字里合成丰富外观,GNM 更像一套可编程几何底座:外观不一定最惊艳,但控制权在你手里。
它也不是完整的“数字人生成器”。当前开源的核心首先是头部几何,皮肤材质、头发、服装、灯光、声音和成片渲染,都要交给别的系统。
636 个系数,连牙齿、舌头和眼球都算进去
GNM v3.0 的模型文件里有 17,821 个顶点、35,324 个三角面和 4 个关节。真正让它好用的,是身份与表情并没有揉成一团。
| 控制层 | 维度 | 具体组成 |
|---|---|---|
| 身份 Identity | 253 | 头部 170、眼球 3、牙齿 80 |
| 表情 Expression | 383 | 左眼 100、右眼 100、下半脸 150、舌头 32、瞳孔 1 |
| 骨骼 Pose | 4 个关节 | 颈部、头部、左右眼球 |
| 全局控制 | 3 | X / Y / Z 位移 |
把脸分区,不只是为了让界面上多几排滑杆。Google 的形式化定义专门解释了原因:嘴部运动不该顺手带出眨眼,左眼和右眼也应该能独立控制。GNM 因此把左眼、右眼、下半脸、舌头和瞳孔分别建模,再在区域交界处做平滑混合。
内部结构也不是一颗空壳。牙齿身份空间来自 5000 组程序化牙列;舌头结合真实扫描与艺术家绑定数据;眼球则用双球面近似角膜和巩膜,还单独留出瞳孔缩放参数。对普通捏脸工具来说,这些细节有点“过度认真”,但对凝视估计、口型动画和合成训练数据来说,它们恰好是最容易穿帮的地方。
顺手说一个文档小坑:官方 README 和实际 gnm_head.npz 都是 383 个表情维度,但仓库里的形式化定义 PDF 表格把舌头写成 31 维,合计成了 382。实际模型里舌头是 32 维,本文以可运行的 v3.0 模型文件为准。
摄像头一开,这颗“统计学人头”就活了
GNM 发布后最有说服力的内容,不是参数表,而是开发者 Chris Offner 做的实时演示。他把 MediaPipe 的面部关键点接到 GNM 上,真人眨眼、撇嘴、张嘴,右侧网格跟着变化;同一套驱动换一组身份参数,马上又能变成另一张更年长的脸。
这件事说明了 GNM 的一个实际优势:身份和表情可以分开处理。 跟踪器负责估计“此刻做了什么表情”,身份参数负责“这是谁的脸”,两者不必重新训练成一团。
社区的反应也很一致。有人做了 Three.js 浏览器版,有人把它接进 Blender;还有开发者用 Rust 重写核心变形流程,做成带摄像头跟踪、52 个 blendshape、动画与 GLB 导出的桌面工具。讨论重点几乎都落在“怎么接进现有 3D 工作流”,而不是围观一段生成视频。
原因很现实:GNM 的核心就是几次矩阵运算,支持 NumPy、JAX、PyTorch、TensorFlow,采用 Apache 2.0 许可证。它不要求云端大模型,也不依赖一块昂贵 GPU,工程师很容易把它塞进自己的工具链。
Hugging Face 把研究代码变成了能直接摸的脸
用户现在就能在 Hugging Face Space 里试 GNM。这个 Space 由 Hugging Face 开源团队基于 Google 仓库搭建,并不是 Google 官方产品;它把上游 Notebook 里的滑杆 Demo 做成了 Gradio + Three.js 的交互页面。
页面没有把 636 个身份与表情系数全部摊开,而是选了 10 个身份、16 个表情、9 个姿态和 3 个位移控制,共 38 个滑杆。你还可以直接拖眼睛、嘴角、下巴、舌头和头部;选中 happy、surprise、wink 等语义标签后,背后的 CVAE 采样器会先给出一组表情参数,再让你手动微调。
Space 的实现只用 NumPy,作者给出的单次求值时间约 40 毫秒,免费 CPU 实例就能跑。Three.js 场景也不会每次重建模型,只把新的顶点坐标写进原来的 geometry buffer,所以拖动时相机不重置,网格也不会闪一下。
这层产品化很重要。官方仓库给的是模型、Notebook 和四套后端,Hugging Face 补上了“伸手就能试”的入口。研究代码和普通用户之间,常常就差这样一层薄薄的交互壳。
它是好积木,但还不是完整数字人
GNM 现在最适合四类事情:角色与游戏里的参数化头模、摄像头驱动的实时 Avatar、面部与凝视算法所需的合成数据,以及把扫描或图像拟合到统一拓扑的研究工具。
但边界也很清楚。
- 它只开源了 Head。 Google 的路线图里还有更完整的人体模型与感知栈,但目前仓库里能用的就是头部。
- 它解决几何,不包办外观。 想做写实数字人,还得补纹理、材质、毛发、灯光和渲染。
- 它不是开箱即用的面捕产品。 MediaPipe 接入、参数拟合、平滑、标定和导出,仍然要开发者自己完成或借助社区工具。
- 数据代表性有限。 官方明确说,训练数据沿用了二元性别分类和四个宽泛人口群组,不能覆盖真实世界里完整的性别与人群多样性。拿它做人脸识别、医疗或公平性敏感应用时,不能把“参数很多”误当成“代表性充分”。
- 文档还在补。 仓库的正式引用目前仍写着 “coming soon”,模型说明与形式化定义之间也存在一处维度差异。
GNM 最值得关注的地方,不是它单独做出了多逼真的脸,而是它提供了一层稳定的 可控几何接口。上面可以接 MediaPipe 或未来的感知模型,旁边可以接 Blender、Three.js 和游戏引擎,后面再接纹理生成、语音和大模型。
这条路线和生成式 AI 不冲突。扩散模型负责“长得丰富”,GNM 负责“动得可控”;一个给视觉想象力,一个给工程确定性。Chris Offner 那段实时跟踪视频,先把“感知驱动”和“可控几何”之间的桥搭了出来。
GNM Head 现在更像一块质量很高的开源积木,而不是一款完整数字人产品。做 Blender、Avatar、面捕、凝视估计或合成数据的人,值得马上试;普通用户先去 Hugging Face 拖一遍滑杆,就能理解“可生成”和“可控制”到底差在哪。

