当前位置:   article > 正文

Nerfstudio使用教程_realitycapture

realitycapture

nerfstudio使用教程,nerfstudio官网。本教程讲述如何使用自己的数据训练nerf模型,以及生成nerf的深度图以及rgb图过程。关于nerfstudio内容这里不再赘述,这里主要讲述一些参数和命令。需要准备条件(具体可以看其他博客或者我之前写过的这篇博客):

1、配置好nerfstudio 环境

2、安装好colmap环境

3、准备自己的数据集(这里我以fern数据集为例)

一、使用colmap生成数据集

1.数据集(fern)

这里的数据集是nerf论文中的数据集一样,20张图片来进行测试

2.生成colmap数据

准备好图片数据之后可以运行下面代码colmap。

  1. ns-process-data {video,images,polycam,record3d} --data {DATA_PATH} --output-dir {PROCESSED_DATA_DIR}
  2. #例子 {DATA_PATH}为你图片的文件夹路径 {PROCESSED_DATA_DIR}是你生成的路径
  3. ns-process-data images --data images/ --output-dir colmap/

出现下面的结果说明运行成功:

生成的结果如下图所示:

  • colmap文件夹:会记录colmap生成的一些数据
  • image:会生成四个文件夹,image_x,表示缩放的图片
  • .ply,生成的点云文件,可以导入cloudcompare中查看
  • transforms.json:会生成相机内参数(cx、cy、fx、fy)和相机外参数矩阵(R,T)

3.命令中一些参数说明

(1)不仅图片数据可以colmap,可以传入视频或者{polycam,metashape,realitycapture,record3d,odm,aria}的数据,具体操作可以通过以下命令查看:

  1. #查看可以处理的数据有哪些
  2. ns-process-data -h

(2)对图片处理可以使用以下命令查看(其他也类似):

ns-process-data images -h

(3)这里对images的部分命令进行解释:

命令        作用
--data输入数据路径(必须要有)

--output-dir

输出的数据路径(必须要有)
--num-downscales

下采样的次数(默认是3)缩放图像的次数。每次缩放 2 倍。例如,值为 3 时,

图像的缩放比例分别为 2x、4x 和 8x

 --skip-colmap

--no-skip-colmap

跳过colmap,如果自己用colmap生成了数据,那么可以添加命令 --skip-colmap

--skip-image-processing

--no-skip-image-processing 

如果为 "True",则跳过图像的复制和缩放,仅在可能和启用的情况下运行 COLMAP。

这里选择了一些可能用到的命令,其他可以看具体的文档,特征提取、特征匹配的一些方法都有具体的操作。

二、使用nerfstudio训练数据

1、对colmap生成的数据训练

  1. ns-train nerfacto --data {PROCESSED_DATA_DIR} --output-dir {PATH}
  2. # {PROCESSED_DATA_DIR}这里是你colmap生成的路径位置{PATH}是你输出的路径
  3. #例子
  4. ns-train nerfacto --data colmap --output-dir train

如下训练的过程,可以通过端口查看。

训练的过程,可以在右边调整一些参数或者查看深度图之类的。

训练完成:

会生成以下目录(包含训练的一些参数还有transforms矩阵):

其中最重要的就是config.yml文件,之后的命令都会涉及到这个文件。

2、设置camera_path

在训练时设置camera_path,生成深度图和rgb图的时候会根据相机路径来生成相应的图。具体操作:

点击render,然后Add Keyframe添加相机路径,可以添加具体输入的图片,也可以添加一些选定视角的frame。如图是我选择的路径,这个步骤详细可以看nerfstudio官方视频

选定后,然后点击下面的Generate Command可以在colmap的文件夹中看到生成的camera的json文件。如图所示:

3、参数说明

  1. #可以通过这个命令查看nerfacto训练参数,一般其他参数都使用默认的就可以了
  2. ns-train nerfacto -h
  3. #也可以使用其他方法来渲染,如下命令可以查看。
  4. ns-trian -h
  5. #其他方法也没有尝试,感兴趣的可以尝试一下。

三、可视化过程

1、可以通过viewer查看生成的结果

  1. ns-viewer --load-config {outputs/.../config.yml}
  2. #--load-config PATH
  3. #Path 是生成的config.yml
  4. #例子
  5. ns-viewer --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml
  6. #可以通过以下命令查看帮助
  7. ns-viewer -h

