TencentARC/Looking-Ahead · 上手攻略
- 仓库:TencentARC/Looking-Ahead
- 链接:https://github.com/TencentARC/Looking-Ahead
- 分类:多模态 / 视频生成 · 世界模型
- 作者:spark
- 更新:2026-10-25
一句话结论
如果你在自研自回归视频生成模型,这是目前公开可用的、把"物理一致性"训练目标讲得最清楚的一套完整配方(含代码 + 1.3B/5B 权重 + TF 基线对照);但它的定位是研究用训练范式,不是开箱即用的产品级生成器——只有 5 秒训练长度、无反漂移技术、硬件门槛高、文档还在演化。做世界模型研究必读,拿来直接产片不合适。
§0 三证自检
| 项 | 状态 | 说明 |
|---|---|---|
| GitHub URL | ✅ 已 fetch | 2026-10-25 抓取 README、docs/inference.md、pyproject.toml、configs/*.yaml、run.sh |
| 论文 anchor | ✅ 已核实 | arXiv:2610.29989(v1,2026-10-21 提交,cs.CV),项目页 hellorpg.github.io/looking-ahead |
| README 子模块 anchor | ✅ 已核实 | 官方 README 明确基于上游 Wan2.1-T2V-1.3B / Wan2.2-TI2V-5B;HF 权重 TencentARC/Looking-Ahead |
| 权重可用性 | ✅ | HF 仓库含 4 个 model_ema.pt(tf/fcp × 1.3B/5B)+ SHA256SUMS + manifest.json |
机构归属:南京大学 + 腾讯 IEG ARC Lab + 浙江大学,通讯作者 Limin Wang,项目负责人 Yukun Huang(据 arXiv 作者块与个人主页)。
二、它是什么
Looking Ahead: Modeling Future Evolution in Autoregressive Video Generation(arXiv:2610.29989)的官方代码库,配套 1.3B 和 5B 两档自回归「文+图生视频」(TI2V)模型的训练与推理代码。
核心贡献是 Future Chunk Prediction(FCP) 这个辅助训练目标:
- 自回归视频扩散模型按 chunk 逐段生成,但"能续得像"不等于"懂场景怎么演化"。
- 在 teacher forcing 训练下,相邻 chunk 视觉冗余太强,模型可以靠局部时间捷径(复制上一帧的纹理/运动)来降低当前 chunk 的去噪损失,从而根本不用学底层动力学。
- FCP 的做法:开一路辅助分支,从当前 chunk 的中间层特征出发,在拿不到中间那段视觉上下文的前提下,直接预测时间上相隔较远的未来 chunk。
- 关键工程性质:监督信号直接来自训练视频像素,不需要额外的预训练视觉编码器(不像很多同类方案要挂 CLIP/DINO 之类),也完全不改变自回归推理流程——推理时辅助分支不参与,纯白拿收益。
论文 abstract 声称(verbatim):"Our method achieves superior physical plausibility over standard teacher-forced autoregressive training with a lower overall training compute budget",并且 "FCP fosters a more structured representation space, which may be valuable for building autoregressive world models"。
三、解决什么问题
| 痛点 | FCP 的解法 |
|---|---|
| 生成视频"看着连贯、实则不守物理"(杯子穿模、液体倒错方向) | 强制模型从中间层特征预测远端 chunk,无法靠像素级复制蒙混过关 |
| teacher forcing 的时间冗余导致「捷径学习」 | 远端预测分支的监督误差无法用局部连续性抵消 |
| 加辅助目标往往推高训练成本 | FCP 论文声称在更低总训练算力预算下达到更好的物理合理性 |
| 额外视觉编码器带来的成本与流程负担 | FCP 只用视频像素监督,无额外预训练编码器 |
| 想验证"方法本身"是否有效 vs 单纯堆算力 | 仓库同时放出 TF(teacher forcing baseline) 与 FCP 两套同参数量权重,可直接 A/B 对比 |
代码层面也印证了这套设计。以 configs/fcp_wan22_ti2v_5b.yaml 为例,与同名的 tf_wan22_ti2v_5b.yaml 逐行 diff,唯一差异就是 future_prediction 段:
future_prediction:
enabled: true
future_offsets: [1, 2, 3, 4, 5] # 预测未来第 1~5 个 offset 处的 chunk
source_layers: [2, 11, 20, 29] # 从主 DiT 的这 4 层取中间特征
source_layer_fusion:
mode: mlp
hidden_ratio: 2.0
activation: gelu
mini_dit_depth: 3 # 辅助分支是个 3 层的小 DiT
offset_loss_weights: [0.5, 0.5, 0.5, 0.5, 0.5]
init_mode: copy
init_source: [27, 28, 29] # 从主 DiT 末三层拷贝初始化
aux_future_timestep_range: [0.0, 1000.0]
source_context:
streams: [clean, noisy]
separate_predictive_grad_clip: true
max_predictive_grad_norm: 0.1
也就是说:辅助分支是一个从主模型最后几层拷贝初始化、深度仅 3 层的小 DiT,预测未来 5 个不同 offset 的 chunk,损失权重各 0.5,且与主分支的梯度分开裁剪(max_predictive_grad_norm: 0.1)以防辅助目标把主干带偏。这是"轻量、可插拔、不改推理"的完整落地形态。
四、快速安装
官方测试环境:Linux + NVIDIA H200 + Python 3.12.3 + PyTorch 2.10.0+cu128 (CUDA 12.8)。README 明确写了「compatibility with other environments has not been tested」,所以非 H200 环境属于未验证区。
方式 A:uv(推荐,README 首推)
# Ubuntu / Debian 先装 FFmpeg(视频解码需要)
sudo apt-get update
sudo apt-get install -y ffmpeg
# 仓库根目录执行
UV_CACHE_DIR=.uv-cache uv sync --python 3.12
source .venv/bin/activate
方式 B:conda + pip
⚠️ README 里这一节目前是空的——原文标注 🚧 TODO: Installation instructions will be added here.。想走 pip 路线的话,需要自己按 pyproject.toml 的 dependencies 手工装。
依赖(来自 pyproject.toml):
torch==2.10.0 torchvision==0.25.0 torchcodec==0.10.0
flash-attn-4>=4.0.0b5 diffusers>=0.37.1 transformers>=5.5.3
accelerate>=1.13.0 omegaconf>=2.3.0 webdataset>=1.0.2
einops>=0.8.2 ftfy>=6.3.1 huggingface-hub>=1.10.1
safetensors>=0.4.3 sentencepiece>=0.2.1 tokenizers>=0.22.2
wandb>=0.25.1 matplotlib>=3.10.8 numpy>=1.26.4 pillow>=10.0.0
regex>=2024.0.0 tqdm>=4.67.3
torch / torchvision 通过 uv 的 pytorch-cu128 显式索引安装。注意 flash-attn-4 是预发布版(4.0.0b5),需要匹配的 CUDA 工具链,编译失败是常见第一道坎。
拉取模型资产
需要两套东西:上游 base 模型(提供 VAE、text encoder、tokenizer)+ 本项目的 EMA 权重。
# 上游 base(1.3B 用 T2V-1.3B,5B 用 TI2V-5B)
hf download Wan-AI/Wan2.1-T2V-1.3B \
--local-dir weights/Wan-AI/Wan2.1-T2V-1.3B
hf download Wan-AI/Wan2.2-TI2V-5B \
--local-dir weights/Wan-AI/Wan2.2-TI2V-5B
# 本项目 4 份最终权重(tf/fcp × 1.3B/5B)
hf download TencentARC/Looking-Ahead --local-dir weights/Looking-Ahead
预期目录结构(缺一不可):
weights/Wan-AI/Wan2.1-T2V-1.3B/ # base:权重 + config + text encoder + tokenizer + VAE
weights/Wan-AI/Wan2.2-TI2V-5B/
weights/Looking-Ahead/
├── tf_wan21_t2v_1.3b/model_ema.pt
├── fcp_wan21_t2v_1.3b/model_ema.pt
├── tf_wan22_ti2v_5b/model_ema.pt
└── fcp_wan22_ti2v_5b/model_ema.pt
如果 base 模型不放默认位置,设置 WAN_ROOT 指向包含模型文件夹的父目录。两份 base 都要下(约 1.3B + 5B 全量),磁盘和带宽提前算好。
五、核心用法
5.1 推理:文+视频生视频(TV2V,续写一段视频)
python inference.py \
--config fcp_wan22_ti2v_5b \
--checkpoint_path weights/Looking-Ahead/fcp_wan22_ti2v_5b/model_ema.pt \
--use_ema \
--video_path examples/inference/v2v/milk_pouring.mp4 \
--prompt_file examples/inference/v2v/milk_pouring.txt \
--duration 5s --seed 42 --sink 3 \
--output_path outputs/v2v/fcp_milk_pouring
5.2 推理:文+图生视频(TI2V,让一张图动起来)
python inference.py \
--config fcp_wan21_t2v_1.3b \
--checkpoint_path weights/Looking-Ahead/fcp_wan21_t2v_1.3b/model_ema.pt \
--use_ema \
--image_path examples/inference/i2v/sailboat_lake.png \
--prompt_file examples/inference/i2v/sailboat_lake.txt \
--duration 5s --seed 42 \
--output_path outputs/example_inference
仓库自带 6 组 i2v 样例:sailboat_lake、cat_window、paper_fan_open、book_page_turn、can_crush、pendulum(其中 fan/book/can 是按 5B 选的,pendulum 是按 1.3B 选的)。另有 examples/inference/v2v/ 下的 milk_pouring 与 dominoes。
5.3 关键参数速查(来自 docs/inference.md)
| 参数 | 默认 | 说明 |
|---|---|---|
--config |
必填 | recipe 名称或 YAML 路径 |
--checkpoint_path |
— | 显式 checkpoint 路径;配 --use_ema 加载 EMA |
--use_ema |
关闭 | 释放的权重是 EMA,必须带这个 flag,否则加载失败 |
--image_path / --video_path |
— | 二选一,自动决定 TI2V / TV2V 模式 |
--prompt_file / --prompt |
— | 互斥;prompt 文件或内联文本 |
--duration |
5s |
总输出长度,包含上下文段;支持 s/m/h |
--num_output_frames |
-1 |
正整数优先于 duration |
--seed |
42 |
0 ~ 2³²−1 |
--sink / --sink_size |
3 |
attention sink 保留的 latent 帧数;不是 TV2V 上下文长度;0 关闭 |
--v2v_context_latents |
自动 | 手动指定上下文长度 K(latent 帧数) |
--output_path |
— | 换输入或改参数务必换新目录,主 MP4 已存在会被直接跳过 |
--i2v / --data_path |
— | 批量图片模式,配合 --test_sample_limit |
采样超参用 key=value 形式覆盖(注意与显式 flag 冲突时 flag 优先):
sampling_steps=50 sample_solver=unipc|dpm++ guidance_scale=3.0
timestep_shift=5.0 negative_prompt='...' fps=16(1.3B)|24(5B)
long_inference_threshold=256 vae_decode_chunk=32
5.4 上下文长度 K 的算法(容易踩)
自动模式选的是最长的合法尾段(从原视频末尾往回取),而不是从头取。公式:
K = 1 + 3 × M, M >= 1 # VAE 时间步长 4,chunk 3 latent 帧,首帧独立
条件像素帧数 = 1 + 4 × (K - 1)
合法 K 为 4, 7, 10, ...,对应条件帧 13, 25, 37, ...。K 是 latent 帧数,不是像素帧也不是秒。
官方两个 bundled MP4 都是 24 FPS、25 帧,5 秒输出的实际结果:
| Recipe FPS | 自动 K | 条件帧 | 选取的源时间戳 |
|---|---|---|---|
| 24(5B) | 7 | 25 | 0.0–1.0 s |
| 16(1.3B) | 4 | 13 | 0.25–1.0 s |
⚠️ 显式 K 的语义与自动模式不同:显式 --v2v_context_latents 7 取的是视频开头的 25 帧(explicit_prefix),自动模式取的是结尾段的 25 帧(auto_tail)。这个不对称很容易让 A/B 实验做错。
5.5 批量图片推理
python inference.py \
--config fcp_wan21_t2v_1.3b \
--checkpoint_path weights/Looking-Ahead/fcp_wan21_t2v_1.3b/model_ema.pt \
--use_ema --i2v \
--data_path examples/inference/i2v_batch \
--test_sample_limit 2 --duration 5s --seed 42 \
--output_path outputs/i2v/fcp_batch
需要 target_crop_info_<suffix>.json + 同名 <suffix>/ 图片子目录。JSON 字段含 file_name、caption、target_crop、type、origin_width、origin_height;但元数据里的 bbox 不会覆盖实际的缩放/中心裁剪变换。
5.6 训练
先下载 demo 数据集:
hf download TencentARC/Looking-Ahead --repo-type dataset \
--local-dir release_assets/dataset_demo
放到仓库根目录下对应路径(1.3B → release_assets/dataset_demo/wan21_t2v_1.3b/,5B → release_assets/dataset_demo/wan22_ti2v_5b/),保持 source_a/ 与 source_b/ 子目录结构。数据路径写在 configs/*.yaml 的 data_sources 里(data_path 指向 latent_shards/,annotation_path 指向 annotations.jsonl),换了位置就改这两个字段。
启动训练:
# 默认用所有可见 GPU,开 W&B
bash run.sh train fcp_wan21_t2v_1.3b
# 指定 GPU
CUDA_VISIBLE_DEVICES=0,1,2,3 bash run.sh train fcp_wan21_t2v_1.3b
# 关 W&B / 指定输出目录
bash run.sh train fcp_wan21_t2v_1.3b --disable_wandb
bash run.sh train fcp_wan21_t2v_1.3b --exp_dir outputs/my_experiment
把 config 名换成 tf_wan21_t2v_1.3b / fcp_wan22_ti2v_5b / tf_wan22_ti2v_5b 即可训别的变体。
run.sh 是自研的多机启动器,会自动推导 nproc_per_node、构建 rdzv_id、分配 torchrun 参数。几个环境变量:DEBUG=1(单卡调试,会启用 causal mask 可视化,且多机下直接报错)、WORLD_SIZE、MASTER_ADDR/MASTER_PORT、OMP_NUM_THREADS(默认 8)。多机必须走 rdzv,MASTER_ADDR 必须是可路由地址。
训练配置关键项(5B recipe):max_iters: 25000、batch_size: 1、lr: 1e-05(AdamW,beta1=0.0)、ema_weight: 0.9995、ema_start_step: 2000、gradient_checkpointing: true、num_frame_per_block: 3、image_or_video_shape: [1, 31, 48, 36, 64]、mixed_precision: true。
六、典型适用场景
- 自研自回归视频模型,想引入"物理一致性"训练目标——FCP 几乎是最小侵入的实现:加一路 3 层小 DiT,权重从主干拷贝初始化,推理链路一行不改。这是仓库最大的实用价值。
- 需要一个干净的 A/B 对照实验——TF 与 FCP 的同名 config 差异仅在
future_prediction段,权重都公开了,可以直接跑"同参数量、同结构、只换训练目标"的对比。 - 世界模型方向的前瞻性实验——论文提到 FCP 训练出的表征空间更结构化,值得用来验证"表征可解释性"类猜想。
- 视频续写 / 长时序一致性的基线——TV2V 的上下文选择算法、K 的对齐规则写得很清楚,可作为同类实现的对标参考。
- 想复现"辅助未来预测能提升物理合理性"这个结论——demo 数据集 + 完整训练代码都给了,可以从 1.3B 起步。
不适用:短平快的内容生产、需要几十秒长视频、只有消费级显卡的环境。
七、坑与注意
--use_ema不加就加载失败。发布的权重全是model_ema.pt,EMA 加载顺序是"先找同名兄弟文件model_ema.pt,再找文件内嵌的generator_ema",都没有就直接报错。README 的所有示例都带了这个 flag,别漏。--duration含上下文,不是纯生成时长。5B 的 5 秒输出 = 120 帧 = 25 帧上下文 + 95 帧续写;1.3B 是 13 帧 + 67 帧。算"我要生成多少秒"时容易差 20%–40%。- 输出目录被占用会静默跳过。文档明确写了 "An existing main MP4 is skipped based on its presence alone. Its companion files are not regenerated or repaired."——改了参数但没换目录,你会拿到上一次的旧结果。换输入/换权重/换参数一律换新目录。
- 显式 K 与自动 K 的取段方向不同(
explicit_prefix开头 vsauto_tail结尾),且显式 K 永远不会悄悄缩短——对齐不对、输入不够长、或输出里没有可见续写,都会直接失败而不是降级。 - 输入图像会被居中裁剪,边缘内容可能丢。流程是"等比放大到覆盖目标分辨率(尺寸向上取整)→ 居中裁剪 → float32 归一化到 [-1,1] → VAE 编码",双线性 + antialiasing。想保留主体请自己先裁好。
- 长 rollout 没有反漂移保证。官方 CAUTION 原文:模型在 5 秒片段上训练,"not specifically optimized for longer rollouts, and generation quality beyond the training duration is not guaranteed"。默认用三项兜底:受限 latent 上下文(KV cache 最多保留训练长度,1.3B 为 22、5B 为 31)、attention sink(默认 3)、窗口相对时序 RoPE(位置随窗口滚动并重算,超界则回退并 clamp)。作者提到引入 Helios 风格的简单反漂移技术能改善稳定性,但仍是 preliminary,未系统化。
- seed 不保证跨环境可复现。文档原话 "Seed alone does not guarantee identical results across runtime environments."
conda + pip安装路径是空的(TODO),pip 用户得自己对着pyproject.toml装。- 硬件与版本门槛高且只验证过 H200。
flash-attn-4>=4.0.0b5是 beta,PyTorch 2.10.0+cu128 较新,驱动/CUDA 不匹配时安装即失败。 - 仓库很新、迭代快。创建于 2026-10-21,最近推送 2026-10-23,README 自己写着 "The documentation is also evolving"。config 名、目录结构都可能变,建议 pin 到具体 commit。
- 训练数据形态有前置依赖。
data_path指向的是latent_shards/——即预先算好的 latent 分片,不是原始视频。要换自己的数据集,得先跑 VAE 编码出 latent 分片并生成annotations.jsonl,这部分脚本 README 未展开说明(tools/目录可能有,需自行翻)。 - 模型许可需留意。GitHub 仓库根
LICENSE是 Tencent 定制条款("Tencent is pleased to support the open source community by making Looking Ahead available",仓库卡片标注NOASSERTION),而 HF 权重仓库的 metadata 标的是apache-2.0,各子目录另有独立LICENSE/NOTICE。商用前务必逐个目录核对真实许可,别只信 HF 标签。 - 权重来源需要区分:
weights/Wan-AI/*是上游 Wan 的权重,weights/Looking-Ahead/*才是本项目训练产物,两者必须配套使用,混搭会加载失败或出静默错结果。 - HF 模型仓库 downloads 计数为 0、likes 仅 4(2026-10-25 抓取时),项目非常新,社区验证度低,踩坑基本没有先例可查。
八、与同类对比
| 维度 | Looking-Ahead (FCP) | 传统 teacher forcing 基线 | 需要额外视觉编码器的辅助监督方案 | 端到端视频生成模型(非自回归) |
|---|---|---|---|---|
| 推理成本增加 | 0(辅助分支不参与推理) | 0 | 视方案而定 | 0 |
| 训练成本增加 | 轻量:3 层小 DiT,主干拷贝初始化 | 0 | 显著(多一个大模型前向) | 0 |
| 额外预训练编码器 | 不需要(纯像素监督) | 不需要 | 通常需要(CLIP/DINO 等) | 不需要 |
| 目标 | 建模场景演化 / 物理一致性 | 局部视觉连续性 | 表征对齐/语义一致性 | 端到端条件生成 |
| 长视频一致性 | 受限(无反漂移,5s 训练长度) | 同样受限 | 视方案 | 通常更好(有全局注意力) |
| 权重与代码 | ✅ 全公开(1.3B/5B,TF+FCP 对照) | ✅ 随本仓库提供 | 多为论文级 | 各自仓库 |
| 适合自研自回归模型 | ✅ 直接抄 | ✅ | ⚠️ 成本高 | ❌ 架构不同 |
横向看,本仓库的独特位置是:它不是提出一个更大的模型,而是提出一个"训练目标"并把它做成可插拔、可消融、可直接对比的工程实现。同类工作里不少方案停留在论文阶段或需要挂额外大模型;FCP 的"无额外编码器 + 推理零开销 + TF 对照权重齐全"三点组合,对做自回归视频的团队来说实用度很高。
九、待核 / 不确定处
- ⚠️ 论文中的具体量化指标未核实:abstract 只给了定性表述("superior physical plausibility"、"lower overall training compute budget"),本篇未取到 FVD / VBench / 物理一致性评分的具体数值与对比表,不要引用未核实的数字。
- ⚠️ 训练数据规模与来源未公开核实:demo 数据集的具体内容、量级、来源视频,README 未说明。
- ⚠️
tools/目录中"原始视频 → latent_shards"的预处理脚本未逐个核实,自定义数据的完整链路需自行验证。 - ⚠️ 非 H200 / 非 CUDA 12.8 环境的兼容性未验证,官方只测了 H200 + PyTorch 2.10.0+cu128。
- ⚠️ 许可口径不统一(GitHub 根 LICENSE 为 Tencent 定制,HF metadata 标 apache-2.0),实际使用条款待确认。
- ⚠️
flash-attn-4beta 版本在非官方 CUDA 环境下的可用性未验证。 - 版本浮动提示:本篇所依据的仓库状态为 2026-10-23 最后推送、HF 权重 sha
cee092c2cd6986c93461641338a1c084e310558f。README 明确会持续更新(config 名、路径、参数都可能变),复现时请 pin 到具体 commit,勿直接照抄本文命令。
十、来源清单
- GitHub README(2026-10-25 fetch):https://github.com/TencentARC/Looking-Ahead
docs/inference.md(2026-10-25 fetch):https://raw.githubusercontent.com/TencentARC/Looking-Ahead/main/docs/inference.mdconfigs/fcp_wan22_ti2v_5b.yaml与configs/tf_wan22_ti2v_5b.yaml(diff 逐行核对)pyproject.toml(依赖与索引配置)、run.sh(多机启动逻辑)- arXiv:2610.29989 abstract(2026-10-25 fetch):https://arxiv.org/abs/2610.29989
- Hugging Face 模型仓库元数据与文件清单(2026-10-25 fetch):https://huggingface.co/TencentARC/Looking-Ahead
- 项目页:https://hellorpg.github.io/looking-ahead/
- 仓库卡片:
organized/repo_cards/4622-tencentarc-looking-ahead.md