背景介绍:
3D高斯溅射是在来自INRIA的SIGGRAPH 2023中提出的,它是一种完全不同的通过显式存储3D体积高斯集合来表示辐射场的方法。这些可以“飞溅”或投影到提供相机姿势的2D图像上,并光栅化以获得逐像素的颜色。由于栅格化在gpu上的速度非常快,因此这种方法的渲染速度要比辐射场的神经表示快得多。nerfstudio的实现称为“Splatfacto”,随着更多功能的添加,逐渐偏离原始论文。正如Nerfacto是各种不同方法的混合,Splatfacto将是不同高斯飞溅方法的混合。
Nerfstudio使用gsplat作为其高斯光栅化后端,这是一个内部重新实现,旨在对开发人员更友好。可以使用
pip install gsplat
安装它。
运行环境:
我是在WSL2环境,Ubuntu20.04版本下运行的
CUDA版本11.7
gcc和g++的版本都是9.4.0
cmake版本3.29.2
一、数据集准备:
这里使用DJI Phantom 4采集了深圳大学科技楼121张图片进行训练。如图所示:
二、数据预处理:
可以运行下面代码来查看数据预处理的帮助,主要还是colmap的过程。主要命令有两个,1是--data图片的文件路径,2是--output-dir文件的输出路径。
ns-process-data images -h
数据预处理完成后,可以看到如下窗口。
在文件夹中也可以看到
三、训练
可以使用如下命令来查看可以训练的模型,可以看到splatfacto(Gaussian Splatting model)
ns-train -h
运行后如图所示:
继续运行如下命令,可以查看输入的一些命令帮助。
ns-train splatfacto -h
主要关注两个命令行选项,一个是--data,刚刚处理完成的数据的文件路径,第二个是--output-dir输出文件的路径
ns-train splatfacto --output-dir train/ --data air_data/
如图就是在训练,可以打开浏览器来查看训练的效果
可以在浏览器中输入http://0.0.0.0:7007查看,可视化界面如下(由于图片内存有上限进行了裁剪),右边按钮可以调整渲染质量和速度,也可以看深度图之类的。
四、导出点云文件查看
可以用代码查看帮助文档
ns-export -h
可以看到如下界面。主要关注gaussian-splat点云输出内容。
也可以继续输入代码查看帮助文档
ns-export gaussian-splat -h
只需要输入两个参数即可一个是config YAML 文件,还有一个是输出路径
输出后可以看到.ply文件,导入到cloudcompare里面可以查看点云(如下图所示),能够清晰看到深圳大学科技楼的场景
五、总结
3DGS渲染速度和质量上都比Nerf渲染的要好,如果有任何疑问,欢迎在评论区留言,会尽能力回复。谢谢大家的支持。