Conference

SqueezeMe: Mobile-Ready Distillation of Gaussian Full-Body Avatars

Forrest Iandola, Stanislav Pidhorskyi, Igor Santesteban, Divam Gupta, Anuj Pahuja, Nemanja Bartolovic, Frank Yu, Emanuel Garbin, Tomas Simon, Shunsuke Saito

Meta

SIGGRAPH 2025Reconstruction

一句话总结

SqueezeMe 把原本依赖高容量神经网络解码的高保真 3D 高斯全身化身,蒸馏成”线性层 + 高斯校正量共享”的轻量表示,配合定制 Vulkan 渲染管线,首次在 Meta Quest 3 头显上做到 3 个化身同时驱动与渲染、达到 72 FPS。

研究背景

  • 领域现状:基于 3D 高斯泼溅(3D Gaussian Splatting)的全身化身已经能达到很高的视觉保真度,桌面级 GPU 上可实时驱动和渲染单个化身;对静态场景或预录序列,移动端实时渲染也已可行。
  • 核心痛点:化身不同于静态场景,需要根据实时驱动信号(如身体姿态)在线计算非刚性校正量。现有高保真方法靠高容量神经网络逐帧解码这些姿态相关校正量,内存与算力开销大,独立式 VR 头显这类移动端算力和带宽受限,难以承载。
  • 本文 idea:借鉴计算机图形学里常用的 blendshapes 与线性姿态校正思想,把神经网络学到的姿态校正蒸馏成线性层;再利用”相邻高斯的校正量以低频为主”这一观察,让邻近高斯共享校正量,进一步压缩内存,从而把解码器塞进移动芯片。

方法

整体框架:先用高容量卷积解码器训练一个紧凑的高保真高斯化身(校正量定义在 UV 图上),再把这个解码器分两步蒸馏——线性化(PCA + 最小二乘)与校正量共享(Gaussian Corrective Sharing, GCS),最后量化并在定制 Vulkan 管线里渲染。

flowchart LR
  A[多视角采集数据] --> B[训练紧凑高斯化身<br/>CNN 解码器 + UV 高斯图]
  B --> C[抽取关键帧<br/>姿态与校正量配对]
  C --> D[PCA 线性化<br/>解码器蒸馏为线性层]
  C --> E[校正量共享 GCS<br/>邻近高斯共享校正]
  D --> F[8bit 权重量化]
  E --> F
  F --> G[Vulkan 渲染管线<br/>LBS 驱动 + 剔除 + 排序 + 光栅化]
  G --> H[Quest 3 上 3 化身 72 FPS]

关键设计:

  1. 紧凑的 UV 空间高斯化身:解码器预测一张 \(G \in \mathbb{R}^{K\times256\times256}\) 的 2D 高斯图,每个像素对应一个高斯,\(K=37\) 是每个高斯的自由度(旋转、位移、尺度、球谐系数等)。与 Animatable Gaussians 用前后正交投影、大量像素闲置不同,本文把高斯属性投影到蒙皮网格的 UV 图上,表示更紧凑,用更少高斯(约 6 万,是基线的五分之一)达到相当质量。化身由线性混合蒙皮(LBS)加非线性校正驱动,最终高斯为 \(G = LBS(G_t + M(D(e_f,e_b)),\theta)\) ,其中 \(G_t\) 是可学习模板,\(M\) 是掩掉 UV 死区的二值掩码。透明度项 \(\delta\) 保持常数,方便剔除不可见高斯。

  2. 线性蒸馏(Linearization):把卷积解码器 \(D\) 蒸馏成两层线性模型。收集一批姿态输入与解码器输出,用 PCA 把姿态向量压到 64 维,加一列全 1 构成设计矩阵 \(C\),用正规方程 \((C^TC)^{-1}C^T\) 求最小二乘解得到校正量基。第一层线性层把 64 维压缩向量映射到 60381×16,是主要开销;第二层把其中 6 个通道展开成 27 维球谐,其余 10 通道给几何参数。这样解码延迟骤降。

  3. 高斯校正量共享(GCS):静态高斯参数需要保留高频细节才逼真,但姿态相关校正量以低频为主——皮肤、头发、衣物上相邻粒子基本一起运动。于是把解码器输出从 256×256×37 改成 64×64×37(校正量从 65536 降到 4096),训练时用最近邻上采样回 256×256,等价于让每个 4×4 邻域的高斯共享一份校正量,内存约减少 16 倍。

  4. 定制 Vulkan 渲染:利用硬件光栅化加速高斯泼溅。流程为:compute 步做 LBS 驱动 → 逐图元剔除视锥外高斯(双目共用)→ 投影并按深度排序(双眼复用排序索引)→ 把投影高斯展开成带颜色和不透明度的四边形图元,走传统图形管线光栅化混合。除最后光栅化用顶点/片元着色器外,各阶段都是标准 Vulkan compute shader。

