跳转至

FloodDiffusion: Tailored Diffusion Forcing for Streaming Motion Generation

会议: CVPR 2026
论文: CVF Open Access
代码: https://shandaai.github.io/FloodDiffusion/ (项目页,已开源模型/代码/权重)
领域: 人体动作生成 / 扩散模型
关键词: 流式动作生成, diffusion forcing, 文本驱动动作, 实时生成, 因果 VAE

一句话总结

FloodDiffusion 把视频领域的 diffusion forcing 改造(tailor)到文本驱动的流式人体动作生成上,通过"下三角时间调度 + 活动窗双向注意力 + 帧级时变文本条件"三处关键修改,首次让 diffusion forcing 框架在 HumanML3D 上做到 FID=0.057,达到流式 SOTA 并逼近非流式方法。

研究背景与动机

领域现状:文本驱动的人体动作生成(text-to-motion)绝大多数工作做的是"非流式"——给一段完整文本,一次性吐出一整条动作序列(MDM、MoMask、T2M-GPT 等)。但实时 NPC、机器人控制等场景需要的是"流式":文本提示会随时间变化(比如先"抬膝"再"深蹲"),动作要边生成边输出、并能立刻响应新提示。

现有痛点:现有流式方案有两条路线,各有硬伤。① 逐块扩散(chunk-by-chunk,如 PRIMAL):每块要等上下文填满才能开始去噪,"首帧延迟"很高;② 自回归 + 扩散头(如 MotionStreamer):逐 token 生成,难以显式利用过去动作的长程历史。

核心矛盾:流式动作生成本质是"在时变控制信号下的时间序列生成",既要低首帧延迟、又要能用上完整历史,而上面两条路线都只能二选一。

切入角度:视频生成里有个叫 diffusion forcing 的框架——给序列里每一帧分配不同的噪声水平,理论上同时具备低首帧延迟和显式历史利用两个优点,正好对症。于是作者尝试把它搬到动作生成。

核心 idea:但作者发现,照搬视频版的 vanilla diffusion forcing 根本生成不出真实的动作分布。本文的贡献正是找出"为什么不行"并做三处针对性改造(tailor),并从数学上证明改造后的框架能精确复现目标数据分布(而非像原版那样优化 ELBO 代理),用"Flood"(洪水/逐帧漫灌去噪)命名这套定制版 diffusion forcing。

方法详解

整体框架

FloodDiffusion 是一个潜空间扩散框架。先用一个因果 VAE 把 263 维的动作流(全局速度、根旋转、关节旋转、足部接触)时间下采样 4 倍、编码成一条紧凑的 4 维 latent 序列;扩散过程只在这个 latent 空间里跑,从而把流式延迟压低。去噪器是 DiT 风格的骨干,预测 latent 的速度场 \(\hat{u}_t\)

关键在于它如何"流式"地去噪:作者把标量的扩散时间调度 \(\alpha_t,\beta_t\) 扩展成向量化时间调度——序列里每一帧 \(k\) 各自有 \(\alpha_t^k,\beta_t^k\),按一条下三角形状随时间推进,使得任意时刻 \(t\) 只有一个"活动窗" \([m(t), n(t))\) 内的帧在被去噪,窗前的帧已固化、窗后的帧仍是纯噪声。推理时从噪声起步、不断把这个活动窗向后滑动,每生成出的 latent 帧立刻解码成动作输出,实现逐帧流式。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["263D 动作流"] --> B["因果 VAE 编码<br/>→ 4D latent 序列"]
    B --> C["1. 下三角向量化时间调度<br/>只对活动窗 m(t):n(t) 加噪"]
    C --> D["2. 活动窗双向注意力<br/>DiT 预测速度场"]
    D --> E["3. 帧级时变文本条件<br/>T5 + 偏置注意力掩码"]
    E --> F["ODE 求解 + 滑窗推进"]
    F --> G["因果 VAE 解码<br/>逐帧流式输出"]

关键设计

1. 下三角向量化时间调度:把"流式"变成可证明的局部计算

vanilla diffusion forcing 给每帧采随机时间步,导致活动窗大小不定、训练-推理调度错配,而且没有一个"超过某索引后必为纯噪声"的确定边界。作者改用一条确定性的下三角调度:令 \(n_s\) 为流式步长,第 \(k\) 帧的噪声系数为 $\(\alpha_t^k = \mathrm{clamp}\!\left(t - \tfrac{k}{n_s},\, 0,\, 1\right),\qquad \beta_t^k = 1 - \alpha_t^k,\qquad \sigma_t = 0\)$ 这样每帧从噪声到数据级联式地推进。配合活动窗定义 \(m(t)=\lceil (t-1)\,n_s\rceil\)(已完全去噪帧)、\(n(t)=\lceil t\,n_s\rceil\)(活动帧),作者证明了 Streaming Locality 定理:速度场在活动窗外恒为零, $\(u_t(\mathbf{X}_t,\mathbf{c}^{0:K}) = \big[\mathbf{0}^{0:m(t)},\; u_t^{m(t):n(t)},\; \mathbf{0}^{n(t):K}\big]^\top\)$ 于是每步只需对窗口 \([m(t),n(t))\) 计算,前面的帧已定稿、后面的帧还是纯噪声。这把无界的全序列计算压成有界局部计算:首帧延迟仅 1 帧(\(N/n_s\) 步),控制响应延迟被 \(n_s\) 帧界住。这条三角形之所以关键(论文 Remark 3.9),是因为它的硬饱和 \(\alpha_t^k\in\{0,1\}\) 给出了一个确定的有限截断点 \(n_s\),随机/非确定递减调度都没有这个性质,定理也就不成立。同时整套调度保持精确似然,而不是原版 diffusion forcing 的 ELBO 近似。

