当前位置: 首页 > java >正文

使用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模型重建结果

可以看到,正面效果是非常好的,对于侧面和背面等缺少视角的位置,则重建效果较差。

http://www.xdnf.cn/news/17840.html

相关文章:

  • Java进阶学习之Stream流的基本概念以及使用技巧
  • 第四天~在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号实战
  • 3D-R1、Scene-R1、SpaceR论文解读
  • Codeforces Round 1042 (Div. 3)
  • Ansys FreeFlow入门:对搅拌罐进行建模
  • vector 认识及使用
  • 【论文阅读-Part1】PIKE-RAG: sPecIalized KnowledgE and Rationale Augmented Generation
  • 如何通过WiFi将文件从安卓设备传输到电脑
  • Scrapy 基础框架搭建教程:从环境配置到爬虫实现(附实例)
  • Pytorch在FSDP模型中使用EMA
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • 14、C 语言联合体和枚举知识点总结
  • Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
  • 报数游戏(我将每文更新tips)
  • 2022 年全国硕士研究生招生考试真题笔记
  • 杂记 01
  • elasticsearch基础概念与集群部署
  • Blender模拟结构光3D Scanner(一)外参数匹配
  • ARM芯片架构之CoreSight Channel Interface 介绍
  • 20250813测试开发岗(凉)面
  • Spring Security 前后端分离场景下的会话并发管理
  • 商品分类拖拽排序设计
  • 数据结构:队列(Queue)与循环队列(Circular Queue)
  • 【SpringBoot系列-01】Spring Boot 启动原理深度解析
  • 【OpenGL】LearnOpenGL学习笔记07 - 摄像机
  • 《设计模式之禅》笔记摘录 - 15.观察者模式
  • 分布式与微服务宝典
  • Redis基础命令
  • 电商项目微服务架构拆分实战
  • LangGraph 指南篇-基础控制