光度损失的吸引域太小
标准 NeRF 假设相机姿态准确。iNeRF 需要已经训练好的 NeRF;NeRF-- 在较短、近似前向轨迹和合理初始化附近联合优化。相机起点完全错误时,像素对应关系失真,光度梯度容易把姿态和场景同时带入局部极小值。
GNeRF 把单场景 NeRF 看作由相机先验驱动的图像生成器:先用 GAN 学到全局外观分布和粗姿态,再用反演网络约束每张真实图像的姿态,最后用光度误差精修。

输入是同一个静态场景的多张 RGB 图像、已知或固定的相机内参及场景近远边界;每张图像的外参未知。输出是每张图像的相机外参与一个可用于新视角合成的场景专属 NeRF。
标准 NeRF 假设相机姿态准确。iNeRF 需要已经训练好的 NeRF;NeRF-- 在较短、近似前向轨迹和合理初始化附近联合优化。相机起点完全错误时,像素对应关系失真,光度梯度容易把姿态和场景同时带入局部极小值。
Phase A 暂时不要求“第 \(i\) 张生成图必须等于第 \(i\) 张真实图”。GAN 只要求随机姿态渲染出的 patch 分布接近真实 patch 分布;反演网络再从生成图像学习姿态回归,并将这种回归迁移到真实图像。
方法需要合理的姿态采样空间、内参、near/far 和场景尺度。Synthetic-NeRF 使用半径 4、上半球、朝向原点;DTU 使用方位角 \(0^{\circ}\)–\(150^{\circ}\)、仰角 \(0^{\circ}\)–\(80^{\circ}\),look-at 在原点附近扰动。
GNeRF 没有跨场景预训练,也没有从随机 latent 生成不同对象。随机变量是相机姿态;同一个 \(F_{\Theta}\) 表示同一个场景。GAN 在这里提供全局分布约束。
论文沿用标准 NeRF 渲染方程,并将监督关系从已配对的图像–姿态监督扩展为分布匹配、生成图像姿态回归和真实图像重建三种信号。
相机中心 \(\mathbf{t}\in\mathbb{R}^{3}\)。自由旋转用 \(\mathbf{r}\in\mathbb{R}^{6}\) 表示:从旋转矩阵取两列,再经 Gram–Schmidt 正交化恢复 \(SO(3)\)。代码把 \(\mathbf{t}\) 与 6D 旋转拼成 9 维可优化向量;Synthetic 的朝向由 camera center 和 look-at 直接计算,因此仅优化 3 维中心。
场景函数 \(F_{\Theta}:(\mathbf{x},\mathbf{d})\rightarrow(\mathbf{c},\sigma)\) 将 3D 位置和观察方向映射为 RGB 颜色与密度。体渲染器 \(G(\phi;F_{\Theta})\) 沿姿态 \(\phi\) 定义的射线采样并积分。代码使用 64 个 coarse 样本和 64 个 importance 样本。
射线为 \(\mathbf r(s)=\mathbf o+s\mathbf d\),其中 \(\mathbf o\) 为相机中心、\(\mathbf d\) 为世界坐标方向,\(s\) 为射线距离。采样位置间隔为 \(\delta_j\),网络输出颜色 \(\mathbf c_j\) 与密度 \(\sigma_j\)。
\(T_j\) 表示射线到达第 \(j\) 个采样位置之前的透射率;密度决定局部不透明度。颜色累积对 NeRF 和相机位置、方向均可微,因此 photometric loss 能同时更新场景与姿态。coarse 分布提供 importance sampling,fine 阶段额外抽取 64 个位置,使用两组位置联合渲染。官方 Synthetic 配置 near/far 为 2/6、白背景;DTU 为 1.5/8、无白背景。
论文 Eq. 3 写作对图像值的积分,若把它逐字理解为“平均图像”会失去概率分布含义。严格地说,生成分布是姿态先验 \(P_{\Phi}\) 经渲染映射 \(G_{\Theta}\) 的 pushforward:
论文的优化意图为 \(\Theta^{\ast}=\arg\min_{\Theta}\operatorname{Dist}(P_g\Vert P_d)\),并用经典 minimax GAN:
固定代码实现使用 logits 上的 binary cross entropy:生成器目标标签为 1,属于常用的 non-saturating generator loss;判别器分别以 1/0 监督真实与生成 patch,并对真实输入加入梯度范数正则。它与论文写出的 minimax 形式具有同一对抗目标,梯度形式并不逐字相同。
对随机姿态 \(\phi\) 渲染生成图,再训练 \(E\) 回归生成该图的姿态。监督来自系统自身采样,属于场景内自监督。
光度项更新 NeRF 与每图姿态;反演项把真实图像姿态拉向冻结 \(E\) 的预测。
代码没有一次性联合求和:姿态正则在 A 子步骤以均方误差乘 \(0.1\) 单独更新姿态;B 子步骤以 photometric MSE 乘 \(50\) 更新 NeRF 与姿态。\(E\) 在真实图像姿态正则与 B 中冻结。
论文的“两阶段”是概念结构;公开实现包含三段 schedule。中间段的每一次训练迭代先运行完整 A 子流程,再运行 B 子流程。

