Self-Forcing++: Towards Minute-Scale High-Quality Video Generation
Authors: Justin Cui, Jie Wu, Ming Li, Tao Yang, Xiaojie Li, Rui Wang, Andrew Bai, Yuanhao Ban, Cho-Jui Hsieh Affiliations: UCLA, ByteDance Seed, University of Central Florida Paper: arXiv:2510.02283 Project: self-forcing-plus-plus.github.io Code: justincui03/Self-Forcing-Plus-Plus Code reference:
main@b194c8d4(2025-10-13) — official repo currently contains README/assets; method pseudocode below is aligned with paper Algorithm 1 and the released Self-Forcing base implementationmain@33593df3(2025-09-12)
1. Motivation (研究动机)
现有自回归长视频生成方法面临两层 train-inference mismatch,导致超出训练时长后质量急剧下降:
Temporal mismatch(时间维度不对齐):训练时 student 只生成 ≤5 秒的短片(teacher 的最大能力),推理时需要生成远超 5 秒的长视频。Self-Forcing 虽然部分缓解了 CausVid 的 over-exposure 问题,但仍然被 teacher 的 5 秒极限所束缚 Supervision mismatch(监督维度不对齐):训练时 teacher 对每一帧都提供密集监督,student 几乎不接触误差;推理时 student 必须在自身不完美的输出上持续 rollout,误差不断复合。表现为 motion stagnation(运动停滞)、scene freezing(场景冻结)、catastrophic fidelity loss(质量崩溃) 关键观察:虽然长 rollout 质量退化,但视频往往保留了结构连贯性——错误主要是可恢复的退化(如运动停滞、曝光异常),而非结构崩溃。这说明自回归机制本身没坏,teacher 具有从退化视频中纠正错误的能力
此外,论文发现 VBench 评估长视频存在 bias——它倾向于给 over-exposed 和退化的帧更高的 Image Quality 和 Aesthetic 分数,导致评估不可靠。更细地看,本文要解决的不是“让一个短视频模型直接看见更长真实视频”的数据问题,而是一个闭环 rollout 稳定性问题: 传统 DiT 视频模型(例如 Wan2.1、LTX-Video)视觉质量强,但依赖双向 attention 与多步 denoising,难以在推理中像语言模型一样持续流式延展。CausVid 把双向 teacher 蒸馏成带 block-causal attention 的 student,并用 KV cache 做自回归生成;
但它仍依赖 overlapping frames 来维持连续性,且训练阶段没有充分暴露 student 自己的长程误差。Self-Forcing 把训练阶段改成 self-rollout,缓解 CausVid 的 over-exposure;但它仍只在 teacher 能覆盖的 5 秒窗口内训练,超过窗口后 student 没学过如何从“自己造成的退化状态”恢复。因此,长视频崩溃的根因不是单帧保真度不足,而是teacher 监督位置只覆盖短 horizon,student 在长 horizon 中遇到的 cache state、latent drift、motion stagnation 都不在训练分布内。
如果这个问题被解决,视频生成可以从“生成一个 5-10 秒 clip”转向“以 streaming 方式持续生成一分钟以上的 coherent scene”。这对世界模型、交互式仿真、长镜头叙事、游戏/具身智能环境 rollout 都更重要,因为这些场景关心的是状态随时间的稳定延续,而不只是单个短片段的美观。
Figure 1 解读:左侧展示 Self-Forcing++ 生成的 4 分钟视频截帧(每分钟一组),画面在整个 4 分钟内保持高质量和动态运动。右上角雷达图对比各方法在 CLIP Score、Temporal Quality、Overall Consistency 等维度的表现——Self-Forcing++ 全面领先。右下角动态度曲线显示其他方法(CausVid、MAGI-1、SkyReels-V2、Self-Forcing)的 Dynamic Degree 在 20-40 秒后急剧下降(运动停滞),而 Self-Forcing++ 在 100 秒内始终保持高动态度。
2. Idea (核心思想)
Self-Forcing++ 的核心 insight:短时长 teacher 虽然不能直接生成长视频,但它拥有从退化视频中纠正错误的知识——利用这种纠错能力来训练 student 应对长 rollout 中的误差累积。
具体做法极其简洁(三个组件):
- Backward Noise Initialization:不从随机噪声起步,而是将 student 自身 rollout 的退化输出重新加噪作为起点,确保 DMD 训练的 trajectory 保留了历史上下文
- Extended DMD:将 DMD 的监督范围从固定 5 秒窗口扩展到 student rollout 的任意位置——在 的长 rollout 中均匀采样窗口进行蒸馏
- GRPO with Optical Flow Reward:用光流幅度作为 reward 信号,通过 Group Relative Policy Optimization 微调 student,抑制滑动窗口带来的突变和运动不连续
与 LongLive 等方法的根本区别:不需要 attention sink、frame sink 或特殊的 KV cache 管理,只需简单地扩展训练时的 rollout 长度和 DMD 采样范围。这个 insight 的关键是把 teacher 的能力重新解释成“局部纠错器”而不是“长视频生成器”: teacher 不需要生成 100 秒视频;它只需要判断一个 5 秒局部片段是否落在真实视频的边缘分布上。student 负责提供长程上下文:通过 rolling KV cache 自回归地产生长 rollout,让训练样本来自真实推理轨迹。
DMD 负责把 teacher 的局部 score 信息注入 student:在长 rollout 的任意位置抽取窗口,用 teacher 修正局部退化。GRPO 不是主方法,而是后处理:当长 rollout 出现窗口边界突变或光流尖峰时,用 optical-flow reward 把 motion smoothness 再往上推。因此 Self-Forcing++ 的“++”并不是更复杂的架构,而是把 Self-Forcing 的 self-rollout 原则从短窗口推广到长窗口:训练时就让模型经历推理时会遇到的长程错误,并在这些错误上学习恢复。
与相邻方法的对比: CausVid:依靠 overlapping frame 与 heterogeneous distillation 保持短期一致性,但训练/推理状态仍不同,且 over-exposure 明显。Self-Forcing:训练推理更一致,但监督长度仍受 teacher 限制;长于 5 秒后容易 motion stagnation。Rolling Forcing / LongLive:通过 sink frame、KV recaching、attention window 等机制提升长程生成;Self-Forcing++ 则强调“同样 inference code,只改训练目标和采样位置”。
Diffusion Forcing 类方法:通过不同帧的 noise schedule 形成自回归扩展;Self-Forcing++ 则基于 clean-context autoregressive rollout + teacher correction,避免复杂噪声调度带来的训练不稳定。
3. Method (方法)
3.1 整体框架

