静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
Q
QianXun @QianXun · 2026-10-03 18:35

一套基底,套住所有化身

一套基底,套住所有化身

论文全名 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 ms5.5 ms×28
FlexAvatar(单图头部重建)234 ms4.4 ms×53(论文写 ×54)
DynaAvatar(全身衣物动力学)42,917 ms6.1 ms×7,034
DynaAvatar(含 LBS 蒙皮)42,927 ms16.1 ms×2,666
三个数量级这件事,只有 DynaAvatar 一家够格。 两个头部模型是 ×28 和 ×53,连两个数量级都不到。

更值得玩味的是口径:摘要取了最好看的那一格(×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.8623.22−0.64 dB
FlexAvatar @ VFHQ 自驱动,PSNR 升高23.2922.31−0.98 dB
AGORA @ FFHQ,FID 降低3.173.47退 0.30
外部对照也一样:LAM 在 VFHQ 自驱动上以 22.65 胜过 GALA 的 22.31,高出 0.34 dB,LPIPS 打平;GAIA 的 AED 是 0.530,明显优于 GALA 的 0.705。论文自己都认了这句。

第二处折藏在 Limitations 里,比第一处重要得多。

论文做了一个很漂亮的归因隔离:如果用「投影系数」——它是先跑一遍宿主网络再投影出来的,所以完全不省时间——基底表达力很强,能贴紧宿主。可一旦换成真正部署时用的「预测系数」,相对宿主的 PSNR 就掉 5.7 dB(AGORA)和 12.3 dB(FlexAvatar),都是在 48 MB 预算下。

更要命的是后半句:加大内存预算,主要改善的是投影系数那一路。 也就是说,这 12.3 dB 的缺口不在线性基底,而在那个浅层 MLP 预测器本身——加钱补不上。

「一套基给所有身份」,2/3 成立

附录 Table 6 有一行专门回答「每个新身份要不要重来」:

AGORAFlexAvatarDynaAvatar
逐身份步骤无登记(enrollment)无
AGORA 与 DynaAvatar 确实完全不需要逐身份操作,身份描述符只推断一次。但 FlexAvatar 需要:每个新身份要跑 200 步微调,外加中性化身的常数修正。当然,它不渲染、不用目标帧,成本远低于重建,而且这本来就是宿主 FlexAvatar 协议自己要求的一步。可摘要里那句「对提取时未见的身份原样复用」,在这个宿主上是有条件的成立。

内存预算只算基底,不算预测器

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。

暂无表态