3DGS场景优化 8*A100GPU实战

第一节gsplat 官方文档:Render a Large Scene 介绍。
第二节起 为本机 COLMAP 实验:训练、日志、指标与渲染相对 GT 的对照。工作区根目录默认为 /home/ray/default


1. 渲染大场景

原文链接: https://docs.gsplat.studio/main/examples/large_scale.html

gsplat 在设计上注重效率,因此非常适合渲染大场景。例如,这里我们将 Garden 场景复制成 9×9 的网格来模拟大场景,总共有 3000 万(30M) 个高斯,而 gsplat 仍允许对其进行实时渲染

实现上述效果的主要「魔法」是一个非常简单的技巧:我们对投影后的高斯半径 施加一个较小的阈值(例如 3 像素 ),据此忽略 离相机较远的高斯;该阈值可在我们的 rasterization() API 中通过参数 radius_clip 配置。

gsplat 作为 CUDA 后端时:

(与官网一致的内嵌视频;若渲染器不支持 iframe,请打开:https://www.youtube.com/watch?v=rXyJwL7uJFQ

diff-gaussian-rasterization 作为 CUDA 后端时:

(同上:https://www.youtube.com/watch?v=kk3G3P68rkc

注意:nerfstudio 的 viewer 类似,当渲染较慢时,我们的 viewer 会自动切换到较低分辨率。

此示例的代码位于 examples/ 目录下:

bash 复制代码
# First train a 3DGS model
CUDA_VISIBLE_DEVICES=0 python simple_trainer.py default \
    --data_dir data/360_v2/garden/ --data_factor 4 \
    --result_dir ./results/garden

# View it in a viewer with gsplat
python simple_viewer.py --scene_grid 5 --ckpt results/garden/ckpts/ckpt_6999.pt --backend gsplat

# Or, view it with inria's backend (requires to insteall `diff-gaussian-rasterization`)
python simple_viewer.py --scene_grid 5 --ckpt results/garden/ckpts/ckpt_6999.pt --backend inria

# Warning: a large `--scene_grid` might blow up your GPU memory.

2. 本地实践日志

官方示例强调:已训练好的权重 + viewer 里 scene_grid 放大场景 + 渲染时的 radius_clip

在本项目中,我们还区分了两种「大场景」相关用法(详见工作区 WORKSPACE_PROJECT_SUMMARY.md):

策略 含义 权重是否变化
仅轨迹 / viewer 侧 culling traj_radius_clip 或 viewer 中的 radius_clip,用于生成 MP4 或交互预览 (同一 checkpoint)
训练每一步光栅化也 culling train_radius_clip 传入训练与验证的 rasterize_splats (需单独目录保存新 checkpoint)

下面给出训练过程、配置快照、日志位置、定量指标与图像对比


3. 训练环境与一键脚本

  • Conda 环境gsplat_run(与 train_roomimages_myscene_radius_clip.sh 一致)。
  • 脚本gsplat/examples/train_roomimages_myscene_radius_clip.sh
    • 通过环境变量 TRAIN_RADIUS_CLIP (默认 3.0)设置 --train-radius-clip--traj-radius-clip
    • 输出到新目录 ,不覆盖原有 gsplat_results/roomimagesgsplat_results/my_scene

等价核心命令(单场景示意):

bash 复制代码
cd /home/ray/default/gsplat/examples
conda activate gsplat_run
export PYTHONPATH="/home/ray/default/gsplat:/home/ray/default/gsplat/examples:${PYTHONPATH}"

python simple_trainer.py default \
  --data-dir /home/ray/default/data/roomimages \
  --result-dir /home/ray/default/gsplat_results/roomimages_train_rclip3 \
  --data-factor 1 \
  --max-steps 3000 \
  --eval-steps 3000 \
  --save-steps 3000 \
  --train-radius-clip 3.0 \
  --traj-radius-clip 3.0 \
  --disable-viewer

my_scene--max-steps / --eval-steps / --save-steps 设为 2000--result-dirgsplat_results/my_scene_train_rclip3


4. 训练过程:保存了哪些「日志」

每次运行会在 result_dir 下写入至少:

类型 路径示例 说明
配置快照 .../cfg.yml 训练时的完整 Config(含 train_radius_cliptraj_radius_clip 等)
步末统计(JSON) .../stats/train_step2999_rank0.json.../stats/val_step2999.json 训练段耗时/显存/高斯数;验证段 PSNR、SSIM、LPIPS 等
TensorBoard .../tb/events.out.tfevents.* tb_every: 100 时记录 train/losstrain/num_GStrain/mem

查看 TensorBoard 示例:

bash 复制代码
tensorboard --logdir /home/ray/default/gsplat_results/roomimages/tb
# 或
tensorboard --logdir /home/ray/default/gsplat_results/roomimages_train_rclip3/tb

4.1 配置快照摘录(train_radius_clip 重训)

roomimages_train_rclip3/cfg.yml 抽取与「大场景」相关的项:

yaml 复制代码
train_radius_clip: 3.0
traj_radius_clip: 3.0
max_steps: 3000
eval_steps: [3000]
save_steps: [3000]
data_dir: /home/ray/default/data/roomimages
result_dir: /home/ray/default/gsplat_results/roomimages_train_rclip3
disable_viewer: true
tb_every: 100

4.2 统计 JSON 摘录(验证集)

roomimages --- baselinegsplat_results/roomimages/stats/val_step2999.json):

json 复制代码
{"psnr": 13.60782241821289, "ssim": 0.6638185977935791, "lpips": 0.6336232423782349, "ellipse_time": 0.08137485384941101, "num_GS": 436087}

roomimages --- train_radius_clip=3 重训gsplat_results/roomimages_train_rclip3/stats/val_step2999.json):

