【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

这篇具有很好参考价值的文章主要介绍了【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。



前言

LLFF格式是NeRF网络模型训练使用的数据集格式之一,本文基于COLMAP软件展示从LLFF格式数据集的制作到开始模型训练的完整流程。NeRF(神经辐射场)通过输入同一场景不同视角下的二维图片和相机位姿,对场景进行三维隐式建模,并通过体素渲染方程实现了合成任意新视角下的场景图片。


下载安装colmap软件

下载COLMAP软件【下载地址】,本文使用的是Windows下的CUDA版本:
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
解压后双击打开COLMAP.bat,出现如下界面:
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
软件安装成功。


下载LLFF源码

# 可能需要科学上网从Github上直接git下载,博主下载到nerf-pytorch下
git clone https://github.com/Fyusion/LLFF.git
# 激活虚拟环境
conda activate XXX
# eg: conda activate nerf_mvs
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-image
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple imageio

采集图片,使用colmap获取相机位姿

采集图像

本文制作数据集所需要的图片是用手机拍摄视频后抽帧获取的

# 激活虚拟环境
conda activate XXX
# eg: conda activate nerf_mvs
# 安装opencv
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

新建文件Video_to_frame.py,通过执行以下代码完成抽帧(自定义抽帧的间隔)。

import os
import cv2
def extract_images(video_path, output_folder):
    # 获取视频文件名
    video_name = os.path.splitext(os.path.basename(video_path))[0]
    # 新建文件夹
    output_path = os.path.join(output_folder, video_name)
    if not os.path.exists(output_path):
        os.makedirs(output_path)
    # 打开视频
    cap = cv2.VideoCapture(video_path)
    # 设置帧间隔
    frame_interval = int(2)
    # 逐帧提取并保存满足间隔要求的帧
    count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            print(frame_interval)
            if count % frame_interval == 0:
                image_name = os.path.join(output_path, f"{video_name}_{count//frame_interval}.jpg")
                cv2.imwrite(image_name, frame)
            count += 1
        else:
            break
    cap.release()

if __name__ == '__main__':
    video_path = 'C:/Users/XXX/Desktop/test_video/test.mp4'  # 视频文件路径
    output_folder = 'C:/Users/XXX/Desktop/test_frame'  # 输出文件夹路径
    extract_images(video_path, output_folder)

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

位姿计算

创建⼯程: 点击File -> New project 以新建一个项目。
1.点击New,选择一个文件夹(博主与测试图片放置在同一目录),设置工程名以新建工程数据文件。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
2.点击Select,选择刚才图像所在的⽂件夹,点击Save。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
新建工程项目并配置完毕。

特征提取与匹配
1.图片特征提取,点击Processing -> Feature extraction,Camera model选择SIMPLE_PINHOLE,其他配置使用默认配置即可,点击Extract后,自动开始提取图片特征。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
待特征提取完毕后关闭窗口。

2.图片特征匹配,点击Processing -> Feature matching,使用默认配置直接点击Run进行特征匹配。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
待特征匹配完毕后关闭窗口。

在右侧Log一栏中可以查看特征提取与匹配的进度,请确保过程中没有Erro报错

稀疏重建
点击Reconstruction -> Start reconstruction进行重建,在窗口中可以看到重建过程,此过程可能会持续一段时间。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
重建完毕后,得到如下图,通过右下角Images和Points可以大致判断是否重建成功。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

注意:匹配的位姿和图片数目不同在后续的步骤中会导致报错,博主会在下文中详细说明解决这个问题的方法,暂时继续跟着步骤走。

保存位姿和稀疏点
点击File -> Export model 以导出模型,在保存图像的文件夹所在的目录下新建/sparse/0/文件夹,选择该文件夹将模型导入到该目录下。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
在/sparse/0/目录下得到如下文件,成功保存图像位姿。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集


转成LLFF数据的格式

进入LLFF目录下,打开imgs2poses.py文件,新增如下内容,default=‘里面是sparse所在目录的绝对路径’,并将参数’scenedir’修改为是’–scenedir’。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
存放照片的文件夹名称必须是images,否则会出错,博主这里是test,所以需要修改成images。
在运行imgs2poses.py代码

# 注意要在imgs2poses.py所在目录执行命令
python imgs2poses.py
# 或者附带imgs2poses.py的路径
python XXXX\imgs2poses.py
# eg: python LLFF\imgs2poses.py

假如不增加default=‘’。

# 在运行imgs2poses.py代码时,即使有默认值也必须传入路径(与scenedir参数有关)
python imgs2poses.py "XXXX/XXXX/"

出现如下的问题:
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
这个问题是博主之前所说的匹配的位姿和图片数目不同导致的,博主在这里解决这个问题。通过在 LLFF/llff/poses/pose_utils.py 文件的32行左右添加如下代码:

    #---------输出匹配到位姿的图片名---------
    for i in np.argsort(names):
       print(names[i],end=' ')
    #---------输出匹配到位姿的图片名---------

添加代码位置如下图所示:
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
显示出所有匹配到位姿的图片。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
进入图像保存的目录,删除没有匹配到位姿的图像,而后重新进行 “位姿计算” 这一步骤。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
解决问题后,执行结果如下图所示:
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
生成有关图像位姿的npy文件,格式转换步骤完毕。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集


迁移工作文件夹并设置配置文件

将工作文件夹完整迁移至nerf代码的/nerf-pytorch/data/nerf_llff_data/目录下。
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

注意:保存图片的文件夹要重命名为images,否则会报错

复制/nerf-pytorch/configs目录下的fern.txt文件(因为fern同为LLFF格式的数据集),并重命名为自己测试数据的名称,修改如下内容:
【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集
所有准备工作都已完成。


总结

尽可能简单、详细的介绍LLFF格式数据集的制作流程以及解决了制作过程中可能存在的问题。文章来源地址https://www.toymoban.com/news/detail-499727.html

到了这里,关于【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包