AI生成场景新突破:3D Gaussian Splatting的简介及训练入门教程
3D Gaussian Splatting是一种用一组2d图像创建3d场景的方法,你只需要一个场景的视频或者一组照片就可以获得这个场景的高质量3d表示,使你可以从任何角度渲染它。它们是一类辐射场方法(如NeRF),但同时训练速度更快(同等质量)、渲染速度更快,并达到更好或相似的质量。3D Gaussian Splatting可以实现无界且完整的场景1080p分辨率下进行高质量实时(≥ 100 fps)视图合成。
https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
该论文获得的siggraph 2023最佳论文
项目github地址:https://github.com/graphdeco-inria/gaussian-splatting
3D Gaussian Splatting简单原理
在传统的摄影测量流程中,可以将一组2d图像转换成点云。


而3D Gaussian Splatting更进一步,将点云变成3d空间中的椭球体,每个椭球体都拥有位置\大小和选择都经过优化颜色和不透明度。当混合在一起时,可以产生从任何角度渲染的完整模型的可视化效果。


正如你所见,3D Gaussian Splatting很好的保持了毛绒玩具的绒毛特性,这是摄影测量和之前的nerf都很难做到的。
训练3D Gaussian Splatting模型步骤
温馨提示,训练3D Gaussian Splatting需要支持cuda的24g vram的GPU (即3090即以上GPU)。以下步骤是在windows平台的步骤,其他平台请参阅官方https://github.com/graphdeco-inria/gaussian-splatting
前置步骤
安装python https://www.python.org/
安装git https://git-scm.com/
安装适合你电脑版本的cuda https://developer.nvidia.com/cuda-toolkit
拉取项目 在想要放的目录的地址栏输入cmd,然后输入
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
步骤1:记录场景
你需要场景的各个角度的图片,推荐100-1000张。数量过少会导致模型质量不够,数量过多会导致过长的训练时间。为了保持更好的效果,每张照片需保持一致的曝光。 也可以录制视频提取单帧。
准备好照片之后,在项目中新建一个data文件夹(或者其他你想起的名字),再在data文件夹中新建一个input文件夹,放入照片。如下所示
📂 data
┣ 📂 input ┃
┣ 📜 000000.jpg ┃
┣ 📜 000001.jpg ┃
┣ 📜 ...
步骤2:获取相机位姿
我们需要获取相机位姿建立点云。我们可以使用开源的COLMAP或者商业软件RealityCapture等。在拥有Lidar摄像头的iPhone上也有一些移动软件可以直接获取相机位姿。
接下来我们将介绍使用COLMAP获取相机位姿的步骤。首先我们需要安装COLMAP,这是官方说明。
下载https://github.com/colmap/colmap/releases/tag/3.8(选择cuda版本)并解压,

之后我们需要将colmap添加到环境变量。

之后我们在项目目录的地址栏键入cmd,然后输入
python convert.py -s data
即可自动完成相机位姿和点云的建立。这通常需要较长时间,请耐心等待
模型数据集的文件夹结构现在应如下所示:
📂 data
┣ 📂 (input)
┣ 📂 (distorted)
┣ 📂 images
┣ 📂 sparse
┃
┣ 📂 0
┃┃┣ 📜 points3D.bin
┃┃┣ 📜 images.bin
┃┃┣ 📜 cameras.bin
如果你想可视化相机姿势,您可以打开 COLMAP.bat,然后选择File > Import model
并选择文件夹的路径data/sparse/0

步骤3:训练Gaussian Splatting
首先我们需要配置项目需要的环境,该项目需要的环境比较简单,主要是PyTorch 。我们需要安装电脑对应cuda版本的PyTorch,比如你电脑是cuda版本 11.8,那么只需要打开终端 输入(如果需要其他cuda版本的,直接修改代码对应的torch版本和cuda版本即可)
pip install torch==1.13.0+cu118 -f https://download.pytorch.org/whl/torch_stable.html
如果你不知道电脑安装的cuda版本,可在终端中输入nvcc --version
查询
安装完PyTorch之后,还需要安装以下库
pip install plyfile tqdm
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn
完成安装后,你可以在项目目录命令行键入cmd,执行以下命令开始训练:
python train.py -s data -m data/output
如果你的场景是白色背景,可以添加-w
选项。这将告诉训练脚本基本背景颜色应该是白色(而不是默认的黑色)。
python train.py -s data -m data/output -w
整个训练(30,000步)大约需要几十分钟,但7000步后会保存一个中间模型,中间模型的效果已经很不错了。可以按照步骤4立即可视化该模型。
步骤4:可视化模型
模型的文件夹结构目前应该如下:
📂data
┣ 📂 images
┣ 📂 sparse
┣ 📂 output
┃ ┣ 📜 cameras.json
┃ ┣ 📜 cfg_args
┃ ┗ 📜 input.ply
┃ ┣ 📂 point_cloud
┃ ┃ ┣ 📂 iteration_7000
┃ ┃ ┃ ┗ 📜 point_cloud.ply
┃ ┃ ┣ 📂 iteration_30000
┃ ┃ ┃ ┗ 📜 point_cloud.ply
在windows中,可以直接在该链接下载构建好的可视化工具https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/binaries/viewers.zip
将该文件解压到工程文件夹中即可完成安装
安装完成之后,在地址栏输入cmd,通过下列命令运行:
.\viewers\bin\SIBR_gaussianViewer_app -m data/output
你将会得到训练好的模型的可视化效果。可以将操作模式改成trackball以获得更好的交互体验。
本文参考了:https://www.reshot.ai/3d-gaussian-splatting