3D Gaussian Splatting 代码复现实战:Ubuntu 20.04 + RTX 4090 环境配置与 30 分钟训练指南

📅 2026/7/9 15:39:34
3D Gaussian Splatting 代码复现实战:Ubuntu 20.04 + RTX 4090 环境配置与 30 分钟训练指南
3D Gaussian Splatting 代码复现实战Ubuntu 20.04 RTX 4090 环境配置与 30 分钟训练指南1. 环境准备与依赖安装在开始3D Gaussian Splatting的代码复现之前确保你的系统满足以下硬件和软件要求操作系统Ubuntu 20.04 LTSGPUNVIDIA RTX 409024GB显存CUDA11.8Python3.8或更高版本PyTorch2.01.1 安装系统依赖首先更新系统并安装基础开发工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git cmake libopenexr-dev libxi-dev libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev1.2 配置CUDA和cuDNN对于RTX 4090显卡推荐使用CUDA 11.8wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run sudo sh cuda_11.8.0_520.61.05_linux.run安装完成后将CUDA添加到环境变量echo export PATH/usr/local/cuda-11.8/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc验证CUDA安装nvcc --version1.3 安装Anaconda和Python环境创建并激活conda环境wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh bash Anaconda3-2023.03-Linux-x86_64.sh source ~/.bashrc conda create -n gsplat python3.8 -y conda activate gsplat2. 代码获取与编译2.1 克隆仓库git clone --recursive https://github.com/graphdeco-inria/gaussian-splatting.git cd gaussian-splatting2.2 安装Python依赖pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install plyfile tqdm pip install submodules/diff-gaussian-rasterization pip install submodules/simple-knn2.3 编译可视化工具cd SIBR_viewers cmake -Bbuild . -DCMAKE_BUILD_TYPERelease cmake --build build --target install --config Release cd ..3. 数据准备与预处理3.1 下载示例数据集mkdir -p data wget https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip -P data unzip data/tandt_db.zip -d data3.2 使用COLMAP进行场景重建安装COLMAPsudo apt install -y colmap运行重建python convert.py -s data/tandt_db --colmap_executable /usr/bin/colmap4. 模型训练4.1 训练脚本解析核心训练命令如下python train.py -s data/tandt_db -m output/tandt_db关键参数说明-s: 输入场景路径-m: 模型输出路径--iterations: 训练迭代次数默认30,000--resolution: 图像分辨率缩放因子4.2 快速训练配置对于RTX 4090显卡可以使用以下优化配置实现30分钟快速训练python train.py -s data/tandt_db -m output/tandt_db \ --iterations 7000 \ --resolution 2 \ --densification_interval 100 \ --opacity_reset_interval 300 \ --position_lr_init 0.00016 \ --position_lr_final 0.0000016 \ --scaling_lr 0.005 \ --rotation_lr 0.0014.3 训练过程监控训练过程中会输出如下信息Iteration 1000: Loss0.123, PSNR25.6, SSIM0.92 Densifying: Added 1242 gaussians, Removed 312 gaussians关键指标说明Loss: 综合损失值L1 DSSIMPSNR: 峰值信噪比越高越好SSIM: 结构相似性越接近1越好5. 结果可视化与导出5.1 实时可视化./SIBR_viewers/install/bin/SIBR_gaussianViewer_app -m output/tandt_db可视化界面支持以下操作鼠标拖动旋转视角WASD键移动摄像机空格键重置视角5.2 导出为点云格式import torch from scene import GaussianModel gaussians GaussianModel(3) gaussians.load_ply(output/tandt_db/point_cloud/iteration_7000/point_cloud.ply) # 访问高斯参数 positions gaussians.get_xyz() colors gaussians.get_features() opacities gaussians.get_opacity() scales gaussians.get_scaling() rotations gaussians.get_rotation()5.3 渲染视频序列python render.py -m output/tandt_db --skip_train --skip_test6. 性能优化技巧6.1 内存优化配置针对RTX 4090的24GB显存# 在train.py中添加以下配置 pipe PipelineParams( densify_prune_iter [500, 3000, 7000], densify_grad_threshold 0.0002, densify_size_threshold 20, max_gaussians 500000 # 控制最大高斯数量 )6.2 混合精度训练修改训练循环以启用AMPscaler torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): render_pkg render(viewpoint_cam, gaussians, pipe, background) image render_pkg[render] loss (1.0 - opt.lambda_dssim) * l1_loss(image, gt_image) opt.lambda_dssim * (1.0 - ssim(image, gt_image)) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()6.3 自定义数据加载高效数据加载示例from torch.utils.data import Dataset, DataLoader class GaussianDataset(Dataset): def __init__(self, scene_path): self.cameras scene.getTrainCameras() self.loaded_images [None] * len(self.cameras) def __getitem__(self, idx): if self.loaded_images[idx] is None: cam self.cameras[idx] img load_image(cam.image_name) # 自定义图像加载函数 self.loaded_images[idx] img return self.cameras[idx], self.loaded_images[idx] dataset GaussianDataset(data/tandt_db) dataloader DataLoader(dataset, batch_size4, shuffleTrue, num_workers4)7. 常见问题解决7.1 CUDA内存不足错误解决方案减少--resolution参数值降低--densification_interval设置--max_gaussians限制最大高斯数量7.2 COLMAP重建失败检查要点确保图像EXIF信息完整尝试手动运行COLMAPcolmap automatic_reconstructor \ --image_path data/tandt_db/images \ --workspace_path data/tandt_db/colmap \ --camera_model SIMPLE_PINHOLE7.3 渲染质量不佳优化建议增加训练迭代次数调整学习率参数--position_lr_init 0.00016 --position_lr_final 0.0000016 --feature_lr 0.0025 --opacity_lr 0.05 --scaling_lr 0.005 --rotation_lr 0.0018. 高级应用与扩展8.1 自定义数据集训练数据目录结构要求custom_dataset/ ├── images/ # 原始图像 │ ├── 0001.jpg │ ├── 0002.jpg │ └── ... └── masks/ # 可选遮罩 ├── 0001.png ├── 0002.png └── ...8.2 实时SLAM集成将3DGS与SLAM系统结合的伪代码class SLAMWith3DGS: def __init__(self): self.gaussians GaussianModel(3) self.keyframes [] def add_frame(self, image, pose): # 1. SLAM位姿估计 current_pose self.estimate_pose(image) # 2. 关键帧选择 if self.is_keyframe(current_pose): self.keyframes.append((image, current_pose)) # 3. 增量式重建 self.update_gaussians(image, current_pose) def update_gaussians(self, image, pose): # 实现增量式高斯重建逻辑 pass8.3 动态场景处理动态3DGS的修改要点为每个高斯添加时间维度参数修改渲染方程以支持时间插值实现运动估计和补偿class DynamicGaussianModel(GaussianModel): def __init__(self, sh_degree): super().__init__(sh_degree) self._motion torch.empty((0, 3), devicecuda) # 每个高斯的运动向量 def add_motion_parameters(self): # 实现运动参数初始化 pass def apply_motion(self, t): # 根据时间t应用运动 self._xyz t * self._motion