Figure 2 解读:对比三种方法的训练流程。左(CausVid):用真实数据训练,固定训练时长,推理时用 overlapping frame 做自回归解码——存在严重的 train-inference mismatch。中(Self-Forcing):student self-rollout + backward noise initialization,但 DMD 监督仍限制在固定 5 秒窗口内,推理超出 5 秒后质量崩溃。右(Self-Forcing++,本文):student self-rollout 到 (如 100 秒),用 rolling KV cache 保持上下文,然后在长 rollout 的任意位置均匀采样 帧窗口进行 Extended DMD。底部时间线:CausVid 和 Self-Forcing 都存在 mismatch(红色叉),Self-Forcing++ 实现了完全的 train-inference alignment(绿色勾)。
Self-Forcing++ 基于 Wan2.1-T2V-1.3B,通过三步训练: Stage 0 (Init):ODE 初始化 + Self-Forcing 短视频蒸馏(继承 Self-Forcing 基线) Stage 1 (Extended DMD):长 rollout + Backward Noise Init + Extended DMD 扩展训练 Stage 2 (GRPO, 可选):用光流 reward 微调,提升长程平滑性 从训练数据流看,Self-Forcing++ 每次迭代都在模拟真实推理过程:
- 给定文本 prompt,student 按自回归方式 rollout 到 帧,期间持续更新 rolling KV cache。
- 在完整长视频 中均匀采样一个连续窗口 ,其中 是 teacher 可处理的短 horizon。
- 对 做 backward noise initialization,把 student 已经生成的 clean latent 重新放回 diffusion trajectory。
- teacher 与 student 在同一个 noisy local window 上比较分布,形成 Extended DMD loss。
- 更新 student 后,下一轮 rollout 会产生新的、更接近推理分布的长程状态。
这套设计的直觉是:只要 student 在训练中不断看见自己的长程错误,并由 teacher 在局部窗口上纠正,student 就能逐渐把“错误累积后的状态”也纳入可恢复区域。它不是用长视频数据强行覆盖长 horizon,而是用 teacher 的短窗口分布知识来 regularize student 的长 rollout。
3.2 Backward Noise Initialization
短视频蒸馏中,student 从随机噪声 起步预测 ,teacher 直接在同一噪声上提供监督。但长视频中,每个新 chunk 的起始状态不是随机噪声,而是前一个 chunk 的自回归延续。如果训练时从随机噪声起步,就割裂了与历史上下文的依赖关系。
解决方案:将 student 自身 rollout 的干净输出 按 diffusion noise schedule 重新加噪:
这保证了:(a) 噪声 trajectory 保留了 student 的历史生成轨迹,(b) teacher 评估的是在正确上下文下的分布差异。Backward noise initialization 的作用可以分成三层: 保持上下文来源真实:训练窗口来自 student 自己的 rollout,而不是 teacher 生成的干净样本或真实视频;因此 cache state、局部错误、曝光偏移都更接近推理时分布。让 teacher 能处理:teacher 不能从长视频整体建模,但可以对重新加噪后的 5 秒局部窗口给出 score / denoising correction。
避免监督漂移:如果直接拿 student clean output 与 teacher clean output 对齐,teacher 并没有对应的长程条件;重新加噪后,DMD 比较的是 noisy latent 上的分布差异,符合 diffusion distillation 的接口。这里的关键不是“加噪”本身,而是加噪对象:它必须是 student 自回归生成出来的长程片段。附录还测试了向 KV cache 人工加 Gaussian noise 来模拟累积误差,结果只带来很小提升,说明简单 noise injection 不能替代“在真实 self-rollout 轨迹上做 teacher correction”。
def backward_noise_initialization(student_clean_frames, noise_schedule, noise):
"""Re-inject noise into student's clean rollout to create training trajectories."""
# student_clean_frames: (N, C, H, W) - student's self-generated clean frames
# noise_schedule: {sigma_t} for each diffusion timestep
# noise: epsilon ~ N(0, I)
x_t = {}
for t in noise_schedule.timesteps:
sigma_t = noise_schedule.sigma(t)
# Linear interpolation between clean frame and noise
x_t[t] = (1 - sigma_t) * student_clean_frames + sigma_t * noise
return x_t # noisy trajectories for DMD training3.3 Extended Distribution Matching Distillation
Self-Forcing 将 DMD 限制在前 帧(≤5 秒)。Self-Forcing++ 将 student rollout 扩展到 帧,然后均匀采样窗口位置进行蒸馏:
其中 从 student 长 rollout 的 中均匀采样, 是 teacher 能可靠监督的窗口大小(通常 )。
核心 insight:teacher 虽然只能生成 5 秒视频,但它在海量训练数据上学到了视频的分布。任何 5 秒片段都可以视为长视频边缘分布的一个样本。因此 teacher 可以在 student 长 rollout 的任意位置提供可靠监督。
def extended_dmd_training_step(student, teacher, cache_size, rollout_length, window_size):
"""One training step of Self-Forcing++ with extended DMD."""
# Step 1: Student self-rollout to N >> T frames with rolling KV cache
V = student.rollout(length=rollout_length, cache_size=cache_size) # N clean frames
# Step 2: Uniformly sample a window position from the long rollout
i = random.randint(0, rollout_length - window_size) # uniform sampling
W = V[i : i + window_size] # K-frame window
# Step 3: Backward noise initialization on the sampled window
t = sample_timestep(noise_schedule)
x_t = backward_noise_init(W, t) # re-inject noise
# Step 4: Compute DMD loss (student vs teacher distributions)
L_DMD = dmd_loss(
student_output=student(x_t, t),
teacher_output=teacher(x_t, t),
)
# Step 5: Update student
L_DMD.backward()
optimizer.step()论文 Algorithm 1 可被概括为一个短而关键的循环:
def self_forcing_pp_loop(student, teacher, prompt, cache_size, rollout_length, slice_length):
"""Paper Algorithm 1 style training loop; official training code is not released yet."""
while training:
# 1) real inference-like long rollout
video = student.rollout(prompt, num_frames=rollout_length, kv_cache_size=cache_size)
# 2) choose a local segment anywhere in the long rollout
start = torch.randint(0, rollout_length - slice_length + 1, ())
local_window = video[:, start : start + slice_length]
# 3) put the student segment back onto a diffusion trajectory
timestep = sample_denoise_step([1000, 750, 500, 250])
noisy_window = backward_noise_initialization(local_window, timestep)
# 4) local teacher correction, global student benefit
loss = dmd_loss(
student_pred=student(noisy_window, timestep),
teacher_pred=teacher(noisy_window, timestep),
)
loss.backward()
optimizer.step()
reward = optical_flow_reward(student.rollout(prompt, rollout_length))
grpo_update(student, reward)代码搜索状态:官方 justincui03/Self-Forcing-Plus-Plus 仓库在 main@b194c8d4 只有 readme.md 和 assets/,README 明确说 code will be released soon;可复现实验目前需要基于 guandeh17/Self-Forcing 的公开实现和论文 Algorithm 1 修改训练流程。
Rolling KV Cache:训练时使用与推理完全相同的 rolling KV cache——student rollout 时维护固定大小的 cache,每生成一个 chunk 就更新 cache。不需要 CausVid 的 overlapping frame 重计算,也不需要 Self-Forcing 的 latent frame masking。
公开 Self-Forcing base code 中,pipeline/self_forcing_training.py 的 SelfForcingTrainingPipeline.inference_with_trajectory 已经体现了这种推理式训练路径:初始化 KV/cross-attention cache、逐 block denoise、在生成后用 timestep 0 更新 clean cache。Self-Forcing++ 需要在这个机制外层把 rollout length 从短窗口扩展到 ,并把 DMD 的监督窗口从固定前 帧改成 uniform sampled local window。
3.4 Improving Long-Term Smoothness via GRPO
滑动窗口 + sparse attention 可能导致窗口边界处的突变(abrupt scene transitions)。Self-Forcing++ 使用 Group Relative Policy Optimization (GRPO) 进行后处理微调:
Reward: 光流幅度(optical flow magnitude)作为 temporal smoothness 的代理指标 Policy: student 生成器 ,其 log probability 通过 diffusion noise prediction 计算 Importance weight:
def grpo_update(student, student_old, generated_video):
"""GRPO fine-tuning with optical flow reward."""
# Compute optical flow reward between consecutive frames
R = optical_flow_reward(generated_video) # scalar reward
# Compute importance weights (policy ratio)
for t, i in all_timesteps_and_frames:
rho = student.log_prob(a_t_i, s_t_i) / student_old.log_prob(a_t_i, s_t_i)
# GRPO objective (clipped policy gradient)
L_GRPO = -E[min(rho * advantage, clip(rho, 1-eps, 1+eps) * advantage)]
L_GRPO.backward()
optimizer.step()附录给出了 GRPO 的更完整形式。对每组 个候选视频,advantage 按组内 reward 标准化: policy ratio 使用扩散采样过程中的 latent transition probability 计算;整段视频的 log probability 被分解成自回归步的和: 这使得视频 diffusion model 可以像语言模型 post-training 一样做 clipped policy-gradient 更新,但 reward 不是偏好模型分数,而是相邻帧 optical-flow magnitude 的平滑性。论文把 GRPO 标成 optional,是因为 Extended DMD 已经能生成 4min15s 的高质量视频;GRPO 主要进一步压低窗口边界处的 motion spikes。
Figure 5 解读:横轴是 frame index,纵轴是 optical-flow magnitude。未做 GRPO 时,曲线在部分窗口边界出现尖峰,论文报告 variance 约 24.52;做 GRPO 后曲线更平滑,variance 约 20.82。这个图说明 GRPO 不是单纯提高画质,而是针对长视频中“突然跳变/不连续运动”的局部 failure mode。
3.5 Visual Stability 评估指标
Figure 3 解读:左图展示 VBench 的 Image Quality 偏差——退化的后期帧(77.13 分)反而比正常早期帧(69.03 分)得分更高。右图展示 Aesthetic Quality 偏差——over-exposed 帧(64.01 分)比正常曝光帧(50.88 分)得分更高。这说明 VBench 对长视频评估不可靠。Self-Forcing++ 提出 Visual Stability 指标:使用 Gemini-2.5-Pro 评估 over-exposure 和 error accumulation,输出 0-100 分。
3.6 Training Budget Scaling
Figure 6 解读:横轴为训练预算(1x-25x),纵轴为视频时长(0-255 秒)。左列(Self-Forcing 和 ODE 初始化)只能生成低质量短片。随着训练预算增加,Self-Forcing++ 的视频质量和可达时长同步提升:4x 时保持语义一致性,8x 时生成详细背景,20x 时生产高保真 50+ 秒视频,25x 时生成 255 秒视频且质量损失极小。这是首次展示训练计算可以直接兑换为视频时长的 scaling property。
3.7 代码-论文映射
Code reference: official
justincui03/Self-Forcing-Plus-Plusmain@b194c8d4(2025-10-13); released base implementationguandeh17/Self-Forcingmain@33593df3(2025-09-12)
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Official Self-Forcing++ release status | justincui03/Self-Forcing-Plus-Plus/readme.md | README says code will be released soon; official repo currently provides paper/project links and assets |
| Base autoregressive rollout | guandeh17/Self-Forcing/pipeline/self_forcing_training.py | SelfForcingTrainingPipeline.inference_with_trajectory, _initialize_kv_cache, _initialize_crossattn_cache |
| Rolling KV cache state | guandeh17/Self-Forcing/pipeline/self_forcing_training.py | per-block kv_cache1 with global_end_index / local_end_index; clean cache updated after each generated block |
| DMD objective | guandeh17/Self-Forcing/model/dmd.py | DMD._compute_kl_grad, compute_distribution_matching_loss, generator_loss, critic_loss |
| Distillation trainer | guandeh17/Self-Forcing/trainer/distillation.py | Trainer wraps real/fake score models and logs generator / critic losses |
| DMD training config | guandeh17/Self-Forcing/configs/self_forcing_dmd.yaml | denoising steps 1000,750,500,250, generator LR 2e-6, critic LR 4e-7, update ratio 5 |
| Self-Forcing++ Backward Noise Init | paper Eq. 1 + Algorithm 1 line 5 | not yet in official code; should wrap sampled student rollout segment before teacher/student DMD comparison |
| Self-Forcing++ Extended DMD | paper Eq. 2 + Algorithm 1 lines 2-7 | not yet in official code; should replace fixed first-window DMD with uniform slice from long rollout |
| Self-Forcing++ GRPO | paper Section 3.3 + Appendix 8.4 | not yet in official code; computes optical-flow reward and clipped GRPO update |
| Visual Stability metric | paper Section 3.4 + Appendix 8.5 | Gemini-2.5-Pro scoring + manual verification, not a released repo script |
论文公式与 released code 实现差异:官方 Self-Forcing++ 训练代码尚未发布,因此 Backward Noise Initialization、Extended DMD、GRPO、Visual Stability 只能从论文 Algorithm 1/公式/项目页验证;公开 guandeh17/Self-Forcing 只能支撑 base rollout、DMD、KV cache 与训练配置的映射。
4. Experimental Setup (实验设置)
基础模型: Wan2.1-T2V-1.3B(16 FPS,832×480) 训练流程: ODE Init → Self-Forcing → Self-Forcing++(Extended DMD)→ GRPO(可选) Rollout 长度: 帧,从 50s 扩展到 100s(论文实验),scaling 到 255s(4min15s) Window 大小: (teacher 的 5 秒窗口) 吞吐量: 17.0 FPS(与 Self-Forcing 相同,推理代码不变) Baselines: NOVA (0.6B), Pyramid Flow (2B), MAGI-1 (4.5B), SkyReels-V2 (1.3B), CausVid (1.3B), Self-Forcing (1.3B), LTX-Video (1.9B), Wan2.1 (1.3B) 评估设置: 短视频: VBench 标准 946 prompts × 16 dimensions 长视频: 128 prompts(MovieGen),50s/75s/100s 三个时长 指标: Text Alignment, Temporal Quality, Dynamic Degree, Visual Stability (新), Framewise Quality 训练预算: 1x = 生成 5s 视频所需的计算量;
论文测试 1x-25x 实现细节(来自附录): 初始化:先把 Wan2.1-T2V-1.3B 转成 autoregressive model;使用 16K sampled ODE training trajectories 优化 ODE loss,作为 warm-up / initialization stage。训练 prompt 数据:沿用 Self-Forcing 使用的 filtered + LLM-extended VidProM prompts;由于 Backward Noise Initialization 使用 student self-rollout,不需要真实长视频数据参与 Extended DMD 训练。
Teacher:同样使用 Wan2.1-T2V-1.3B 作为 bidirectional teacher;teacher 的可靠窗口仍是 5 秒。Batch size:Self-Forcing++ 训练 batch size 为 8。Denoise steps:沿用 Self-Forcing 的四步 denoising schedule:1000, 750, 500, 250。Learning rate:generator LR 2e-6,critic LR 4e-7。Generator/Critic update ratio:5。
Optimizer:generator 和 critic 均使用 AdamW,,。Rolling KV cache window:除 attention-window ablation 外均为 21 latent frames;5 秒 clip 对应 21 latent frames。EMA:从第 200 epoch 开始更新 EMA;作者检查过非 EMA 版本也能生成长视频,但 EMA 版本更好。GRPO 前能力:附录说明在 GRPO 之前模型已能生成最长 4min15s 的一致高质量视频,GRPO 主要进一步提升 reward 设计对应的时序平滑性。
评估协议拆成两套是必要的: 5 秒短视频仍用标准 VBench,目标是确认长视频训练不会牺牲短片质量。50/75/100 秒长视频用 VBench Long 聚合指标,同时引入 Visual Stability,因为原始 VBench 的 framewise quality / aesthetic 在过曝帧上会给出反直觉高分。Visual Stability 的人工校验:论文随机抽取 20 个 MovieGen videos,由两位作者独立标注并与 Gemini-2.5-Pro 分数比较;50 秒序列 top-3 方法 Spearman rank correlation 为 100%,全部 6 个 baselines 为 94.2%。
5. Experimental Results (实验结果)
短视频(5s, VBench)
| Model | Params | FPS↑ | Total↑ | Quality↑ | Semantic↑ |
|---|---|---|---|---|---|
| LTX-Video | 1.9B | 8.98 | 80.00 | 82.30 | 70.79 |
| Wan2.1 | 1.3B | 0.78 | 84.67 | 85.69 | 80.60 |
| NOVA | 0.6B | 0.88 | 80.12 | 80.39 | 79.05 |
| Pyramid Flow | 2B | 6.7 | 81.72 | 84.74 | 69.62 |
| CausVid | 1.3B | 17.0 | 82.46 | 83.61 | 77.84 |
| Self-Forcing | 1.3B | 17.0 | 83.00 | 83.71 | 80.14 |
| Self-Forcing++ | 1.3B | 17.0 | 83.11 | 83.79 | 80.37 |
短视频上 Self-Forcing++ 与 Self-Forcing 持平(83.11 vs 83.00),说明长视频训练不损害短视频质量 与 CausVid 相比,Self-Forcing++ 的 Total Score 为 83.11 vs 82.46,同时保持同样 17.0 FPS;这说明改进不是靠牺牲速度换质量。 与 Wan2.1 bidirectional teacher 相比,Self-Forcing++ 的 Total Score 低于 Wan2.1(83.11 vs 84.67),但 throughput 高得多(17.0 vs 0.78 FPS),并且支持 streaming long rollout。 Pyramid Flow 在 Quality Score 上很高(84.74),但 Semantic Score 仅 69.62;Self-Forcing++ 的 Semantic Score 为 80.37,说明长程训练没有破坏文本对齐。 这个表的主要意义不是证明 5 秒 SOTA,而是证明 Extended DMD 没有把模型变成只适合长视频的 specialized model。
长视频(50s/75s/100s)
50s:
| Model | Text Align↑ | Temporal Quality↑ | Dynamic Degree↑ | Visual Stability↑ | Framewise Quality |
|---|---|---|---|---|---|
| CausVid | 25.25 | 89.34 | 37.35 | 40.47 | 61.56 |
| Self-Forcing | 24.77 | 88.17 | 34.35 | 40.12 | 61.06 |
| SkyReels-V2 | 23.73 | 88.78 | 39.15 | 51.25 | 54.13 |
| MAGI-1 | 26.04 | 88.34 | 28.49 | 51.25 | 54.20 |
| Ours | 26.37 | 91.03 | 55.36 | 90.94 | 60.82 |
75s:
| Model | Text Align↑ | Temporal Quality↑ | Dynamic Degree↑ | Visual Stability↑ | Framewise Quality |
|---|---|---|---|---|---|
| NOVA | 23.37 | 86.32 | 31.24 | 34.06 | 31.53 |
| MAGI-1 | 24.95 | 87.89 | 24.82 | 43.28 | 52.04 |
| SkyReels-V2 | 22.70 | 88.99 | 39.89 | 55.47 | 51.55 |
| CausVid | 24.76 | 89.14 | 35.82 | 39.84 | 60.96 |
| Self-Forcing | 23.39 | 87.79 | 29.15 | 35.00 | 60.02 |
| Ours | 26.31 | 91.00 | 55.62 | 86.10 | 60.67 |
100s:
| Model | Text Align↑ | Temporal Quality↑ | Dynamic Degree↑ | Visual Stability↑ | Framewise Quality |
|---|---|---|---|---|---|
| CausVid | 24.41 | 89.06 | 34.60 | 39.21 | 61.01 |
| Self-Forcing | 22.00 | 87.39 | 26.41 | 32.03 | 58.25 |
| SkyReels-V2 | 22.05 | 88.80 | 38.75 | 56.72 | 50.48 |
| Ours | 26.04 | 90.87 | 54.12 | 84.22 | 60.66 |
关键发现:
Dynamic Degree:Self-Forcing++ 在 100s 时仍达 54.12,而 Self-Forcing 仅 26.41(运动停滞),CausVid 34.60 Visual Stability: 90.94(50s)和 84.22(100s),远超所有 baselines(最高 56.72) Text Alignment: 100s 时 26.04,超越 CausVid(+6.67%)和 Self-Forcing(+18.36%) Temporal Quality 指标要谨慎看:一些 baseline 的 Temporal Quality 分数看似不低,是因为视频冻结/运动停滞也会被传统 temporal smoothness 指标误认为稳定;
Dynamic Degree 和 Visual Stability 才揭示了真实长程退化。Framewise Quality 指标也要谨慎看:CausVid / Self-Forcing 在 100s 的 Framewise Quality 接近或高于 Ours,但 Figure 3 显示 VBench framewise/aesthetic 对过曝帧有偏差,因此论文只把它作为参考指标。
100s 是核心压力测试:Self-Forcing++ 在 Text Alignment、Temporal Quality、Dynamic Degree、Visual Stability 四个主指标上均领先,说明它不是只把开头几秒做好,而是在长 rollout 末端仍能维持 motion 和 exposure。
Table 4 的细粒度结果进一步说明差异来自哪里:
50s:Ours 的 overall consistency 为 22.03,clip score 30.71,dynamic degree 55.36;dynamic degree 相比 Self-Forcing 的 34.35 提升明显。 75s:Ours 的 text alignment 26.31、overall consistency 22.09、dynamic degree 55.62,仍高于 SkyReels-V2 的 39.89 与 CausVid 的 35.82。 100s:Ours 的 clip score 30.34、dynamic degree 54.12、imaging quality 68.31;Self-Forcing 在 dynamic degree 降到 26.41,说明主要失败是运动停滞而非单帧不可看。 Ours 的 subject/background consistency 并非所有细项最高;例如某些 baseline 在 subject consistency 上接近 98,但那可能来自静止或低运动。论文因此强调要联合看 dynamic degree + visual stability。
定性结果(Figure 4)与表格一致:在 “tropical fish” 100 秒 prompt 上,SkyReels、MAGI-1、Self-Forcing、CausVid 都在后半段出现过曝、结构退化或 motion collapse;Self-Forcing++ 仍保持鱼群、珊瑚、光束和整体运动节奏。
消融实验
Attention Window Size(Table 3, Visual Stability on 50s):
| CausVid | Self-Forcing | Attn-15 | Attn-12 | Attn-9 | Ours |
|---|---|---|---|---|---|
| 40.47 | 40.12 | 44.69 | 42.19 | 52.50 | 90.94 |
缩小 attention window(Attn-9)有一定帮助(52.50 vs 40.12),但远不如 Self-Forcing++(90.94) Extended DMD 是主要贡献,window 大小只是辅助手段 附录的 Noisy-KV 实验说明:向 KV cache 注入 Gaussian noise 能模拟累积误差,并带来轻微 image quality / visual stability 改善,但仍不能阻止长程退化。这排除了一个简单解释:Self-Forcing++ 的提升并不是因为“训练时加了噪声所以更鲁棒”,而是因为它在真实 self-rollout 长视频轨迹上做了 uniform-window teacher correction。
Attn-15 / Attn-12 / Attn-9 的趋势也说明缩短可见上下文会强迫模型经历更多 cache state,但上下文变短本身会损失一致性;Self-Forcing++ 则保留 21 latent frames 的 rolling cache,同时把监督位置扩展到长 horizon。
GRPO 效果(Figure 5): 无 GRPO:光流曲线存在尖锐峰值(窗口边界处的突变),variance≈24.52(Figure 5 中标注) 有 GRPO:光流曲线平滑,variance≈20.82(Figure 5 中标注),峰值被有效抑制 这说明 GRPO 的收益是局部 motion smoothing,而不是重新解决长程 error accumulation;主干能力仍来自 Extended DMD。optical-flow reward 适合这里,是因为窗口边界突变会直接反映为相邻帧位移幅度异常,而不需要额外训练一个视频偏好模型。
Training Budget Scaling: 1x:只能生成低质量短片 4x:保持语义一致性 8x:详细背景 + 准确主体 20x:50+ 秒高保真视频 25x:255 秒(4min15s)视频,利用了 99.9% 的 position embedding 容量 这个 scaling 结果有两个含义:
第一,长程能力不是 hard-coded by architecture,而是随训练计算量增长;这类似语言模型中通过更长/更多 rollout post-training 提高长程行为稳定性。 第二,极限长度仍受 base model positional embedding 约束:Wan2.1-T2V-1.3B 最大支持 1024 latent frames,本文以 trunk size 3 生成,达到 1023 latent frames,即 99.9% 的容量上限。 第三,作者强调不需要大规模真实长视频数据;困难的长视频数据收集被替换成“短 teacher + self-generated long rollout + local correction”。
局限性与读后判断
长程记忆仍有限:项目页明确说模型缺少 long-term memory,被遮挡很久的物体可能重新出现时发生身份/外观变化。 连续值漂移仍存在:极长视频中,即使未被遮挡的物体也可能因 latent continuous value drift 缓慢改变。 复杂多事件生成仍弱:目前模型不能高质量处理多事件、多阶段叙事;这说明它更擅长“长时间保持一个场景/动作”而不是“规划长剧情”。 最大长度受 position embedding 限制:不修改 base model positional embedding 时,最长为 4min15s。 代码可复现性目前不完整:官方 Self-Forcing++ 训练代码未发布,公开仓库只能验证论文链接、项目页、assets 与基于 Self-Forcing 的复现说明。
整体结论:Self-Forcing++ 的贡献不是提出一个更复杂的长视频架构,而是指出 autoregressive video diffusion 的核心瓶颈是长程 self-rollout 分布未被 teacher 监督覆盖。通过在 student 自己的长视频轨迹中均匀采样局部窗口并进行 DMD,短 horizon teacher 的局部知识被转化为长 horizon stability;这让 5 秒 teacher 支撑 100 秒实验,并在训练预算扩展后达到 4min15s。