论文精读笔记:SUP-NeRF
1. 核心判断
SUP-NeRF 的关键不是“让 NeRF 自己优化 pose”,而是承认单目 NeRF 对 pose 并不可靠:
- shape code 可以缩放对象;
- translation depth 也可移动对象;
- 两者在单视图中互相补偿,photometric loss 仍可下降;
- rotation 初值超过约 25° 时,gradient-based NeRF 很难进入正确 basin。
作者因此把任务顺序改为:
predict dimensions→fix scale and refine pose→NeRF reconstruct shape / texture.
结果也支持这一判断:nuScenes 上 feed-forward pose 已是 7.01° / 0.68 m,50 次 NeRF optimization 后变成 7.07° / 0.73 m,反而略差。真正负责 pose 的是 projected-box refiner,NeRF 后优化主要负责 visible-surface appearance。
2. 输入、监督与“无需 3D detector”的边界
SUP-NeRF 输入:
- 单对象 RGB crop;
- occlusion / occupancy mask;
- camera intrinsics;
- category-specific learned prior。
它不需要:
- 每个测试对象 CAD;
- FCOS3D 等外部 monocular 3D detector 给初始 3D box。
但仍需要 Mask R-CNN instance masks 和 ROI。nuScenes 本身没有 2D masks,作者先以 Mask R-CNN 产生 masks,再与 3D boxes matching。训练还使用:
- 3D box dimensions 与 poses;
- GT camera pose 作为 NeRF decoder 的训练视角;
- projected 3D box corners pose loss。
所以“free from external 3D detectors”不能简化成“仅原始 RGB、无外部检测或 3D 标注”。
3. 统一 encoder 与 object NeRF
原论文 Figure 3。ResNet50 早期层共享,后续分成 pose / shape / texture;cross-task shortcut 从 shape / texture features 中减去 pose features,试图让对象坐标系表示摆脱视角。来源:ECVA 正式论文;图片版权归论文作者及 Springer Nature 所有,本站仅作论文解读展示。
输入 pad / resize 为 128×128。encoder 输出:
- 256D shape code;
- 256D texture code;
- pose code;
- HB,WB,LB dimensions。
CodeNeRF decoder 每条 ray 采 64 samples,只渲染 32×32 RGB 与 occupancy 计算 loss。shape space 按 observed 3D box diagonal normalization。
训练损失:
Ltrain=Lrgb+woccLocc+wpose(Lposedirect+t∑Lpose(t)),
其中 pose loss 是八个 projected corners 与 GT corners 的平均 2D distance。训练 40 epochs,learning rate 10−4,wocc=0.1,wpose=0.01。
值得注意:训练 NeRF decoder 时用 GT camera pose,不用 pose module prediction。这样更稳定,但也削弱了训练时 reconstruction 对 pose branch 的真实闭环约束;推理时二者才串联。
4. Projected-box pose module
原论文 Figure 4。固定 dimensions 的 3D box 经当前 pose / intrinsics 投影为八个 2D corners;box code 与 image pose code 比较后输出相对 rotation / translation update。来源:ECVA 正式论文;图片版权归论文作者及 Springer Nature 所有,本站仅作论文解读展示。
Projected corners 同时携带:
- 2D center 与 extent;
- yaw / viewpoint;
- depth–size 的投影关系;
- 当前 pose 与 image evidence 的可比较 state。
Rotation update 用 axis-angle 并与当前 SO(3) composition。Translation 不直接回归相机坐标 Δx,Δy,Δz,而是:
xt+1=xt+vxt,yt+1=yt+vyt,Zt+1=ρtZt.
image-plane offset 与 depth ratio 让 update magnitude 对焦距 / object distance 更稳定。论文称 projected-box representation 使 refiner “camera-invariant”;更准确地说,它把 intrinsics 显式吸收到 projection / back-projection,网络的输入输出空间较少依赖 raw camera parameters,并非数学上的完全 invariance。
5. 随机初始化与迭代
训练和推理都不使用外部 3D detector pose:
- 2D center 在 ROI 内随机;
- initial depth 固定 Z=20;
- yaw 全范围随机;
- 另绕随机 axis 加 (−20°,20°) rotation;
- pose module 固定迭代 3 次。
这比 NeRF gradient descent 更大的 capture range 是亮点。但由于 ROI 来自 mask,它并不是从整个 camera frustum 无条件搜索对象。
三次 feed-forward 后,可选 50 次 inference optimization:
Linfer=Lrgb+woccLocc,
网络权重冻结,只更新 shape code、texture code 与 pose。shape / texture step 0.02,pose step 0.01。
6. in-domain 与 cross-domain 结果
原论文 Table 2–4。每个单元为 feed-forward / 50-iteration NeRF optimization;Waymo 中 AutoRF+FCOS3D 的 rotation 最优,SUP-NeRF 的优势主要在 translation。来源:ECVA 正式论文;表格版权归论文作者及 Springer Nature 所有,本站将三张原表组合用于解读。
nuScenes
| 方法 | RE FF / 50it | TE FF / 50it | PSNR FF / 50it | DE FF / 50it |
|---|
| AutoRF+FCOS3D | 9.77 / 10.17° | 0.85 / 0.78 m | 7.5 / 17.2 | 1.34 / 0.81 m |
| SUP-NeRF | 7.01 / 7.07° | 0.68 / 0.73 m | 10.5 / 18.8 | 0.69 / 0.60 m |
Pose feed-forward 已完成;NeRF iteration 将 PSNR +8.3、DE −0.09 m,却使 RE +0.06°、TE +0.05 m。
KITTI,nuScenes model zero-shot
- SUP-NeRF:6.79° / 1.06 m;
- AutoRF+FCOS3D:11.95° / 2.20 m。
rotation 下降 43.2%,translation 下降 51.8%,是论文“约 50%”主张最有力的设置。
Waymo,nuScenes model zero-shot
- SUP-NeRF:10.01° / 1.68 m;
- AutoRF+FCOS3D:6.65° / 3.22 m。
translation 下降 47.8%,但 rotation 增加 50.5%。作者归因于 FCOS3D 使用更大 context、更适应重遮挡。不能将 KITTI 的“旋转和平移都减半”泛化到 Waymo。
跨数据集 PSNR / DE 仍显著差于 nuScenes,说明 category NeRF appearance / geometry prior 没有同等强的域泛化。
7. 模块消融与 NeRF 的真实作用
Pose-only Table 5:
| 模块 | nuScenes RE / TE | KITTI RE / TE | Waymo RE / TE |
|---|
| MLP direct | 31.96° / 5.53m | 37.58° / 5.31m | 30.89° / 10.10m |
| Corners + PnP | 24.79° / 2.82m | 35.10° / 3.55m | 93.76° / 18.68m |
| FCOS3D | 9.77° / 0.85m | 11.95° / 2.20m | 6.65° / 3.22m |
| SUP-NeRF | 7.01° / 0.68m | 6.79° / 1.06m | 10.01° / 1.54m |
Projected-corner PnP 在 Waymo 完全崩溃,支持作者不用 hard keypoint / PnP、而学习 iterative update 的选择。
更有解释力的是 GT initialization:
- GT pose 经 50 次 NeRF optimization 也从 0° / 0m 漂到 2.11° / 0.13m;
- SUP pose 从 7.01° / 0.68m 漂到 7.07° / 0.73m。
这直接说明 photometric NeRF objective 与 pose metric 并不一致,不能把 reconstruction refinement 当作可靠 pose refinement。
8. 速度
原论文 Table 7–8。SUP-NeRF 为 49.816M parameters,三次 feed-forward 18ms;20 / 50 次 NeRF optimization 后变为 0.608 / 1.493s。来源:ECVA 正式论文;表格版权归论文作者及 Springer Nature 所有,本站仅作论文解读展示。
单张 A5000:
| 模式 | 时间 |
|---|
| 3-step feed-forward | 0.018 s |
| FF + 20it | 0.608 s |
| FF + 50it | 1.493 s |
“实时潜力”只适用于 feed-forward pose / coarse latent prediction;完整高质量 NeRF reconstruction 约 0.67 FPS。
9. 局限
- 主要为 driving car category,不是多类别通用物体;
- 依赖 2D mask / crop、intrinsics、3D boxes 与 GT camera pose supervision;
- random initialization 仍借助 ROI;
- NeRF train 使用 GT pose,与 inference 串联存在 train–test mismatch;
- 50-it photometric optimization 可恶化 pose;
- Waymo rotation 不如 FCOS3D;
- cross-domain reconstruction 仍弱;
- 只评 sparse LiDAR depth error,不能等价完整 surface accuracy;
- 物体动态、遮挡与 mask error 的分桶不足;
- 50-it 延迟 1.493 s;
- project code 已公开,但环境与数据准备较重。
10. 复现检查表
- 使用 87,048 / 5,000 nuScenes object split 与相同 Mask R-CNN masks;
- 严格限定 car category与 object IDs;
- 128×128 encoder、32×32 render、64 ray samples、256D codes;
- 复现 random ROI center、Z=20、yaw / random-axis sampling;
- 固定三次 pose updates;
- 训练 NeRF 使用 GT pose,明确与 predicted-pose variant 对照;
- 分开报告 FF 与 20 / 50-it;
- 同时报告 RE / TE 与 PSNR / DE,不用渲染改善暗示 pose 改善;
- KITTI / Waymo 不 fine-tune;
- 计入 mask detector 和 crop 的端到端速度;
- 分析 intrinsics、mask、occlusion 和 dimensions error sensitivity。
11. 最终评价
SUP-NeRF 把一个常被忽略的问题说清楚:单目 NeRF 的 photometric optimization 可以用错误 scale / depth 解释图像,不能承担大范围 pose recovery。固定预测 dimensions、用 projected boxes 做三次 learned refinement,是这篇论文真正有效的部分;nuScenes→KITTI 的 6.79° / 1.06 m 与 18 ms 也证明其工程价值。
同时,NeRF 后优化并未提升 pose,Waymo rotation 又输给 FCOS3D,完整 reconstruction 需要 1.493 s。它应被理解为 一个嵌入 object NeRF 的高效 category pose initializer + reconstruction system,而不是 NeRF 本身解决了 pose。