gsplat 5 分钟上手:3D 高斯泼溅重建 3D 场景,显存省 4 倍还能多卡加速
【免费下载链接】gsplatCUDA accelerated rasterization of gaussian splatting项目地址: https://gitcode.com/GitHub_Trending/gs/gsplat
跑满 3 万步迭代,一组照片就能变成浏览器里可旋转的 3D 场景,显存占用比官方 3D 高斯泼溅实现低最多 4 倍。gsplat 是一个 CUDA 加速的高斯泼溅光栅化开源库,解决"照片重建真实感 3D 场景"这件事,适合已有 PyTorch + CUDA 环境、想自己搭重建管线的开发者。
60 秒跑通:4 条命令看到渲染结果
开始前只需要一样东西:装好 CUDA 的 PyTorch。下面的演示不需要任何数据集,用 2000 个高斯去拟合一张图,几秒到几分钟就能收敛:
pip install gsplat git clone https://gitcode.com/GitHub_Trending/gs/gsplat && cd gsplat/examples pip install -r requirements.txt python image_fitting.py第一条命令装库(首次 import 时会 JIT 编译 CUDA 代码,等几分钟);image_fitting.py默认用内置的红蓝象限图当目标,跑起来后终端持续打印 loss,能看到拟合效果逐步稳定下来。完整场景训练收敛起来是什么样,看官方 garden 场景的这个过程:左边是随机初始化,右边是训练后期。👇
核心机制:高斯泼溅到底在泼什么
把场景想象成一堆"彩色烟雾团"——没有网格,只有几百万个 3D 高斯,每个带位置、形状、朝向、不透明度、颜色。
- 颜色用球谐函数表达,所以换个视角看颜色会变
- 渲染是 splatting:把高斯投影到屏幕上前到后混合,比光线行进快得多
- 全程可微:像素误差直接反传回每个高斯
- 训练中还会稠密化:糊的地方补高斯,冗余的删掉(default / MCMC 两种策略)
按任务展开
端到端:从一组照片重建可旋转的 3D 场景
这个任务解决最常见的场景:你有一个物体或房间的拍摄照片,加 COLMAP 跑出的位姿,想要一个能环视的 3D 场景。
cd examples python datasets/download_dataset.py # Mip-NeRF 360 → data/360_v2/ python simple_trainer.py mcmcexamples/simple_trainer.py 默认读 garden 场景,训练 3 万步,在第 7000、30000 步自动存 checkpoint 并写评估指标,同时在本机 8080 端口开一个 web viewer。训练中途就能打开localhost:8080实时旋转查看,不用等训练结束。
怎么验证跑成功:results/garden/stats/下会出现val*.json,对比官方 3DGS 论文 garden 的 PSNR(26.96);浏览器里场景结构完整、没有明显漂浮噪点,就算过关。
鱼眼、滚动快门相机不用预校正的用法
这个任务解决非常规镜头:针孔畸变、鱼眼、f-theta、滚动快门。关键是原始图像不用先做去畸变——只要有 COLMAP 标定好的畸变参数,投影在 CUDA kernel 里直接算。
python simple_trainer.py mcmc --with_ut --with_eval3d --data_dir data/zipnerf/londonzipnerf数据就是带强畸变的实拍图,专门用来验证这条路;注意 3DGUT 路径只支持 MCMC 策略。参数细节(radial_coeffs、camera_model="fisheye"、rolling_shutter等)在 docs/3dgut.md 里有完整列表。
怎么验证:训练完用python simple_viewer_3dgut.py --ckpt <checkpoint 路径>查看,viewer 里实时调畸变参数,渲染应和原图一致。
显存压到 1/4 的设置:3 个关键开关
这个任务解决"场景大、照片多,显存爆掉"的问题。
--packed:packed 格式光栅化,官方实测比官方 3DGS 实现省最多 4 倍显存、快 15%(单次前向略慢,训练整体更快)--data_factor 8:训练图降采样,默认 4,显存吃紧就翻倍- 多卡:等效 batch ×4,所以步数同步缩到 1/4:
CUDA_VISIBLE_DEVICES=0,1,2,3 python simple_trainer.py default \ --packed --steps_scaler 0.25 --data_dir data/360_v2/garden另外rasterization()支持任意批量渲染:1 万个高斯时,1 个 batch 前向 0.37ms,64 个 batch 也只要 3.7ms,显存随 batch 线性增长,适合离线批量出图。
怎么验证:训练时nvidia-smi显存有富余,4 卡跑完的总耗时约为单卡的 1/4。⚡
实时查看器:训练完不用等,1 条命令看结果
这个任务解决"训练中途想看效果"或"加载别处导出的 .ply 文件"。
python simple_viewer.py --ckpt results/garden/ckpts/ckpt_29999_rank0.pt --port 8080也支持--ply加载标准 3DGS 导出文件,--scene_grid 3可以把场景平铺成 3×3 网格快速扫视全局。怎么验证:浏览器打开 8080 端口,场景可拖拽旋转、帧率稳定不卡。
高频问题
Q:首次运行特别慢,或报 CUDA 编译错误?PyPI 版首次运行 JIT 编译,等几分钟属正常;源码安装需要 torch 与 CUDA 版本匹配,Windows 编译问题看docs/INSTALL_WIN.md。
Q:训练 loss 不降或降不下去?九成是数据问题:默认init_type="sfm"需要数据目录里有sparse/0点云和正确的位姿;再检查--data_factor是否开太大导致图太糊。
Q:显存 OOM 怎么办?加--packed并把data_factor翻倍;MCMC 用户可用--strategy.cap-max限制高斯数量(官方基准用 100 万);还不行就降--sh_degree。
Q:重建发糊、有伪影或透明窟窿?先看 val PSNR:明显偏低是位姿问题,可试--pose_opt联合优化相机;透明窟窿是训练图有透明背景,加--random_bkgd随机背景抑制透明。
Q:viewer 打不开 / 8080 端口被占?用--port换个端口;纯离线训练不想开 viewer 就加--disable_viewer,评估指标仍会照常落盘。
跑通上面 garden 场景后,拿你自己的一组照片先跑一遍 COLMAP,再试试--with_ut在畸变数据上训练,对比校正前后两张图就知道 3DGUT 值不值得上了。
【免费下载链接】gsplatCUDA accelerated rasterization of gaussian splatting项目地址: https://gitcode.com/GitHub_Trending/gs/gsplat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考