使用 python 中 PyTorch 库实现 NeRF,并进行两个消融实验和光线训练优化
本项目基于 PyTorch 实现了 Tiny NeRF,通过体渲染 (Volume Rendering) 技术和 MLP 神经网络,从一组稀疏的 2D 图像中重建 3D 场景。
核心特性:
- 坐标转换: 实现了完整的从 3D 空间点采样到 2D 像素颜色的可微渲染管线。
- 信息编码: 将低维坐标映射到高维空间,以捕获高频几何细节。
- 基于光线训练的优化: 支持基于光线 (Rays) 而非整图的批处理训练,显著降低显存占用并加速收敛。
训练 3000 iterations 后的最终渲染效果:
为了验证网络深度与采样策略对渲染质量的影响,进行了以下对比实验。
探究 MLP 的深度(层数)对场景细节拟合能力的影响。
| Depth ( |
Rendered Result | Analysis |
|---|---|---|
| D = 10 (Baseline) | ![]() |
模型具有足够的容量 (Capacity),能够清晰拟合挖掘机的纹理和几何边缘。 |
| D = 5 | ![]() |
欠拟合。由于参数量减少,网络无法存储高频信息,导致物体表面变得模糊,细节丢失。 |
探究光线步进 (Ray Marching) 过程中的随机扰动 (Perturbation) 对抗锯齿的作用。
为了突破显存限制并提高训练稳定性,在原有代码上重构了数据加载管线,将原始的“基于图像”采样修改为“基于光线”的采样策略。
- Hardware: NVIDIA RTX 5060 Laptop GPU
- Software: Windows 11, PyTorch Nightly (CUDA 13.0)
# Clone the repository
git clone [your-repo-link]
# Install dependencies
pip install -r requirements.txt
# Run training
python run_nerf.py- Thanks to Prof. Lingqi Yan for the inspiring GAMES101 course.
- Original Paper: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis (ECCV 2020).