json 复制代码
{"psnr": 5.495437145233154, "ssim": 0.5251569747924805, "lpips": 0.8455857634544373, "ellipse_time": 0.004726707935333252, "num_GS": 770717}

my_scene --- baselinegsplat_results/my_scene/stats/val_step1999.json):

json 复制代码
{"psnr": 25.201412200927734, "ssim": 0.9248239398002625, "lpips": 0.37743473052978516, "ellipse_time": 0.003070274988810221, "num_GS": 95672}

my_scene --- train_radius_clip=3 重训gsplat_results/my_scene_train_rclip3/stats/val_step1999.json):

json 复制代码
{"psnr": 6.146676063537598, "ssim": 0.7319830656051636, "lpips": 0.7573891878128052, "ellipse_time": 0.0043875475724538164, "num_GS": 787251}

说明: 官方文档中的 radius_clip 主要用于海量高斯下的实时渲染 ;在 训练阶段 持续开启 train_radius_clip 会改变参与梯度的集合,本工作区这两组实验中 验证 PSNR 明显低于 baseline ,属于「策略与质量的权衡」------若追求拟合质量,可优先采用 baseline 训练 + 仅推理/轨迹侧 culling,与文档中「先训练再大规模查看」的叙事一致。


5. 渲染图与真实照片(GT)对比

验证集划分与 simple_trainer / COLMAP 数据集一致:test_every: 8,即按排序后的图像下标 每 8 张取 1 张 作为验证视角。

下面 同一验证索引 0004 下,对比 baseline 渲染train_radius_clip=3 重训渲染 、以及 对应 GT 图像(路径均相对于工作区根目录)。

5.1 roomimages

数据集验证视角 val_step*_0004 对应全局排序后第 32 张图(test_every=8 时:4 × 8 = 32),即 data/roomimages/images/frame_0033.jpg

类型 图像
Baseline 渲染
train_rclip3 渲染
真实照片 GT

5.2 my_scene

图像位于子目录 images/front_stereo_camera_left/,按 COLMAP 使用的排序,验证索引 0004 对应的 GT 文件为:

data/my_scene/images/front_stereo_camera_left/1760584535304523168.jpeg

类型 图像
Baseline 渲染
train_rclip3 渲染
真实照片 GT

5.3 轨迹视频(可选)

场景 路径
roomimages,仅轨迹 radius_clip(baseline ckpt) gsplat_results/roomimages/videos_largescale_rclip3/traj_2999.mp4
roomimages,train_rclip3 gsplat_results/roomimages_train_rclip3/videos/traj_2999.mp4
my_scene,同上两类 gsplat_results/my_scene/videos_largescale_rclip3/traj_1999.mp4gsplat_results/my_scene_train_rclip3/videos/traj_1999.mp4

相关推荐
做cv的小昊4 小时前
结合代码读3DGS论文(10)——ICLR 2025 3DGS加速&压缩新工作Sort-Free 3DGS论文及代码解读
论文阅读·人工智能·游戏·计算机视觉·3d·图形渲染·3dgs
图扑软件7 小时前
图扑 HT 帧动画 | 3D 动态渲染设计与实现
前端·javascript·3d·动画·数字孪生
新启航光学频率梳8 小时前
精密陶瓷轴承套孔深光学3D轮廓测量-激光频率梳3D轮廓技术
科技·3d·制造
weixin_5051544613 小时前
博维数孪,重塑3D作业指导新时代
人工智能·物联网·3d·智慧城市·数据安全·数字孪生
3DVisionary14 小时前
从微观损伤到宏观断裂:DIC非接触测量在复合材料可靠性验证中的前沿实践
人工智能·数码相机·算法·机器学习·3d·复合材料·dic技术
Godspeed Zhao1 天前
3D打印的造物革命5
3d
CG_MAGIC1 天前
SketchUp室内布局:户型建模与家具组件高效摆放
3d·贴图·建模教程·渲云渲染
love530love1 天前
ComfyUI-3D-Pack:Windows 下手动编译 mesh_inpaint_processor C++ 加速模块
c++·人工智能·windows·python·3d·hunyuan3d·comfyui-3d-pack
yeflx2 天前
激光雷达点云处理项目:从零搭建 3D 视觉检测系统
人工智能·3d·视觉检测