赞
踩
nerfstudio使用教程,nerfstudio官网。本教程讲述如何使用自己的数据训练nerf模型,以及生成nerf的深度图以及rgb图过程。关于nerfstudio内容这里不再赘述,这里主要讲述一些参数和命令。需要准备条件(具体可以看其他博客或者我之前写过的这篇博客):
1、配置好nerfstudio 环境
2、安装好colmap环境
3、准备自己的数据集(这里我以fern数据集为例)
这里的数据集是nerf论文中的数据集一样,20张图片来进行测试
准备好图片数据之后可以运行下面代码colmap。
- ns-process-data {video,images,polycam,record3d} --data {DATA_PATH} --output-dir {PROCESSED_DATA_DIR}
-
- #例子 {DATA_PATH}为你图片的文件夹路径 {PROCESSED_DATA_DIR}是你生成的路径
- ns-process-data images --data images/ --output-dir colmap/
出现下面的结果说明运行成功:
生成的结果如下图所示:
(1)不仅图片数据可以colmap,可以传入视频或者{polycam,metashape,realitycapture,record3d,odm,aria}的数据,具体操作可以通过以下命令查看:
- #查看可以处理的数据有哪些
- 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。 |
这里选择了一些可能用到的命令,其他可以看具体的文档,特征提取、特征匹配的一些方法都有具体的操作。
- ns-train nerfacto --data {PROCESSED_DATA_DIR} --output-dir {PATH}
- # {PROCESSED_DATA_DIR}这里是你colmap生成的路径位置{PATH}是你输出的路径
-
- #例子
- ns-train nerfacto --data colmap --output-dir train
如下训练的过程,可以通过端口查看。
训练的过程,可以在右边调整一些参数或者查看深度图之类的。
训练完成:
会生成以下目录(包含训练的一些参数还有transforms矩阵):
其中最重要的就是config.yml文件,之后的命令都会涉及到这个文件。
在训练时设置camera_path,生成深度图和rgb图的时候会根据相机路径来生成相应的图。具体操作:
点击render,然后Add Keyframe添加相机路径,可以添加具体输入的图片,也可以添加一些选定视角的frame。如图是我选择的路径,这个步骤详细可以看nerfstudio官方视频
选定后,然后点击下面的Generate Command可以在colmap的文件夹中看到生成的camera的json文件。如图所示:
- #可以通过这个命令查看nerfacto训练参数,一般其他参数都使用默认的就可以了
- ns-train nerfacto -h
- #也可以使用其他方法来渲染,如下命令可以查看。
-
- ns-trian -h
- #其他方法也没有尝试,感兴趣的可以尝试一下。
1、可以通过viewer查看生成的结果
- ns-viewer --load-config {outputs/.../config.yml}
- #--load-config PATH
- #Path 是生成的config.yml
- #例子
- ns-viewer --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml
-
- #可以通过以下命令查看帮助
- ns-viewer -h
可以查看渲染的结果,如图所示:
也可以在右边进行操作,之前要是没有选择camera_path,也可以在这里选择。Export可以导出生成的点云或者mesh的命令。下面会继续介绍。
export命令查看帮助
ns-export -h
命令查看帮助
ns-export pointcloud -h
- #必须要的参数
- --load-config PATH config.yaml文件
- --output-dir PATH 输出路径
- #例子
- 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
- #查看帮助
- ns-export poission -h
- #例子
- ns-export poisson --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml --output-dir exports/mesh/ --t
- 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
- 0000000 0.0000000000 --obb_rotation 0.0000000000 0.0000000000 0.0000000000 --obb_scale 1.0000000000 1.0000000000 1.0000000000
生成训练后的图片的位姿参数(R,T)
- #查看帮助
- ns-export cameras -h
-
- #例子
- ns-export cameras --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml --output-dir exports/camjson
可以到具体路径去查看
render命令查看帮助
ns-render -h
查看帮助:
ns-render camera-path -h
深度图例子:
- ns-render camera-path --load-config train/colmap/nerfacto/2024-04-22_162813/config.yml --output-path rgbanddepth/
- --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
- _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-filename | camera_path,在之前训练的时候提到的camera_path |
设置--rendered-output-names的depth和rgb,生成相应的深度图和rgb图。
关于深度图的计算公式:
(1)深度值的范围:首先确定深度值的实际范围,例如,由depth-near-plane
和depth-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).
琢磨这个有一段时间了,希望这些对你有帮助,如果你觉得写的不错,点个赞吧。
对很多了解的还不太深刻,如果有任何见解,欢迎评论讨论。谢谢大家。
官网文档写的很详细,大家可以去看一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。