把一个人的动作压成 2 个 token:NVIDIA 和首尔大学让数字人跟着舞者跳,单卡 4090 上半身跑到 38.9 帧
AI 编舞这件事,最后一公里往往不是"想出动作",而是"把这段动作安到另一个人身上"。过去的做法要么慢得离谱,要么得先跑一个姿态估计器、把关键点喂给模型。NVIDIA 和首尔大学 11 月 5 日挂上 arXiv 的 FUHA,走的是第三条路:不估关键点,直接学一个只有 2 个 token 的"动作嵌入",然后用前馈网络一帧一帧渲染出来。
3分钟看懂
- 谁做的:NVIDIA 与首尔大学(Seonwook Park、Hyunsoo Cha、Amrita Mazumdar、Shengze Wang、Tianye Li、Hanbyul Joo、Koki Nagano、Shalini De Mello),论文 11 月 5 日提交,arXiv 编号 2611.07481,目前只有 v1。
- 做了什么:一个前馈 transformer,把驱动者的脸、手、上半身、全身动作压成 2 个 motion token,再把这 2 个 token 铺开去驱动参考图。推理时不需要外部姿态估计器、不需要关键点、不需要参数化人体模型。
- 成绩:上半身基准上,自重现(self-reenactment)的 9 项指标全部第一;跨人重演(cross-reenactment)的身份保持第一。全身体(用的就是 TikTok 舞蹈测试集)像素级指标全部第一,但分布级和时序级指标不如扩散模型。
- 速度:单张 RTX Pro 6000 上半身 10.7 FPS;导出 TorchScript + FP16 后,单张 RTX 4090 上 38.9 FPS,显存 3.7GB。作为对照,同一张表里 Wan-Animate 是 0.39 FPS、54.6GB。
- 能不能用:现在不能。GitHub 搜
FUHA motion是 0 个仓库,Hugging Face 上没有同名权重,论文里也没有项目主页。这是一篇方法论文,不是一个能下载的模型。
先说清楚:让一个人"复制另一个人的动作",贵在哪
这个任务在论文里叫 cross-person reenactment。它要求模型把驱动者的表情、四肢关节、手指姿势抓下来,同时不能把驱动者的长相带过来,还要让参考图的人保持自己的脸和身材。
主流做法有两条,各有各的贵:
第一条是扩散模型。 Wan-Animate、UniAnimate-DiT 这类方案画质很好,但它们要迭代去噪几十步,渲染几秒钟视频要按分钟算。想快可以蒸馏,但蒸馏完之后,动作仍然是从外部估计的关键点来的,不是模型自己学出来的。
第二条是"关键点 + 前馈"。 先跑姿态估计器,把人体骨架画成关键点图,再喂给渲染网络。这条路快,但有两个隐性成本:姿态估计器本身是另一个模型,它估错了,误差会一路传到最后一帧;而且关键点图把"动作"和"体型"绑在一起,换个人就得重估。
还有一类是只做脸的,比如 LivePortrait、MegaPortraits,动作嵌入很紧凑、速度也快,但只管脸,管不到手和身体。
FUHA 的判断是:真正稀缺的不是算力,是一个"只装动作、不装长相"的中间表示。有了它,速度、跨人重演、区域灵活性三件事才能同时成立。
FUHA 干了什么:从输入端就把"长相"和"动作"分开
思路不复杂,但每一处都卡得很准。
第一刀:两条分支读同一个编码器,但读法不同。 视觉编码器用的是冻结的 DINOv3 ViT-B/16。外观分支把它的特征和 RGB tokenizer 的 latent 加起来一起读;动作分支只读 DINOv3 特征,永远看不到 tokenizer 的 latent。这一刀的意思是:动作嵌入从物理上就拿不到逐像素的纹理信息,头发颜色、衣服图案这类东西进不来。
第二刀:把容量压到极限。 动作编码器是一个 8 层、8 头的 Q-Former,只输出 2 个 motion token。外观侧则是 12 层、1024 个 query。动作 2 个、长相 1024 个,这个不对称本身就是约束。
第三刀:训练目标做对比。 光有输入和容量还不够——DINOv3 的特征里本来就带着发型、性别这些线索。所以论文加了一个对比损失:把驱动者的脸/手/身体关键点渲染成一张"只有姿态、没有长相"的图,让动作嵌入靠近这张图的嵌入,同时远离同一个人另一个姿势的嵌入。
这三刀合起来的效果,可以用一个数字衡量:拿动作嵌入去做最近邻检索,检索回同一个人的比例只有 0.1%;它自己的 DINOv3 骨干是 9.5%,随机嵌入是 0.0%。换句话说,这个 2 token 的向量几乎不装身份信息,只装姿势。
解码方向是反过来的:动作解码器用一个 8 层 Q-Former,把 2 个 token 铺成一张和 tokenizer latent 网格对齐的动作图(512×512 输入时是 64×64),再由 16 层的外观解码器把它和外观 query 做交叉注意力,最后交给冻结的 tokenizer 解码器出图。整条流水线是前馈的、逐帧的,没有去噪循环。
为什么偏偏是 2 个 token:1 个会崩,4 个反而更差
这是全文最实用的一段消融(Table 4,上半身基准)。
| motion token 数 | 自重现 ID ↑ | 跨人重演 ID ↑ | 跨人重演 AED ↓ |
|---|---|---|---|
| 1 个 | 0.134 | 0.088 | 0.724 |
| 2 个 | 0.820 | 0.701 | 0.686 |
| 4 个 | 0.812 | 0.733 | 0.761 |
| 去掉对比损失(2 个) | 0.199 | 0.057 | 0.606 |
读法是这样的:1 个 token 太少,连自己重演自己都保不住身份(0.134),画面基本糊掉;4 个 token 保身份更好(跨人重演 ID 0.733,比 2 个还高),但动作准确度变差(AED 从 0.686 恶化到 0.761),自重现的每一项也都在退。作者选了 2 个,是在"装得下动作"和"装不进长相"之间找的那个点。
更能说明问题的是最后一行:把对比损失拿掉,跨人重演的身份保持从 0.701 掉到 0.057,几乎归零。也就是说,前面那两刀(限制输入、限制容量)都不够,真正的分离是靠这个训练目标压出来的。
成绩单:上半身全赢,全身体"像素更像、时间更抖"
上半身基准是作者自建的:96 段公开 YouTube 视频,10–20 秒,25Hz,不在训练集里。512×512 分辨率下:
- 自重现 9 项全第一:L1 0.0287(次优 Wan-Animate 0.0643)、SSIM 0.838、LPIPS 0.106、ID 0.820、AED 0.315、AKD-B 27.1、AKD-H 15.2、FID 38.9(次优 UniAnimate-DiT 66.0)、FVD 38.9(次优 UniAnimate-DiT 145.8)。
- 跨人重演:身份保持 ID 0.701 第一(UniAnimate-DiT 0.630、Wan-Animate 0.489);但 FID 55.9 输给 UniAnimate-DiT 的 50.2,FVD 171.7 也输给 145.8。身份保住了,画质分布不是最优。
全身体用的是 TikTok 舞蹈测试集(Jafarian & Park, 2021),这一组最能对上"舞蹈视频"这个场景:
| 方法 | SSIM ↑ | LPIPS ↓ | ID ↑ | FID ↓ | FVD ↓ |
|---|---|---|---|---|---|
| Wan-Animate | 0.768 | 0.310 | 0.427 | 36.1 | 168.2 |
| UniAnimate-DiT | 0.818 | 0.247 | 0.458 | 25.9 | 170.8 |
| Animate-X | 0.745 | 0.385 | 0.421 | 31.0 | 229.5 |
| FUHA-C | 0.852 | 0.236 | 0.519 | 37.9 | 230.5 |
| FUHA-T | 0.840 | 0.258 | 0.508 | 40.0 | 263.7 |
FUHA-C 的像素级和身份指标都是第一,但 FID 37.9 输给 UniAnimate-DiT 的 25.9,FVD 230.5 更是明显落后。原因论文自己写了:它逐帧独立渲染,没有时序建模,也没有生成先验。落到观感上就是——每一帧都挺像那个人,但连起来会"抖",衣服和头发这类细节偏软。
这跟你实际用在舞蹈视频上的体验是对得上的:静帧看很干净,连播起来缺少扩散模型那种"时间上稳"的质感。
一个反直觉但可迁移的点:动作嵌入可以线性插值
论文做了一个小实验(Figure 5):拿两个不同驱动者的动作嵌入,线性插值 25 步,每一步都解码到同一张参考图上。
结果是:动作跟着插值系数走(25 组测量里中位数 Spearman ρ = 1.00,R² = 0.99),而身份始终跟着参考图(中位数 ArcFace 0.75,到两个驱动者各自最多 0.19)。
这件事的意义不在炫技,在于它说明这个 2 token 空间是连续、可混合的。做编舞工具的人可以直接想到几件事:动作可以渐变、可以混合两个人的动作风格、可以做"从 A 的起手式过渡到 B 的收尾"这种过渡段落——不需要重新生成,只需要在嵌入空间里走一条直线。
速度账本:这才是它真正的位置
上半身 512×512,单张 RTX Pro 6000:
| 方法 | FPS ↑ | 峰值显存 ↓ |
|---|---|---|
| Wan-Animate | 0.39 | 54.6 GB |
| UniAnimate-DiT | 0.34 | 39.8 GB |
| MimicMotion | 0.32 | 17.3 GB |
| FUHA-C | 10.71 | 4.7 GB |
| FUHA-T | 26.60 | 3.7 GB |
导出 TorchScript + FP16 之后,FUHA-C 和 FUHA-T 在单张 RTX 4090 上分别到 12.4 FPS 和 38.9 FPS。
差不多是 27 倍到 68 倍的速度差,显存差一个数量级。这个差距不是靠蒸馏换来的,是因为它根本不是扩散模型——没有去噪循环。
怎么用(以及现在还怎么用不了)
先说清楚:FUHA 没有开源,没有权重,没有项目页。GitHub 上 FUHA motion 是 0 个仓库,Hugging Face 上没有对应模型(只有一个 2023 年的同名无关仓库)。所以"下载下来跑一段"这条路现在走不通。
那这篇论文对做舞蹈/动画/数字人的人有什么用?有三条是可以立刻拿走的:
- "动作嵌入要小到装不进长相"这个思路可以直接试。 如果你在做动作迁移或者虚拟人,动作侧的表征越小、输入越"去纹理化",跨身份泄漏就越少。代价是动作精度会掉——FUHA 的解法是用对比损失把动作语义单独压出来,而不是靠加大容量。
- 不要默认关键点是必须的。 这篇的整个卖点是"推理时不需要姿态估计器"。如果你的流水线里姿态估计是最大误差源,值得试一次"直接从图像特征学动作嵌入"。
- 动作嵌入可以当通用接口。 论文还做了一个变体 FUHA-W:把这个冻结的动作嵌入接到 Wan-Animate 上,替代原来的骨架和脸部裁剪输入(用 adapter + LoRA 微调),上半身的跨人重演 FVD 差距被拉回来了——但速度掉回扩散模型的量级。这说明"紧凑动作表示 + 强渲染器"是可以拆开组合的,你完全可以在自己的渲染器上套一个这样的前端。
适用场景
- 实时虚拟人 / 直播数字人:38.9 FPS、3.7GB 显存,意味着单卡就能跑,还能留出算力给别的东西。
- 舞蹈动作迁移的预览环节:先出低延迟的粗预览看动作对不对,确认了再用扩散模型出成品。这个"两段式"比直接上扩散模型省时间。
- 动作风格混合、过渡生成:利用嵌入空间可线性插值的性质。
- 上半身为主的内容(口播、带货、教学):这是它指标最强、也是作者自己最看重的区域。
不适用 / 别踩的坑
- 别指望它做"音乐到舞蹈"生成。 FUHA 是动作驱动的重演模型,输入是驱动视频,不是音频。论文的未来工作里才提到"用音频驱动这个嵌入"。
- 别指望时序稳定。 逐帧独立渲染,没有时序建模,全身体的 FVD 差得很明显。用来做长舞蹈视频,抖动是硬伤。
- 别指望细节。 头发、布料、参考图里被遮住的区域,都比扩散模型软。论文的 Limitations 里写得很直白。
- 非人形角色效果差。 训练数据里没有非人角色,论文明确说驱动非人角色"可靠性更低"。
- 关键点误差会被继承。 训练时用的关键点来自离线估计器,估计器的错也会被学进去。
- 只有 2 个 token 意味着表达能力有上限。 复杂的手指细节、道具交互这类,2 个 token 装不下——消融里 4 个 token 动作反而变差,说明这个瓶颈不是简单调大就能解决。
成本与时间
- 跑推理(如果将来有权重):单张 4090,上半身 512×512 到 38.9 FPS,显存 3.7GB。按云上 4090 每小时 2~3 元粗略估,一分钟 512p 上半身视频的算力成本在几分钱量级——比扩散模型低两个数量级。
- 训练成本:106 万段视频片段、5172 小时数据、60 个 epoch,两个冻结骨干(DINOv3 ViT-B/16 + Cosmos 或 TAESD3 tokenizer)。这个数据量不是个人能复现的。
- 等代码的时间:目前没有时间表。NVIDIA 的惯例是部分研究会放代码,但这篇没有任何承诺。
行动建议
- 今天就能做:把这篇的 Table 4 存下来。下次你的动作迁移模型出现"换个人就变脸",先查两件事——动作表征是不是太大、有没有一个显式的解耦目标。这两个诊断比调超参有用。
- 这周可以做:如果你有姿态估计 + 渲染的两段式流水线,测一下把姿态估计器换成"学习到的紧凑动作嵌入"能不能降误差。哪怕不训练,也可以先用 DINOv3 特征 + 线性探针做个 sanity check,看动作信息在特征里有多可分。
- 别做的事:别现在就去等它的权重做产品。先按论文的设计原则改自己的结构,成本低得多。
- 要盯的信号:NVIDIA 是否放出 FUHA-W(接 Wan-Animate 的那个变体)的代码——那个变体的实用价值其实比主模型高,因为它直接对着"可用的渲染器 + 紧凑动作前端"这个组合。
参考来源
- arXiv 摘要页(一手):https://arxiv.org/abs/2611.07481
- arXiv 全文 HTML(一手,含 Table 1/3/4/5/6 与 Limitations):https://arxiv.org/html/2611.07481v1
- 第三方转述(PulseAugur,11-06):https://pulseaugur.com/cluster/344472-fuha-model-learns-compact-motion-embeddings-for-real-time-human-animation
- 第三方转述(AI Wiki,11-06):https://aiwiki.equalexperts.ai/entries/compact-motion-embeddings-for-feed-forward-unified-human-animation
说明:本文数据均取自论文原文表格;除论文一手来源外,另有上述两家媒体转述可交叉印证发布时间与核心结论。