Gaussian Splatting入门

本文最后更新于:2024年3月4日 中午

准备工作

训练环境配置

在本地文件夹中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 下载高斯代码库
git clone https://github.com/graphdeco-inria/gaussian-splatting.git
# 使用conda配置环境
conda create -n gs -y python=3.10
# 激活环境
conda activate gs
# 安装torch环境
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
# 安装额外依赖
pip install plyfile==0.8.1
pip install tqdm


# diff-gaussian-rasterization 和 simple-knn 已经放到gitea代码仓库
# 安装本地依赖,避免外网库中包含的clone bug

cd /submodules
# 在submoudles文件夹中,

git clone https://gitee.com/gisc-github/diff_gaussian_rasterization.git
cd /diff-gaussian-rasterization
python setup.py install


cd /submodules
# 在submoudles文件夹中,
git clone https://gitee.com/gisc-github/simple_knn.git
cd /simple-knn
python setup.py install

场景数据准备

Colmap数据处理

colmap安装
windows版本

Github 中 cuda版本下载地址: COLMAP-3.9.1-windows-cuda

linux版本
colmap环境变量配置
本地文件
环境变量路径

在windows环境变量中,Path中添加COLMAP环境变量。

验证是否配置成功

控制台中输入colmap,打开colmap主程序,则colmap环境配置成功。

数据处理流程

以矿坑数据为例,基于gaussian-splatting提供的convert.py脚本完成

Github参考命令

数据准备
1
2
3
4
5
6
7
8
9
# 输入数据格式
# e.g. /kuangkeng/input
# 所有的照片放在input文件夹下
# /kuangkeng/input/DJI_xxxx.jpg
<kuangkeng>
|---input
|---<image 0>
|---<image 1>
|---...
处理过程
1
2
python convert.py -s /PathToKuangKeng
#python convert.py -s <location> [--resize] #If not resizing, ImageMagick is not needed
输出结果
1
2
3
4
5
6
7
8
9
10
<kuangkeng>
|---images
| |---<image 0>
| |---<image 1>
| |---...
|---sparse
|---0
|---cameras.bin
|---images.bin
|---points3D.bin

MetaShape数据处理

MetaShape安装
数据处理流程

以矿坑数据为例

数据准备

所有照片在一个文件夹下就行。

处理过程
  1. 导入照片

    导入照片
    选择场景模式
  2. 对齐照片

    对齐照片Align Photos
  3. 查看对齐(空三)结果

    照片对齐结果
  4. 编辑连接点(可选操作

    使用范围选择,框选不需要的连接点后,按Delete键盘则可删除。减少不必要的Gaussians生成区域。

    编辑连接点
    删除连接点
输出结果
  1. 查看MetaShape版本
MetaShape版本
  1. 下载对应版本的export_for_gaussian_splatting.py脚本

py导出脚本

export_for_gaussian_splatting.py v 2.1

export_for_gaussian_splatting.py v2.0

  1. 在MetaShape中使用导出脚本

    调用脚本
  2. 导出Gaussian Splatting格式数据

    数据导出

根据CPU性能,导出这里可能会卡一会儿

  1. 查看导出结果
最终导出结果文件夹

编辑软件准备

CloudCompare(暂定)

模型训练

  1. 在准备工作中装好的环境,进入Gaussian Splatting代码库。
1
cd gaussian-splatting
  1. 调用 train.py进行训练
1
2
# 训练矿坑数据
python train.py -s O:\zly_work\kuangkeng\Metashape
  1. 查看显存占用情况
1
2
# 新打开一个连接
watch -n 1 nvidia-smi
  1. 查看训练结果

    在代码库的output文件夹下,文件夹名称为调用训练命令时控制台输出的一串随即代码。

    训练结果

模型编辑

核心是高斯体点云的编辑

模型准备

  1. 将训练完成的结果下载到本地

    下载到本地
  2. 将point_cloud文件夹中,iteration_30000文件夹中的point_cloud.ply放入CloudCompare中

查看结果文件夹

点云导入

观察到Properties为62,除去x,y,z,nx,ny,nz六个自动匹配的属性后,还需要在Scalar field属性中添加56个属性

注意,添加属性的顺序一定要和原始高斯ply中的顺序保持一致!!!

导入点云属性
添加属性

点云编辑

  1. 取消勾选normals选项,展示点云颜色(非RGB)
点云上色
  1. 选择Segment工具,删除多余点云

    左键选择,右键确定。

    Segment工具
  2. 保存删除后的结果

    保存结果
  3. 查看并导出最后结果

编辑结果
保存为ply
选择二进制形式

格式转换

高斯结果Ply头文件
CloudCompare保存Ply头文件

需要在CloudCompare保存结果的头文件中,将CloudCompare的信息删除

需要在CloudCompare保存结果的头文件中,将scalar_字段(注意有下划线)删除,使得两者头文件中记载的属性保持一致

模型查看

SIBR Viewer

模型加载

进入 SIBR_Viewer的bin文件夹,在控制台中输入SIBR_gaussianViewer_app.exe,加上参数 -m,后面加上模型的路径。

启动Viewer

模型查看

FPS模式为左右前后平移模式

MODE FPS

TrackBall模式支持翻滚和前后左右平移

MODE TrackBall

附录

说明

目前还没有完全针对高斯的编辑器。CloudCompare对高斯的编辑人工干预过多。

一些对比

以实验室为例

  1. 完全使用高斯数据处理以及训练脚本所得结果。

    PureGaussian
  2. 数据使用Meta shape计算空三并导出高斯格式进行训练所得结果。

    DATA MetaShape
  3. 使用Metashape计算空三,并对照片进行去除畸变后进行训练所得结果。

Metashape and Undistorted
  1. 使用Metashape计算空三,删除一些连接点后进行训练所得结果。(对应)
DeletedPoints from Metashape
  1. 使用Metashape计算空三,并删除一些连接点,并使用高斯脚本对照片进行去除畸变后进行训练所得结果。
DeletedPoints from Metashape and Undistorted
  1. 使用CloudCompare删除生成的高斯体的前后对比。
删除高斯体前
删除高斯体后

Gaussian Splatting入门
https://anonymouslosty.ink/2024/01/30/Gaussian Splatting/
作者
Ling yi
发布于
2024年1月30日
更新于
2024年3月4日
许可协议