3DGS-DR部署及训练教程
3DGS-DR部署及训练教程

项目介绍
paper:3D Gaussian Splatting with Deferred Reflection
web:3D Gaussian Splatting with Deferred Reflection
github:https://github.com/gapszju/3DGS-DR.git
摘要:神经与高斯基辐射场方法的兴起在新视角合成领域取得了巨大成功。然而,镜面反射仍然是一个非平凡的问题,因为高频辐射场 notoriously 难以稳定且准确地拟合。我们提出了一种延迟着色方法,能够有效地利用高斯溅射渲染镜面反射。关键挑战来自于环境贴图反射模型,该模型需要精确的表面法线,同时其不连续的梯度又成为法线估计的瓶颈。我们利用延迟着色生成的逐像素反射梯度,在相邻高斯的优化过程之间架起桥梁,使得近乎正确的法线估计能够逐步传播,最终覆盖所有反射物体。我们的方法在合成高质量镜面反射效果方面显著优于现有最先进技术和同期工作,在合成场景与真实场景中均实现了峰值信噪比(PSNR)的持续提升,同时运行帧率几乎与原始高斯溅射相同。
项目部署
首先克隆代码到本地
1 | git clone https://github.com/gapszju/3DGS-DR.git |
下载项目依赖(必须手动下的)
1 | pip install submodules/cubemapencoder |
下载数据集(点击链接下载)
1 | mkdir data #新建文件夹放数据集 |
训练
执行命令并设置自定义选项
1 | sh train.sh |
你可能需要修改 train.sh 中的路径。
train.py 的命令行参数说明:
--longer_prop_iter
增加法线传播的迭代次数。如果发现默认配置无法很好地完成法线传播,可以设置为--longer_prop_iter 24000或更高。
默认值:0--opac_lr0_interval
为了加快法线传播,建议保持默认值 200。但在某些情况下,该值可能导致不稳定或质量下降。此时可将其设为 0,并将--longer_prop_iter设为 36000 或更高,以获得更好效果。
默认值:200--densification_interval_when_prop
法线传播过程中的致密化间隔。若场景中主要包含粗糙物体,建议设置为 100。
默认值:500--use_env_scope
针对真实场景,添加此参数以消除背景干扰。env_scope_center和env_scope_radius用于定义环境光作用的球形区域。--env_scope_center与--env_scope_radius
定义球形区域的中心与半径,用于限定环境光的作用范围。
评价指标
运行以下命令进行评估:
1 | python eval.py --model_path output/NAME_OF_THE_SCENE #选择训练得到的结果文件夹 |
你将得到 PSNR、SSIM、LPIPS 和 FPS 的结果。
如果需要保存生成的图像和光照结果,请添加参数 --save_images:
1 | python eval.py --model_path output/NAME_OF_THE_SCENE --save_images |
可视化
我们提供了一个基于 Dear PyGui 的简单图形界面查看器。请先安装依赖:
1 | pip install dearpygui |
启动步骤:
1. 启动服务端:
1 | python net_viewer.py --model_path output/NAME_OF_THE_SCENE |
2. 启动客户端:
1 | cd net_viewer_client |
自定义真实场景数据集:
为了获得更好的新视角合成质量,你可能需要指定一个球形区域,用于限定环境光的作用范围。
最简单的方法是:
- 将初始点云导入 Blender;
- 添加一个球体,覆盖主要反射物体;
- 使用该球体的 中心坐标 和 半径 作为训练参数;
- 具体参数设置请参考前面的《train.py 命令行参数说明》。
我在部署过程中遇到的问题以及解决方案
声明:我在部署时候直接在物理机部署,未使用conda和docker,欢迎补充
我想在clone时候使用代理直接将仓库及子模块一起拉下来但是失败了
1 | Traceback (most recent call last): |
一句话:你当前环境里缺
kornia这个 Python 包,并且train.sh脚本里还混进了 Windows 风格的换行符,导致 shell 报错 “: not found”。
✅ 先解决 ModuleNotFoundError: No module named ‘kornia’
1
2 # 在你激活的 conda 环境里
pip install kornia如果已经装过,确认是否装到了 当前环境:
1
2 which python
pip show kornia
✅ 再解决 train.sh: not found
这是因为你把 Windows 下编辑的脚本直接拿到 Linux 上跑,行尾是
\r\n,Linux 只认\n。两种改法(任选其一):
① 用
dos2unix一键转格式
1
2 sudo apt install dos2unix # 若未安装
dos2unix train.sh② 手动删
\r
1 sed -i 's/\r$//' train.sh改完再执行:
1
2 chmod +x train.sh
./train.sh
✅ 总结:你现在只需要两条命令
1
2 pip install kornia
dos2unix train.sh再重新运行即可。如果还有别的包缺失,把报错贴出来,我继续帮你补。
老问题,新缺包:
1 | from scene.gaussian_model import GaussianModel |
plyfile 没装。
只要在你当前的 conda 环境里执行
1 | pip install plyfile |
即可。
Flask 与 Werkzeug 版本不匹配
1 | import flask |
Flask 与 Werkzeug 版本不匹配:
werkzeug新版(3.x)删掉了url_quote,而旧版 Flask(2.2 及以下)还在用它。
✅ 最快的修复:把 Werkzeug 降级到 2.3.x
1 pip install "werkzeug<3"
可选但推荐:连带把 Flask 升到最新 2.x(兼容 werkzeug 2.3)
1 pip install -U "flask<3" # 当前 2.3.3 即可
一句话总结
1 pip install "werkzeug<3"再跑你的脚本,报错消失。
typing_extensions 版本太新
1 | File "/home/ljp/anaconda3/lib/python3.10/site-packages/open3d/visualization/draw_plotly.py", line 12, in <module> |
typing_extensions 版本太新,旧版 Dash 在它里面找不到
Generic导致的崩溃。
一句话:把 typing_extensions 降级到 4.7.x 以下即可。
1 pip install "typing_extensions<4.7"执行完再跑训练,这条
AttributeError就会消失。
说明刚才的降级没生效或者被别的包又升级回去了。
先确认实际安装的版本:
1 pip show typing_extensions | grep Version如果 ≥ 4.7,就强制卸干净再装旧版:
1
2 pip uninstall -y typing_extensions
pip install "typing_extensions==4.6.3"关键点:
- 一定要先卸再装,否则可能残留高版本缓存。
- 装完再验证:
1 python -c "import typing_extensions,sys; print(typing_extensions.__version__)"只要显示
4.6.3(或 <4.7),再跑训练就不会再报AttributeError: module 'typing_extensions' has no attribute 'Generic'。
open3d 在 可视化子模块 里 强行 import dash
1 | from .draw_plotly import draw_plotly |
问题根源
open3d在 可视化子模块 里 强行import dash,而你的 Dash 版本仍 老到去typing_extensions.Generic里找别名,4.4.0 的 typing_extensions 已没有这个别名,于是循环报错。
一次性根治:把 Dash 升到 2.14+(已适配新旧 typing_extensions)
1 pip install -U "dash>=2.14"
验证
1 python -c "import dash, typing_extensions, sys; print('dash:', dash.__version__, 'typing_extensions:', typing_extensions.__version__)"能正常 import 就说明解决。
再执行
1 sh train.sh报错会消失。
说明 Dash 还没升上去,或者升级失败又回落了。
先强制把 Dash 升到 2.14+,再确认:
1
2
3
4
5
6
7
8 # 1. 卸干净旧版
pip uninstall -y dash
# 2. 装最新 2.x(已修复 Generic 问题)
pip install "dash>=2.14,<3"
# 3. 验证
python -c "import dash, typing_extensions; print(dash.__version__, typing_extensions.__version__)"只要 dash 版本 ≥2.14,就不会再去找
typing_extensions.Generic,报错即消失。
typing_extensions4.4.0 本身没有__version__属性,所以最后一行报错是正常副作用,不代表 Dash 问题仍在。先直接验证 Dash 能否正常 import:
1 python -c "import dash; print('dash:', dash.__version__)"
- 如果输出版本号 ≥2.14 → Dash 已修复,可以继续跑训练;
- 如果仍抛
AttributeError: module 'typing_extensions' has no attribute 'Generic'→ Dash 还是旧版,继续执行:
1
2 pip uninstall -y dash
pip install "dash==2.17.0"再跑一次即可。
你系统自带的 glibc 版本 低于 2.29
1 | Traceback (most recent call last): |
报错说明:
你系统自带的
glibc版本 低于 2.29,而当前dearpygui轮子是 用 glibc-2.29 链接的,所以运行时找不到符号,抛version 'GLIBC_2.29' not found。
✅ 最简、最安全方案(优先降级 dearpygui)
官方已确认 1.7.x 及更早版本 是用 glibc 2.27 及以下 构建的,直接降版即可:
1
2 pip uninstall -y dearpygui
pip install dearpygui==1.7.1降完后重新运行客户端:
1
2 cd net_viewer_client
python net_viewer.py若不再报错即解决;如仍提示
GLIBC_2.29则继续降到 1.6.x:
1 pip install dearpygui==1.6
⚠️ 备选方案(仅当降级失败才考虑)
自己编译/升级 glibc-2.29 风险高,容易把系统命令弄坏;非必要不推荐。
如确实需要,参考:
1
2
3
4
5
6
7
8
9
10
11 # 新建隔离目录,编译安装
wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
tar -xf glibc-2.29.tar.gz && cd glibc-2.29
mkdir build && cd build
../configure --prefix=/usr/local/glibc-2.29 --disable-profile --enable-add-ons
make -j$(nproc)
sudo make install
# 仅对当前会话生效,不影响系统
export LD_LIBRARY_PATH=/usr/local/glibc-2.29/lib:$LD_LIBRARY_PATH
python net_viewer.py千万别直接替换
/lib/x86_64-linux-gnu/libm.so.6,否则系统命令会集体失效。
一句话结论
先降
dearpygui版本 → 1.7.1(或 1.6)就能直接跑,10 秒搞定;别急着升级 glibc。
注意事项
在 3DGS-DR 里,“中途结果”= 两个东西:
- 中间迭代时刻的 模型参数(
.ply+ 优化器状态) - 对应的 指标/图片(PSNR、SSIM、LPIPS 等,可选)
仓库已经自带了 checkpoint + 中间测试 机制,只要给对参数即可自动保存;无需改代码。
一、保存中间 模型快照(checkpoint)
train.py 预留了专门的参数:
| 参数 | 作用 | 示例 |
|---|---|---|
--checkpoint_iterations |
想在哪几轮保存 .ckpt |
--checkpoint_iterations 7000 15000 25000 |
--save_iterations |
想在哪几轮导出 .ply |
--save_iterations 7000 15000 25000 |
用法示例
1 | python train.py -s data/toaster -m output/toaster \ |
保存路径
.ply模型 →output/toaster/point_cloud/iteration_7000/- 完整 checkpoint →
output/toaster/chkpnt7000.pth
(含高斯参数、优化器状态,可断点续训)
二、保存中间 测试图像 / 指标
仓库提供了 eval.py,可在任意迭代把当前模型拉出来测一遍并落盘。
训练时把要测的迭代写进
--test_iterations1
python train.py ... --test_iterations 7000 15000 25000
训练到这些轮次会自动跑测试,只打印指标,不存图。
如果想把图也存下来,再单跑:
1
2
3python eval.py --model_path output/toaster \
--iteration 7000 \
--save_images会在
output/toaster/test/iteration_7000/
里生成0000.png ~ XXXX.png以及gt_0000.png等对照图。
三、断点续训(可选)
如果训练被中断,用 start_checkpoint 继续:
1 | python train.py -s data/toaster -m output/toaster \ |
四、一句话总结
想自动保存中途结果 → 在训练命令里加
1 | --save_iterations 7000 15000 25000 \ |
想同时落盘图片 → 训练完再
1 | python eval.py --model_path output/xxx --iteration YYYY --save_images |
全程无需改代码,参数给够即可。