实验结果

在内部采集穹顶(512 台 2500 万像素相机、90 FPS)采集 4 个身份的数据,训练/评测使用不同姿态段,且评测均为新视角合成(相机位姿不在训练集)。主实验对比线性化与校正量数目对质量与解码延迟的影响,指标在按分割掩码裁剪后的图像上计算,结果为 4 个身份的平均,延迟仅指解码器部分(Quest 3 上)。

模型 高斯数 校正量数 L1↓ LPIPS↓ PSNR↑ SSIM↑ 解码延迟
Animatable Gaussians(基线) 300k 300k 0.037 0.143 24.637 0.620 —
SqueezeMe(初始) 60k 60k 0.036 0.146 24.992 0.638 —
SqueezeMe(GCS) 60k 4k 0.036 0.147 25.024 0.636 —
SqueezeMe(线性化) 60k 60k 0.039 0.150 24.411 0.632 5.0 ms
SqueezeMe(GCS + 线性化) 60k 4k 0.039 0.151 24.370 0.629 0.45 ms
SqueezeMe(无解码器) 60k 0 0.040 0.164 23.905 0.622 0
从零训练线性模型 60k 60k 0.044 0.215 23.454 0.616 5.0 ms

(”从零训练线性模型”的数字为 3 个身份平均,另一身份训练发散;该数字带星号说明数据不完整。)

其余结论:初始 SqueezeMe 用 5 倍更少的高斯即达到与 Animatable Gaussians 相当的质量;GCS 把校正量从 6 万降到 4 千质量几乎不掉;再加线性化后解码延迟低至 0.45 ms,处于初始模型与”无解码器”之间的折中,非常适合端上部署。相比之下,直接从零训练线性模型质量明显更差且不稳定,说明”两阶段蒸馏”的价值。量化方面,采用 8 bit 权重、16 bit 激活的训练后量化,浮点与量化模型定量结果一致。整体上解码器延迟从基线的 50 ms 降到 0.45 ms,实现 Quest 3 上 3 化身 72 FPS。

亮点与局限

  • 亮点:
    • 系统性地把”高容量 CNN 解码器”蒸馏为”线性层 + 校正量共享”,兼顾质量与移动端延迟,首次在独立式 VR 头显上同时驱动并渲染 3 个全身高斯化身且达 72 FPS。
    • 抓住”姿态校正量以低频为主”的关键观察做校正量共享,内存约减 16 倍而质量几乎无损。
    • 蒸馏比从零训练线性模型更稳更好,量化后质量无损,工程上很实用;UV 空间紧凑表示让高斯数减少到基线的五分之一。
  • 局限:
    • 手部偶尔模糊、局部出现不该有的透明;校正量共享与线性化会在手臂(尤其腋下、T 恤袖口与皮肤交界)间歇引入伪影。
    • 校正量共享假设相邻高斯一起运动,但手臂、腿部关节处高斯运动较独立,叉腿站立时裤子座部质量下降。作者认为需要更自适应地分配高斯与校正量来缓解。

延伸思考

  • 把神经解码器蒸馏成线性/低秩形式,本质上是”用图形学先验(blendshapes、线性校正)换算力”,这一思路可推广到头部、手部乃至服装动画等其他可驱动神经资产的移动端部署。
  • 校正量共享是均匀 4×4 邻域的静态分组,关节等高形变区域正是伪影高发处;未来结合按身体部位或形变强度自适应分配自由度,或分频段(低频共享、高频保留)建模,可能进一步提升质量。
  • 与头部化身的 Gaussian Blendshapes、Gaussian Eigen Models 相比,本文强调”仅提取线性基不足以满足移动端要求”,补上了校正量共享与完整端到端系统;这提示后续工作评估效率方法时,需要把内存、量化、渲染管线一并纳入端到端考量,而非只看解码器本身。