一套基底,套住所有化身
论文全名 One Basis to Animate Them All: Gaussian Blendshape Distillation for Real-Time Avatars,方法简称 GALA(Gaussian Animation via Linear Approximation),来自 MBZUAI 与 MWS AI。我把速度、质量、内存这三笔账按全文重算了一遍,结论是:方法比标题更值钱,但标题里的「三个数量级」得拆开看。
「三个数量级」只有一格达标
原句是三个宿主模型的 CPU 单帧动画耗时:154 → 5.5 ms、234 → 4.4 ms、42.9 s → 6.1 ms。换算成加速比:
| 宿主模型 | 宿主动画一步 | GALA 动画一步 | 加速比 |
|---|---|---|---|
| AGORA(头像 GAN) | 154 ms | 5.5 ms | ×28 |
| FlexAvatar(单图头部重建) | 234 ms | 4.4 ms | ×53(论文写 ×54) |
| DynaAvatar(全身衣物动力学) | 42,917 ms | 6.1 ms | ×7,034 |
| DynaAvatar(含 LBS 蒙皮) | 42,927 ms | 16.1 ms | ×2,666 |
更值得玩味的是口径:摘要取了最好看的那一格(×7,000),而作者自己的项目页首页写的是保守的 ×2,659——用的是含蒙皮的那一版。同一份工作,两个地方两个数字。
还有一层:42.9 秒这个基线,是把一个时空 Transformer 逐帧串起来搬到 CPU 上跑出来的结果。现实中没人这么部署。项目页自己给的 GPU 数字是:新视角光栅化 622 fps,但换姿态重跑网络仍需 1.8 秒(RTX 6000 Ada)。分子是被自己抬高的基线——这不影响 6.1 ms 这个绝对值确实是真优化,只影响那个倍率好不好看。
60 fps 是在什么机器上跑出来的?论文没说
这是全文最硬的一处空白:手机型号、移动 SoC、桌面 GPU 型号,一个都没有。 我用全文检索确认过,无 iPhone、Pixel、Galaxy、Snapdragon、A17、RTX 3090 之类字样。唯一出现的具体硬件,是计时用的桌面处理器 Intel Core Ultra 9 285K(8 线程,batch size 1,且不计渲染,只算「由动画参数求高斯属性」这一步)。
而那个 mFPS 根本不是 CPU 成绩。附录 C 写得很清楚:浏览器每一帧读驱动序列的动画参数,把系数网络当成 fragment shader 在 GPU 上跑,第二遍再用「中性化身 + 系数加权求和」合成属性,最后交给排序与光栅化。也就是说,60 fps 是移动 GPU + WebGL 的成绩。把它和「CPU 动画成本降三个数量级」并排放,很容易被读成「手机 CPU 也能跑 60 帧」。
还有个细节:三个模型的 mFPS 齐刷刷都是 60,桌面 FPS 是 1,275 / 1,296 / 1,284。三个高度接近的值强烈暗示存在上限——很可能是 60Hz 垂直同步封顶。论文没有报告 uncapped 帧率,所以「高达 60fps」更像是屏幕刷新率的天花板,而不是 GALA 的能力天花板。
不过话说回来,手机端的真实增益仍然是惊人的:AGORA 在手机上原本只有 1 fps,DynaAvatar 在桌面 GPU 上只有 0.3 fps。换句话说,原先是根本跑不动。
「保持大部分渲染质量」,要打两处折
第一处折,是它确实有输给别人的格子:
| 基准 | 宿主原模型 | GALA | 差 |
|---|---|---|---|
| DynaAvatar @ 4D-Dress,PSNR 升高 | 23.86 | 23.22 | −0.64 dB |
| FlexAvatar @ VFHQ 自驱动,PSNR 升高 | 23.29 | 22.31 | −0.98 dB |
| AGORA @ FFHQ,FID 降低 | 3.17 | 3.47 | 退 0.30 |
第二处折藏在 Limitations 里,比第一处重要得多。
论文做了一个很漂亮的归因隔离:如果用「投影系数」——它是先跑一遍宿主网络再投影出来的,所以完全不省时间——基底表达力很强,能贴紧宿主。可一旦换成真正部署时用的「预测系数」,相对宿主的 PSNR 就掉 5.7 dB(AGORA)和 12.3 dB(FlexAvatar),都是在 48 MB 预算下。
更要命的是后半句:加大内存预算,主要改善的是投影系数那一路。 也就是说,这 12.3 dB 的缺口不在线性基底,而在那个浅层 MLP 预测器本身——加钱补不上。
「一套基给所有身份」,2/3 成立
附录 Table 6 有一行专门回答「每个新身份要不要重来」:
| AGORA | FlexAvatar | DynaAvatar | |
|---|---|---|---|
| 逐身份步骤 | 无 | 登记(enrollment) | 无 |
内存预算只算基底,不算预测器
Table 5 的三列:空域块 B 都是 32;blendshape 总数 K 分别是 1,016 / 4,860 / 2,686;内存预算 48.0 / 48.0 / 88.3 MB。
但这个预算只约束基底 U,不约束系数网络。 DynaAvatar 的系数网络独占 60.7 MB、15.2M 参数、每帧 42M MAC——比基底少不了太多,端到端落地约 149 MB。相比之下 AGORA 的系数网只有 1.6 MB、0.80M 参数。把它统称「浅层 MLP」,在全身上那个模型上偏勉强。
好消息是训练成本极低:单卡 11 min / 5 min / 45 s。
该肯定的地方
问题选得极准。 别人都在卷更快的渲染器,这篇指出「渲染快不等于动画快」,把每帧必跑的重型神经解码单独拎出来当攻击目标。这个观察本身比方法更值钱。
归因做到了两级隔离。 投影系数与预测系数分栏对比,把「基底表达力不足」和「预测器不够强」彻底分开,直接导出了上面那条最诚实的结论。这在蒸馏类论文里是罕见的严谨。
消融互为对照,不是堆 trick。 空域块从 1 增到 32,PSNR 分别得 8.2 / 6.9 / 8.6 dB;改用方差而非 v 排序,损失 5.3 / 2.7 / 13.3 dB;统一 rank,损失 6.2 / 1.2 / 8.5 dB。那个 13.3 dB 说明方向是对的。
工程闭环跑通了。 附录 C 给了完整的 WebGL 部署路径,demo 里可以同时显示若干个全身化身,代码在项目页可达(github.com/ramazan793/gala)。论文正文里反倒一个代码链接都没有。
最后,作者自己在结尾留了一句很老练的话:本方法继承了宿主模型的局限,而结果暗示化身模型本可以直接用「跨身份共享的 blendshape 基底」来训练。它承认自己是个过渡态的补丁。
一句话
它真正证明的不是「我们把神经动画加速了三个数量级」,而是:那些被训得又深又贵的逐帧神经解码器,其输出其实躺在一个能被 PCA 挖出来的线性子空间里——复杂是训练出来的假象,不是动画本身的本性。
一旦接受这个前提,「不用重训」和「不用重跑」就成了同一件事。只是那三个数量级,请记住它是 ×28、×53 和 ×7,034。