文章目录
3D高斯应用实践
一、概述
在 3D Gaussian Splatting(3DGS)中,COLMAP 与 gsplat 承担完全不同的核心职责:COLMAP 负责前期的相机位姿估计与场景几何初始化,为 3DGS 提供训练基础数据;gsplat 则负责核心的可微分高斯光栅化渲染,是 3DGS 训练与渲染的计算引擎。两者在 3DGS 流程中一前一后、分工明确、缺一不可
3DGS 完整工作流:
原始图像序列 → COLMAP处理 → 相机参数+稀疏点云 → 高斯模型初始化 → gsplat渲染训练 → 优化后高斯模型 → 实时新视角渲染
二、环境配置
所有流程参考:重建世界LAB(https://www.bilibili.com/video/BV1V56QBKESz/?spm_id_from=333.788.videopod.sections&vd_source=9f84f8828f705519c2c92545101e0759)
2.1 Windows下WSL2安装linux环境
WSL2最有用的功能:
1、安装linux后,在linux环境下终端启动图形窗口应用,是可以直接穿透到Windows系统的!
2、Windows安装了英伟达驱动,通过WSL2安装的Linux系统可以直接调用,不用重新装!
1、命令安装
cs
wsl --install -d Ubuntu-20.04
安装后重启
2、配置UNIX用户名和密码
3、更新系统源
cs
sudo apt update
4、验证linux图形窗口应用穿透到Windows
cs
sudo apt install x11-apps -y
# 测试应用
xeyes
5、查看英伟达驱动
cs
nvidia-smi

6、Windows安装VSCode
官网下载安装,并配置插件:
- wsl
7、wsl2的Linux中联通VSCode
重启终端后,进入命令行某个文件夹下,输入命令:
cs
code .
会在Windows下的VSCode打开这个目录。
注:环境异常后,可以删掉,重新安装
cs
# wsl基本信息 内核版本和基本信息
wsl --version
# 或简写
wsl -v
# 1.查看当前安装的Linux版本和应用wsl的版本
wsl -l -v
# 或
wsl --list --verbose
# 2.停止Linux系统运行
wsl -t Ubuntu-20.04
# 或停止所有 WSL 实例
wsl --shutdown
# 3.注销(卸载)
wsl --unregister Ubuntu-20.04
# 4.验证是否卸载干净
wsl -l -v
# 命令无任何输出
备份和恢复WSL2的Linux环境
cs
# 备份:导出到D盘的WSL备份文件夹,文件名为ubuntu2004_backup.tar
wsl --export Ubuntu-20.04 D:\WSL_Backup\3dgs_backup.tar
# 恢复
# 先注销异常的Ubuntu(可选,若还能识别)
wsl --unregister Ubuntu-20.04
# 导入备份文件并重建WSL2系统
# 格式:wsl --import 新发行版名称 安装路径 备份文件路径 --version 2
wsl --import Ubuntu-20.04 D:\WSL\Ubuntu2004 D:\WSL_Backup\ubuntu2004_backup.tar --version 2
# --version 2 表示强制使用 WSL2 版本(避免默认用 WSL1)
# 导入备份操作同样可以实现不同电脑的数据迁移
2.2 linux环境中安装cuda
1、安装基础依赖环境
cs
# sudo apt-get update的区别:sudo apt update 打印用颜色区分,而不是黑白,更直观
sudo apt update
sudo apt install build-essential
2、下载cuda环境(若有,则跳过)
cs
wget 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进行编译
# 目前官网提供:wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run

cuda安装界面中直接选择install进行安装。
3、配置环境变量
cs
code ~/.bashrc
# 在最后添加环境变量
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
# 环境变量刷新
source ~/.bashrc
# 验证cuda安装成功
nvcc -V
2.3 linux环境中安装colmap
COLMAP 负责前期的相机位姿估计与场景几何初始化,为 3DGS 提供训练基础数据
核心定位:
COLMAP 是一款开源的SfM (运动恢复结构)/MVS (多视角立体匹配)三维重建软件,在 3DGS 中扮演数据预处理与场景初始化的关键角色,为后续高斯模型训练提供基础数据。
主要作用:
| 功能模块 | 具体工作 | 3DGS 中的价值 |
|---|---|---|
| 特征提取与匹配 | 对输入图像提取 SIFT/SURF 等特征点,建立图像间的对应关系 | 构建图像间几何约束,为相机位姿计算提供依据 |
| 相机位姿估计 (SfM) | 计算每张图像的拍摄位置、方向(外参)和内部参数(内参) | 提供精确的相机参数,是 3DGS 训练的必要前提 |
| 稀疏点云重建 | 生成场景的稀疏三维点云 | 作为 3D 高斯模型的初始化位置,每个点对应一个初始高斯分布 |
| 稠密点云生成 (MVS) | 可选步骤,对稀疏点云补充细节,生成更密集的三维点云 | 提供更丰富的几何信息,提升 3DGS 模型细节表现 |
| 格式转换 | 输出 3DGS 可识别的相机参数和点云文件 | 建立从传统摄影测量到神经渲染的桥梁 |
colmap处理流程:
输入:无序的场景 RGB 图像序列
COLMAP 处理:生成相机参数文件 (.txt) 和稀疏点云 (.ply)
输出:为 3DGS 提供初始化所需的相机内外参与初始点云,用于构建初始高斯集合
1、安装基础依赖环境
cs
# sudo apt-get update的区别:sudo apt update 打印用颜色区分,而不是黑白,更直观
sudo apt-get update && sudo apt-get install -y git cmake build-essential ninja-build libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libboost-test-dev libeigen3-dev libfreeimage-dev libgoogle-glog-dev libgflags-dev libglew-dev libqt5opengl5-dev qt5-default libatlas-base-dev libsuitesparse-dev libcgal-dev libcgal-qt5-dev libceres-dev libflann-dev liblz4-dev libsqlite3-dev libmetis-dev
2、下载colmap源码,切换版本
cs
git clone https://github.com/colmap/colmap.git
# 强烈建议切换到 3.9.1 分支,不容易报错
# 目前稳定tag为 3.13.0
cd colmap
git checkout 3.9.1
3、编译colmap源码
cs
cd @colmap源码目录
mkdir build
cd build
cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=native
# 耗时操作
ninja
sudo ninja install
4、验证colmap是否编译安装成功
cs
cd @测试脚本mapping.sh所在目录
sudo chmod +x mapping.sh
./mapping.sh ~/test_data/
sh
#!/bin/bash
# 检查参数
if [ -z "$1" ]; then
echo "❌ 用法: ./process_scene.sh <图片文件夹绝对路径> [可选: 输出目录名称]"
echo "📝 示例: ./process_scene.sh /home/mz/photos/my_cat"
exit 1
fi
# 1. 获取图片的绝对路径
IMAGE_PATH=$(realpath "$1")
# 2. 设定工作目录 (核心修改)
# 如果用户指定了第二个参数,就用那个;否则默认在当前目录下创建 "3dgs_project"
if [ -n "$2" ]; then
WORK_DIR=$(realpath "$2")
else
# 获取当前终端所在的路径
CURRENT_RUN_DIR=$(pwd)
WORK_DIR="$CURRENT_RUN_DIR/3dgs_project"
fi
# 创建工作目录
mkdir -p "$WORK_DIR"
# 设定 COLMAP 需要的文件路径
DB_PATH="$WORK_DIR/database.db"
SPARSE_PATH="$WORK_DIR/sparse"
OUTPUT_PATH="$WORK_DIR/output"
echo "========================================"
echo "📂 图片来源: $IMAGE_PATH"
echo "🎯 输出位置: $WORK_DIR"
echo "========================================"
# ---------------------------------------------------------
# 开始 COLMAP 流程
# ---------------------------------------------------------
# 1. 特征提取
echo "--> [1/4] 特征提取..."
colmap feature_extractor \
--database_path "$DB_PATH" \
--image_path "$IMAGE_PATH" \
--ImageReader.camera_model SIMPLE_RADIAL \
--ImageReader.single_camera 1 \
--SiftExtraction.use_gpu 1
# 2. 特征匹配
echo "--> [2/4] 特征匹配..."
colmap exhaustive_matcher \
--database_path "$DB_PATH" \
--SiftMatching.use_gpu 1
# 3. 稀疏重建 (应用了之前的宽松参数)
echo "--> [3/4] 稀疏重建..."
mkdir -p "$SPARSE_PATH"
colmap mapper \
--database_path "$DB_PATH" \
--image_path "$IMAGE_PATH" \
--output_path "$SPARSE_PATH" \
--Mapper.min_num_matches 10 \
--Mapper.init_min_num_inliers 50 \
--Mapper.abs_pose_min_num_inliers 15 \
--Mapper.abs_pose_min_inlier_ratio 0.1
# 4. 去畸变 (生成最终给 3DGS 的数据)
echo "--> [4/4] 图像去畸变与整理..."
mkdir -p "$OUTPUT_PATH"
# 检查是否生成了模型 0 (防止报错)
if [ ! -d "$SPARSE_PATH/0" ]; then
echo "❌ 错误: 稀疏重建失败,没有生成 sparse/0 文件夹。"
echo " 请检查图片是否有足够的重叠度。"
exit 1
fi
colmap image_undistorter \
--image_path "$IMAGE_PATH" \
--input_path "$SPARSE_PATH/0" \
--output_path "$OUTPUT_PATH" \
--output_type COLMAP \
--max_image_size 2000
# ==========================================
# 🧹 清理多余文件 (关键修改)
# ==========================================
echo "--> 正在清理 MVS 多余文件..."
# 删除 stereo 文件夹 (MVS 稠密重建才需要,3DGS 不需要)
rm -rf "$OUTPUT_PATH/stereo"
# 删除自动生成的 .sh 脚本
rm -f "$OUTPUT_PATH/run-colmap-geometric.sh"
rm -f "$OUTPUT_PATH/run-colmap-photometric.sh"
echo "========================================"
echo "✅ 全部完成!"
echo "👉 给 3DGS 训练的路径是: $OUTPUT_PATH"
echo "========================================"
~/test_data/数据目录:

postshot验证结果:
根据代码内容,输出的结果在@3dgs_project/output下
存在两个文件夹:images 和sparse
打开postshot软件,点击import,先导入images目录中所有文件

再将sparse中的文件(cameras.bin、images.bin、points3D.bin)拖到导入文件框:

导入后,即可查看colmap计算的相机姿态和重建点云:

2.4 linux环境中安装conda
conda用来管理python环境,兼容多版本
conda环境安装运行过程:
cs
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
# 切换conda的下载源
# 查看当前conda的源:
conda config --show-sources
# 删除掉系统的配置文件:
rm /home/mz/miniconda3/.condarc
# 添加国内源:
code ~/.condarc
# 编辑为:
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- nodefaults
show_channel_urls: true
# 创建一个虚拟环境
conda create -n gsplat python=3.10
conda activate gsplat
# 查看conda当前管理python版本
conda env list
# 设置Python版本对应pip下载源为国内源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2.5 linux环境中安装gsplat
1、安装pytorch
pip安装:
cs
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
验证:
cs
python
> import torch
> torch.cuda.is_available()
2、安装gsplat
pip安装:
cs
pip install gsplat
3、安装gsplat用于训练的库:
cs
git clone https://github.com/nerfstudio-project/gsplat.git
cd gsplat/examples
pip install -r requirements.txt --no-build-isolation
# 训练
python simple_trainer.py default --data_dir ~/hello/3dgs_project/output/ --data_factor 1 --save_ply
# --data_factor:缩放原始图片多少倍
# --save_ply:输出ply文件,会在训练迭代7000和30000分别保存1次。
输出成果ply文件保存目录:
@results/garden/ply/
训练过程可以打开localhost:8080进行查看
输出结果验证:https://superspl.at/editor
