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/roomimages、gsplat_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-dir 为 gsplat_results/my_scene_train_rclip3。


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

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

类型 路径示例 说明
配置快照 .../cfg.yml 训练时的完整 Config(含 train_radius_clip、traj_radius_clip 等)
步末统计(JSON) .../stats/train_step2999_rank0.json、.../stats/val_step2999.json 训练段耗时/显存/高斯数;验证段 PSNR、SSIM、LPIPS 等
TensorBoard .../tb/events.out.tfevents.* tb_every: 100 时记录 train/loss、train/num_GS、train/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 --- baseline (gsplat_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 --- baseline (gsplat_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.mp4、gsplat_results/my_scene_train_rclip3/videos/traj_1999.mp4

相关推荐
创世虚拟世界5 小时前
从零打通 MCP 访问创世虚拟世界CRM的 3D 数据,我搭了一个可直接调用的演示站
3d
李游Leo10 小时前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 高斯参数的非有限值隔离与可渲染性门禁【鸿蒙心迹】
开发语言·c++·3d·harmonyos
迁移科技10 小时前
小体积蕴含大能量:Epic Eye Pixel Mini轻量化相机的应用美学
人工智能·3d·自动化·视觉检测
Martina_032112 小时前
同一片森林换个镜头就忽冷忽暖?用6步统一曝光、LUT与相机后处理
人工智能·游戏·数学建模·3d·自然语言处理·aigc·游戏策划
Better Bench13 小时前
奇异值分解(SVD)在3D骨骼旋转中的应用:原理与实现
3d·人体姿态估计·骨骼关键点
追烽少年x14 小时前
从零构建一个3D点云预览器:Python + PySide6 + pyqtgraph 实战
python·3d
西红柿炖牛腩3541 天前
Three.js 模型体积优化:Draco/Meshopt 压缩与 DRACOLoader 配置的 4 个步骤
javascript·3d·性能优化
JAI科研2 天前
CT重建(二) | 3D高斯泼溅:实时渲染的革命
图像处理·人工智能·计算机视觉·3d·视觉检测·ct重建
李游Leo2 天前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 输入帧内参与位姿的版本一致性门禁【鸿蒙心迹】
c++·3d·harmonyos
HwJack202 天前
【共创稿事节】HarmonyOS 7空间信息层级:焦点、景深与注意力引导
3d·华为·harmonyos·空间计算