GenCeption 讨论笔记:negate 的期望推导、Rothko raymap、learnable token 与一轮源码考古¶
这份文档是 GenCeption 论文笔记 之后的一场对话整理。从"negate 操作到底在干什么"这个实现细节出发,把 feed-forward 重构的初始化机制推导清楚;随后逐个拆解 Rothko raymap、sparse learnable token、Specialist/Generalist 的准确口径;最后回到 LaTeX 源码做了一轮考古,挖出几条初版 summary 没有覆盖的裂缝(未使用的 Veo/Gemini 宏、MeViS train/val 重叠、feed-forward 支柱零消融、延迟解剖)。结论性的部分已回填进 summary 的 §2.5 / §5.2 / §5.3,这里保留完整推理过程。
1. 讨论缘起¶
最初的提问很具体:
video input 经 WAN VAE encode 得到 clean latent,DiT 基于它做一步 denoise(t=0)得到预测的 \(v = \epsilon - x_0\) —— 然后没有理解这里的 negate 操作。
顺着这个问题把 pipeline 拆开,发现 negate 背后藏着一个干净的初始化论证;再往下追 Rothko raymap、learnable token、Specialist 口径,每一个都牵出论文没写清楚的实现细节;最后干脆回源码 grep 了一轮,找到了几条"论文没打算让你看到"的信号。
2. 讨论脉络¶
2.1 negate:让 fine-tune 从恒等映射出发¶
先修正 pipeline 理解里的两个点:
- 这一步不是 denoise。输入本来就没有噪声,也没有任何 \(\epsilon\) 被采样 —— 它就是一次普通的 forward pass,t=0 只是作为 conditioning 信号告诉模型"输入是干净的"。论文自己的说法是 "recast the DiT as a powerful feature extractor";
- \(v = \epsilon - x_0\) 是预训练时的回归目标,不是 fine-tune 后输出的语义。fine-tune 之后网络输出被重新训练成"目标模态 latent 的负值"。\(\epsilon\) 只存在于预训练的故事里。
机制上就是:
z_in = vae.encode(input_video) # clean latent,不加噪
u = dit(z_in, t=0, text_emb) # 一次 forward,输出在 v-space
y_hat = -u # ← negate
loss = mse(y_hat, vae.encode(target_video)) # dense 任务 latent L2
# 推理: vae.decode(y_hat)
核心推导(易错点:不是 "t=0 时 \(\epsilon=0\)")。\(\epsilon\) 是随机噪声,任何时刻都不是 0。正确的链条:
- 预训练学的是回归 \(v = \epsilon - x_0\),输入 \((x_t, t)\),\(x_t = (1-t)x_0 + t\epsilon\);
- L2 回归的最优解是条件期望 \(v^*(x_t, t) = \mathbb{E}[\epsilon - x_0 \mid x_t]\),不是"预测那个真实的 \(\epsilon\)";
- t=0 时输入 \(x_t = x_0\),干净输入不含任何关于 \(\epsilon\) 的信息,模型对 \(\epsilon\) 的最优猜测只能是均值:
是"模型猜不到 \(\epsilon\),按 L2 最优输出其均值 0",而非"\(\epsilon\) 本身为 0"。对称的例子:\(x_0\)-prediction 模型在 t=1(纯噪声输入)时输出整个数据集的均值(一张糊掉的平均图)—— 同一个机制:输入不含信息 → 条件期望退化为无条件均值。
于是:预训练权重在 t=0 处近似输出 \(-x_0\),取负后 \(-v \approx x_0\) —— fine-tune 的起点近似是 latent 空间的恒等映射。depth/normal/分割视频与输入视频共享全部空间结构,模型只需学"把 RGB 重新着色成目标模态"这个残差。三个互补视角:
| 视角 | 内容 |
|---|---|
| 期望/初始化 | t=0 处最优输出 \(= -x_0\),取负 → 恒等映射起点,只学"重着色"残差 |
| Decoder 流形 | 冻结的 VAE decoder 只认自然 latent 流形;\(-v\) 在这一侧,\(+v\) 在镜像侧(decode 出乱码) |
| 采样器方向 | RF 的 Euler 更新 \(x_{t-\Delta} = x_t - \Delta v\),走向数据的方向从来是 \(-v\);单步感知 = 生成最后一步的塌缩 |
两个注脚:(1) 这是 L2 最优解的理论行为,真实网络只是近似(t=0 是训练几乎不采到的边界点);(2) 恒等映射只是起点 —— 收敛后 \(-\mathrm{DiT}(x_0^{\text{input}})\) 输出的是 \(y_0\)(目标模态 latent)而非 \(x_0\)。另外 negate 在表达能力上完全冗余(最后一层 linear 学个 \(\times(-1)\) 就能到同一解),收益纯在优化/初始化对齐 —— 论文也只说 "empirically accelerates",没有给这一项的 ablation。
2.2 单帧图像输入可行吗¶
架构上可以:WAN 2.1 的 VAE 是 causal 3D VAE,帧数要求 \(4k+1\)、首帧独立编码(1 帧 → 1 个 latent 帧),单图是合法输入;WAN 预训练也是 image+video 联合训练,单帧对 backbone 不算 OOD。论文确实评了纯图像基准(PhotoMatte85 / PPM-100 是图像 matting),但没说图像是怎么喂的 —— 单帧直接过,还是复制成多帧伪视频(DepthCrafter 一系的惯例)。注意 GenCeption 的 fine-tune 全程只在 81 帧上做,单 latent 帧推理在 temporal attention 统计和 temporal RoPE 范围上都偏离 fine-tune 分布。自己实现时稳妥做法是复制成 \(4k+1\) 帧(5/9/…/81);单帧跑得通但掉不掉点需自行验证。
2.3 Rothko raymap:两层约束叠出来的产物¶
第一层约束 —— 位姿必须变成"图"。统一原则要求所有 dense 任务输出 3 通道 RGB 视频(VAE 冻结、latent L2、prompt 切换)。相机位姿传统上是每帧一个矩阵,长得不像图。Raymap(Cameras-as-Rays 一系)把位姿过参数化成逐像素射线:
位姿由此变成平滑、逐像素、随时间连续演化的"图像"—— 落在视频生成先验的舒适区。附带好处:上万像素冗余投票同一位姿(恢复时平均掉局部误差);网络从不直接输出旋转参数(绕开 quaternion 符号、Euler 回绕)。
第二层约束 —— 6 通道塞进 3 通道。Raymap 天然 6 通道(origin 3 + direction 3),但冻结的 WAN VAE 只吃 3 通道,且"零修改"是第一设计原则。解法是空间排版而非砍通道:direction 铺满画面外围,origin 缩成中央矩形色块 —— 成品像 Rothko 的色域绘画,故得名。
排版近乎无损的原因在两张图的信息结构:origin map 对 pinhole 相机是常数图(整图一个颜色 = 3 个数),缩成小色块零损失;direction map 是极低自由度的平滑场(由 \(R, K\) 唯一决定),外围"画框"已过定 \(R\),中央被遮部分可完全解出。
论文未写、按谱系惯例推断的部分:direction 按 normal map 惯例 \((d+1)/2\) 归一化;origin 需场景尺度归一化(具体映射未提);推理时读中央色块反归一化得相机中心、对外围渐变场拟合射线再最小二乘/Procrustes 解 \(R\) —— 这个恢复算法全文未描述,但 Sintel 报了 ATE/RPE,后处理必然存在。
遗留的假说:GenCeption 相机指标里唯独 RPE-R(旋转)差得离谱(0.464 vs D4RT 0.126,差 3.7×),而 ATE/RPE-T(平移)全表最佳。对着排版看很可疑:平移住在画面中央的大色块(VAE 重建最好的区域、常数信号最易编码),旋转住在画面边缘的渐变场(VAE 边缘重建最弱 + \([0,1]\) 量化 + latent 压缩限制角度精度)。"把 direction 换到中央"是一个能直接检验排版信息代价的实验。另一处不自洽:正文把 camera pose 归 dense(raymap),架构图却画进 sparse 输出栏 —— 评测数字来自哪条路线未交代。
2.4 Sparse learnable token,与 Octo readout token 的对照¶
机制四件套:
- 追加 T 个 learnable token,每原始视频帧一个 —— 注意是 T=81 而非 latent 长度 T'=21,对齐的是逐帧监督目标的帧率;
- 全注意力读取:DiT 无 mask,query 读视频 token 的同时,视频 token 也会反过来 attend 这些 query(麻烦的根源,见下);
- MLP 解码:每 token 输出该帧 \(K\) 维目标;损失还是统一 L2,只是 sparse 在输出坐标空间算(不过 VAE);
- RoPE 兼容的两个 trick:空间位置无意义 → \((h,w)\) 索引设为可学习;时间索引 1…81 超出预训练见过的 1…21 → 用 Position Interpolation(LLM 长上下文那个技术)把帧索引缩放回 \([1, T']\) 内的分数位置。有趣的 crossover:LLM 界拿它扩上下文,这里反过来把更细的 query 网格塞进预训练位置范围。
论文给了一句消融:additional-query 优于加额外 attention 层。
放进 readout-token 谱系看(DETR query / Perceiver latent / Octo readout token):关键差异是 Octo 用 block-wise mask 把 readout 做成"被动只读"(观测 token 看不到 readout、readout 不回写主干表征),而 GenCeption 的 DiT 预训练就是全注意力、没有 mask 插槽 —— 从零初始化的 query 可被回读,视频 token 的表征被随机初始化的新邻居污染。这正是 joint-training 消融崩掉的机制(作者自己归因:"additional learnable tokens, trained from scratch, disrupt the native attention mechanics of pre-trained DiT layers")。这个失败模式在 readout 文献里有已知解法(read-only mask),论文没试 —— 可能因为给预训练全注意力 DiT 后加 mask 本身也算"架构修改",与第一原则冲突,是个真实的两难。
未交代的实现细节:关节数/\(K\) 的值;2D 与 3D keypoint 是共用一套 token+MLP 靠 prompt 切换还是各一套头;3D 坐标归一化方式。遗留实验(summary §5.3):放弃 token、把 keypoint 渲染成 heatmap 视频统一进 RGB 空间,generalist 的退化会不会直接消失。
2.5 Specialist / Generalist 的准确口径¶
Figure 2 caption 是唯一正式定义:"Our specialist denotes a model trained on each task individually, whereas the generalist represents a single model trained jointly across multiple tasks."
- Specialist = 每任务一个 checkpoint(同一 WAN backbone 出发、各用单任务数据 post-train)。Table 1 的 Specialist 行是拼接行 —— 各列来自不同 checkpoint,L 尺寸约 6 个(normal / depth / camera pose / 前景分割 / ref-seg / 3D keypoints);
- 粒度是任务级不是基准级:depth specialist 一个模型 zero-shot 评四个基准(从不用基准配套训练集)。Table 2 的所有 "Ours" 行都是 depth-only specialist;
- Generalist = 一个 checkpoint 联合所有任务,prompt 切换;
- 论文没说清的:Generalist-L 的 EMDB 是 "~"(not obtained),而消融说 joint training "severely degrades 3D keypoints and compromises other dense tasks" —— 报出来的 Generalist 训练 mixture 里含不含 sparse 任务未明说(从 dense 数字没有全面崩坏推断,倾向最终版把 sparse 踢出了 mixture);
- 有意思的推论:"dense 一个模型 + sparse 一个模型"不是论文的术语,却恰好是实验结果指向的实用部署配方(generalist 在前景分割上还反超 specialist:0.0027→0.0010)。
2.6 源码考古:两个"没打算让你看到"的信号¶
未使用的宏。preamble 第 52–56 行定义了 \veo(Veo)、\veotwo、\veothree、\geminipro(Gemini 2.5 Pro)、\nanobanana —— 正文一次都没用到(grep 验证)。结合 googledeepmind.cls 模板与被 redact 的通讯邮箱,最自然的解读:这条研究线存在(过)基于 Veo/Gemini 的内部版本,WAN 2.1 是拿出来发表的开源载体。两个推论:(a) 1.3B→14B 的 scaling 故事很可能不是终点,报出的数字可能低估范式上限;(b) 与 Wiedemer et al.(Veo 3 zero-shot prompting)的 "concurrent" 关系更像同楼两条互补产品线 —— 一条 training-free 证明先验存在、一条 post-training 收割先验。
被注释的致谢(第 893–894 行):Thabo Beeler、Erroll Wood、Sergio Orts Escolano 等是 Google 数字人/合成人体数据的核心班底 —— 印证 RenderPeople 合成管线是自家 digital human 团队的家底延续(正文也 cite 了 H-SPACE),非为本文临时搭建。
2.7 补充裂缝与工程要点(已回填 summary §5.2 / §5.3)¶
- MeViS 的 headline 赢面不是 zero-shot:正文声明 "trained without using any of the training sets provided alongside the evaluation benchmarks",但训练数据明确含 MeViS(train)、评测又报 MeViS(val)—— 而 MeViS 70.0 vs ReferEverything 60.3 恰是全表最大赢面。按 ref-VOS 社区惯例同协议公平(对手也在 MeViS train 上训),但"全表 zero-shot"的光环覆盖不到最大亮点,这句声明严格说自相矛盾。Ref-DAVIS 76.4 是真 zero-shot;
- 三大支柱一根零消融:生成式预训练(有 backbone 对比 + layer transfer)、统一表示(有 joint-vs-specialist)、feed-forward 重构(什么都没有) —— 全文没有"同模型同数据单步 vs 多步采样"对照,negate 也只有一句 "empirically accelerates"。单步不掉点的前提实际靠引用 E2E-FT 在图像深度上的结论隐式背书,在视频、在他们自己的 setup 下从未验证;
- 延迟解剖学 —— 瓶颈不在 DiT:1.3B 总耗时 5.92s 里 DiT 只占 0.96s(16%),14B 占 51%;两个尺寸的非 DiT 开销恒定 ~4.95s(VAE encode/decode + text encoding)。推论:(a) 再提速要动 VAE(蒸馏轻量 decoder)而非 DiT;(b) 除 ref-seg 外任务 prompt 是固定小集合,text embedding 离线缓存即可去掉 10GB text encoder —— 训练时他们本来就缓存了 text embedding,推理时同一招论文却只字未提,只说 offload;
- VAE round-trip oracle 缺失:监督在 latent 空间、decoder 冻结 → 精度被"VAE 能多忠实编码/重建一张 modality 图"锁死(8× 空间压缩、为感知质量而非数值精度设计)。最该有而没有的一行实验:GT depth 视频过 VAE encode→decode 再算 AbsRel —— 直接量出表示本身烧掉的精度预算,也能检验 §2.3 的 RPE-R 假说。任何复现应第一个补这个数;
- gradient dropping(整 batch 按梯度范数丢弃)被称为 "vital" 但阈值未给 —— 既是实用技巧也是配方不稳定的自供状;
- 任务覆盖的水分:DensePose 与 2D keypoints 训了、图里展示了、全文零定量评测;有定量评测的 6 个任务族里 3 个是 human-specific 基准(Hi4D/Goliath/EMDB,THFM 底色);无 detection / tracking / VQA —— "general-purpose" 的实际范围是"稠密几何 + 人体 + matting + ref-seg"。
2.8 与 Robbyant WAM 线的张力(跨库连接)¶
本库 RepWAM / LingBot-VA 2.0 的立论是"重建式 VAE latent 偏外观、缺物理语义,是机器人的错误接口";GenCeption 却证明同一套生成栈里有一流的几何/语义先验。表面冲突,实际互补,调和点在于:先验住在 DiT 权重里,接口选在哪层决定你能取出什么。GenCeption 的输出全是稠密像素对齐的图 —— 恰好是外观导向 latent 能承载的输出类型;动作/动力学预测需要另一种压缩。而且 GenCeption 的 sparse-token 失败(外挂 token 扰乱预训练 attention)与 RepWAM 的"外挂 action expert 跨 modality gap 代价大"是两条独立研究线撞出的同一个教训。这两篇对着读比单独读有价值。
3. 沉淀下来的可检验问题¶
- VAE round-trip oracle:GT modality 视频 encode→decode 后算指标,量出表示天花板(复现第一步);
- Raymap 排版对换:direction 放中央、origin 放外围,RPE-R 是否修复 —— 直接检验 Rothko 排版的信息代价;
- Keypoint 改 heatmap 视频:走 RGB 空间统一,generalist 的 3D keypoint 退化是否消失;
- 单步 vs 多步受控对照:同 checkpoint 跑迭代采样,验证 feed-forward 支柱;
- 部署白捡优化:固定任务 prompt 的 text embedding 缓存(去掉 10GB text encoder)+ VAE decoder 蒸馏;
- read-only mask 版 learnable token:Octo 式屏蔽回读,检验 joint training 崩溃能否被 mask 修复。
参考¶
- 主笔记: GenCeption_summary.md
- 同类先例: Fast-WAM 讨论笔记(single forward / generative objective as representation learning)
- 对照阅读: Octo(readout token 的 read-only mask 设计)、RepWAM、LingBot-VA 2.0