每张训练图与验证图的 pose parameter 初始化为相同的 canonical pose。A 阶段从 \(16\times16\) 输出分辨率逐渐增至 \(128\times128\);AB 段再逐渐增至数据分辨率。内参按当前尺寸缩放。
从姿态先验采样相机,渲染 coarse 与 fine 两组 \(16\times16\) 动态 patch,判别器冻结;BCE 目标令两组 fake 被判为 real。仅 NeRF 参数接收梯度。
NeRF、反演网络与全部姿态冻结。\(D\) 对真实 patch 取标签 1,对已 detach 的生成 patch 取标签 0;默认使用真实输入梯度正则、spectral normalization、instance normalization 与 color/cutout DiffAugment。
NeRF 冻结但负责产生 \(64\times64\) 静态全视野稀疏图;\(E\) 同时回归 coarse 和 fine 图对应的采样姿态。只有 ViT 参数更新。
\(E\) 与 NeRF 冻结。真实图降采样为 \(64\times64\) 全视野 patch,训练姿态以 \(0.1\lVert E(I_i)-\phi_i\rVert^2\) 更新;验证图姿态也独立执行同类更新,用于测试视角渲染。
\(D\) 与 \(E\) 冻结,使用真实 patch 坐标和当前每图姿态渲染 coarse/fine;\(50\times\) MSE 同时更新 NeRF 与训练姿态。验证姿态每 8 步更新一次,此时 NeRF 冻结。
对抗生成、反演训练、真实图姿态正则。没有 photometric refine。
每步依次执行 A 的全部子步骤与 B 光度更新。此处是真正的交替耦合。
只保留光度精修。README 建议总计约 40k iterations。
Table 1 的 holdout 新视角测试、Table 2 的 49 张训练视角重建、Table 3 的训练集姿态误差属于三种不同协议。数值只能在各自协议内解释。
Synthetic-NeRF:6 个场景,100 张训练图;从原 test split 选 8 张角距离较大的测试图。GNeRF 与 NeRF baseline 训练分辨率 \(400\times400\)。
DTU:scan4、48、63、104 用于 Table 1,每第 8 张作为测试,其余 43 张训练,分辨率 \(500\times400\)。Table 2 另用 scan48、97、104 的全部 49 张训练视角。
一个共享的 8 层、宽度 360 NeRF MLP 同时服务 coarse 与 fine;64+64 samples。ViT 反演器:64 输入、16×16 token 网格、dim 256、6 层、16 heads。batch size 12。
RMSprop:\(G=5\times10^{-4}\)、\(D=10^{-4}\)。Adam:\(E=10^{-4}\)、pose \(=5\times10^{-3}\),公开代码 beta 为 \((0.9,0.99)\)。官方配置中,生成器与判别器每 8,000 步将学习率减半,反演网络与训练/验证姿态优化器每 4,000 步减半。
| 数据 / 场景 | PSNR ↑ | SSIM ↑ | LPIPS ↓ | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C+n | C+r | Ours | G+n | C+n | C+r | Ours | G+n | C+n | C+r | Ours | G+n | |
| Synthetic · Chair | 33.75 | 32.70 | 31.30 | 32.84 | 0.97 | 0.95 | 0.94 | 0.97 | 0.03 | 0.05 | 0.08 | 0.04 |
| Synthetic · Drums | 22.39 | 23.42 | 24.30 | 26.71 | 0.91 | 0.88 | 0.90 | 0.93 | 0.10 | 0.13 | 0.13 | 0.07 |
| Synthetic · Hotdog | 25.14 | 33.59 | 32.00 | 29.72 | 0.96 | 0.97 | 0.96 | 0.95 | 0.05 | 0.03 | 0.07 | 0.04 |
| Synthetic · Lego | 29.13 | 28.73 | 28.52 | 31.06 | 0.93 | 0.92 | 0.91 | 0.95 | 0.06 | 0.08 | 0.09 | 0.04 |
| Synthetic · Mic | 26.62 | 31.58 | 31.07 | 34.65 | 0.96 | 0.97 | 0.96 | 0.97 | 0.04 | 0.03 | 0.06 | 0.02 |
| Synthetic · Ship | 27.49 | 28.04 | 26.51 | 28.97 | 0.88 | 0.86 | 0.85 | 0.82 | 0.16 | 0.18 | 0.21 | 0.15 |
| DTU · Scan4 | 22.05 | 24.23 | 22.88 | 25.52 | 0.69 | 0.72 | 0.82 | 0.78 | 0.32 | 0.20 | 0.37 | 0.18 |
| DTU · Scan48 | 6.718 | 10.40 | 23.25 | 26.20 | 0.52 | 0.62 | 0.87 | 0.90 | 0.65 | 0.60 | 0.21 | 0.21 |
| DTU · Scan63 | 27.80 | 26.61 | 25.11 | 32.19 | 0.90 | 0.90 | 0.90 | 0.93 | 0.21 | 0.19 | 0.29 | 0.24 |
| DTU · Scan104 | 10.52 | 13.92 | 21.40 | 23.35 | 0.48 | 0.55 | 0.76 | 0.82 | 0.60 | 0.59 | 0.44 | 0.36 |
C+n:COLMAP pose + 原始 NeRF;C+r:COLMAP pose 后再联合优化;G+n:真实 pose + NeRF。加粗为逐行单指标最优,原论文标注方式可能同时突出作者关注项。结论具有场景差异:Ours 在 Drums、Scan48、Scan104 明显缓解 COLMAP 失败;Chair、Ship 和多项正常纹理场景中 COLMAP 或真实姿态更好。

