目录
- 3D Gaussian splatting 01: 环境搭建
- 3D Gaussian splatting 02: 快速评估
- 3D Gaussian splatting 03: 用户数据训练和结果查看
- 3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云
- 3D Gaussian splatting 05: 代码阅读-训练整体流程
- 3D Gaussian splatting 06: 代码阅读-训练参数
- 3D Gaussian splatting 07: 代码阅读-训练载入数据和保存结果
- 3D Gaussian splatting 08: 代码阅读-渲染
快速评估
以下使用 Inria 提供的数据集运行训练过程, 验证和评估重建效果, 数据输入是一组静态场景的图像以及摄像机位置, 表示为稀疏的点云, 通过colmap处理得到.
下载示例数据
在项目 GitHub 仓库 的首页找到 Running 部分, 能找到这个下载链接
You can find our SfM data sets for Tanks&Temples and Deep Blending here: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip If you do not provide an output model directory (-m), trained models are written to folders with randomized unique names inside the output directory. At this point, the trained models may be viewed with the real-time viewer (see further below).
下载 tandt_db.zip 到本地并解压缩. 这个数据集里面带了4个场景, 两个室内的, 两个室外的, 都是两三百张图片, 图片比较小, 单图几百K到几千K, 适合验证测试.
每一个数据集, 都会包含一系列的目录和文件, 其中input是原始图片输入, images 和 sparse 目录是下一步训练要用到的文件.
Train 训练
用 conda 启用之前创建的 3dgs 环境, 然后在项目目录下执行
python train.py -s [素材路径]
# 例如
python train.py -s ./data/tandt/truck
执行过程中可以通过 nvidia-smi 和 nvtop 查看GPU的情况, 可以看到运行的功率, 显存的使用率, 推荐使用 nvtop, 可以实时监控. 训练时间根据显卡不同, 从十几分钟到一个多小时都有可能. 训练的输出目录在 output 目录下, 每次训练都会随机产生一个目录名, 可以通过创建时间辨别.
在结果目录中可以看到两个目录, iteration_7000 和 iteration_30000, 分别是迭代7000次和30000次的 point cloud 文件. 这个文件可以直接用于3D渲染.
View 查看
快速查看可以用第三方的网页工具, 例如 https://poly.cam/tools/gaussian-splatting, 可以注册后免费上传 ply 文件.
评估
python render.py -m [训练结果路径]
python metrics.py -m <path to trained model> # Compute error metrics on renderings
高级选项
optimizer_type 训练加速
这个功能是 2024年7月在核心模块 diff-gaussian-rasterization 的 3dgs_accel 分支加入的.
默认的导出不带这个选项, 要启用此选项, 需要将之前安装的 submodules/diff-gaussian-rasterization 模块删除, 将模块切换到 3dgs_accel 分支后重新 pip install, 而后在训练时, 可以使用参数 --optimizer_type
, 可以指定default
, sparse_adam
两种加速方式, 使用sparse_adam
实测速度提升明显, 训练时间只有未开启加速的一半. 从显卡功耗看, 比未开启加速功耗增加20%.
antialiasing: 抗锯齿
--antialiasing
抗锯齿选项是 2024年8月在核心模块 diff-gaussian-rasterization 的 dr_aa 分支加入的. 来源于 mip-splatting 项目.
这个参数可以作用于训练和查看, 实测在训练中使用这个参数后效果反而变差, 边缘尖刺增加. 在SIBR Viewer中查看时, 勾选此参数可以改善远景的图像质量.
问题
显卡温度过高
长时间运行时, 建议控制显卡GPU温度在75摄氏度以下. 如果在nvtop中温度超过75, 需要使用 nvidia-smi 限制显卡频率以降低功率.
通过 nvidia-smi 查看 GPU 温度设置
nvidia-smi -q -d temperature
输出为
Attached GPUs : 1
GPU 00000000:01:00.0TemperatureGPU Current Temp : 35 CGPU T.Limit Temp : N/AGPU Shutdown Temp : 96 CGPU Slowdown Temp : 93 CGPU Max Operating Temp : N/AGPU Target Temperature : 83 CMemory Current Temp : N/AMemory Max Operating Temp : N/A
默认的 Target Temp 是 83, 设置 Target Temp 的命令是 sudo nvidia-smi -gtt [温度]
. 在散热不佳 GPU 温度过高时, 执行这个命令可以立即观察到频率的下降, 可以用这个命令给GPU降温.