可以查看渲染的结果,如图所示:

也可以在右边进行操作,之前要是没有选择camera_path,也可以在这里选择。Export可以导出生成的点云或者mesh的命令。下面会继续介绍。

四、导出点云

 export命令查看帮助

ns-export -h

1、pointcloud

命令查看帮助

ns-export pointcloud -h
  1. #必须要的参数
  2. --load-config PATH config.yaml文件
  3. --output-dir PATH 输出路径
  1. #例子
  2. ns-export pointcloud --load-config outputs/fern/nerfacto/2024-04-18_100522/config.yml --output-dir exports/pcd/ --num-points 1000000 --remove-outliers True --normal-method open3d --use_bounding_box False --save-world-frame False --obb_center 0.0000000000 0.0000000000 0.0000000000 --obb_rotation 0.0000000000 0.0000000000 0.0000000000 --obb_scale 1.0000000000 1.0000000000 1.0000000000

2、poisson:

  1. #查看帮助
  2. ns-export poission -h
  3. #例子
  4. ns-export poisson --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml --output-dir exports/mesh/ --t
  5. arget-num-faces 50000 --num-pixels-per-side 2048 --num-points 1000000 --remove-outliers True --normal-method open3d --use_bounding_box False --obb_center 0.0000000000 0.000
  6. 0000000 0.0000000000 --obb_rotation 0.0000000000 0.0000000000 0.0000000000 --obb_scale 1.0000000000 1.0000000000 1.0000000000

3、 cameras:

生成训练后的图片的位姿参数(R,T)

  1. #查看帮助
  2. ns-export cameras -h
  3. #例子
  4. ns-export cameras --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml --output-dir exports/camjson

可以到具体路径去查看

五、渲染出depth和rgb图

render命令查看帮助

ns-render -h

1、render camera:

查看帮助:

ns-render camera-path -h

深度图例子:

  1. ns-render camera-path --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml --output-path rgbanddepth/
  2. --rendered-output-names depth --depth-near-plane 0.5 --depth-far-plane 5.0 --output-format images --colormap-options.colormap gray --camera-path-filename colmap/camera
  3. _paths/2024-04-22-16-28-30.json

对上面参数说明:

 --rendered-output-names设置渲染的是深度图还是rgb图,可选depth ,rgb
--depth-near-plane近平面
--depth-far-plane远平面
--output-format

输出的格式,可选image,video                        

--colormap-options.colormap深度图格式 可选gray
--camera-path-filenamecamera_path,在之前训练的时候提到的camera_path

设置--rendered-output-names的depth和rgb,生成相应的深度图和rgb图。

关于深度图的计算公式:

(1)深度值的范围:首先确定深度值的实际范围,例如,由depth-near-planedepth-far-plane参数指定。提供的例子中,这些值分别是0.5和5.0。

(2)归一化:将计算得到的每个深度值归一化到0-1的范围。这通过以下公式完成: 

(3)缩放:将归一化的深度值缩放到0-255的范围,以便可以将其用作图像中的像素强度值: 

(4)四舍五入:通常,pixel_value会四舍五入到最近的整数,以确保它在0-255的整数值范围内。

(5)颜色映射:在某些情况下,可能还会应用颜色映射函数,将单通道的灰度图像转换为具有不同颜色的深度图,以便于可视化不同的深度层次。

rgb图和深度图训练的结果:

PS:如果想知道相机内参,可以在nerfstudio.cameras.camera_paths.py中修改代码,如图,即可打印渲染后的内参。

2、render interpolate

ns-render interpolate  --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml  --output-path renders/out_trian_depth --output-format images   --colormap-options.colormap gray --rendered-output-names depth --depth-near-plane 0.5 --depth-far-plane 5.0

参数的内容和上面一样,这里不再赘述,这里不用加camera_path

3、render spiral

 这个可能不是很好,官方文档中是这么说的Render a spiral trajectory (often not great).

六、总结

琢磨这个有一段时间了,希望这些对你有帮助,如果你觉得写的不错,点个赞吧。

对很多了解的还不太深刻,如果有任何见解,欢迎评论讨论。谢谢大家。

官网文档写的很详细,大家可以去看一下。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号