| 方法 | Scan48 | Scan97 | Scan104 |
|---|---|---|---|
| IDR(mask 内) | 21.17 | 17.42 | 12.26 |
| Ours(mask 内) | 20.40 | 19.40 | 19.81 |
| Ours(全图) | 25.71 | 24.52 | 25.70 |
三种结果不可跨 mask / whole-image 直接排序。IDR 和 Ours 都在每场景全部 49 张训练图上联合优化模型与外参,报告训练视角平均 PSNR;它不等同于 Table 1 的 holdout novel-view protocol。IDR 还使用 mask 和 noisy pose initialization,Ours 不使用这两项。

| 场景 | COLMAP Rot↓ | COLMAP Trans↓ | Ours Rot↓ | Ours Trans↓ |
|---|---|---|---|---|
| Chair | 0.119° | 0.006 | 0.363° | 0.018 |
| Drums | 9.985° | 0.522 | 0.204° | 0.010 |
| Hotdog | 0.542° | 0.024 | 2.349° | 0.122 |
| Lego | 7.492° | 0.332 | 0.430° | 0.023 |
| Mic | 0.746° | 0.047 | 1.865° | 0.031 |
| Ship | 0.191° | 0.010 | 3.721° | 0.176 |
ATE toolbox 完成轨迹配准后报告训练集平均旋转与平移差。GNeRF 只在 Drums、Lego 两个困难场景全面胜出;其余多数场景 COLMAP 姿态更准确。输入仍为 COLMAP 108 张 \(800^2\) 与 GNeRF 100 张 \(400^2\)。
消融在 Chair 上说明三类信号各有作用;附录进一步显示“合理先验”容许小幅错配,但覆盖大量未见视角会明显降低质量。
| Adversarial | Inversion | Photometric | PSNR↑ | Rot↓ | Trans↓ |
|---|---|---|---|---|---|
| — | ✓ | ✓ | 19.31 | 108.22° | 2.53 |
| ✓ | — | ✓ | 13.82 | 132.85° | 3.05 |
| ✓ | ✓ | — | 20.60 | 5.91° | 0.24 |
| ✓ | ✓ | ✓ | 31.30 | 0.36° | 0.02 |
移除 adversarial 或 inversion 后姿态彻底失败;只移除 photometric 时粗姿态已可用,但渲染与姿态精度仍远低于完整模型。该表支持“分布级初始化 + 逐图姿态约束 + 光度精修”的组合价值。

