3D Gaussian splatting 02: 快速评估

目录

快速评估

以下使用 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 目录是下一步训练要用到的文件.

训练

用 conda 启用之前创建的 3dgs 环境, 然后在项目目录下执行

python train.py -s [素材路径]
# 例如
python train.py -s ./data/tandt/truck

如果要进行评估, 训练时需要增加--eval参数

python train.py -s ./data/tandt/truck --eval

执行过程中可以通过 nvidia-smi 和 nvtop 查看GPU的情况, 可以看到运行的功率, 显存的使用率, 推荐使用 nvtop, 可以实时监控. 训练时间根据显卡不同, 从十几分钟到一个多小时都有可能. 训练的输出目录在 output 目录下, 每次训练都会随机产生一个目录名, 可以通过创建时间辨别.

在结果目录中可以看到两个目录, iteration_7000 和 iteration_30000, 分别是迭代7000次和30000次的 point cloud 文件. 这个文件可以直接用于3D渲染.

一般来讲, 迭代7000次之后的效果就已经接近最终效果, 而30000次迭代的训练时间是7000次迭代的5-6倍, 如果想快速评估模型结果, 训练时可以加上--iterations 7000参数让其在7000次迭代后结束.

查看

快速查看可以用第三方的网页工具, 例如 https://poly.cam/tools/gaussian-splatting, 可以注册后免费上传 ply 文件.

评估

用带--eval训练的模型结果, 分别对训练使用的镜头进行渲染, 需要指定训练结果路径(在output下的随机目录名), 以及训练的输入数据

python render.py -m [训练结果路径] -s [素材路径]

例如

python render.py -m ./output/89ea0caf-3 -s ./data/tandt/truck

会在训练结果目录下创建 train 和 test 两个目录, 分别对应训练数据和测试数据, 每一组数据分 gt 和 renders 两个目录, 分别是素材原图和渲染结果图.

在渲染完成后, 计算渲染结果和原图的 SSIM, PSNR 和 LPIPS

python metrics.py -m [训练结果路径]

例如

python metrics.py -m ./output/89ea0caf-3

如果训练时没有指定 --eval参数, 也没有人工区分训练集和测试集, render.py 产生的 test 目录是空的, 执行上面的命令会产生空结果.

Scene: ./output/89ea0caf-3
Method: ours_30000
Metric evaluation progress:   0%|                                      | 0/106 [00:00<?, ?it/s]Downloading: "https://raw.githubusercontent.com/richzhang/PerceptualSimilarity/master/lpips/weights/v0.1/vgg.pth" to /home/milton/.cache/torch/hub/checkpoints/vgg.pth
100%|█████████████████████████████████████████████████████| 7.12k/7.12k [00:00<00:00, 9.46MB/s]
Metric evaluation progress: 100%|████████████████████████████| 106/106 [02:31<00:00,  1.43s/it]
  SSIM :    0.9513068
  PSNR :   31.6362495
  LPIPS:    0.0676759

高级选项

optimizer_type 训练加速

这个功能是 2024年7月在核心模块 diff-gaussian-rasterization 的 3dgs_accel 分支加入的.

默认的导出不带这个选项, 要启用此选项, 需要将之前安装的 submodules/diff-gaussian-rasterization 模块删除,

pip uninstall diff_gaussian_rasterization

将模块切换到 3dgs_accel 分支后重新 pip install,

$ cd submodules/diff-gaussian-rasterization/
$ git branch -a
* (HEAD detached at 9c5c202)
  main
  remotes/origin/3dgs_accel
  remotes/origin/HEAD -> origin/main
  remotes/origin/debug
  remotes/origin/dr_aa
  remotes/origin/fast_culling
  remotes/origin/main
$ git checkout -b 3dgs_accel origin/3dgs_accel
$ cd ../..
$ pip install submodules/diff-gaussian-rasterization/

而后在训练时, 可以使用参数 --optimizer_type, 可以指定default, sparse_adam两种加速方式

python train.py -s /home/milton/WorkPython/data2/ --optimizer_type sparse_adam
  • 4060Ti显卡, 使用sparse_adam参数实测速度提升明显, 训练时间只有未开启加速的一半. 从显卡功耗看, 比未开启加速功耗增加20%.
  • P104-100显卡, 使用sparse_adam参数实测速度无明显提升, 显卡功耗无明显变化.

猜测这个加速会充分利用GPU的并行处理, 会增加GPU功耗, 4060Ti在正常模式下温度仅到63度, 而P104-100在非加速情况下温度83度已经达到温度墙, 功率受到限制, 因此没有提升.

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.0
    Temperature
        GPU Current Temp                  : 35 C
        GPU T.Limit Temp                  : N/A
        GPU Shutdown Temp                 : 96 C
        GPU Slowdown Temp                 : 93 C
        GPU Max Operating Temp            : N/A
        GPU Target Temperature            : 83 C
        Memory Current Temp               : N/A
        Memory Max Operating Temp         : N/A

默认的 Target Temp 是 83, 设置 Target Temp 的命令是 sudo nvidia-smi -gtt [温度]. 在散热不佳 GPU 温度过高时, 执行这个命令可以立即观察到频率的下降, 可以用这个命令给GPU降温.

posted on 2025-05-30 18:40  Milton  阅读(494)  评论(0)    收藏  举报

导航