前言
最近开始学习3D高斯泼溅,本文可以认为是跑通官网代码后写下的实验报告。
环境配置
我使用的实验环境为:
| 项目 | 详情 |
|---|---|
| 操作系统 | Windows 11 Home China (10.0.26200) |
| GPU | NVIDIA RTX 4060 Laptop,8GB 显存,Compute Capability 8.9 |
| CUDA Toolkit | 11.8 |
| PyTorch | 2.7.1 + cu118 |
| Python | 3.9.25 |
| MSVC | Visual Studio 2022 Community,MSVC 14.44.35207 |
| Conda | 25.5.1 |
首先从克隆官网仓库到本地:
1 | git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive |
问题一:项目根目录存在
environment.yml,但实际测试中 windows 系统不能够直接使用 conda 直接安装。对此,ai 给出解释是 conda 版 pytorch 在 windows 上缺少 CUDA DDL。
解决方案:选择放弃 yml,手动用 pip 安装 Pytorch 和其他依赖。
问题二:CUDA 扩展编译失败
unsupported MSVC version。ai 解释是 VS2022 版本过新,CUDA 11.8 的 host_config.h 不认。
解决方案:在 setup.py 添加-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH 宏
问题三:
import _C返回 not found。ai 解释扩展的.pyd依赖cudart64_110.dll,但不在 PATH 中
解决方案:用 dumpbin 定位依赖找到 torch/lib 目录,创建 .pth 文件让 Python 自动加载 DLL 路径
数据集下载
Mip-NeRF 360 数据集是一组用于 真实世界 360°新视角合成与三维重建 的高质量图像数据集,场景由真实相机环绕拍摄得到,并通过 COLMAP 估计相机位姿。它包含室外和室内两类场景,例如 bicycle、garden、stump、treehill、flowers 等室外无界场景,以及 room、counter、kitchen、bonsai 等室内场景。相比早期 NeRF 常用的合成数据或前向拍摄数据,它更接近真实应用:场景范围大、背景复杂、存在远近尺度差异、遮挡和真实光照变化,因此常被用来测试 NeRF、3D Gaussian Splatting 等方法在真实 360°场景中的重建质量、渲染清晰度和抗伪影能力。
在 mipnerf360 发布页面 下载了 flowers 和 treehill 两个数据集。


在实际运行时,我使用了 360_extra_scenes/treehill 作为数据集。
训练
数据集存在了 data/treehill 目录。由于资源受限,先跑了7000轮,并在运行一半和运行结束时分别保存一次,使用以下命令开始训练:
1 | python train.py -s data/treehill -m output/treehill_baseline --iterations 7000 --save_iterations 3500 7000 -r 1 |
最开始的训练就遇到了 OOM 问题,原始图像分辨率过高,rtx 4060 laptop 显存不足。去掉 -r 1参数即可正常训练。
前面一半的迭代很快,后面越来越慢,因为高斯数量在膨胀,从初始的 5w 高斯到后面的几百万,训练会越来越慢。实际上,完成前 70% 的迭代只用了几十分钟,而后面 30% 的部分进行了两个多小时。
在后面进一步学习之后,我会去租 gpu 跑一遍完整实现。
训练的最终产物是 point_clound.ply,可以用于后续的渲染,也可以在这个网站体验3d效果。
渲染和评估
1 | # 上面是渲染,下面是评估 |
在 output/treehill_baseline/train/ 目录会出现两个文件夹,gt和renders一一对应

我跑的结果如下:
| 指标 | 数值 |
|---|---|
| SSIM | 0.6471134 |
| PSNR | 21.4450645 |
| LPIPS | 0.3957949 |
SSIM是结构相似性,范围 0-1,越高越好;PSNR 是峰值信噪比,单位 dB,越高越好,一般 30+ 算不错;LPIPS 是感知相似度,范围 0-1,越低越好。
这三个值并不是很理想,因为训练时使用的图片并非完整分辨率图片,迭代次数也远低于论文中的数值,不过图片主体(那棵树)已经相当清晰,说明整体的实现是比较成功的。在3d视图中,我甚至能够看清椅子上刻着的文字。
最后
这篇文章仅作为跑官方代码的实验报告,而不是我学习3dgs的终点。预计会在后面的一段时间更深入的阅读源码,精读论文,并做一些有意思的事情。