AI编舞

把一个人的动作压成 2 个 token:NVIDIA 和首尔大学让数字人跟着舞者跳,单卡 4090 上半身跑到 38.9 帧

2026年11月7日1 次阅读
把一个人的动作压成 2 个 token:NVIDIA 和首尔大学让数字人跟着舞者跳,单卡 4090 上半身跑到 38.9 帧
AI 编舞 · 动作生成

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.1340.0880.724
2 个0.8200.7010.686
4 个0.8120.7330.761
去掉对比损失(2 个)0.1990.0570.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-Animate0.7680.3100.42736.1168.2
UniAnimate-DiT0.8180.2470.45825.9170.8
Animate-X0.7450.3850.42131.0229.5
FUHA-C0.8520.2360.51937.9230.5
FUHA-T0.8400.2580.50840.0263.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-Animate0.3954.6 GB
UniAnimate-DiT0.3439.8 GB
MimicMotion0.3217.3 GB
FUHA-C10.714.7 GB
FUHA-T26.603.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 年的同名无关仓库)。所以"下载下来跑一段"这条路现在走不通。

那这篇论文对做舞蹈/动画/数字人的人有什么用?有三条是可以立刻拿走的:

  1. "动作嵌入要小到装不进长相"这个思路可以直接试。 如果你在做动作迁移或者虚拟人,动作侧的表征越小、输入越"去纹理化",跨身份泄漏就越少。代价是动作精度会掉——FUHA 的解法是用对比损失把动作语义单独压出来,而不是靠加大容量。
  2. 不要默认关键点是必须的。 这篇的整个卖点是"推理时不需要姿态估计器"。如果你的流水线里姿态估计是最大误差源,值得试一次"直接从图像特征学动作嵌入"。
  3. 动作嵌入可以当通用接口。 论文还做了一个变体 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 的惯例是部分研究会放代码,但这篇没有任何承诺。

行动建议

  1. 今天就能做:把这篇的 Table 4 存下来。下次你的动作迁移模型出现"换个人就变脸",先查两件事——动作表征是不是太大、有没有一个显式的解耦目标。这两个诊断比调超参有用。
  2. 这周可以做:如果你有姿态估计 + 渲染的两段式流水线,测一下把姿态估计器换成"学习到的紧凑动作嵌入"能不能降误差。哪怕不训练,也可以先用 DINOv3 特征 + 线性探针做个 sanity check,看动作信息在特征里有多可分。
  3. 别做的事:别现在就去等它的权重做产品。先按论文的设计原则改自己的结构,成本低得多。
  4. 要盯的信号: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

说明:本文数据均取自论文原文表格;除论文一手来源外,另有上述两家媒体转述可交叉印证发布时间与核心结论。

评论

0 条已公开
登录或注册后可以参与评论。

正在加载评论...