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

相关推荐
chipsense20 小时前
Sensor Shenzhen 2026技术风向标:从3D霍尔到TMR融合的传感器演进路径
大数据·3d·传感器技术·传感器
tctasia1 天前
TCT Awards 2026 获奖名单发布:年度增材制造创新全景一览
3d·制造
m0_743106461 天前
【浙大&南洋理工最新综述】Feed-Forward 3D Scene Modeling(一)
论文阅读·人工智能·计算机视觉·3d·几何学
沙振宇1 天前
【Web】使用Vue3+PlayCanvas开发3D游戏(十一)渲染3D高斯泼溅效果
前端·游戏·3d
boss-dog1 天前
3D视觉机器人中手眼标定的精度提升方法记录——ICP算法
算法·3d·机器人·手眼标定·icp
三毛的二哥1 天前
障碍物遮挡判断算法
人工智能·算法·计算机视觉·3d
动恰客流管家1 天前
动恰3DV3丨客流统计系统:工业农业文旅类景区智慧客流解决方案
大数据·人工智能·3d
ZC跨境爬虫1 天前
3D地球卫星轨道可视化平台开发Day2(轨道错位Bug修复+模块化结构优化)
前端·3d·html·json·bug
ZC跨境爬虫1 天前
3D 地球卫星轨道可视化平台开发 Day1(3D 场景、卫星渲染与筛选交互实现)
前端·3d·html·json·交互
CG_MAGIC1 天前
Blender×酒店设计|《Cozy Gold》完整呈现
3d·blender·贴图·效果图·建模教程