2. 活动窗内双向注意力:让缓冲帧吃到最新文本

视频版 diffusion forcing 用因果注意力(每帧只看过去),但本文里时刻 \(t\) 的有效上下文是一整个区间 \([0,n(t))\) 而非严格的前缀(论文 Remark 3.10)。如果仍用因果掩码,活动窗内那些处于不同噪声水平的帧就看不到窗内"未来"的、合法且有用的上下文,去噪会次优。作者改成在活动窗内做双向自注意力,保证缓冲区里的帧都基于最新文本被去噪。消融印证这点极其关键:换成因果注意力后 FID 从 0.057 直接崩到 3.377——和全块扩散里"双向换因果只让 FID 从 0.51 涨到 0.92"完全不是一个量级,说明对 diffusion forcing 而言双向上下文是必需而非锦上添花。

3. 帧级时变文本条件:原生处理提示切换,免去 refresh 检测

流式场景里文本随时会变("走路"→"坐下"→"站起"),现有方法靠推理时的人工"refresh 机制"——检测到新提示就停掉当前生成、刷新条件,既脆弱又会带来信息融合不一致。作者把它换成连续的、帧级的文本条件注入:用预训练 T5(最大长度 128)抽 token 特征,展平成 1D,套上和动作 token 同样的旋转位置编码对齐;注意力内部用一个偏置掩码,让每一帧动作只能 attend 到它当前时刻所激活的那段文本。这样自注意力对动作本身保持干净、又持续灌入最新文本,模型被直接训练在时变文本条件上,推理时无需任何停止/刷新/提示切换检测就能即时反映新提示。图 4 还显示同样几条提示、按不同时机投喂会得到不同动作,说明条件确实是"时变"地被消化的。

损失函数 / 训练策略

训练在 latent 空间做流匹配(flow matching,\(\sigma_t=0\)),直接回归条件速度目标: $\(\hat{u}_t = \arg\min_{u^\theta_t}\ \mathbb{E}_{t,\mathbf{z},\boldsymbol{\epsilon}}\big[\,\|u^\theta_t(\mathbf{x}_t,\mathbf{c}) - u_t(\mathbf{x}_t\mid\mathbf{z})\|^2\big]\)$ 其中 \(t\sim\mathrm{Unif}(0,T)\)\(\mathbf{z}\sim p_\text{data}\)\(\boldsymbol{\epsilon}\sim p_\text{init}\)\(\mathbf{x}_t=\boldsymbol{\alpha}_t\odot\mathbf{z}+\boldsymbol{\beta}_t\odot\boldsymbol{\epsilon}\);每步只在活动窗 \(A=\{m,\dots,n-1\}\) 上算 loss(Algorithm 1)。训练超参:因果 VAE 时间下采样 4、latent 通道 4,AdamW(lr \(2\times10^{-4}\))训 300K 步;扩散骨干流式斜率 \(n_s=5\),AdamW(lr \(1\times10^{-3}\))+ cosine 退火训 50K 步,均在 H200 上。先在 HumanML3D 上单独训(每帧共享同一文本,对应标准 text-to-motion),再在 HumanML3D+BABEL 上联合训以覆盖时变提示场景。推理用 CFG,最佳文本 CFG=6。

实验关键数据

主实验(HumanML3D 非流式 + BABEL 流式,Table 1)

方法 流式 R@3↑ FID↓ MM-Dist↓ PJ→ AUJ↓
Real motion 0.797 0.002 2.974 1.100 41.20
MoMask(非流式 SOTA) 0.807 0.045 2.958
ReMoDiffuse 0.795 0.103 2.974
PRIMAL(流式) 0.780 0.511 3.120 1.304 19.36
MotionStreamer(流式) 0.802 0.092 2.909 0.912 16.57
FloodDiffusion 0.810 0.057 2.887 0.713 14.05

FloodDiffusion 拿下最好的 R@k 与 MM-Dist,FID 0.057 仅次于非流式的 MoMask、且远超所有流式基线;流式专属指标 PJ(峰值 jerk,越接近真值越好)与 AUJ(jerk 曲线下面积,越低越平滑)都明显领先,说明过渡更平滑。

消融实验(核心设计,Table 3)

配置 FID↓ R@3↑ MM-Dist↓
Full(Ours) 0.057 0.810 2.887
w/o 双向注意力(换因果) 3.377 0.625 4.296
w/o 下三角调度(换随机) 3.883 0.532 4.651

