使用colmap自制3DGaussian_Splatting数据集
使用说明
colmap一般有两种下载路径:
一是部署安装在linux之类平台的,这种需要进行编译才能够使用;
二是部署在windows平台的,官方提供了编译好的版本,可以直接拿来使用;
本文章针对windows平台,不提供编译安装的教程。
colmap有支持GPU版本和非GPU版本,根据自己的实际情况选择;
在使用colmap之前,如果你的数据集是拍摄的视频,可以使用ffmpeg对视频进行抽帧操作,获得一定数量的图片。这里colmap是针对一系列图片进行拍摄位姿的还原;
Colmap的安装
下载链接:
https://github.com/colmap/colmap/releases
下载好后直接解压到某个文件夹里即可。如图所示,双击这里的COLMAP.bat脚本就能够直接使用。
但是为了方便后续能够在终端使用colmap,建议将该脚本添加到环境变量,方便后续可以使用colmap指令。
成功添加环境变量后,尝试运行可以得到如下结果:
Colmap的使用
使用colmap自制符合3DGaussian_Splatting数据集的方式有多种,这里提供一种笔者实验成功的方案,后面还有几种方案也会简单聊一下:
方案一:使用官方提供的convert.py脚本
这个脚本会自动调用安装在电脑中的colmap(前提是配置好了环境变量,要不然会识别不到)。如果是部署在远程服务器的,也可以直接将convert.py脚本下载下来。
运行convert.py脚本前,需要保证你的文件夹名称以及结构是这样的(因为这些名称在convert.py脚本中写死了):
注意这里一定要有名为“input”的文件夹,图片名称随意,my_dataset这个文件夹名称也随意;
运行后生成的内容可以先不用管,运行前需要保证整体的文件结构如上图所示。
整理好文件结构后,可以通过如下指令运行:
注意先跳转到含有conver.py的文件目录执行,convert.py也不依赖任何自定义库,能够方便运行。
python convert.py -s my_dataset
运行后的的完整情况就如上图所示,之后就可以将处理好的数据集使用train.py脚本进行训练啦。
方案二:使用colmap的自动重建图像功能
在终端输入:
colmap.bat
或者通过直接双击colmap.bat直接启动colmap的可视化窗口进行数据集处理;
这里使用colmap的自动重建功能制作数据集;
注意底下有一个Dense model的按钮,这里建议把他关闭。使用colmap重建时会有两个选项,一是稀疏重建,二是稠密重建。就笔者个人使用感受来说,稀疏重建得到的数据集,在高斯泼溅的训练还原中,效果已经足够好了。官方使用的也是稀疏重建。
重建完成后会弹出几个确认窗口,点击“OK”即可;
重建后会自动生成拍摄位姿的可视化情况;
笔者这里是使用手机对“放在书本上的一个水杯”进行了旋转一周的拍摄;
通过这种方式也能够获得数据集,但是存在一点小问题,就是这种自动重建生成的数据集,是带畸变的。究其原因,是colmap默认使用的是带畸变的相机模型,这不符合3D高斯泼溅中要求使用无畸变的相机模型。
这个问题或可通过 colmap image_undistorter 指令进行纠正;
可参考文章链接:对于colmap数据集转化的问题_assertionerror: colmap camera model not handled: o-CSDN博客
这里笔者没有进一步实验,感兴趣可自行探索。
方案三:使用colmap逐步制作数据集,设置参数进行约束
整个colmap制作数据集的过程大致包含:
特征提取(feature_extractor)->特征匹配(exhaustive_matcher)->稀疏重建(mapper)->去畸变(image_undistorter),这几个过程colmap提供了对应的指令参数进行处理。
这种方法笔者这里不做进一步的介绍。可以通过colmap --help查询相关指令用法,自行探索。
可能存在的报错
在初次使用colmap时可能存在需要下载一个.bin文件的问题,如果长时间卡在那里无法下载,可以尝试设置临时代理,快速成功下载好该文件。
设置代理的方法可参考链接:
简单聊聊代理服务器-CSDN博客
重建结果展示
colmap相机位姿可视化结果
这里仅使用少量图片,相机位姿如图所示(非全身环绕拍摄):
3DGaussian_Splatting模型重建结果
可以看到,正面效果是非常好的,对于侧面和背面等缺少视角的位置,则重建效果较差。