gsplat 3D高斯泼溅CUDA加速渲染:四分之一显存训完一个花园场景
【免费下载链接】gsplatCUDA accelerated rasterization of gaussian splatting项目地址: https://gitcode.com/GitHub_Trending/gs/gsplat
如果你曾遇到过训练3D高斯泼溅(Gaussian Splatting)时显存一路爆涨、或者渲染一帧要等几十毫秒的情况,那么gsplat值得看一眼:它是一个CUDA加速的高斯泼溅光栅化(把上亿个微小3D高斯椭球实时渲染成画面)开源库,带完整的Python绑定。在官方3DGS基准上,它训练最多省4倍显存、快15%,而且整条渲染管线都暴露成PyTorch算子,你可以逐层调参。
上手之前,先说清楚它替代了什么。
它到底解决了什么痛点
没有gsplat时,你只能直接改官方3DGS的C++代码:换个相机模型、调一下致密化逻辑、加一个损失函数,都得重新编译、重新调试。场景一做大,显存先爆,最后只能降采样、降分辨率硬扛。 有gsplat之后,渲染、梯度、致密化(densification,训练中动态增删高斯的机制)全都变成了可调用的PyTorch算子:同样的花园基准场景,显存占用降到四分之一就能训完,还能叠加2DGS(用2D高斯圆盘建模表面的泼溅变体)或3DGUT渲染路径,鱼眼、FTheta甚至激光雷达传感器都是现成的。
痛点清楚了,那就把环境搭起来,用一张图先看效果。
🚀 跑通第一个Demo(附完整步骤)
环境速查
- PyTorch ≥ 2.7(README明确这是当前硬性要求)
- NVIDIA GPU + CUDA驱动,CUDA 12.8 / 13.2 构建环境均可
- Ninja构建工具(pip安装时会自动作为构建依赖装上)
- 建议用 venv 隔离环境,避免和现有依赖打架
三步出结果
第一步:拿到代码
git clone https://gitcode.com/GitHub_Trending/gs/gsplat cd gsplat你会看到仓库顶层的gsplat/、examples/、tests/等目录结构。
第二步:安装gsplat与示例依赖
pip install -e . pip install -r examples/requirements.txt --no-build-isolation编译阶段会刷出一长串nvcc日志,跑完即表示CUDA光栅化内核编译成功。
第三步:跑一个零数据快速上手Demo
cd examples python image_fitting.py --iterations 500屏幕会逐条打印每轮迭代的loss,结束时在results/目录生成training.gif——它是用10万个高斯"高拟合"一张256×256目标图的全过程。
下图展示了高斯泼溅的训练过程,你可以看到高斯从随机初始化逐渐收敛成清晰画面:
跑通之后,我们拆开看看gsplat内部是怎么组织的。
🔍 深入理解:核心模块拆解
3D高斯泼溅光栅化核心
rasterization()一个函数把百万级3D高斯变成2D图像,并把损失回传到每个高斯上:
- 渲染入口:
gsplat/rendering.py - Torch算子封装:
gsplat/cuda/_torch_impl.py - CUDA内核实现(投影、排序、光栅化):
gsplat/cuda/csrc/ - 2DGS表面渲染变体:
gsplat/cuda/_torch_impl_2dgs.py
高斯泼溅致密化策略
决定"何时加高斯、何时删高斯",内置两套现成实现,也是自定义的官方扩展点:
- 策略基类(实现你自己的策略就继承它):
gsplat/strategy/base.py - 默认克隆/分裂策略:
gsplat/strategy/default.py - MCMC采样策略(大规模场景更省显存):
gsplat/strategy/mcmc.py
压缩与导出
把训练产物压缩得更省空间、更好分发:
- 基于PNG的压缩:
gsplat/compression/png_compression.py - 高斯排序优化:
gsplat/compression/sort.py - 模型导出:
gsplat/exporter.py
传感器与相机模型
非针孔相机和激光雷达不用再自己手推投影公式:
- 相机模型(pinhole / FTheta / fisheye):
gsplat/sensors/models/cameras/ - 激光雷达模型:
gsplat/sensors/models/lidars/ - 可微投影算子:
gsplat/sensors/kernels/projective_sensor_ops.py
⚡ 从Demo到生产:性能与工程化建议
理解了结构,接着聊怎么把Demo用进生产。
- 按场景规模切换致密化策略:大规模场景换成MCMCStrategy——MCMC(马尔可夫链蒙特卡洛)采样让高斯数量大致恒定,显存不会随训练单调上涨;在
examples/simple_trainer.py里改strategy字段即可。 - 批量渲染代替逐帧循环:gsplat支持跨多场景、多视角的任意batching(用法见
docs/batch.md),多GPU并行训练参考examples/benchmarks/basic_4gpus.sh,分布式逻辑在gsplat/distributed.py。 - 先profile再调参:跑
profiling/main.py定位瓶颈落在投影、排序、光栅化还是球谐特征组装哪一步,再有针对性地调;profiling/batch.py适合做批量性能回归。 - 交付前先压缩:用
gsplat/compression/压缩训练好的高斯,可大幅缩小存储体积;若只做纯推理渲染(不求梯度),试试gsplat/experimental/里的HiGS路径,单帧延迟更低。 - 大数据集先降采样:
--data_factor 4可对输入图像降采样,examples/simple_trainer.py会据此自动缩放策略的各迭代阈值,省下的显存拿去放更大的batch。
下一步可以探索的方向:把examples/datasets/colmap.py和examples/datasets/normalize.py接上,用自己的COLMAP采集数据训练真实场景;想渲染动态场景,看examples/dynamic_surgical_trainer.py(G-SHARP)或docs/3dgut.md;想改致密化行为,直接继承gsplat/strategy/base.py里的Strategy,扩展点都给你留好了。
🕳️ 高频踩坑 & 速查
真实场景里总有些坑,这里整理几个出现频率最高的:
| 问题现象 | 大概率原因 | 一行解法 |
|---|---|---|
首次import gsplat特别慢 | 首次运行JIT编译CUDA内核 | 等一次即有缓存,或改用pip install -e .提前编译 |
| Windows上编译报错 | 构建工具链缺失 | 按docs/INSTALL_WIN.md的步骤装Visual Studio组件 |
| 大场景OOM | DefaultStrategy克隆分裂使显存持续上涨 | 切换MCMCStrategy并调小--data_factor |
pip install gsplat装到不匹配版本 | torch与CUDA版本组合不对 | python -c "import torch; print(torch.version.cuda)"查版本再选对应wheel |
| 2DGS输出模糊 | 误调用了3DGS的rasterization | 改用rasterization_2dgs() |
gsplat已经把整条3D高斯泼溅渲染管线压缩成了你可逐层调参的PyTorch算子——现在打开examples/目录,把image_fitting.py跑一遍,再换上自己的数据训练一个真实场景。
【免费下载链接】gsplatCUDA accelerated rasterization of gaussian splatting项目地址: https://gitcode.com/GitHub_Trending/gs/gsplat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考