tau_min 是 train_step 的关键字参数(默认 0.45),调用处从未传入,也没有对应的命令行 flag。
于是全部 warp_cond 系(expC/expE/expE_scratch/expE_sync/expF_plucker/expF_sync/expK)都在 τ_min=0.45 训练、却用 τ_min=0.85 采样;
训练上限有 52.2% 的质量落在采样器初始状态从不访问的区间。代码里那句 // 匹配采样器 的注释对这些 run 全部为假。dl3dv_fwd18)。| 机制 | 实现(函数 / 拼接什么) | 使用的实验 | camera control 的成分 |
|---|---|---|---|
| I2V y-concat(无持久通道) | build_i2v_cond → 20ch 首帧条件,只在输入层 | expA, expB, warp_baseline | 无(只有首帧锚) |
| + memory-slot 交叉注意力 | attach_mem,几何键控 cross-attn,420.5M 参数 | dl3dv_i2v14b, dl3dv_asyncpatch(+c2), expC | 隐式(几何键) |
| 17ch 持久 warp 通道 | extend_patch_embedding(+17);[z_mem(16) ‖ up2(k)(1)] 每个去噪步拼进输入(零初始化) |
expC, expE_geo/rand/scratch/sync, expJ_narrow, expK | 隐式:splat 沿目标轨迹重渲染,pose 烧进内容的空间位置 |
| 23ch = 17ch + 6ch Plücker | 同上再拼 plucker(dir+moment,相对帧 0,span 归一化) | expF_plucker, expF_sync, expJ_ray | 隐式 + 显式逐 token 射线 |
| VACE 原生分支 | vace_context[96ch] 走预训练控制分支,非自建通道 | expG_vace, expG0_plain | 隐式(VACE 内部) |
| 序列内干净 ctx 帧 | seq_ctx:前 5 个 latent 帧钉在 t=0.02,留在同一序列;无通道 | expL_uni, expL_nk | 无显式;靠 ctx 运动外推 |
| 平行干净 token 半区 | mcsdf_forward_par:[target 21 帧 ‖ source 5 帧],source RoPE 帧对齐 0-4,head 只读 target | expM_nopl | 无显式(仅 k 足迹) |
| 平行半区 + 6ch Plücker | 同上,两个半区各自的 Plücker 走 +6ch 扩展 pemb | expM_par | 显式双半区射线 |
| 日历 | 公式 | 实验 | 要教什么 / 已知病理 |
|---|---|---|---|
| 全局标量 t(knownness OFF) | t = s ~ U(0,1),全场同值 | expL_uni;所有方法的 10% rehearsal 支 | 纯生成先验;无 knownness 信息 |
| uniform 均值匹配(L0 基线) | τ₀ ← mean(τ₀),去掉空间变化 | warp_baseline_r128 | 隔离"噪声图"这一变量。被 LoRA rank 与步数三重混杂 |
| AsyncPatch patch 场 | base t̄ + 有界 per-patch 扰动,完全绕过 τ₀ | expA, expE_rand, dl3dv_asyncpatch | 结构化覆盖。日历里零 knownness,却用 knownness τ 场采样 |
| τ₀=1−.95k,legacy min(τ₀,s) | t = min(τ₀, s),τ₀ = clamp(1−.95k, .45, 1) | expB, expC, expE_scratch, expF_plucker, dl3dv_i2v14b | knownness 定起点。s < min τ₀ 时整场坍缩为常数(闭式 57.8%);τ_min 与采样器不匹配(见 §2) |
| +35% ceiling lift | τ₀ ← 1−(1−τ₀)·γ²,γ~U(0,1) | expE_scratch 起的全部 expE/F/G/J/K | 覆盖高噪边缘 |
| SYNC 切片(sync_sched) | t = clamp(τ₀−c, .02, 1),c~U(0,1) | expE_sync, expF_sync, expJ_*, expK | 与 SYNC 采样器同族;坍缩率降到 2% |
| 窄带 λ=0.2 | τ₀ = 1−.2k ∈ [.8, 1] | expJ_narrow, expJ_ray, expL_nk | 起点几乎都接近纯噪声,内容改走 warp 通道。意外免疫了 τ_min bug |
| patch 场 branch2 | t = u_patch · τ₀(连续 3D 块) | expE_scratch 起的全部 | 结构化空间覆盖。唯一产生"孤立干净 token"配置的来源 |
| rate 日历 | t = clamp(1−c/T),T = 1−.5k,起点恒为 1 | expM_par, expM_nopl | knownness 只定速率;训练场按构造即推理日历 |
| prefix curriculum | 轨迹前缀课程 | — 从未被任何 run 使用 | 已实现、烟测过、然后被遗忘 |
| 对子 | 项目声称的单变量 | 实际差异 |
|---|---|---|
| expE_scratch ↔ expE_sync | --sync_sched | ✓ 真单变量 |
| expF_plucker ↔ expF_sync | --sync_sched | ✓ 真单变量 |
| expE_sync ↔ expJ_narrow | λ 0.95→0.2 | ✓ 真单变量 |
| expJ_narrow ↔ expJ_ray | +6ch Plücker | ✓ 真单变量 |
| expM_par ↔ expM_nopl | +6ch Plücker | ✓ 真单变量 |
| expL_uni ↔ expL_nk | 日历 | ✗ 差 3 项:日历 + z_mem anchor 分支被硬关 + 推理初始化(uni 纯噪声 / nk 从 z_mem SDEdit) |
| expM_par ↔ expL_uni | token 布局 | ✗ 差 3 项:布局 + 日历 + rehearsal(expL 的 seq_ctx 分支在 rehearsal 判断之前就返回了) |
| expG_vace ↔ expE_scratch | backbone/条件通路 | ✗ 还差 lr(1e-5 vs 5e-5) |
| expG_vace ↔ expG0_plain | --plain | ✗ expG0 还少了 --train_modulation(186.1M 可训练参数之差) |
| warp_baseline ↔ expB_noisemap | --uniform_noise | ✗ 还差 LoRA rank(128 vs 64)与步数(3000 vs 10000) |
scripts/train.py:72 的 train_step(..., tau_min=0.45, ...) 是关键字参数;
train.py:418-422 的调用处没有传它;grep -c '"--tau_min"' = 0(没有 flag)。
所以全部 warp_cond 系都在 τ₀ 地板 0.45 下训练,采样器却用 cluster_tau(τ_min=0.85) 建 τ 场。train.py:190 那句注释 // per-token ceiling (matches sampler) 对这些 run 全部为假。
expJ 是意外免疫:λ=0.2 把地板顶到 0.80,0.45 这个 clamp 变成了空操作。
| 问题 | 证据 | 影响 |
|---|---|---|
| expC 的榜单成绩是残废模型跑出来的 | 所有 eval 路径建 pipe 时都不调 attach_mem,420.5M 的 memory-slot 权重在加载时被丢弃;cluster_tau_probe.py 自己的日志就写着 "expC (slot-free load)" |
12.15 dB 是缺了 914M 中 420.5M 参数(46%)的模型的分 |
| expE_* 热启动时静默丢弃那 420.5M | expE_geo/warmstart.pt 有 mem_mods 键,ckpt_last.pt 没有;无 --mem_slot 故 pipe._mem_mods is None |
训练好的组件永久丢失,之后再没保存过 |
| 步数不可比 | expC 4500 = 继承 1500 + 自训 3000;expE_geo/rand 6500 = 继承 3500 + 自训 3000;反之 dl3dv_asyncpatch_c2 报 3000 实为 6000 累计 | 任何"同步数对比"都要先换算 |
| 三个最早的 run 无法从自己的 sbatch 复现 | 它们带 mem_mods 但 sbatch 没传 --mem_slot;HEAD 版 train.py 对 i2v14b 无条件 attach_mem | 复现需要 checkout 旧版代码 |
| 4 个 flag 被静默忽略 | expL 的 --lam 0.95(seq_ctx 硬编码 1−0.2k)、expL 的 --unknown_w、expM 的 --lam;expM 的 --rehearsal 落在调 fwd 而非 fwd_par 的分支(该步删掉 source 半区 —— 这是有意设计,但与 flag 名字的直觉不符) |
配方文件不能当作真实配置读 |
| 榜单指标本身是坏的 | rerank_perceptual.py 文件头:纯平均色图 = 11.8 dB 平均、2501f488 上 12.07 dB;fleet 跨度 10.82–13.20 dB;4 clip、n=4、无不确定度 |
所有 seen-PSNR 排序都不可靠,须改用 mLPIPS/gPSNR/sharp% 并扩大评测集 |
dl3dv_fwd18 是幽灵 | 只有 sbatch,磁盘上无 run 目录、无 .pt、日志无引用 | 清单里减一 |
| 量 | expF | expJ | expM | 读法 |
|---|---|---|---|---|
| 逐位置 W₁ 均值 T / H / W | .0420/.0421/.0420 | .0404 ×3 | .0074/.0075/.0072 | 没有哪个轴承载更多失配(方法内差异 <0.5%) |
| corr(W₁ 剖面, 平均 k 剖面) | +.996/+.998/+1.000 | +.972/+.998/+.994 | +.971/+.892/+.926 | 失配是 knownness 的 1:1 像 |
| split-half 噪声底 / 信噪比 | .0053–.0059 / 7.1–8.0× | .0086–.0090 / 4.5–4.7× | .0066–.0069 / 1.08–1.10× | expM 的失配在估计量噪声底之内,不能报为非零测量 |
| 帧内空间方差比 train/infer (整卷口径 = 一次前向的单位) |
6.95× | 3.93× | 1.22× | 失配在振幅:expF 训练场携带的空间方差是推理的 7 倍 |
| 相关长度 & 谱斜率一致度 | 三方法 train/infer 均一致到 15% 与 0.24 以内 | 形状(layout)是对的 —— 错的只是幅度 | ||
| 各向异性比 (corrW/corrH)train/(…)infer | b2 1.29× / b1 1.04× | b2 1.33× / b1 1.00× | b2 1.14× / b1 1.00× | branch2 的 patch 场过度沿 W 拉长;branch1 精确复现 |
| (h,w) 失配地图 vs k / vs |∇k| | +.997 / +.116 | +.994 / +.093 | +.824 / −.041 | 不集中在覆盖前沿,是覆盖度本身的单调像 |
xt = t·x1 + (1−t)·x0,x1=数据);MCSDF 用 t=1 表示纯噪声。
下面全部换算为 MCSDF 约定:τ = 1 − t_PF。校验通过了完整的方向审计,未发现倒置。std = min(t̄/2, 0.6) 中的 min 永远取 t̄/2(因为 t̄=sigmoid(0.7+z)<1<1.2),
于是 t_i = t̄ · w_i,w 独立同分布(|z|<2 时 w=1−|z|/2,否则 w~U(0,1))。
也就是说 LTG 是一个乘性、尺度无关的场:一个共享上限 × 一族 iid 乘子。| 统计量 | PatchForcing | expF | expJ | expM | 谁更好 |
|---|---|---|---|---|---|
| P(场内 min<0.1 ∧ max>0.7) 训练 | 0.064 (场尺寸不变) | 0.289 | 0.231 | 0.090 | PF 更"干净";MCSDF 反而多 1.4–4.5 倍 |
| 同上,推理时 | ≈0(采样器近乎平坦) | 0 | 0 | 0 | 双方都是 0 —— 这个"失配"是共有的 |
| W₁(训练边缘, 推理占据) | 0.097 / 0.103 / 0.130 | 0.041 | 0.048 | 0.0089 | MCSDF 好 2–15 倍 |
| 严格未覆盖推理质量 | 0.020 / 0.035 / 0.078 | 0.000 | 0.000 | 0.000 | MCSDF 全胜 |
| 帧内空间方差比 train/infer | ∞ / 1377× / 8.6× | 6.95× | 3.93× | 1.22× | MCSDF 好得多 |
| 推理时场内最大异质度 | 0.0 / 0.015 / 0.28 | 0.150 | 0.200 | 0.496 | PF 的采样器几乎完全平坦 |
| 结果 | FID 33.0 → 27.9 (其中 58–71% 靠训练日历,用平坦采样器就能拿到) |
seen-PSNR 无法分辨(见 §2) | — | ||
| 可迁移 | 不可迁移 |
|---|---|
|
① 噪声地板本身 —— 对最干净的 token 做硬下夹(τ_i ≥ 1−t̄)。这正好也是我们 §2 那个 bug 的正确修法方向。 ② 尺度无关的展宽律 —— LTG 的场内 sd 正比于水平(sd = t̄/2·sd|z|),所以场在接近干净时自动收敛为平坦;我们的 patch 场没有这个性质。 ③ 不确定度头作为架构模式 —— 一个额外输出通道(3,076 参数 = 130M 模型的 2.4e-5),stop-grad NLL,权重 0.01。 ④ DualLoop 的重同步子步作为采样器旋钮:难 token 走 n 个小步、易 token 走 1 个大步,总推进相同。 ⑤ LookAhead 的 context 技巧用在我们的 k 上:把高 k(易/已覆盖)token 在一次辅助前向里推进到更干净的未来时刻,用它作为难 token 的上下文。 |
① "噪声水平是唯一信息通道"这个前提 —— PF 的机制建立于此;我们有 warp/attention 内容通道,k 还是真实几何先验。 ② 上限的内容无关性 —— LTG 的 t̄ 是与图像无关的全局标量;我们的 τ₀ 由 k 决定。 ③ LTG 的空间白噪声异质性 —— lag-1 自相关 −0.005(iid)vs 我们 branch2 的 +0.76(块状)。直接照搬会毁掉空间结构。 ④ "调度匹配预测质量"这个推断(双向都不成立) —— 见上方紫框。 ⑤ 不确定度头不能替代 k —— uq 是去噪过程中算出的后验难度,k 是 VGGT 几何算出的先验;两者互补,不可替换。 |
| 类别 | 内容 | 证据 |
|---|---|---|
| 真实且可能有害 (只有一项,而且是接线 bug) |
训练 τ_min=0.45 vs 采样 τ_min=0.85 | W₁(上限) 0.188 vs expJ 的 0.027;52.2% 训练上限质量在采样器初始区间之外;修好后逐帧 W₁ 0.0404→0.0176 |
| 真实但很可能无害 | ① 支撑覆盖完整:严格未覆盖质量恒为 0.000(rehearsal 铺满支撑)—— 模型从不被查询在从未训练过的噪声水平上 ② 逐帧 W₁ 0.041/0.039 不是独立问题:它与 k 的相关是 +0.99、与 |∇k| 只有 +0.12,是上限差的 1:1 像,修好上限后自然消失 ③ 三个轴没有哪个更差;(h,w) 失配不在覆盖前沿 |
见 §3 全部数值 |
| 是测量伪影 | ① "薄覆盖质量"(bin 宽/梳状混叠,排序会翻转,已撤回) ② expM 的逐轴 W₁(信噪比 1.08–1.10,在估计量噪声底之内) ③ "训练空间方差过大 3.6–5.0 倍"这个区间是尺度依赖的,随口径变化到 6.95 倍 |
bin 扫描 32–512;split-half 噪声底 |
| 数据不支持的推论 | ① 失配正在损害生成质量 —— 本研究没有任何结果测量 ② 修好失配会提升 seen-PSNR —— 该指标分辨不了(纯色图 11.8 dB) ③ SYNC 训练已被证明更好 —— parade top-4 同时也全是干净血统,两个变量缠在一起 ④ 58% 的 branch1 坍缩是"缺陷" —— 一个常数 t-场就是一个普通扩散步,所以 expF 实际得到的是 ~36% 的普通步而非 10%;这是 rehearsal 率的改变,不是坏事 |
— |
scripts/train.py:在 argparse 里加
ap.add_argument("--tau_min", type=float, default=0.45),并在调用处传 tau_min=args.tau_min;
同时修正 train.py:190 那句失实注释。--tau_min 0.85 --ltg_b2,
其中 --ltg_b2 把 branch2 换成 LTG 式:先抽一个上限,再把所有 token 压在其下(而不是当前的 u_patch · τ₀)。expH_sync_sampler.py 的 sample_sync 里给下降加一个逐 token 抖动
t_i(e) = τ_i − e − a·ξ_i,扫 a ∈ {0, 0.1, 0.2, 0.35}。--sync_sched 成为默认,加 --legacy_b1 用于复现旧 run;不要删代码。| clip | expM_par @10k | expM_nopl @10k | expL_uni @10k | expL_nk @9.5k |
|---|---|---|---|---|
| 00534f58 (train) | 10.8 | 11.1 | 10.7 | 11.6 |
| 0003dc82 (train) | 10.4 | 10.9 | 9.8 | 13.1 |
| 111b656f (test) | 12.0 | 11.9 | 11.4 | 16.2 |
| 2501f488 (test) | 12.3 | 11.7 | 11.4 | 10.6 |
| 平均 seen-PSNR | 11.38 | 11.40 | 10.83 | 12.88 |