Per-scene optimization methods such as 3D Gaussian Splatting provide state-of-the-art novel view synthesis quality but extrapolate poorly to under-observed areas. Methods that leverage generative priors to correct artifacts in these areas hold promise but currently suffer from two shortcomings. The first is scalability, as existing methods use image diffusion models or bidirectional video models that are limited in the number of views they can generate in a single pass (and thus require a costly iterative distillation process for consistency). The second is quality itself, as generators used in prior work tend to produce outputs that are inconsistent with existing scene content and fail entirely in completely unobserved regions. To solve these, we propose a two-stage pipeline that leverages two key insights. First, we train a powerful bidirectional generative model with a novel opacity mixing strategy that encourages consistency with existing observations while retaining the model's ability to extrapolate novel content in unseen areas. Second, we distill it into a causal auto-regressive model that generates hundreds of frames in a single pass. This model can directly produce novel views or serve as pseudo-supervision to improve the underlying 3D representation in a simple and highly efficient manner. We evaluate our method extensively and demonstrate that it can generate plausible reconstructions in scenarios where existing approaches fail completely. When measured on commonly benchmarked datasets, we outperform all existing baselines by a wide margin, exceeding prior state-of-the-art methods by 1-3 dB PSNR.
- 稀疏重建补不上的地方,为什么缺的是内容而不是画质,以及前人两拨人各修了哪一半。
- 前人两条路的具体代价:一次出不了几张,和出了也没人管。
- 两阶段总览:先教一个双向教师,再把它压成因果学生,以及三个变体各自是什么。
- 相机与不透明度这两路条件怎么塞进每一个 Transformer 块,两条编号式逐项拆开。
- 不透明度混合:为什么源分布应当反映「已经能渲染出什么」,另两条编号式逐项拆开。
- 配对数据从哪来:把相机挑散、把空洞留大,以及训练时怎么故意挖掉末尾若干帧。
- 把双向教师压成因果学生:连 ODE 初始化都省掉,以及 70 倍提速是怎么算出来的。
- 主战场:Nerfbusters 与 DL3DV 上把 PSNR 抬 2 dB,四个指标一起看。
- Mip-NeRF 360 三档视角:14 个基线、每一格都赢,以及把骨干缩到 1.3B 后还剩多少。
- 空区生成:把「洞」补成内容,与次好方法差 3.12 dB,以及文本条件到底有没有用。
- 消融四行、条件剥离,以及1 步与 4 步之间到底差什么。
- 定性:六个场景 × 四个基线,以及三种失败模式。
- 结论、四条局限,以及出处与许可。
1重建没去过的地方,缺的是内容不是画质
1.1 两种失败:近处修不干净,远处根本没人管
你拿一组照片建好一个场景,然后绕着走一圈,会看到几处地方不对劲:一面墙上糊着一片没有纹理的灰斑,地面塌下去一块,墙角冒出几团半透明的东西。这些不是相机拍歪了,是拍摄时根本没扫到那里。三维重建这一路(NeRF、3D Gaussian Splatting 及其后继)的做法是逐场景优化:把一组照片蒸馏成一个可以从任意视点查询的三维表示,稠密采集加上准确的相机位姿时,它已经能做到实时且逼真;可它的上限就卡在输入观测的完整度和质量上,没扫到的地方,重建出来的只能是空洞、糊面,或者说不通的几何。这些毛病在训练视角附近基本看不见,一旦自由漫游就全暴露出来[§1, p1]。
另一路是生成模型。近两年的视频生成模型能合成照片级、时序连贯的内容,单看画面常与真实视频难以区分。可它的问题在另一端:长序列上的精确相机控制、长时间跨度的一致性、以及误差与幻觉的累积,都还是未解决的问题。把这条路的产物直接当新视图用,视角一动就可能漂到别的场景去[§1, p1]。
两句话叠起来就是本篇要处理的那个缺口:重建那一侧缺内容,生成那一侧缺约束。作者的原话是「与其把重建和生成当成两条互斥的路线,不如把它们的互补优势合起来」:生成模型当先验,去修补并补全不完美的重建;那张带噪的、残缺的三维表示反过来当条件,把生成锚住,压住长期漂移与幻觉[§1, p1]。
③推导:这张图里的「闭环」不是修辞,它对应两个具体的工程选择。第一,为什么要能「一次出几百帧」:因为回灌三维那一步需要足够多的新视图才有意义;前人用双向视频模型一次只能出 16 帧左右,于是必须交替地生成一批、重建一次、再生成一批,训练时间都花在这个循环上。本篇把学生做成自回归的,任意长度可以一次推完,回灌就退化成「生成完再做一次标准三维重建」[§4.2, p5]。第二,为什么「伪监督」这条路值得留着:直接渲染(ArtiFixer 与 ArtiFixer3D+)的锐度更好,但走一遍显式三维表示(ArtiFixer3D)的一致性更好,两条路在指标上是互有得失的(第 8 章的表 1 里,ArtiFixer3D 的 PSNR 与 SSIM 更高,而 LPIPS 与 FID 反而略低),把两者都留着、按需要选,比只留一条更划算。
④边界:这张图演示的是「有初始重建」的情形。去掉它,模型只能靠参考视图与相机光线去猜,保真度会掉(第 11 章的图 11-2);再去掉参考视图、只剩文本提示,就退回普通的文生视频,输出质量与基座模型持平(第 11 章的图 11-3)。另一个不在图里的前提是「初始重建本身还在可用范围内」:图注说的是「高度退化」也还能修,但第 13 章的四条局限里明确写了:条件缺失或极度退化时,细节与文字会糊、颜色会有轻微偏移。
1.2 两个范式为什么不冲突
把两条路的失效集合画出来,会发现它们几乎是互补的。逐场景优化的重建在观测密集的地方是度量上最优的:那里有足够的匹配约束,几何与纹理都被光度损失钉得死死的,误差通常只有零点几 dB 的量级;而一旦离开观测,它的输出就退化成「高斯铺过头」或者「一片空洞」,误差可以直接跳到几个 dB。生成模型正好相反:在空区它最自由(没有任何观测约束,它按先验画),在观测密集区反而最危险(它没有必要尊重那张已经正确的图,除非被条件钉住)。
于是问题的提法可以换一个角度:把「哪里该听观测、哪里该听先验」当成一道逐像素的开关题。开关闭合的地方照抄重建,开关打开的地方交给生成,中间地带两边掺着用。第 5 章那条式 (3) 就是这个开关的具体形式,而开关的位置由渲染出的不透明度图给出[§4.1, p4]。这个角度也解释了为什么前人两条路都不彻底:把生成结果灌回三维的那一拨,开关永远是「闭合」的(源分布就是那张脏图),于是在空区生成不出来;把三维当条件直接生成的那一拨,开关永远是「打开」的(源分布是噪声),于是在观测密集区会改动已经正确的内容[§1, p1;§2, p1]。
最后一件事需要说清楚:本篇所说的「生成」受制于那张脏图与相机光线的双重约束,而不是开放式创作。第 10 章表 6 给过一个直接证据:把文本提示整条拿掉,输出质量基本不变(五档里只有两档的收益超过 0.05 dB);真正起作用的条件是几何那一侧[Table 6, p12]。
2前人两条路:一次出不了几张,和出了也没人管
先看一眼前人在这里撞到的两堵墙。第一堵墙是数量:某个方法一次只能生成十六帧,而这十六帧摊到一圈视角上还不够转半圈,要凑出一圈完整的新视图,就得反复地生成一批、重建一轮、再生成一批。第二堵墙是分寸:另一些方法干脆让生成器凭三维条件自由发挥,画面很锐,可你盯着看会发现背景换了、几何歪了、颜色也偏了。这一章把这两堵墙分别是谁、为什么会立在那儿讲清楚[§1, p1;§2, p1–p2]。
2.1 第一条路:把生成结果灌回三维,代价压在一致性上
这条路最省事,也最贵。做法是训练一个生成模型,把退化的新视图渲染图映射成干净的图,再把改进后的结果蒸馏回三维表示。原文点了四家的名:FlowR、CAT3D、Wu 等人的两篇(Difix3D/Difix3D+ 一系,以及 GenFusion)、Yu 等人的工作[§1, p1]。这条路要同时承受两个拉扯。
第一个拉扯在时序一致性开销上。用大的双向视频生成模型(FlowR、CAT3D、GenFusion)能拿到强时序连贯,代价是算力;用多视角图像生成模型(Difix3D 一系、ReconFusion)更省,可时序一致性弱,得靠渐进式蒸馏一点点凑上去。换句话说,一次能出多少张与前后一致程度这两个量,前人只能挑一个[§1, p1;§2, p1]。
第二个拉扯在条件强度与生成容量之间。把生成条件挂在脏渲染图上(用通道拼接、交叉注意力),风险是改动了场景里本来就对的内容;反过来,训练成「脏图直接映射到干净图」的模型(FlowR、Difix3D),根本没有合成缺失内容的能力:在完全没观测的地方,输入像素全是黑的,模型在那一处的模式已经坍缩了[§1, p1]。这一条正是第 5 章要正面处理的对象。
2.2 第二条路:把三维当条件直接生成,代价压在忠实处
另一拨人反过来做:不把生成结果蒸馏回三维,而是把三维表示当成生成模型的条件,直接合成新视图(Gen3C、Kong 等人的 WorldWarp 一系)[§2, p2]。这条路能明显抬感知真实感,但它继承的是基座模型的全部毛病:时序不一致、幻觉、相机控制不精确[§2, p2]。第 12 章的定性对照里会看到这三种毛病的具体样子(Gen3C 的重建更锐,但不尊重源内容、几何出错、还会偏色)。
这一路还有一个更结构性的问题。近年也有工作开始把显式三维表示当作自回归视频生成的条件,但那些做法把三维输入当成固定的条件,而不是一个要被改进的产物[§1, p1]。本篇的目标正好相反:让重建去条件化生成器,再让生成器反过来改进并扩展重建,把这一圈合上[§1, p1]。
两条路之外还有第三个变量:自回归本身。双向视频模型一次把整段视频一起合成;自回归模型用块因果注意力一帧一帧地生成。自回归换来的是可扩展性与效率(要多少帧出多少帧),代价是质量随时间退化,因为每一帧都以前面生成的输出为条件,误差会累积。前人用「让训练时的条件更像推理时」去缓解这种暴露偏差,也用「按时间与空间线索挑每帧的上下文」去换速度与可控性。但即便如此,自回归视频模型在空间一致性、相机可控性与渲染效率上仍然落后于显式三维表示[§2, p2]。这一句是本篇第 7 章那个「蒸馏」动作的动机:既然自回归的效率优势明显,那就把双向教师的能力压进去,把它的质量短板补上。
③推导:把两条路的代价并排摆出来,本篇的两步走就成了一道排除题。要「一次出几百帧」(第一条路的时序一致性开销由此消失),只能选自回归;要「空区能长出内容」,条件就不能只是那张脏图,必须让源分布在「没观测」的地方退回生成先验;要「不改动本来就对的地方」,条件又必须强到能钉住已有内容。这三个要求里,前两个指向自回归,后两个指向同一个开关:按不透明度在「脏图」与「噪声」之间连续地插值。这就是第 5 章那两条编号式的来历。
④边界:这两条路各自的失败条件是明确的。第一条路在完全没观测的区域必然失败(全黑输入下的模式坍缩),而在观测充分的区域它其实够用,代价只是反复蒸馏的算力。第二条路在观测充分时也能给出好看的画面,失败的是忠实度:生成的内容与源内容之间没有硬约束,画面越自由越容易偏离。本篇并没有在这两条路之外另开一条,而是把第一条路的条件改掉、再补上第二条路缺的那个「回灌」动作。
2.3 自回归这一路:为什么它是落点
自回归视频生成这条线的技术脉络值得单独交代,因为本篇的第二步整个建立在上面的三样工具上。第一样是块因果注意力:把注意力掩码做成块状因果,让每一帧只能看见自己与之前的帧,这样一帧接一帧地生成就不会作弊地看到未来。代价是误差累积:每一帧都以前面生成的输出为条件,前面错了后面跟着错,长序列上会漂。第二样是暴露偏差的缓解:训练时模型看到的是真值前缀,推理时看到的是自己生成的前缀,两者的分布差就是暴露偏差;让训练时的条件更接近推理时的条件(例如在训练里就做自回归 rollout)能显著缓解它[§2, p2]。第三样是按时间与空间线索挑上下文:只把真正相关的历史帧/区域放进注意力,换来速度与可控性,也是交互式世界模型那一路的基础[§2, p2]。
本篇从中借了两样、也换掉了一样。借的是Self Forcing 式的 rollout 结构(训练时就顺序生成块、以已生成的块为条件)与 Diffusion Forcing 的逐帧噪声扰动[§4.2, p4];换掉的是长时域训练:前人靠它压制长序列误差,而本篇判断自己的条件信号已经足够,于是训练帧数与双向阶段保持一致,只在推理时用滚动 KV 缓存[§4.2, p4]。这一换一留的分界很清晰:凡是「让训练更接近推理」的动作都留,凡是「为长序列额外花钱」的动作都省。
同时也要记住自回归本身的短板。原文在相关工作里把它说得很直白:即便有这些进展,自回归视频模型在空间一致性、相机可控性与渲染效率上仍然落后于显式三维表示[§2, p2]。这一句正是本篇第二步的动机:既然短板上不去,就让显式三维表示去补;既然效率优势明显,就把双向教师的能力压进自回归的结构里。第 7 章那三节会把这个动作拆开。
3总览:先教一个教师,再把它压成学生
3.1 先补两件基础:三维怎么渲染、扩散怎么走
理解整套流水线之前,有两块底料要先摆好(原文把它们放在 §3 Preliminaries 里)[§3, p2]。
第一块是三维高斯泼溅的渲染方式。3DGS 把场景表示成一组带各向异性的三维高斯基元,每个基元由均值、协方差、不透明度与视角相关颜色四样参数描述。渲染时把这些基元投影到目标像平面,按深度从前往后做合成:某个像素的最终颜色,等于沿这条光线累加「各基元自己的颜色乘以它自己的不透明度、再乘以它前面所有基元都没挡住的那份透过率」,其中不透明度那一项还会被投影后的高斯在像素处取到的值缩放。所有基元的参数都靠逐场景的光度重建损失去拟合[§3, p2]。这里要记住的是一个副产品:渲染过程顺手给出了每个像素的不透明度,本篇后面全靠它。
第二块是流匹配。扩散模型学的是把样本从一个数据分布运到某个可解的先验分布(通常是标准高斯)之间的搬运。多数视频扩散模型为了算力,把这件事放在低维隐空间里做。流匹配(本篇用的就是这一套)换一个说法:它直接学一条在两个任意端点分布之间走的常微分方程流,做法是拟合一个随时间变化的向量场,让这个场诱导出的概率路径能从源分布走到目标分布。训练时从两个端点各采一个隐向量、在中间取一个时刻、线性插出中间态,再让预测的速度去逼近「终点减起点」这个真实速度,用条件流匹配损失去拟合[§3, p2]。第 5 章的式 (3)(4) 就是在这套框架里换掉源分布,所以这一段要记住的是:这套框架对源分布是什么没有硬性要求。
3.2 两阶段:一个负责「洗」,一个负责「快」
总目标一句话:给定一张由稀疏图像建起来的初始三维重建,要能从任意视角生成没有瑕疵的渲染,包括输入图像从没覆盖到的区域,并且要跑得够快(可交互)[§4, p3]。
3.3 三个变体名,对应三条用法
原文在实验章开头就把三个变体定义清楚了,这里一次交代完[§5, p5]。ArtiFixer 直接用自回归生成器渲染新视图;ArtiFixer3D 把它的输出蒸馏回底层三维表示;ArtiFixer3D+ 则在 ArtiFixer3D 之上再跑一遍生成器做后处理(这一步沿用 Difix3D+ 的配方)[§5, p5]。这三个名字在后面的每一张表里都会出现,且名次互有高低:第 8 章的表 1 里 ArtiFixer3D 的 PSNR 最高而 FID 略差,表 3 里 ArtiFixer3D+ 又反超,三种用法各有取舍,这既不是疏漏也不是笔误。
③推导:为什么非要两阶段,而不是直接训一个因果模型。如果一开始就用因果注意力去训,会把「模型要学什么」和「模型怎么生成」两件事绑在一起:因果约束本身会让训练更难,而与此同时教师能不能把脏图洗干净这件事还没被验证过。原文的顺序是先在一个没有因果约束的模型上把「洗图 + 补空区」这件事学扎实(Phase I),再把这个已经会做事的能力整体搬到因果结构里(Phase II)[§4.2, p4]。第二个理由是成本:Phase II 需要 DMD 这类分布匹配蒸馏,而蒸馏的收敛速度取决于初始点有多好,从一个已经训好的教师出发,原文只需要 5,000 步因果对齐加 2,000 步 rollout 与 DMD(第 7 章与第 8 章会给完整日程)[§5.1, p5]。第三个理由是「脏图到底管不管用」本身就是一个待验证的假设:原文的出发点是「即便高度退化的重建也能提供足够强的条件信号」,而这一点只有在 Phase I 里先拿到证据,Phase II 才有意义(第 11 章表 4 的第二行同时也在验证反面)。
④边界:两阶段里任何一段都不能省。省掉 Phase II,就没有「一次出几百帧」,回灌三维仍然要反复蒸馏;省掉 Phase I,就失去教师这个起点,第 11 章表 4 的「不做初始化」那一行给出的是质量仍有竞争力、但确实少了一点的结论(17.58 对全方法的 17.99)。另有两个不在图上的前提:其一,输入渲染图是由三维表示现渲染出来的,所以「不透明度」这一路信号是免费的;如果只给一组照片而没有重建,本篇的整条链就不成立。其二,三个变体都受骨干视频模型的分辨率上限约束(720p,见第 13 章),只有 ArtiFixer3D 能按底层三维表示的原始分辨率渲染[§E, p12]。
3.4 两块底料里各自要记住的三件事
三维那一块要记住的是三件事。其一,渲染是按深度从前往后合成的,所以「前面的基元挡住后面的」这件事在公式里天然成立;其二,每个像素的合成过程里有一项「累积透过率」,它记录的是「到这一层为止还没被挡住的份额」,逐像素把这一项读出来就是那张不透明度图;其三,所有基元参数都是逐场景优化出来的,因此表示本身没有跨场景的泛化能力,它能提供的是「这一场景已知了什么」,而不是「一般场景该长什么样」[§3, p2]。第 5 章那条式 (3) 用的正是第二件事:不透明度不是额外算出来的,它是渲染的副产品。
流匹配那一块要记住的也是三件事。其一,它学的是「向量场」而不是「一条确定的采样轨迹」,训练目标是让预测的速度去逼近「终点隐向量减起点隐向量」,用条件流匹配损失去拟合;其二,整个过程在隐空间里做,这是视频扩散模型能跑起来的前提;其三,也是本篇最倚重的一条:这套框架对两个端点分布没有形状上的要求,源分布可以是标准高斯、可以是一张图、也可以是两者的逐像素混合[§3, p2;§A, p12]。换句话说,式 (3) 并没有修改这套框架,它用的是框架本来允许的一种取法,补充材料 §A 只是把这个「本来允许」写清楚了。
4把相机和不透明度塞进每一个 Transformer 块
4.1 基座、冻结与 patch 尺寸
起点是一个预训练的文本生视频模型:Wan 2.1 T2V-14B。原文冻结它的 VAE 与文本编码器,只微调其余部分[§4.1, p3]。脏渲染图先过冻结的 VAE 编码成隐向量,再做三维 patch 划分,patch 尺寸是 (t, h, w) = (1, 2, 2),三个字母分别是时间、竖直、水平方向上的 patch 大小(单位是隐空间体素)[§4.1, p3]。注意时间那一维是 1:也就是不做时间上的下采样,每一帧独立成 patch,这正是本篇要保住逐帧相机控制的前提。
4.2 两条旁路:相机走一条,不透明度走另一条
接下来是本章的核心。原文要往这个模型里注入两样条件:一样是「该在哪里生成内容」,由渲染出的不透明度图 O 给出;另一样是「怎么控制相机」,由逐像素的 Plücker 光线图 R 给出:每个像素拿到一个六维向量 (d, o × d),其中 d 是这条光线的方向(由相机内参外参反投影得到)、o 是相机中心[§4.1, p3]。
关键的一步是这两样都不进 VAE。原文的做法是:先把它们的空间维度下采样到与 VAE 的空间压缩率对齐(用 PixelUnshuffle 这个操作,把下采样搬进通道维),再通过每个块自己的线性层 f_o 与 f_r 编码,最后加到视觉 token 上[§4.1, p3]:
两条式子里的 T_s 是「过完自注意力与层归一化之后的 token 集合」(下标 s 指的是 self-attention 那一步)[§4.1, p3]。式 (1) 先加相机,式 (2) 在式 (1) 的结果上再加不透明度:顺序不是随手排的,链式注入意味着不透明度那一支是在「已经有相机信息」的表示上叠加的,两样条件不互相覆盖,而是逐级累加。
K_n 与 V_n 投影;f_r、f_o、V_n 全部零初始化,以保证与预训练权重的兼容性[Fig. 3 图注, p3]。 ②读法:看这张图要数「新加了几根线」而不是看方块。相对原始 Wan 块,这里多出来的是三处:左侧参考视图那一支(经 PRoPE 与线性层后参与交叉注意力的 K/V)、右上相机光线那一支(R 经 f_r)、右下不透明度那一支(O 经 f_o)。三处连线的共同点是都接在「自注意力 + 层归一化」之后,也就对应式 (1)(2) 里那个 T_s;这个位置是本篇的设计选择,它保证注入发生在注意力已经把帧内信息整合完之后,而不是让条件去干扰注意力本身的形状。图上第二处判别点是「零初始化」这三个字:f_r/f_o/V_n 刚接上时输出为零,于是模型在新结构下的初始行为与预训练时完全一致,训练不是从一个被破坏的模型开始。第 11 章表 4 的第三行量的正是这一个选择的代价。
来源:ArtiFixer: Enhancing and Extending 3D Reconstruction with Auto-Regressive Diffusion Models, Fig. 3, p3 · SIGGRAPH Conference Papers '26(ACM, Article No. 114, Pages 1–12) · © 2026 Copyright held by the owner/author(s) · Publication rights licensed to ACM · 所据 arXiv:2603.00492v2 适用 arXiv 非独占分发(非 CC)· 原样引用,未修改
4.3 参考视图怎么进来
除了上面两路,还有一路可选条件:干净的参考视图。它们同样过冻结的 VAE,但按图像逐张 patch 化、沿 batch 维度并排(不做时间压缩)[§4.1, p3]。然后每个 Transformer 块从目标 token 出发做一次交叉注意力:查询 Q 来自目标 token,键与值来自拼接后的参考 token,后者经由额外加的两条线性投影 K_n 与 V_n 映射过来,交叉注意力的输出再加回目标 token 上(沿用的是 Wan 2.1 的图像生视频变体那一套)[§4.1, p3]。PRoPE 只在这一处交叉注意力里用:Q 用目标的内外参,K_n/V_n 用参考视图的内外参[§4.1, p3]。f_r、f_o、V_n 三者都做零初始化,为了与预训练初始化兼容[§4.1, p3;Fig. 3 图注, p3]。
③推导(式 (1)):为什么相机光线不走 VAE。把 Plücker 光线图丢进 VAE 编码,等于让一个为自然图像训练的编码器去压缩一张六通道的几何图,它会先按图像统计去丢细节,再还回来一份失真的表示;更贵的是这一路会失去「输入渲染图整张全黑」时的可用性:VAE 的编码器对纯黑输入的输出是没有区分度的,而相机信息恰恰必须在完全没观测的区域仍然有效,否则模型连「该往哪个方向生成」都不知道。原文明确写了这个选择的两个收益:算力上比「用 VAE 编码 R 与 O」更省,而且在输入渲染整张为空时仍能提供相机控制[§4.1, p3]。PixelUnshuffle 在这里的角色是「对齐」:VAE 把图像在空间上压缩了若干倍,这两路条件要加在隐空间的 token 上,就必须先做同样的空间下采样;PixelUnshuffle 的做法是把下采样掉的空间位置搬进通道维,于是信息一个不丢,只是换了摆放方式。
③推导(式 (2)):为什么分成两步、而且顺序固定。三条信息在这里各有分工:T_s 是帧内注意力整合后的结果,f_r 那一支回答「相机在哪」,f_o 那一支回答「该在哪里生成内容」。把不透明度放在相机之后,等于让不透明度去调制一个已经带相机信息的表示;反过来先不透明度后相机,则相机信息会盖在「哪里有内容」这个判断上,在空区尤其危险(空区的相机信息是唯一有效的坐标,一旦被不透明度掩掉就失去方向)。另有一处容易被忽略的分工:式 (2) 里的 O 是细粒度的不透明度(逐像素保留),而第 5 章式 (3) 里用的 O_z 是max-pool 下采样后的版本(对齐隐空间)。这一份细粒度信息正是式 (3) 敢做下采样而不丢源信息的原因[§4.1, p4;§A, p12]。
④边界:这一套注入方式有一个前提,就是「不透明度与相机光线都能从初始重建里现渲染出来」。如果手头没有重建、只有一组照片,这两路信号都无从生成。另一处代价是 patch 尺寸固定为 (1, 2, 2)、且参考视图不做时间压缩,于是参考视图的数量直接决定交叉注意力的键值长度,原文在测试时用的参考视图数量是可调的(第 8 章会给出两套协议:匹配 Difix3D+ 协议时用 K = 6 张,其余实验用全部可用输入视图)[§5.1, p5]。
4.4 参考视图那一路的两个开关
参考视图是本篇四路条件里唯一「可有可无」的一路,它对输出质量的影响也是最小的(第 10 章表 6 会给量化)。但它有两个开关值得单独说清。
第一个开关是数量。训练时参考视图的数量在 0 到 12 之间均匀变化,测试时按协议取 6 张(对齐 Difix3D+)或者全部可用输入视图[§4.1, p4;§5.1, p5]。这个设计的有用之处在于它让「有几张参考」不再是隐含前提:如果训练时固定给 6 张,模型会把「交叉注意力里恰好有这么多键值」当成默认,推理时少了就会退化。第二个开关是它在注意力里的位置。参考 token 不参与自注意力,只作为交叉注意力的键与值,而查询来自目标 token;这样做的好处是参考视图之间不需要互相一致,它们只需要各自提供一份「干净的样子」[§4.1, p3]。
与这两个开关配套的是 PRoPE。交叉注意力本身是「内容对上内容」,它不知道参考视图是从哪个机位拍的;PRoPE 做的是把相机内外参当作相对位置编码施加进注意力,于是「参考视图里的第 i 个 token」与「目标视图里的第 j 个 token」之间的注意力权重会同时取决于内容与两机位的相对关系[§4.1, p3]。原文只在这一处交叉注意力里用 PRoPE,目标与参考各用自己一方的内外参[§4.1, p3]。注意 V_n 与 f_r、f_o 一样做零初始化,也就是这条通路刚接上时权重为零,训练从一个与预训练等价的状态出发[Fig. 3 图注, p3]。
5不透明度混合:源分布该反映「已经能渲染出什么」
5.1 三种起点,三次失败
大多数生成模型从高斯噪声出发,噪声再被迭代地变成隐空间的视频表示 z[§4.1, p4]。前人在这里有两种改法,各留下一个洞。
第一种改法是「留在噪声起点,把脏图拼进去」:条件挂在初始的退化渲染隐向量 z_deg 上,用通道拼接或者无分类器引导。结果是 z_enh 与它的退化版在语义上接近,但不一致仍然明显,在高瑕疵区域尤其突出[§4.1, p4;Fig. 4 图注, p4]。
第二种改法是「干脆从脏图出发」:不做噪声起点,直接拿 z_deg 当源分布。这条路抓住了一个正确的直觉:源分布应当反映「现在已经能渲染出什么」,一致性因此明显变好。但它在完全没观测的地方会模式坍缩:空区里可渲染的像素全黑,源分布就在零点塌成一个 Dirac 质量,模型失去了在那些地方外推的能力[§4.1, p4]。
5.2 本篇的改法:按不透明度在两者之间连续插值
要的东西被一句话说清了:在「已经看见的地方」用脏图当源,在「完全没看见的地方」用噪声当源,中间连续过渡。渲染出来的不透明度图正好提供了这个连续量。原文把 O 用 max-pool 下采样成 O_z 以对齐 z_deg 的隐空间尺寸,源分布取[§4.1, p4;§A, p12]:
O,它的灰度值直接决定该像素往哪一端靠:亮的地方靠近脏图,暗的地方靠近噪声。读这张图时把它当成一张逐像素的插值权重图,而不是一张遮罩。
来源:ArtiFixer: Enhancing and Extending 3D Reconstruction with Auto-Regressive Diffusion Models, Fig. 4, p4 · SIGGRAPH Conference Papers '26(ACM, Article No. 114, Pages 1–12) · © 2026 Copyright held by the owner/author(s) · Publication rights licensed to ACM · 所据 arXiv:2603.00492v2 适用 arXiv 非独占分发(非 CC)· 原样引用,未修改
5.3 这条式为什么和流匹配不冲突
换掉源分布这件事,本来是有风险的:如果它破坏了训练框架,前面所有设定都要重来。原文在补充材料的 §A 里正面把这个担心解决了[§A, p12]。先说清两个符号:O_z 是空间变化的下采样不透明度图,z_deg 是 VAE 编码后的退化渲染图;记 z_1 为干净目标的隐向量。训练时采一个全局标量 t,构造插值隐向量[§A, p12]:
目标速度是 v_t = z_1 − z_0[§A, p12]。关键的论证在这一句上:O_z 带来的空间变化全部被编码进了 z_0,因此它自动传播到 z_t 与目标速度 v_t,而没有传进那个标量时间 t。于是网络只需要接收 (z_t, t, cond) 三样,t 依旧是单个全局标量,和标准流匹配一模一样,不需要任何「按位置给不同时间步」的条件化[§A, p12]。另一处保证是损失函数的形式:条件流匹配损失对任意联合分布 q(z_0, z_1) 都成立,并不要求 z_0 是标准高斯;本篇把源样本换成混合分布,恰好落在这个「任意」里[§A, p12]。推理时则用同一套不透明度混合过程采 z_0,再从 t = 0 积分到 t = 1,用的还是同一个全局时间参数化[§A, p12]。
③推导:逐项拆式 (3)。O_z = 1 的像素(观测完整)取到 z_deg,源分布就是「已经能渲染出来的东西」,一致性由此被钉住;O_z = 0 的像素(毫无观测)取到 ε,源分布退回标准高斯,生成能力由此恢复;0 < O_z < 1 的像素(半观测,常见于视角边缘、遮挡缝隙)拿到两者的加权和,这是它比「二值掩码」强的地方:遮罩必须把半观测硬判成「有」或「没有」,而渲染出的不透明度天然是连续量,直接拿来当权重就行[§4.1, p4]。再说「为什么 max-pool 下采样不丢源信息」:O 被 max-pool 成了 O_z,粒度变粗了,但细粒度的那一份并没有消失,它由式 (2) 从另一条路带进了模型;两条路分工是「式 (2) 管细粒度、式 (3) 管源分布」[§4.1, p4]。最后是它与图像修补的关系:原文自己指出这条路在概念上接近 inpainting 那一族(已知区域低噪声、未知区域推向生成先验),差别在于用的是连续的不透明度信号而不是二值掩码[§4.1, p4]。
④边界:这条式的效果完全取决于 O 的质量。O 是从初始重建现渲染出来的,重建本身在哪些地方不可信,O 就会在哪些地方给出误导性的权重:比如一个被错误地填上高斯的空洞,O 会给出偏亮的值,于是模型在那一处不敢生成,宁可保留错的几何。第二处边界是「极度退化」:原文在局限里承认,当渲染条件缺失或极度退化时,输出会糊掉细节与文字、并出现轻微色偏[§E, p12]。第三处是补充材料 §B 给的量化:文本条件带来的增量在最稀疏的设定下最大(Mip-NeRF 360 三视角上 +0.14 dB),而且随着采集变密而变小(第 10 章表 6 会给全表),这说明条件的主力是那张脏图与不透明度,文本是辅助。
5.4 它与图像修补那一族的关系
原文自己指出这条路在概念上接近图像修补(inpainting)那一族:已知区域保持低噪声,未知区域推向生成先验[§4.1, p4]。这个类比值得展开,因为两者的差别正好落在整篇的设计上。
修补的做法通常需要一个掩码:掩码内的区域被替换成噪声或者被重新生成,掩码外原样保留。掩码是二值的,所以「部分可见」这种状态没法表达,只能硬判。自然图像里这类状态非常多:视角边缘、遮挡缝隙、运动模糊的边缘、被前景物体压住的背景,它们的不透明度既不是 1 也不是 0。本篇用的是连续信号:O_z 是从渲染里读出来的实数,这些半观测像素就自然落在插值的中间段,不需要任何阈值[§4.1, p4]。
第二处差别是「参考什么」。修补类方法(原文引的 Blended Diffusion、区域感知扩散、时间感知的像素条件修补等)通常以同一张图的其他区域或文本描述为条件,它们没有「另一个视角的观测」这一路信息;而本篇的条件里既有相机光线(几何位置)又有参考视图(别处的样子),于是「这里该长什么」不只是一个语义问题,还是一个几何问题。这一点在第 10 章的空区实验里被直接量出来:同样面对空区,纯图像方法的增幅不到半 dB,而本篇是 3.12 dB[Table 3, p6]。
6数据从哪来:把相机挑散,把空洞留大
6.1 目标不止是修瑕疵,还要长出内容
训练数据要服务一个明确的目标:不只是像前人那样把观测不足区域的瑕疵修掉,还要在完全没见过的区域生成说得通的内容[§4.1, p4]。为了训练出这个能力,光用现成的数据集是不够的,因为常规采集下的空洞太小、太碎,模型学不到「补一整片空区」这件事。原文因此自己造配对样本:从 DL3DV-10K 出发,用一套相机选择策略刻意制造高度稀疏的重建、并留下大片空白区域,逼模型去填补[§4.1, p4]。
6.2 相机怎么挑:先把两点推最远,再在两组里各挑一撮
策略是两级的。给定一组相机位姿(旋转与平移),先定义一个位姿间的距离:d_ij = θ_ij / π + λ_t ‖t_i − t_j‖₂ / r̄,其中 θ_ij ∈ [0, π] 是两个旋转之间的 SO(3) 测地角(弧度),r̄ = (1/N) Σ_k ‖t_k‖₂ 是场景里相机位置的平均 L2 范数,λ_t = 1[§4.1, p4]。这两个项的归一化不是装饰:旋转项被 π 除之后落在 [0, 1],平移项被平均半径除之后也大致在同一个量级,取 λ_t = 1 就意味着两者权重相等,原文对此的说法是「让两项处在同一个数量级上」[§4.1, p4]。
然后是分组与抽样。先找出距离最大的那一对相机 (P_1, P_2),用它们当种子建立两组 G_1、G_2;剩下的相机按离哪个种子更近归到哪一组;再在每一组内部按组内相机间距离挑出「最大的那 2 到 12 个」相机,用不同的稀疏度生成多份重建[§4.1, p4]。组内挑选用的是最远点采样(补充材料 §G 里给了完整的算法伪码),从种子相机出发,每次选一个「离当前已选集合最远」的相机,直到凑够 K 个[§G, p14]。
伪码:相机采样(原文 Algorithm 1)
ALGORITHM 1: CameraSampling
Input: Camera poses P, Selection count K, Distance function d
Output: Selected subsets S1 ⊂ G1 and S2 ⊂ G2
/* 1. Find global farthest camera pair */
(P1, P2) ← argmax_{Pi, Pj ∈ P} d(Pi, Pj)
/* 2. Cluster: Assign cameras to nearest seed camera */
G1 ← {P ∈ P | D(P, P1) ≤ D(P, P2)} ; G2 ← P \ G1
/* 3. Select Top-K points in EACH group */
foreach i ∈ {1, 2} do
S_i ← {P_i} // Start with the seed camera
while |S_i| < K and |S_i| < |G_i| do
/* Find pose maximizing distance to current selection */
P_next ← argmax_{P ∈ G_i \ S_i} min_{s ∈ S_i} D(P, s)
S_i ← S_i ∪ {P_next}
end
end
return S1, S2
这段伪码对应原文 p14 右栏的 Algorithm 1[§G, p14]。要注意它与正文的距离定义不完全一样:正文 §4.1 用的是归一化后的 θ_ij / π + λ_t ‖t_i − t_j‖₂ / r̄,而算法框里写的是 ‖R_i − R_j‖_F + ‖t_i − t_j‖₂(旋转用 Frobenius 范数、平移不归一化)。两处说的是同一件事的两个版本,正文那一版是为了让两个量级可比,算法框里给的是更直白的实现形式。
6.3 尺度对齐、文本生成,以及训练时故意挖掉的尾巴
重建侧还有两手准备。第一,把各份重建的尺度大致对齐,用的是预训练的公制深度估计器;第二,用一个视觉语言模型问场景描述,本篇用的是 Qwen3-VL-30B-A3B-Instruct[§4.1, p4;§G, p14]。提示词里有一条硬规定:不许描述相机运动,原文的说法是避免与相机光线条件纠缠(这句在补充材料里写得很直白:不要描述任何关于相机移动或机位角度的细节)[§G, p14]。生成的描述长度控制在 80 到 100 词[§G, p14]。重建本身用官方的 3DGUT 实现加 MCMC 采样,每份跑 10,000 次迭代、略少于 10 分钟(训练时用的重建是离线预先准备好的)[§G, p14]。
训练时还有一个刻意的动作。原文把配对数据构成批:每次采 N = 81 帧,配上对应的相机位姿、文本提示(以 10% 的概率丢弃)、以及数量在 0 到 12 之间均匀变化的参考视图[§4.1, p4]。然后是那句关键的:为了增强生成能力与视角可控性,把输入末尾的 K ≤ N 帧丢掉(K 随机选),丢的方式是同时把这几帧的 RGB 渲染与不透明度图清零、但保留 Plücker 光线图,逼模型仅凭提示、参考视图与相机条件去重建出真值[§4.1, p4]。这么做的含义是给模型造出了一块「真正的空区」:被清掉的帧在输入侧什么都不剩,模型只能靠生成把内容补上,而这正好是推理时在未观测区域要面对的情形。
③推导:为什么平移项要除以平均半径。按定义,‖t_i − t_j‖₂ 的量纲是「场景尺度」,一个室内场景与一个街区场景的这个数可以差一两百倍;而旋转项是弧度、永远落在 [0, π]。两者直接相加等于让平移项单向支配整个距离,于是「挑最远相机」会退化成「挑位移最大相机」,分组也就不再是「从两侧包夹场景」。除以 r̄ 之后平移项无量纲、且与旋转项同量级,λ_t = 1 才真的是「等权」。为什么丢掉末尾 K 帧而不是随机抽帧:随机抽帧会留下断续的观测,模型仍能从相邻帧插出来;丢连续的末尾若干帧,挡住的是一段完整的视角区间,模型必须从别处(提示、参考视图、相机光线)把这一段重建出来,这才是对「未观测区域」的忠实模拟。为什么参考视图数量要随机变化:测试时参考视图的数量是部署方决定的(本篇实验里既是 6 张也是「全部可用」),训练时让它均匀变化,模型就不会把某个特定数量当成隐含前提。
④边界:这套数据合成有一个绕不开的前提:真值来自 DL3DV-10K 的已有采集,所以造出来的空区永远长在「有真值可以对照」的场景里,模型学到的外推能力上限由这些场景的分布决定。第二处边界是尺度对齐这一步:它依赖一个预训练的单目公制深度估计器,估计器在哪类场景上不准,那一类场景的尺度就会错位。第三处是文本侧:描述由视觉语言模型生成、且被明确要求不提相机运动,于是文本这一路在「相机怎么动」上没有信息,它只提供场景语义(这一点在第 10 章表 6 的读数上得到印证:文本条件的收益很小)。
6.4 提示词模板里真正要紧的三条
补充材料 §G 把给视觉语言模型的提示词原文抄了一遍,里面有六条编号要求:描述主体(外观、动作、表情、环境)、绝不描述相机运动或机位角度、用简单直接的动词表达自然动作、引用视频里的细节(人物动作、衣着、背景)、把输出控制在 80 到 100 词、无论用户输入什么语言都必须用英文输出[§G, p14]。六条里对本篇真正要紧的是三条。
第一条是「不许提相机运动」。理由原文写得很直接:避免与相机光线条件纠缠[§G, p14]。这一条的理由是防止两路条件互相矛盾:相机信息已经由逐像素的 Plücker 光线图给出,如果文本里再说「镜头向左平移」,两者就会在同一个位置上给出两套指令,模型只能二选一。
第二条是词数上限。80 到 100 词大约对应一段两到三句话的描述,它只够说清「这是一个什么样的场景」,不够描述细节布局。这与第 10 章表 6 的读数是对得上的:文本条件在稀疏设定下值 0.14 dB、在密集设定下接近零,说明它承担的就是最粗的那一层语义[Table 6, p12]。
第三条是「多样本提示」的做法。原文为每个 DL3DV 场景生成描述时,会在不同的帧子集上分别提问,以此鼓励提示词的多样性[§G, p14]。这一条容易被忽略,但它直接影响训练数据的质量:同一个场景如果每次都用同一帧去问,模型看到的文本条件就退化成一句话配一堆不同视角,文本与相机的相关性反而会被学成噪声。
7把双向教师压成因果学生:连 ODE 初始化都省了
7.1 初始化:不做 ODE 轨迹,只盖一层掩码
把双向模型变成因果模型,第一步是怎么起手。前人的常规做法(Self Forcing、Self-Forcing++、Rolling Forcing 一系)需要先用教师生成一整套 ODE 轨迹数据集,再用它去初始化学生,原文明确说这一套要求更高、更麻烦[§4.2, p4]。本篇换了一个更省的做法:直接用教师的权重初始化因果模型,然后只盖一层块因果掩码,并按 Diffusion Forcing 的做法给每一帧输入加上不同水平的噪声扰动,其余输入与训练流程与 §4.1 完全一致[§4.2, p4]。
这一步的省法是有代价的,而原文把它量出来了。第 11 章表 4 的第三行就是「去掉初始化」的对照:17.58 的 PSNR 对全方法的 17.99,质量仍然有竞争力,但确实少了一点。原文的措辞是「我们的因果初始化方法不是必需的,模型仍会收敛到有竞争力的水平,但它提供了一个适度的提升」[§5.4, p7]。这句话值得记住,因为它是本篇少见的一处「诚实降格」:不做 ODE 初始化的收益被明确说成 modest,而不是包装成关键贡献。
7.2 自回归 rollout:顺序生成、KV 缓存,以及必须留着的 dropout
初始化之后,训练策略照着 Self Forcing 来:顺序地生成视频块,并以前面已经生成的块为条件(靠 KV 缓存实现)[§4.2, p4]。原文在这一步加了一个自己的保留项:继续沿用 §4.1 里的 dropout。理由写得很直接:否则相机控制与「从纯噪声生成」这两件事都会退化[§4.2, p4]。这里的逻辑与第 6 章末尾那个「丢掉末尾 K 帧」是同一套:训练时要让模型时不时面对「条件不足」的处境,否则它会把「输入里有渲染图」当成默认前提,一旦推理时条件变稀就崩。
把模型压成少步生成器用的是分布匹配蒸馏(DMD),原文的实验设成 N = 4 步[§4.2, p4]。这里埋了本卷第 12 章的一个伏笔:原文在同一句里补了一句,说在完全陌生的区域之外,步数常常可以再减、差别很小(详细读数在补充材料 §C)[§4.2, p4;§C, p12]。第 12 章的图 12-4 会把 1 到 4 步的取舍摆出来,而第 7 章的图 7-1 会把每一步对应的吞吐量列出来。
7.3 长视频与回灌三维:两条都可以从简
长视频这一条,原文选择了不做专门处理。前人(RELIC、以及按内外存对齐的那一系)依赖长时域训练去压制误差累积;原文说这套策略可以用在本篇上,但实测发现自己的条件信号(尤其是那张退化渲染图与参考视图)已经足够防止误差累积,于是训练时的帧数与 §4.1 保持一致,只在推理时用一个滚动的 KV 缓存[§4.2, p4]。这个做法的收益被写成了两条:训练收敛更快(同样的算力预算下能见到更多样的短视频),以及可以泛化到任意长度的视频[§4.2, p4]。
回灌三维这一条更简单。前人的做法需要渐进式蒸馏:在「生成新视图」与「重建三维」之间来回交替,训练时间的开销就出在这个循环上[§4.2, p4]。原文的做法是把这个循环拆掉:因为自回归模型能一次性、一致地生成任意多帧,所以先把所有想要的新视图一次生成完,再做一次标准的三维重建[§4.2, p4]。这一步是「自回归」这个选择带来的直接红利:它并没有优化蒸馏算法,而是根本不需要蒸馏。
7.4 70 倍提速是怎么算出来的
这张表是本章所有效率结论的原始读数。它把三个可以拧的旋钮摆成一张二维表:行是「骨干规模 × 卡数」,列是去噪步数,格子里是帧率。读它之前先记住一件事:表里的每一个数都是在同一块硬件上测的,所以行与行、列与列之间可以直接比[§5.4, p7]。
主文表 5 给的是这台机器与基座的对比(详细读数在第 8 章),而「70 倍」这个数是原文在表 5 的图注里写下的[Table 5 图注, p7;§5.4, p7]。
③复算:把 70 倍当场算一遍。以 14B 骨干为准:ArtiFixer(自回归、4 步、单卡)8.36 FPS,基座 Wan 2.1 T2V-14B 是 0.12 FPS,两者相除得 8.36 ÷ 0.12 = 69.7,四舍五入就是 70 倍[Table 5, p7]。以 1.3B 为准:34.38 ÷ 0.49 = 70.2,同样是 70 倍[Table 5, p7]。这个数取的是同骨干规模下自回归对双向的比值,没有拿最强的组合去比最弱的组合,两条骨干各自算出来都落在 70 附近,这个数是稳的。再补一个表 5 里没写成倍率但可以算的:ArtiFixer3D 直接由 3DGUT 渲染,268 FPS,是 1.3B 自回归(34.38 FPS)的 7.8 倍[Table 5, p7]。这三条一起看才能理解本篇的效率定位:它把生成式的速度从「每秒不到一帧」抬到了「每秒 8 到 34 帧」,但显式三维表示的渲染仍然比它快一个数量级,这正是第 13 章那条「仍显著慢于直接渲染」的来历。
④边界:这四条读数都建立在同一块硬件上(原文写的是单张 GB300 GPU,多卡档用四张)[§5.4, p7],换成别的卡,绝对帧率会变、倍率关系不一定保持。第二处边界是「少步数」并不是免费的:1 步虽然快,但空区的锐度与时间一致性会下降(补充材料 §C 的原文措辞是「会略有损失」),而这一损失在 ArtiFixer3D 与 ArtiFixer3D+ 变体里能被缓解,因为回灌三维之后,再生成时有了更强的条件[§C, p12]。第三处边界是长视频:不做长时域训练意味着推理时长度不受限,但这不等于长序列上的误差不累积,原文给的理由是条件信号足够强,而这要求输入渲染图与参考视图在长序列上一直可用;纯文生视频那种场景下,这个理由不成立(第 11 章的图 11-3 会看到质量回落到基座水平)。
7.5 DMD 是什么,为什么它能把步数压下来
少步生成器是这一类流水线能否落地的关键,值得把它的原理说清。普通的扩散/流匹配采样需要几十步数值积分,每一步都要跑一次完整网络;分布匹配蒸馏(DMD)换了一种监督方式:它不再要求学生的某一步去逼近教师的某一步,而是要求学生最终输出的分布去逼近真值数据的分布[§4.2, p4]。具体做法是引入一个「假评分函数」去估计学生当前输出的分布,再用两者的差去更新生成器。因为监督信号落在「输出的分布」而不是「轨迹」上,学生就获得了走一条完全不同的短路径的自由,几步之内到终点也不会被惩罚。
这解释了第 8 章表 5 里那个 8.36 FPS 是怎么来的:把 4 步的去噪压进一个自回归模型,单帧的成本从「教师的一次完整双向前向」变成「学生的 4 次块因果前向」,再乘上 KV 缓存省下的重复计算。也解释了原文为什么敢说「4 步在完全陌生的区域之外常常可以再减」[§4.2, p4]:DMD 让「步数」变成了一个可以连续交换的参数,而不是模型结构的一部分。
代价在第 11 章表 4 的第三行:DMD 需要一个足够好的起点,所以本篇用教师的权重做零成本初始化;把初始化去掉(也就是表里第三个开关那一行),PSNR 从 17.99 落到 17.58[Table 4, p7]。换句话说,训练日程里那 5,000 步因果初始化是「给 DMD 铺路」的那一段,它买到的是收敛的稳定性,而不是最终质量的天花板。
8主战场:两个数据集上把 PSNR 抬 2 dB
8.1 训练与测试的实际配置
先把成本说清楚。实现用 PyTorch,训练跑在 128 张 H100 上,每卡批大小为 1(合计 128),用 FlashAttention-3 加速[§5.1, p5]。日程分三段:主实验里把 §4.1 的双向模型微调 15,000 次迭代(AdamW,学习率 1 × 10⁻⁵);然后用同样的学习率把因果模型初始化 5,000 次迭代;再做 2,000 次自回归 rollout 与 DMD 训练,生成器学习率 2 × 10⁻⁶、假评分函数学习率 4 × 10⁻⁷,总计约 15,000 GPU 小时[§5.1, p5]。消融实验用一套截断日程(10,000 + 2,000 + 600 次迭代,跑在 64 张卡上,约 4,000 GPU 小时)以压低成本[§5.1, p5]。初始重建一律用 3DGUT 加 MCMC 稠密化[§5.1, p5]。
测试时的参考视图数量有两套协议。与 Difix3D+ 协议对齐的实验(表 1)用 K = 6 张均匀采样的参考视图;其余实验(表 2 与表 3)用全部可用输入视图[§5.1, p5]。提示词由视觉语言模型生成(第 6 章那套),基线一律按各自的标准协议评测[§5.1, p5]。这几行配置不是流水账,它决定后面每一张表能不能横向比较:表 1 与别人的 6 视图协议对齐,表 2/3 用的是本篇能给的全部条件,所以表 2/3 的绝对数值不该与别人的 6 视图设置直接混谈。
8.2 主表:四个指标、十二个基线
数据集与基线。对比跑在 Nerfbusters 与 DL3DV(用 Difix3D+ 提供的切分)以及 Mip-NeRF 360(用 ReconFusion 提出、后续工作沿用的切分)上[§5.2, p5]。基线覆盖面很宽:原版 3DGS 与 2DGS、NeRF 变体(Zip-NeRF、Nerfacto)、非生成的稀疏重建方法、以及其他基于扩散的方法(FlowR、CAT3D、ZeroNVS、Nerfbusters、GANeRF、NeRFLiX、Difix3D/Difix3D+、GenFusion、GSFixer 等)[§5.2, p5]。指标是 PSNR、SSIM、LPIPS、FID,Nerfbusters 与 DL3DV 上沿用 Difix3D+ 的协议与实现[§5.2, p5]。
③复算:把「2 dB」当场拆开。 Nerfbusters 一侧:本篇最强的 ArtiFixer3D 是 20.24,前最好的 Difix3D+(3DGS)是 18.51,差 +1.73 dB[Table 1, p5]。DL3DV 一侧:本篇的 ArtiFixer3D 是 20.14,前最好的 Difix3D+(3DGS)是 17.99,差 +2.15 dB[Table 1, p5]。两处一升一降,平均下来正是图注说的 2 dB 上下。再看三把尺子的分工:PSNR 与 SSIM 由 ArtiFixer3D 拿(20.24/0.729 与 20.14/0.705),LPIPS 与 FID 由 ArtiFixer 拿(0.254/37.78 与 0.231/20.85),ArtiFixer3D+ 落在两者中间(20.12/0.713/0.264/41.17 与 20.06/0.686/0.242/22.61)[Table 1, p5]。这个格局是全篇三个变体名的意义所在:这是三个变体在精度、感知锐度、多视角一致性之间给出的三档取舍。最后一处要算的是 FID 的倍率:DL3DV 上 Difix3D+(3DGS)的 40.86 落到本篇 ArtiFixer 的 20.85,降低到原来的 51%[Table 1, p5]。
8.3 速度那一栏
速度这一栏被原文单独拆出来做成一张表,放在主表旁边。理由很直接:主表量的是质量,而本篇的卖点之一是「质量上去了、速度也上去了」,两件事必须并排看才成立[§5.4, p7]。
③复算:把这条阶梯的四段比值算出来。 双向 14B → 双向 1.3B:0.49 ÷ 0.12 = 4.1 倍(缩小骨干的收益)[Table 5, p7]。双向 1.3B → 自回归 1.3B:34.38 ÷ 0.49 = 70.2 倍(因果蒸馏的收益)[Table 5, p7]。自回归 1.3B → 直接渲染:268 ÷ 34.38 = 7.8 倍(回到显式三维表示的收益)[Table 5, p7]。三个数乘起来:4.1 × 70.2 × 7.8 ≈ 2,245 倍,也就是从 0.12 到 268 的总跨度[Table 5, p7]。三个数乘起来,得到的是本篇的效率定位:它在生成式这一档里是最快的,但离「直接把三维表示渲一遍」还有一个数量级。
④边界:表 1 的两处口径要特别注意。第一,Nerfbusters 与 DL3DV 的评测沿用 Difix3D+ 的协议与实现,测试时只给 6 张参考视图[§5.1, p5];本篇的模型能力不止于此,但这张表为了可比性把条件限制在同一水平。第二,ArtiFixer3D 与 ArtiFixer3D+ 在这张表里都需要额外一步(前者要跑三维重建,后者还要再跑一遍生成器),表里没有给这两步的耗时,只给了生成与渲染的帧率[Table 5, p7]。第三处边界是基线本身的口径:表 1 里 Difix3D/Difix3D+ 各出现两次(分别以 Nerfacto 与 3DGS 为底),这两行是同一种方法的两种底层重建,读的时候不要当成两个独立竞争者[Table 1, p5]。
8.4 十二个基线各自代表什么
原文在 §5.2 列基线的顺序不是随手排的,它按的是技术路线[§5.2, p5]。第一组是显式三维表示:原版 3DGS 与 2DGS,它们是「不修」的参照:表 1 里 Nerfbusters 一侧的 17.66 与 DL3DV 一侧的 17.18,就是本篇要抬高的那个底[Table 1, p5]。第二组是 NeRF 及其加速变体:Zip-NeRF、Nerfacto,在 Mip-NeRF 360 的三档视角下它们分别落在 12.77 与(作为底座的)17.29 一档,代表「不用生成先验能做到哪」[Table 1, p5;Table 2, p6]。
第三组是非生成的稀疏重建方法:DNGaussian、FSGS、FreeNeRF、SimpleNeRF、ZeroNVS、DiffusioNeRF 等,它们用深度/法向先验、正则化或前馈网络去补观测不足,代表「用几何先验做修补」这一路的天花板[§5.2, p5]。第四组是生成式:FlowR、CAT3D、ReconFusion、GenFusion、GSFixer、Nerfbusters、GANeRF、NeRFLiX 以及 Difix3D/Difix3D+,它们代表「用生成先验做修补」这一路,也是本篇真正要超过的那一组[§5.2, p5]。第五组只有两个:Gen3C 与 Fixer,前者是「三维当条件直接生成」,后者是 NVIDIA 自己的确定性修补模型,它们在第 10 章的空区实验里会再次出现[§5.2, p5;§5.3, p6]。
把这五组与表 1 的数值对上,本篇的定位就清楚了:第一、二组在 17 到 18 dB 一带打转(3DGS 17.66、Nerfacto 17.29、Zip-NeRF 12.77 那一档更低),第三、四组把上界抬到 18.5 上下(Difix3D+ 3DGS 18.51),而第四组里最强的那一档与 20 dB 之间隔着近 1.5 dB,这一段就是本篇从 19.83 到 20.24 占住的位置[Table 1, p5]。
9Mip-NeRF 360 三档视角:14 个基线,每一格都赢
9.1 同一张表里的三档难度
Mip-NeRF 360 这边的评价方式与上一章不同:不算单一设置,而是按输入的稀疏程度分三档(3 视角、6 视角、9 视角),每档都报 PSNR、SSIM、LPIPS 三列,实现沿用 GenFusion 的那一套[§5.2, p5]。这三档的难度差别很大,从表的头一列就能看出来:同一个方法在 3 视角与 9 视角上的 PSNR 可以差三四 dB,所以任何「在 Mip-NeRF 360 上达到某某 dB」的说法,不说明是几视角就没有意义。
③复算:逐档算与次好方法的差。 3 视角:本篇 ArtiFixer3D+ 17.51,次好的 CAT3D 16.62,差 +0.89 dB;往后 GSFixer 15.61、GenFusion 15.29[Table 2, p6]。6 视角:本篇 ArtiFixer3D+ 18.95,CAT3D 17.72,差 +1.23 dB[Table 2, p6]。9 视角:本篇 ArtiFixer3D 20.24,CAT3D 18.67,差 +1.57 dB(ArtiFixer3D+ 的 20.16 则差 +1.49 dB)[Table 2, p6]。三档的差值是递增的:0.89 → 1.23 → 1.57 dB。这个趋势值得注意,因为它与直觉相反:通常方法与基线在观测变多时会趋同(大家都能看见更多,差距被抹平),这里是差距反而拉大。原文没有专门解释这一点,但从三个变体的构成可以推出来:ArtiFixer3D 与 ArtiFixer3D+ 都把生成结果回灌进了三维表示,观测越多,回灌得到的多视角约束就越强,于是它们在 9 视角上的收益反而更大。
9.2 把骨干缩到 1.3B 之后还剩多少
接下来要回答的是「这些成绩有多少靠方法、有多少靠大骨干」。原文的做法是把整条流水线换到一个十四分之一大的骨干上重训一遍,再用同一套指标重测,于是两行之间的差就是「容量」这一项的价格[§D, p12]。
③复算:先把「容量值多少」算出来。 3 视角:17.51 − 16.60 = 1.31 dB;6 视角:18.95 − 18.04 = 0.91 dB;9 视角:20.16 − 19.44 = 0.72 dB[Table 8, p13]。三档的容量差值同样是递减的(1.31 → 0.91 → 0.72),方向与第 9.1 节那组差值正好相反:观测越密,靠参数换来的增益越小,靠方法换来的增益越大。再把 1.3B 与基线比一次:6 视角 18.04 对 CAT3D 17.72,+0.32 dB;9 视角 19.44 对 CAT3D 18.67,+0.77 dB[Table 8, p13]。于是可以给出一句精确的结论:把骨干缩到 1.3B 之后,本篇在 3 视角上退到与 CAT3D 持平,在 6/9 视角上仍然领先,而参数只有 GenFusion 的 1.4B、GSFixer 的 5B、Gen3C 的 7B 里最小的那一档[§D, p12]。
④边界:表 2 与表 8 有一个共同的比较前提不能忽略:这两张表里的本篇结果都用了全部可用输入视图作为参考视图,而 Mip-NeRF 360 的评测基线里有的方法并不接受参考视图这一路条件[§5.1, p5]。换句话说,这两张表里的「+0.89 到 +1.57 dB」是在本篇条件更宽的情况下取得的,它与第 8 章表 1 那种严格对齐协议的结果不是一回事。第二处边界是 SSIM 与 LPIPS 的方向:本篇在 PSNR 与 SSIM 上领先稳定,但 LPIPS 在 1.3B 那一档已经和 CAT3D 很接近(3 视角 0.486 对 0.515),领先幅度明显小于 PSNR,说明感知锐度这一维的余量没有精度那一维厚。第三处是 3 视角这一档本身:它是全表最难的一档,也正是本篇在 1.3B 下唯一被追平的一格,读「每一格都赢」这句话时要把 14B 与 1.3B 分开:14B 每格都赢,1.3B 在 3 视角上只是打平[Table 8, p13]。
9.3 三档视角难在哪
为什么这一张表要分三档报,而不是报一个平均数。看基线在同一行上的走势就明白了:Zip-NeRF 从 3 视角的 12.77 到 9 视角的 14.30,涨了 1.53 dB;3DGS 从 13.06 涨到 16.79,涨了 3.73 dB[Table 2, p6]。同一方法在不同视角数下的差距,比不同方法在同一档下的差距还大,所以「哪个方法更好」这个问题必须带上视角数才成立。
三档的难度来源不一样。3 视角难的是一半以上的区域根本没被拍到,模型必须在几乎无约束的情况下外推,这一档的绝对数值最低(全表起点 11.05)、方差也最大。6 视角是一个折中档:大部分表面至少被看到一次,剩下的是视角之间的缝隙与遮挡区,这一档最能反映「修瑕疵」的能力。9 视角最难的是「不许带坏」:观测几乎覆盖了可见表面,模型的自由度其实很小,它在这一点上做得好不好,取决于它会不会把已经正确的像素改坏。
这条分档逻辑解释了第 9.1 节那个反直觉的趋势。本篇的三档差值递增(0.89 → 1.23 → 1.57 dB),而容量那一项的差值递减(1.31 → 0.91 → 0.72 dB)。两者合起来读:观测越多,「模型该不该改动」这件事越重要,而这件事靠的是方法(源分布选得对不对、条件注得够不够强),不是骨干容量。所以本篇在 9 视角上相对基线的裕度最大,而在骨干缩小之后 3 视角那一格最先被追平,这两件事是同一枚硬币的两面[Table 2, p6;Table 8, p13]。
10空区生成:把「洞」补成内容
10.1 为什么这一组实验才是主战场
前两章量的是「修得好不好」,这一章量的是「补得出来吗」。原文的说法是:前人的目标是把观测不足区域的瑕疵修掉,而本篇还要在完全没见过的区域生成说得通的内容[§4.1, p4]。要证明这一件事,评测设置必须先把「洞」造出来:本篇沿用补充材料 §G 的稀疏重建协议处理 DL3DV 场景,刻意造出大量「洞」,再看谁能把它们补成与既有观测一致的内容[§5.3, p6]。基线在这一组里也换了:不再是十二个,而是与本篇最相关的少数几个:3DGUT(作为本篇的初始表示)、经 Difix3D+ 与 Fixer 代表的图像扩散方法、以及建立在双向视频模型上的 Gen3C 与 GenFusion[§5.3, p6]。
③复算:把「近 3 dB」算准,再看它由谁贡献。 ArtiFixer3D+ 20.15 对 GenFusion 17.03 = +3.12 dB;最弱的变体 ArtiFixer 19.75 对 17.03 = +2.72 dB;ArtiFixer3D 19.92 对 17.03 = +2.89 dB[Table 3, p6]。三个变体都落在 +2.7 到 +3.1 dB 之间,所以图注那句「近 3 dB」是对最保守那一档的描述。再算一个更能说明问题的:本篇的 PSNR 相对初始表示 3DGUT 的提升是 20.15 − 16.12 = +4.03 dB[Table 3, p6],也就是说生成器把「初始重建有多差」这件事整个补回来了,还往外多推了 4 dB。而基线里最强的一档 Difix3D(3DGS)只到 16.60,比初始表示 3DGUT 的 16.12 只高 0.48 dB[Table 3, p6]。这一比就是本篇与「修图式方法」在空区上的本质差别:修图式方法在同一张图里只能动动颜色与纹理,幅度不到半 dB;而本篇能往里填本来不存在的内容。
10.2 三个变体在图上差在哪
数字上的名次互换,在图上是什么样子,这张图给的就是答案。它把同一处高瑕疵区域在三个变体下的输出并排摆开,看的是同一帧里的瑕疵各自被怎么处理,而不是清晰度的高低[Fig. 5 图注, p6]。
③推导:为什么走一遍三维会把「瞬时瑕疵」压掉,又为什么它一定要牺牲锐度。回灌三维那一步做的是多视角一致性的强行对齐:把生成出来的几十上百张新视图放在一起做重建,只要某一帧与其余帧不一致,它在拟合里就会被当成离群值压下去。这解释了中间那一格为什么更稳:上一格(ArtiFixer)是逐帧独立生成的,任一帧的抖动都是「本帧的合法输出」;而这一格(ArtiFixer3D)的每一帧都要与其它帧一起成立,抖动就变成了约束下的残差,只能被抹掉。锐度的损失来自同一个过程的反面:三维表示用一组各向同性/各向异性高斯去承载细节,高频纹理在拟合中会被平均掉,于是中间那一格看起来会「软」一点。第三格把锐度找回来的做法很直接:在已经一致的几何上再跑一遍生成器,这一次的条件比第一次更强(脏渲染图换成了干净的重建),所以补细节的难度更低。
注意版面口径:原文的 Fig. 5 与表 4 同在 p7,Fig. 5 排在右栏(图注 y=502.7)、表 4 在左栏;本页按归属章把它挪到第 10 章,图注文字与读数一概未改。
10.3 文本提示到底帮了多少
最后要量的是一项容易被高估的条件:文本提示。本篇有四路条件(脏渲染图、不透明度、相机光线、参考视图),文本排在最后一位;这张表用五个不同稀疏度的设定把它的分量单独量了出来[§B, p12]。
③复算:把这五行的差值与它们的稀疏度对起来看。 从最稀疏到最稠密依次是:Mip-NeRF 360 三视角(+0.14)> 6 视角(+0.07)> 9 视角(+0.03)≥ DL3DV(+0.02)> Nerfbusters(−0.07)[Table 6, p12]。五档里只有前两档的收益超过 0.05 dB,后三档基本可以当成噪声(差值小于 0.1 dB 在 PSNR 上通常不构成有意义的分辨)。这说明文本这一路在本篇的作用是「稀疏兜底」而不是「普遍提升」,也解释了 §G 里为什么要把提示词控制在 80 到 100 词、并且禁用相机运动描述:它只需要提供最粗的场景语义,多给的信息反而会与相机条件打架[§G, p14]。
④边界:这一组的强结论有一个直接的适用范围。评测用的是自己造的稀疏协议(§G),洞的大小与分布由相机采样策略决定[§5.3, p6]。换成自然采集里的洞(更小、更碎、往往贴着物体边界)时,落差不一定有这么大,因为那些地方的失败模式更接近第 8 章量过的「修瑕疵」。第二处边界与图 10-1 的 FID 有关:FID 极低说明生成分布接近真图,但它不度量「这一块内容与场景其余部分在语义上是否自洽」:一个逻辑上说不通但看起来像照片的东西,FID 给不出惩罚。第三处是基线的公平性:这一组里 Fixer 与 Difix3D+ 都是确定性条件的方法(直接吃渲染图、不做混合),它们在空区失败是结构性的,并不是实现没调好,原文对这一点写得很直白[§5.3, p6;§4.1, p4]。
10.4 人造空洞与自然空洞
这一章的落差(3.12 dB)建立在一个自己造的稀疏协议上,所以有必要说清这个协议造出来的是什么样的空洞[§5.3, p6]。相机采样策略决定了空洞的形态:先在整批相机里挑出距离最远的一对当种子,把其余相机分成两组,再在每组内部做最远点采样、只留 2 到 12 个[§4.1, p4;§G, p14]。这套做法的结果是「成片地缺」:两组相机各自从一个方向看向场景,它们中间那一片(也就是场景里「背对两组相机」的区域)没有任何视角覆盖,于是空洞是一整块连续的、有明确边界的区域。
自然采集里的空洞不长这样。真实拍摄中相机的移动通常是连续的,缺的不是一整块,而是许多小块:物体边缘的细缝、被前景挡住的背景、快速移动造成的运动模糊区、以及曝光不足或过曝导致重建失败的斑块。这些空洞的共同点是面积小、边界碎、周围全是强观测,模型处理它们需要的其实是「修补」而不是「外推」,而这正好落在前人方法的强项区。读这一章时要把这个适用范围记在心上:3.12 dB 是「成片缺」这个设定下的落差,换成「碎块缺」,落差会缩小,因为那时前人的确定性修补也够用。这条边界不削弱结论:本篇要证明的是「能补出来」,而这件事只有在成片缺的地方才能被检验出来。
11消融四行、条件剥离、模型缩到 1.3B
11.1 四行消融:哪一项最值钱
四个设计选择被摆在同一张表上比:把「从渲染出发」换成「通道拼接」、把「不透明度混合」去掉、把「因果初始化」去掉,以及三者齐备的全方法[§5.4, p7]。
③复算:逐行算差值,看每一项值多少。 第一行「通道拼接」PSNR 14.52;第二行「不做不透明度混合」17.34,比它高 +2.82 dB;第三行「不做初始化」17.58;第四行全方法 17.99,比第三行高 +0.41 dB[Table 4, p7]。三个数各自对应一个结论。第一,「从渲染出发」这一项最值钱:14.52 到 17.34 之间的 2.82 dB,换来的只是「源分布从噪声改成脏图」这一件事,它比后面所有改进加起来都大,这就是图注为什么用「至关重要」这三个字。第二,「不透明度混合」这一项值 +0.65 dB(17.34 → 17.99 中除去初始化那份的那一段)[Table 4, p7]。第三,「因果初始化」值 +0.41 dB,而原文对它的定性是「不是必需,但有适度提升」[§5.4, p7]。再看 FID 那一列,结论会变一个方向:从第一行到第四行是 87.551 → 87.058 → 74.924 → 69.43,中间那一级的落差(12.13)比第二级落差(5.49)大,也就是说「不做不透明度混合」这一行与「不做初始化」这一行在 FID 上的排序,与在 PSNR 上的排序并不一致[Table 4, p7]。这个不一致本身是有信息的:不透明度混合主要影响「像素对不对」(PSNR),而初始化影响的是「整体分布像不像」(FID)。
③推导:为什么「从噪声出发 + 拼接」会输这么多。答案在第 5 章已经铺好了:从噪声出发的模型,它的源分布与目标分布之间隔着一整段生成路径,而这段路径上没有「观测」这个锚;把脏图当条件拼进去,只能算是个软提示(模型可以选择不听)。直接从脏图出发,等于把源分布搬到「已经能渲染出来的东西」上,一致性因此成了默认行为,而不是需要学出来的行为[§4.1, p4]。这也解释了为什么这一项的值高达 2.82 dB,而其余两项只有零点几:前者改的是问题的提法,后两者改的是提法之下的实现细节。
11.2 把条件一层层剥掉
表 4 动的是方法内部的开关,这一节动的是输入。原文的做法是逐级剥离条件信号,看输出还剩什么[§5.4, p7]。
③推导:只剩参考视图时,模型靠什么把结构放对。答案在条件的两条分工线上。一条是相机光线:Plücker 光线图给的是「这个像素对应哪条空间射线」,它完全由相机位姿决定,与场景里有没有东西无关,所以即便渲染图整张清零,这一路信息仍然是完整的(这也正是第 6 章那个「清零 RGB 与不透明度、保留 raymap」的训练动作要保住的东西)[§4.1, p4]。另一条是参考视图的交叉注意力:PRoPE 把参考机位与目标机位的相对关系编进了注意力,于是「参考视图里那个物体」会被放到「沿着这条射线该出现的位置」[§4.1, p3]。两条线合起来,模型得到的是「骨架」:东西在哪、朝向如何、互相怎么遮挡。它拿不到的是「皮」:具体纹理、边缘的细节、材质的高光,这些信息只存在于那张被拿掉的渲染图里,所以图注说的是保真度下降而不是结构丢失。
再往下剥一层,把参考视图也去掉,只剩文本提示,就退回普通的文生视频生成[§5.4, p7]。原文对这一档的定性很克制:输出质量与基座 Wan 2.1 模型相当[§5.4, p7]。
③推导:为什么加了这么多几何条件,通用生成能力还没有被牺牲掉。这里的机制与「条件注入的位置」有关:相机与不透明度是在每个 Transformer 块里、于自注意力与层归一化之后以「加法」的形式注入的(式 (1)(2)),而文本提示走的是原本就有的交叉注意力那一路[§4.1, p3]。加法注入的一个性质是它不改变注意力的形状:模型可以在需要时忽略这一路(权重学成接近零就退化成原始行为),而不会因为多了一路条件就没法正常工作。零初始化是这条性质的前提:f_r/f_o/V_n 刚接上时输出为零,模型在最开始的那一刻与基座完全等价,之后的训练是「逐步学会使用条件」而不是「在已有能力上做取舍」[Fig. 3 图注, p3]。这张图给出的证据很干净:在把几何条件全部拿掉之后,输出质量落在基座水平线上,说明条件是被「加上去」的,而不是被「替换进去」的。
11.3 把骨干缩到 1.3B
最后一组消融要解开的是「多少功劳来自方法、多少来自骨干容量」。原文把整条流水线换到 Wan 2.1 T2V-1.3B 上重训一遍,报 ArtiFixer3D+ 的结果[§D, p12]。
③复算:算三笔账。第一笔,1.3B 与基线的差:19.04 对 GenFusion 的 17.03 是 +2.01 dB,对 Gen3C 的 15.50 是 +3.54 dB[Table 9, p14]。第二笔,1.3B 与 14B 的差:20.15 − 19.04 = 1.11 dB;FID 13.91 对 22.3,相对差 60%[Table 9, p14]。第三笔,也是原文在 §D 里主动摆出来的一张对照表:GenFusion 的骨干是 1.4B、GSFixer 是 5B、Gen3C 是 7B,而本篇的 1.3B 变体是这几家里最小的[§D, p12]。把三笔账合起来,可得到一句精确的结论:用最小的骨干,拿到比它们高一到三 dB 的结果;代价是比自己的 14B 版本少 1.11 dB。这就是「方法贡献」与「容量贡献」被分开之后的样子。
④边界:这一章把本篇的失败情形收齐了,一共三类,都可以在读数上定位。第一类,条件全部剥到只剩文本时:输出质量回落到基座水平,模型不再受场景约束,生成的内容与输入场景无关(图 11-3)[§5.4, p7]。第二类,只剩参考视图、没有初始渲染时:保真度下降,只剩高层结构(图 11-2)[Fig. 6 图注, p7]。第三类,把去噪步数压到 1 步时:空区的锐度与时间一致性会下降(补充材料 §C 的原文措辞是「略有损失」);这一损失能从两个方向缓解,一是重访已探索过的区域(回灌三维之后条件更强),二是提高步数[§C, p12;§4.2, p4]。三类之外还有一处需要点明:表 4 的第一行告诉我们,一旦把「从渲染出发」换成「通道拼接」,PSNR 会掉到 14.52,比某些基线还低[Table 4, p7]。这不是一个失败情形,而是一个「方法被拆坏之后的样子」,它在本章的作用是标出哪一项设计不能动。
11.4 两套训练日程的差
这一章的四行消融用的是截断日程,不是主实验的日程,这一点在读表时不能忽略。主实验是 15,000 + 5,000 + 2,000 次迭代、128 张卡、约 15,000 GPU 小时;消融用的是 10,000 + 2,000 + 600 次迭代、64 张卡、约 4,000 GPU 小时[§5.1, p5]。三段日程的作用各不相同:第一段把双向教师训到会洗图接内容,第二段把教师的能力搬进因果结构,第三段做 rollout 与 DMD 把它压成少步生成器。消融之所以能截断,是因为它比较的是四行之间的相对高低,而不是与主实验的绝对值对齐。
由此可以推出一处读法:消融表里的绝对数值(14.52 到 17.99)低于主表里同数据集上的数值(Mip-NeRF 360 那一组主表里是三档视角分别报的,而消融表给的是一个平均口径),两者不该互相折算。另一处是「全方法」那一行的定位:它的 17.99 是同一套截断日程下的最好结果,说明四行比较是公平的;如果它反而低于某个被截断的行,就说明日程本身出了问题。这张表里没有出现这种情况,四行的排序与设计预期一致[Table 4, p7]。
12定性六场景 × 四基线,以及三种失败
12.1 DL3DV 上的对照墙
前面四章都是数字,这一节把数字对应的画面摆出来。原文在 DL3DV 上摆了一张对照墙:上方两行是与 GenFusion、Gen3C 这类建立在双向视频模型上的方法对比,下方两行是与 Difix3D+、Fixer 这类建立在图像模型上的方法对比[Fig. 8 图注, p10]。
12.2 Mip-NeRF 360 与 Nerfbusters 上的两张
另外两个数据集上的可视化在这一节一次看完。先说最难的 Mip-NeRF 360 三视角切分:这一档的输入渲染本身就常常是错的,所以看的不是「谁更锐」,而是「谁能把错的东西纠回来」[Fig. 9 图注, p11]。
换到 Nerfbusters 上,同一套结论换一种画法。这个数据集的失败集中在物体表面与背景的交界处(薄结构、悬空几何、以及被遮挡的底面),所以这一张的看点从「空区里长没长出东西」挪到「交界处有没有被糊平」:糊平了就说明模型在拿先验去覆盖观测,而正确的做法是只在没有观测的地方动[Fig. 10 图注, p11]。
12.3 步数:1 步到 4 步
步数这个旋钮值得单独看一眼图,因为表 7 只给了它的代价,没给它的收益。同一个场景、同一套条件,只改去噪步数,图上能看出空区那块从「软」到「实」的过程[Fig. 11 图注, p13]。
12.4 两个额外的泛化测试
两张补充材料里的表在这里收尾,它们回答的是两个不同的泛化问题。
最后一个横切面换了一把完全不同的尺子。前六张图与表量的都是「与真值有多近」,这一张量的是方法自己前后是否自洽:MEt3R 拿相邻视角的输出互相重投影,看它们对不对得上,两个骨干分别用 MASt3R 的深度与 RAFT 的光流做重投影与回卷[§D, p12;Table 11 图注, p14]。它不回答「补出来的内容对不对」,只回答「同一份内容在不同视角下是不是同一个东西」,所以它与前面所有表都是互补关系。
③复算:两笔账。Tanks and Temples 那一笔:本篇 14.75 对 ReconX 14.28 是 +0.47 dB,对 3DGS 的 9.57 是 +5.18 dB;SSIM 从 3DGS 的 0.108 抬到 0.464,是四倍多[Table 10, p14]。多视角一致性那一笔:本篇最好的一档 0.0646(MASt3R 列)对 Gen3C 的 0.0766,相对低 15.7%;对 Difix3D+ 的 0.0974,相对低 33.7%;对 Fixer 的 0.1288,相对低 49.8%[Table 11, p14]。把这两笔与前面几章合起来看,本篇的证据链是这样排的:主战场上 PSNR 高 1.7 到 2.2 dB(第 8 章)、三档视角每格都赢(第 9 章)、空区高 3.12 dB(第 10 章)、消融拆出每一项的贡献(第 11 章)、最后在「换数据集」与「一致性」两个横切面上各自再赢一次(本章)。
④边界:这一章的三种失败模式属于基线,不是本篇。原文在图 12-1 的图注里把它们点得很具体:GenFusion 的问题是「一次 16 帧 + 迭代蒸馏」导致的空区模糊;Gen3C 的问题是三种(不尊重源内容、几何不正确、色偏);Fixer 与 Difix3D+ 的问题是「不做不透明度混合」导致的结构性补不出内容[Fig. 8 图注, p10]。本篇自己在这些图上也有可见的差距,第 13 章会逐条列出来。另一处需要点明的边界是「图 12-5 与图 12-6 的结论范围」:Tanks and Temples 用的是二视图设置,这个设置下真值本身也是从少数视图重建出来的,读数的绝对水平不能与稠密采集的实验直接比;多视角一致性表测的是方法自身输出在相邻视角之间是否自洽,它不回答「补出来的内容对不对」(一个始终输出同一张错误图的方法,一致性会很好)[Table 10, p14;Table 11, p14]。
12.6 三条指标线交叉着看
把整篇的读数按指标重新拉一条线,会看到三个变体的排序在不同尺子上并不一致。PSNR 与 SSIM 这一条线上:ArtiFixer3D 最高(表 1 的 20.24/0.729 与 20.14/0.705;表 2 的 9 视角 20.24)[Table 1, p5;Table 2, p6]。LPIPS 与 FID 这一条线上:ArtiFixer 最高(表 1 的 0.254/37.78 与 0.231/20.85),ArtiFixer3D+ 居中[Table 1, p5]。多视角一致性这一条线上:又是 ArtiFixer3D 最好(表 11 的 0.0646/0.0647)[Table 11, p14]。三条线里 ArtiFixer3D 占两条、ArtiFixer 占一条,ArtiFixer3D+ 一条也不占却两次落在中间。
这个格局可以用一句话记下来:走一遍三维换一致性,再跑一遍生成换回锐度,两者都要就要多花一步。这里没有「谁更好」的问题,只有「愿意为哪一样多付一次前向」:ArtiFixer 最省(一次生成)、ArtiFixer3D 多一步重建、ArtiFixer3D+ 再额外多一次生成。第 8 章表 5 只报了生成与渲染的帧率,没有把这两步的耗时算进去,所以从「端到端秒数」的角度看,三个变体的差距比表 5 显示的要大[Table 5, p7]。
第三条线还提供了一处独立验证。多视角一致性是唯一一条完全不看真值的指标(它只看方法自己的输出在相邻视角之间是否自洽),而它给出的排序与 PSNR 一致,这说明 ArtiFixer3D 的精度优势不是靠「往真值上凑」得到的,而是真的把多视角约束解进去了[Table 11, p14]。
12.5 五条路线各自的代表
这一章的六张图与表可以按「路线」重新编组一次,这样看得更清。路线一:不修。 代表是 3DGUT 与 3DGS 这一档,在图 12-1 与图 12-3 里各占一列,它的特征是「有观测的地方就还行,空区保持黑洞」[Fig. 8 图注, p10;Fig. 10 图注, p11]。路线二:确定性修补。 代表是 Difix3D+ 与 Fixer(离线/在线),它们的输入就是那张脏渲染图、不做不透明度混合,于是空区在结构上补不出来[§5.3, p6]。
路线三:图像扩散。 代表是 Nerfbusters、GANeRF、NeRFLiX 这一族,它们靠二维扩散先验去改善单帧,代价是多视角一致性没有硬约束。路线四:双向视频扩散。 代表是 GenFusion 与 Gen3C,一次只能出 16 帧左右,要么反复蒸馏(GenFusion,结果是空区糊),要么受自己依赖的深度估计器拖住(Gen3C,结果是几何与颜色出问题)[Fig. 8 图注, p10]。路线五:本篇。 代表是三个 ArtiFixer 变体,它的差别就在第 7 章那条「一次出几百帧 + 不需要迭代蒸馏」[§4.2, p5]。
把这五条并排放在一起看,本篇在定性图里最占优的地方不是「更清楚」,而是「唯一在空区有东西」。这也是第 12.4 节那两张补充表的定位:Tanks and Temples 证明这套能力在换数据集、极端稀疏(2 视角)时还在,多视角一致性表证明它换来的不是「乱补」:如果空区内容是随便画的,一致性指标会立刻变差,而本篇在那一列上是最低的一档[Table 10, p14;Table 11, p14]。
13结论、四条局限与出处
13.1 原文自己的总结
结论段的说法把全篇压成了一句对照:神经重建与相机可控的视频生成在视角合成上提供的是互补能力,本篇提出的 ArtiFixer 是一个试图把两者的好处合起来的自回归视频扩散模型。它把重建场景里带瑕疵的渲染图转成干净、时序一致的帧,同时保留了足够在未观测区域补内容的能力,以及交互使用所需的效率。原文接着指出那个最关键的因果:来自重建场景的强条件信号显著简化了蒸馏、也简化了向自回归形式的转换,因此 ArtiFixer 能在更小的质量衰减下生成长视频序列[§6, p7]。这一句是本篇与「先训自回归再想办法加条件」那条路线的分水岭:条件信号的质量决定了蒸馏的难度,而条件信号又来自三维重建,所以顺序必须是先重建后蒸馏。
13.2 四条局限
原文在补充材料 §E 里把局限列全了,逐条都很具体[§E, p12]。
第一条是速度。ArtiFixer 虽然达到可交互的帧率,但仍然明显慢于从神经场景表示直接渲染(对照第 8 章表 5:本篇 8.36 到 34.38 FPS,直接渲染 268 FPS)[§E, p12]。第二条是延迟。按时间块解码会引入延迟,对具身智能这类应用可能不合适;这条与第一条不同,第一条说的是吞吐,这一条说的是首帧等待[§E, p12]。第三条是分辨率上限。ArtiFixer 与 ArtiFixer3D+ 受骨干视频模型限制,只能到 720p,而 ArtiFixer3D 能按底层三维表示的原始分辨率渲染[§E, p12]。第四条是画质残留问题。与其他视频扩散模型一样,本篇偶尔会糊掉细节与文字,并且在渲染条件缺失或极度退化时引入轻微的色偏[§E, p12]。原文在同一条里给了三个后续方向:继续压去噪步数、在保持时序一致的前提下做到单帧解码、以及用视频超分去补那一段分辨率差[§E, p12]。
这四条与配对表里那三类失败情形(第 11 章)合起来,就是本篇规模格声明的 7 条边界与反例。 两者的分工是:第 11 章那三类是「输入条件不足时会怎样」(只剩文本、只剩参考视图、只有一步),本章这四条是「方法本身的天花板在哪」(慢、有延迟、720p、偶尔糊与色偏)。读一篇论文的局限段有一个简单办法:看它列的四条里,有几条是「换个配置就能缓解」、有几条是「需要改结构」。本篇这四条里,第一条与第四条属于前者(少几步、换个骨干),第三条是硬约束(换骨干才能解),第二条最麻烦,因为它指向的是「按时间块解码」这个自回归本身的形态,原文也只把它列进了未来工作。
13.3 成本、影响与出处
社会影响这一条,原文写得比较克制[§F, p12]。正面是它合成照片级场景内容、能可信地补全未观测区域;风险也因此而来:可能被用于生成具有欺骗性的视觉媒体;原文给的对策建议是为生成内容加水印之类的防护措施[§F, p12]。环境成本这一条给的是可以核对的数字:训练 14B 参数模型大约需要 15,000 GPU 小时(H100);截断日程以大约 25% 的成本达到接近全量的质量;而 1.3B 变体进一步压低训练算力,同时仍与前人工作有竞争力[§F, p14]。这三个数字与第 8 章 §5.1 的日程是同一批数据,读的时候要记住它们说的是训练,不是推理(推理的读数在表 5 与表 7)。
出处与许可。本篇发表在 SIGGRAPH Conference Papers '26,Article No. 114、Pages 1–12,DOI 10.1145/3799902.3811060,2026-07-19 出版[出处信息]。本页所据是 arXiv 的 v2 版(2603.00492v2,2026-05-05;初版 v1 是 2026-02-28),16 页(正文 12 页 + 补充材料 4 页)[所据版本]。作者共十人,全部来自 NVIDIA 及其合作院校(ETHZ、Cornell、University of Toronto、Vector Institute),原文标注 de Lutio 与 Turki 为同等贡献;致谢里点名感谢 Zian Wang 与 Nicholas Sharp 在整个项目过程中的建议与反馈[作者与致谢]。许可判定登记在 选簇与台账.md §二:所据 PDF 内没有任何权利块(Copyright/Permission/ACM Reference Format/ACM ISBN 等关键词全部 0 命中,连 © 也是 0 命中),因此以 arXiv 摘要页为唯一证据源,该页 License 字段为 nonexclusive-distrib/1.0 ⇒ 非 CC,落点两件、不托管原文 PDF、卡片 chip 带 warn、图件逐图署名。这是「PDF 内完全无权利块」型的第四例(前三例是篇目 60、68、70)。另登记一处反向旁证:ACM DL 该条目标着 Open access,与本页所取方向相反;两处说的是不同对象(前者是 ACM 正式版的获取条件,后者是作者自存版 arXiv v2 的分发条件),本页按分区口径仍取非 CC;若日后改判「以 ACM 正式版为准」,本篇需去掉 chip 的 warn 并补 paper.pdf 成三件。
13.4 三处必须自己核过的取证事实
第一,图内标签的字族与字号,与阶段 1 的预判相反。本篇图内标签是 LinBiolinum/LinBiolinumOB,字号反而比正文大:p11 的 Bonsai/Flowers/Garden/Stump 是 10.25 pt、Aloe/Garbage 是 10.46 pt,p13 的 Input Rendering/1 Step/3 Steps 是 14.17 pt;而正文是 LinLibertineT 的 8.88/9.06 pt、图注是 LinBiolinumT 的 7.89/8.05 pt。于是定框判据只能改成「字族 + 字号」双条件(LinLibertineT 且 8.7 ≤ 字号 ≤ 9.2 才算正文)。取证手段是把 p11 与 p13 两处逐 span 打印,逐字确认字族与字号。
第二,4 条编号式的判定位置。阶段 1 记「编号式 4 条」,逐行复核确认无误:(1)(2) 在主文 §4.1 的 p3 右栏,(3)(4) 在补充材料 §A 的 p12 左栏。取证手段是把两页的逐行文本按 y 排序打印,确认这四条各自独立成行,且行末的编号字形是括号数字。本篇与篇目 70 正好相反(那一篇是零编号式、三条未编号式),所以本篇的四条全部逐步重推,补充材料里的两条也一并落块。
第三,两处错编码的还原。p14 的 ALGORITHM 1 伪码块里出现两个控制字符 U+0000 与 U+0001(字族 txexs、7.97 pt),位置在同一 span 内,前后文是一个被大括号包住的取最小值表达式;还原为一对大方括号[§G, p14]。全篇没有替换字符 U+FFFD、没有 mojibake,控制字符总命中 2 处。这与篇目 70 的两处同型(也是 txexs 承载的数学括号)。
这一篇的交接到此为止:四张编号式、22 件原文图元、1 件伪码轨、7 条边界与反例都已逐条落到章节里;三个变体的名次互换(精度对感知锐度、一致性对锐度)是贯穿全篇的一条暗线,读表时值得回头看第 8 章与第 10 章的那两处对照。
13.5 复现这台机器需要什么
把全篇的依赖清单列出来,可以看出复现的门槛在哪里。第一件是一个预训练的双向文本生视频模型,本篇用的是 Wan 2.1 T2V 的 14B 与 1.3B 两个规格,冻结其中的 VAE 与文本编码器[§4.1, p3;§D, p12]。第二件是一个可微渲染、能给出逐像素不透明度的三维表示,本篇用 3DGUT 加 MCMC 稠密化做初始重建,每份重建 10,000 次迭代、略少于 10 分钟[§G, p14]。第三件是带场景描述的配对数据,本篇在 DL3DV-10K 上按第 6 章那套相机采样造出不同稀疏度的重建,并用 Qwen3-VL-30B-A3B-Instruct 生成提示词[§4.1, p4;§G, p14]。第四件是训练算力:主实验 128 张 H100 跑约 15,000 GPU 小时,消融那一套 64 张卡跑约 4,000 GPU 小时[§5.1, p5]。
四件里有三件是公开资源,唯一真正稀缺的是算力那一件。这也解释了原文为什么专门花一段去讲截断日程与 1.3B 变体:截断日程以大约 25% 的成本达到接近全量的质量,1.3B 变体把训练与推理两侧的算力都压下来,并在第 9 章表 8 与第 11 章表 9 两个战场上分别验证了它仍然领先[§F, p14;Table 8, p13;Table 9, p14]。换句话说,本篇的可复现性路径是明确的:用 1.3B 骨干 + 截断日程复现方法,用 14B + 全量日程拿最好的数字。
最后交代一下本篇在系列中的读法。它是一篇「方法 + 系统」型的论文,22 件图元里 11 张表全部落在第 8 到第 12 章,而第 4 到第 7 章承载了四张编号式与整条两阶段流水线。读它的顺序建议是:先看第 5 章那条式 (3)(全篇只有一个核心想法),再看第 7 章那三节(把想法变成能跑的东西的两个动作),最后回到第 8 到第 12 章去核对它到底换来了多少。
本页完