去掉任一项 FID 都从 0.057 崩到 3+ 量级,两处改造都是"成败开关"而非微调。

关键发现

  • 双向注意力是 diffusion forcing 的命门:同样换因果掩码,全块扩散只是 FID 0.51→0.92,而 diffusion forcing 直接 0.057→3.377。因为活动窗内各帧噪声水平不同,去噪必须看到整窗上下文。
  • 结构化级联调度 ≫ 随机调度:随机时间步训 1M 迭代后 FID 仍是 3.883,下三角调度才 0.057,说明"确定性、级联推进"对该任务高度有利。
  • CFG 影响大:FID/MM-Dist 随 CFG 从 1 增大显著改善,CFG=6 时达到最优(FID=0.057, MM-Dist=2.852)。
  • 因果 VAE 选型不敏感(Table 4):VQ-VAE / MotionStreamer 的 CausalVAE / Wan CausalVAE 在相同 latent 维度下重建质量相近,作者选 Wan 版只为与视频生成社区保持架构一致。
  • 用户研究(Table 2,100 人 Bradley–Terry):FloodDiffusion 在 Preference / Transition / Consistency 三项上都是生成基线里最高,过渡与偏好分甚至接近真实动作。

亮点与洞察

  • "tailor 而非照搬"的范式诊断:论文没有发明全新框架,而是精确指出 vanilla diffusion forcing 在动作任务上失败的三个具体原因并逐一修复——这种"为什么别人的框架在我这不灵"的工程诊断本身很有借鉴价值。
  • 下三角调度把流式变成可证明的局部计算:活动窗外速度场恒零的 Streaming Locality 定理,让"边生成边输出、有界延迟"从工程 trick 升格为有数学保证的性质,且保持精确似然而非 ELBO。
  • 免 refresh 的时变条件:用偏置注意力掩码做帧级文本注入,直接在时变条件上训练,省掉了所有"检测提示切换→停止→刷新"的脆弱推理逻辑,这套思路可迁移到任何需要实时响应控制信号切换的流式生成任务(如交互式视频、音频流)。
  • 首帧延迟 1 帧:相比逐块扩散必须等满一个 chunk,diffusion forcing 在这里把首帧延迟压到 \(N/n_s\) 步,同时还能用上百帧历史上下文。

局限与展望

  • 依赖因果 VAE 的 latent 质量:整套扩散在 4 维 latent 上跑,VAE 重建误差会成为动作质量上限;Table 4 虽显示选型不敏感,但 latent 维度等仍是潜在瓶颈。⚠️ 论文未充分讨论更高自由度表示(如 330D SMPL-X)下的表现。
  • \(n_s\) 即延迟-质量权衡的旋钮:流式步长 \(n_s\)(实验取 5)同时决定控制响应延迟(\(n_s\) 帧)与窗口大小,论文未给出 \(n_s\) 的系统敏感性分析,实际部署时这是个需要调的关键超参。
  • 评测仍偏离线指标:虽有 PJ/AUJ/用户研究,但真实实时系统里的端到端延迟、抖动、长序列漂移等尚缺直接测量。
  • 改进思路:把时变文本条件扩展到多模态控制信号(音频、轨迹、场景约束)、或探索可变 \(n_s\) 以在不同动作段动态权衡延迟与质量。

相关工作与启发

  • vs PRIMAL(逐块扩散):PRIMAL 靠 chunk-by-chunk 扩散在过去动作+当前文本上扩展序列,首帧延迟高(须填满一块);FloodDiffusion 用滑动活动窗把首帧延迟降到 1 帧,FID(0.511→0.057)与平滑度全面领先。
  • vs MotionStreamer(AR+扩散头):MotionStreamer 用因果 latent 空间逐 token 自回归生成,长程历史只能隐式利用;本文用双向注意力显式吃整个活动窗的历史,R@3 0.802→0.810、AUJ 16.57→14.05。
  • vs vanilla diffusion forcing(视频版):原版用因果注意力 + 随机时间调度 + refresh 机制,且只优化 ELBO;本文三处改造(双向注意力 / 下三角调度 / 时变文本条件)让它首次在动作流上达到 SOTA 并保持精确似然,是"把视频框架成功移植到 1D 时序动作"的关键案例。
  • vs MoMask(非流式 SOTA):MoMask 用离散 token 做非流式生成、FID 0.045 略优;FloodDiffusion 作为流式方法 FID 0.057 已逼近它,且在 R@k/MM-Dist 上反超,证明流式不必以质量为代价。

评分

  • 新颖性: ⭐⭐⭐⭐⭐ 首个 diffusion-forcing 流式动作框架,且把流式性质做成可证明的定理。
  • 实验充分度: ⭐⭐⭐⭐ 双数据集 + 客观/主观/消融齐全,但缺 \(n_s\) 敏感性与端到端延迟实测。
  • 写作质量: ⭐⭐⭐⭐ "诊断三处失败再逐一修复"的叙事清晰,理论部分推导完整。
  • 价值: ⭐⭐⭐⭐⭐ 实时 NPC/机器人等流式动作场景的强基线,免 refresh 设计可迁移。