| 训练 schedule | PSNR↑ | Rot↓ | Trans↓ |
|---|---|---|---|
| A → B | 29.23 | 0.592° | 0.034 |
| A → AB…AB → B | 31.30 | 0.363° | 0.018 |
中间交替使 PSNR 增加 2.07 dB,旋转误差降低约 38.7%,平移误差降低约 47.1%。它直接反驳了把实现理解为一次 A 后一次 B 的简化描述。

| Radius | Elevation | Azimuth | Look-at | PSNR↑ |
|---|---|---|---|---|
| 4 | [0°, 90°] | [0°, 360°] | (0,0,0) | 31.30 |
| [3,5] | [0°, 90°] | [0°, 360°] | (0,0,0) | 29.68 |
| 4 | [−90°, 90°] | [0°, 360°] | (0,0,0) | 23.08 |
| 4 | [0°, 90°] | [0°, 360°] | \(\mathcal{N}(0,0.01^2)\) | 30.48 |
半径壳层或轻微 look-at 扰动影响有限;把 elevation 扩到包含训练中不存在的下半球视角损失 8.22 dB。证据仅来自 Chair,不能外推为任意数据的先验容忍性。
| 输入尺寸 | Chair | Drums | Hotdog | Lego | Mic | Ship |
|---|---|---|---|---|---|---|
| 400×400 | 108 | 87 | 98 | 108 | 19 | 82 |
| 800×800 | 108 | 100 | 104 | 108 | 84 | 108 |
原 caption 写“image numbers analysis / reduce training image numbers”,正文与表格实际改变的是分辨率,固定输入 108 张。这项附录实验解释了作者为何给 COLMAP 使用 \(800^2\) 图像注册。
作者把 mask 当一通道图像,用相同体渲染训练,再按原 NeRF 脚本以 marching cubes 提取几何。Figure 7 是有限案例的定性演示,没有表面误差、更多对象或失败率。
Figure 8 使用高斯噪声 \(\mathcal{N}(0,0.5^2)\)。COLMAP 注册失败,GNeRF 仍给出渲染和深度。作者只用对应姿态的渲染作定性核验,没有报告噪声强度曲线或姿态数值。


以下核查基于官方仓库固定提交 a008c63dba3a0f7165e912987942c47972759879(2021-11-12)。代码与论文核心方法一致,同时补充了论文未写清的 schedule、权重、归一化和梯度流。
trainer.py:83–88:A ≤ 12000,ABAB ≤ 20000,之后 B。每个 trainstep 使用 toggle_grad 显式冻结其他模块。ABAB 分支同一迭代先执行 A 的 G/D/E/pose regularization,再执行 B photometric refine。gan_type=standard,使用 binary_cross_entropy_with_logits。生成器 target=1;判别器 real=1、fake=0,并以系数 10 对 real input gradient norm 正则化。pose_mode=3d 只学习 camera center,由 look-at 原点决定旋转。DTU 的 pose_mode=6d 实际参数为 3 translation + 6 rotation,共 9 维。config.py 声明 dir_freq=4,但 train.py:103–105 构造 GNeRF 时传入 dir_freq=args.xyz_freq。默认 xyz_freq=10,因此公开代码的实际方向编码频率为 10。可以把材质图程序或 shader 参数视为隐藏结构,用分布级渲染判别提供宽吸引域,再以一个 amortized inverter 为每个观测提供初始化,最后用可微 renderer 做逐样本 photometric / perceptual refine。进一步需要让 inverter 输出多峰分布,配合 execution-aware search 处理图结构与参数的多解性;还需要严格区分 topology prior、rendering prior 与真实可编辑性评测。这些是研究设想,GNeRF 没有生成 material graph,也没有验证材质编辑。
核查日期:2026-09-29。页面中的论文事实、代码事实、作者解释和研究延伸均分开标注。未运行完整训练,运行时间和显存沿用论文与官方 README 报告。