FastMVSNet自定义测试数据集网络实现流程(二)

        因为最近又要搞一下三维重建相关的研究,所以这个系列的文章又被我拾起来了。这一章主要介绍Linux 下如何通过Colmap 生成可用于MVSNet 网络进行三维重建的自定义数据集,包括通过SFM算法估计到的相机内外参信息和位置配对信息。

一、Linux(Ubuntu 18.04.6)下编译并安装Colmap(3.9-dev)

        具体安装步骤可以查看Colmap的官网:Installation — COLMAP 3.8 documentation

① 安装编译colmap所需要的系统依赖:

# 安装编译所需的依赖
apt-get install git cmake ninja-build build-essential

# 安装libboost 依赖
apt-get install libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libboost-test-dev libboost-regex-dev

# 安装其它工具的依赖
apt-get install libeigen3-dev libflann-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgflags-dev libsqlite3-dev libceres-dev libcgal-dev

# 安装出现报错的glew和qt5
apt-get install libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-qt5-dev

      我在安装glew和qt5的时候出现报错:"you have held broken packages",原因是我使用的镜像存在问题,有些依赖的安装包版本有误,具体排查方式如下:

报错:libglew-dev : Depends: libgl1-mesa-dev but it is not going to be installed or libgl-dev

那就直接安装:apt-get install libgl-dev

报错:libgl1-mesa-dev : Depends: libx11-xcb-dev but it is not going to be installed

继续直接安装:apt-get install libx11-xcb-dev

报错:libx11-xcb-dev : Depends: libx11-xcb1 (= 2:1.6.4-3ubuntu0.4) but 2:1.6.4-3ubuntu0.5 is to be installed

删除原错误版本的:apt-get remove libx11-xcb1

重新安装glew:apt-get install libglew-dev

安装正常!

如果还是有broken packages的问题,通过相同的方式逐步排查即可。

        如果想要编译支持CUDA的版本,还需要安装下面的系统依赖(因为我只需要做SFM就可以,所以没有进行安装):

apt-get install nvidia-cuda-toolkit nvidia-cuda-toolkit-gcc

② 从github 上将colmap 代码下载下来,我这边是通过源码进行编译:

git clone https://github.com/colmap/colmap

        (如果不方便科学上网下载速度比较慢的话,可以在gitee 上点击右上角的+,选择从GitHub 导入仓库,导入到自己gitee 私人仓库中再进行拉取就可以了)

③ 进入colmap 的代码路径,如果需要安装最新的development 版本则执行:

git checkout dev

        创建并进入编译目录,并执行编译:

mkdir build
cd build
# 因为我不编译CUDA版本,所以需要改一下参数
cmake .. -DCUDA_ENABLED=OFF -GNinja
ninja

        在cmake过程中,遇到报错"Could not find LZ4",是因为我环境中没有这个库,解决方法如下,如果发现没有其它的库,也可以用同样的方式进行编译安装即可:

下载源码:1.9.4-1 : lz4 package : Ubuntu

下载完成后解压并进入lz4-1.9.4 目录,执行:

make 

make install

        在ninja过程中,遇到报错”make_unique is not a member of std“,我一直以为是安装的gcc 或者g++ 有问题,但是7.5.0 版本默认是支持C++14 标准的,最后发现是我apt-get 安装的cmake 版本太低了。从Index of /files 网站上下载cmake 3.26.1 版本并解压到对应目录下,使用bin 目录下的cmake 编译正常。

④ 安装colmap 版本并测试:

ninja install

        安装完成后执行colmap -h 查看功能正常:

        通过源码进行colmap 的安装可能会遇到一些比较诡异的问题,根据官网上操作步骤进行如果存在问题的话,一般是环境问题的可能性比较大。我用的docker 镜像是别人提供的一个ubuntu 18.04.6 的版本,我需要在这个版本上开发,所以遇到了一些问题影响了进度。大家在操作的时候还是选择常用镜像比较好,祝安装顺利,一次成功!

        PS:之前也尝试过在RAM 架构上进行colmap 的源码编译和安装,主要就还是系统依赖比较麻烦,缺少哪个都需要进行对应的make 和make install ,解决掉依赖问题之后可以正常安装并运行。

二、进行多视角图片的稀疏重建

        因为我是通过docker 镜像去进行的操作,所以没有GUI 界面操作,而是直接通过命令行进行的稀疏重建。

① 图像特征提取:

        将待重建图像放到database/images 目录下,然后通过命令行进行特征提取:

colmap feature_extractor --database_path ./database/database.db --image_path ./database/images/ --SiftExtraction.use_gpu 0

        在没有编译CUDA只通过CPU进行特征提取的情况下,一定要加上"--SiftExtraction.use_gpu 0",不然会出现报错"Could not connect to any X display",因为colmap 通过GPU 进行特征提取必须要用到GUI 界面。同时也可以通过"--ImageReader.camera_model" 设置相机类型,相机类型已知的情况下,计算结果更精确。

② 特征点匹配:

        特征提取成功后,执行命令进行特征点匹配:

colmap exhaustive_matcher --database_path ./database/database.db --SiftMatching.use_gpu 0

        在没有编译CUDA只通过CPU进行特征点匹配的情况下,一定要加上"--SiftMatching.use_gpu 0"。

③ 稀疏重建:

        特征点匹配成功后,执行命令进行稀疏重建:

mkdir database/sparse
colmap mapper --database_path ./database/database.db --image_path ./database/images --output_path ./database/sparse

三、自定义数据集构建        

        稀疏重建成功,colmap 得到的三维重建的一些信息都放在database/sparse/0 目录下的bin 文件中了。为了构建后续MVSNet 所用的数据集,需要执行命令将相机和稀疏点云信息保存到txt 文件中。

colmap model_converter --input_path ./database/sparse/0 --output_path ./database/sparse/0 --output_type TXT

        执行完成后就可以在database/sparse/0 目录下看到转换出的txt 文件了,其中camera.txt 保存相机内参数,images.txt 保存图片外参数和图片二维特征与三维空间点对应信息,points3D.txt 保存三维空间点在世界坐标系下坐标、RGB值以及在各个影像上的轨迹。

        colmap 生成的txt 文件是不能直接在mvsnet 的数据集上使用的,需要通过YoYo 大佬提供的colmap 相机参数转MVSNet 相机参数的脚本colmap2mvsnet.py 进行转换(脚本下载方式可见上一篇)。将sparse/0 目录下的txt 文件拷贝到与images 同级的目录下,执行命令:

python colmap2mvsnet.py --dense_folder /home/mvsnet/

        如果有报错"shutil.SameFileError",说明images 文件夹内图像的命名规则已经满足MVSNet 数据集的要求,不需要再重命名,需要将colmap2mvsnet.py 脚本中最后两行拷贝命令注释掉。

        脚本执行完成后,可以看到在mvsnet 文件夹下新生成了cams 文件夹(包含相机内外参信息文件)和pair.txt (图片匹配信息)文件,进入images 文件夹,可以看到图片重命名后生成的文件(用于MVSNet网络),将iamges、cams 和pair.txt 文件夹放在同一文件夹下,并命名为scan1 这种格式,则在Linux 下的自定义数据集生成完成。

        下一章节将讲解在Linux 下如何通过FastMVSNet 网络进行自定义数据集的三维重建推理。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值