3D高斯应用实践

文章目录

    • 一、概述
    • 二、环境配置
      • [2.1 Windows下WSL2安装linux环境](#2.1 Windows下WSL2安装linux环境)
      • [2.2 linux环境中安装cuda](#2.2 linux环境中安装cuda)
      • [2.3 linux环境中安装colmap](#2.3 linux环境中安装colmap)
      • [2.4 linux环境中安装conda](#2.4 linux环境中安装conda)
      • [2.5 linux环境中安装gsplat](#2.5 linux环境中安装gsplat)

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
官网下载安装,并配置插件:

  1. 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/

mapping.sh

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下

存在两个文件夹:imagessparse

打开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

相关推荐
天宝耐特10 天前
50分钟复刻3000㎡展厅,L2pro手持扫描仪重构瓷砖行业数字化营销新生态,打造沉浸式选品新体验
3d高斯泼溅·数字化存档·手持扫描仪·灵光l2pro·数字化展厅·lcc技术·天宝耐特
巷尚UP3D-三维扫描检测逆向建模2 个月前
探究具备语义特性的增强式3D高斯泼溅技术【上海巷尚】
三维扫描·3d高斯·巷尚up3d·高斯泼贱·上海三维扫描服务
惊鸿一博2 个月前
动态场景三维重建技术_概述
三维重建·nerf·3d高斯泼溅
九章云极AladdinEdu3 个月前
论文分享 | BARD-GS:基于高斯泼溅的模糊感知动态场景重建
人工智能·新视角合成·动态场景重建·运动模糊处理·3d高斯泼溅·模糊感知建模·真实世界数据集
Son_of_the_Bronx2 年前
ubuntu20部署3d高斯
linux·3d高斯