声明
本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。
实验流程
- 选择训练的数据集,可以使用DTU数据集:
将数据集保存在NeRF代码的data文件夹中,并命名,例如:“nerf-pytorch-master/data/box/images” - 下载colmap软件,地址为:https://github.com/colmap/colmap/releases,下载好对应的版本,解压打开COLMAP.bat运行软件,基本操作参考教程;
- 新建project——选择数据集——特征提取(选择SIMPLE_PINHOLE)——特征匹配——开始重建(Start reconstruction),最后获得重建的场景图像:
- 保存数据导出为bin格式——Export model,并将其保存在"nerf-pytorch-master/data/box/sparse/0/"文件夹下(方便后续数据处理):
- 将导出的位姿数据转换成llff数据格式,下载数据格式转换的源码并运行,若出现import引用的错误,将文件路径修改即可,最后得到NeRF训练所需的poses_bounds.npy格式的文件:
git clone https://github.com/Fyusion/LLFF.git
pip install scikit-image
pip install imageio
python imgs2poses.py "data/box"
- 新建配置文件box.txt用于训练参数的设置,并将文件保存于configs文件夹中:
expname = box_test
basedir = ./logs
datadir = ./data/box
dataset_type = llff
factor = 8
llffhold = 8
N_rand = 1024
N_samples = 64
N_importance = 64
use_viewdirs = True
raw_noise_std = 1e0
- 正常来讲可以直接运行测试代码,输出结果,但是博主在该阶段下采样时遇到了问题;代码load_llff.py的_minify()中有关下采样的部分在window系统下运行可能会报错:
os.makedirs(imgdir)
check_output('cp {}/* {}'.format(imgdir_orig, imgdir), shell=True)
ext = imgs[0].split('.')[-1]
args = ' '.join(['mogrify', '-resize', resizearg, '-format', 'png', '*.{}'.format(ext)])
print(args)
os.chdir(imgdir)
check_output(args, shell=True)
os.chdir(wd)
if ext != 'png':
check_output('rm {}/*.{}'.format(imgdir, ext), shell=True)
print('Removed duplicates')
print('Done')
也就是这几个check_output()函数报错返回非零值,由于这几行代码的原理就是利用命令行进行图片的下采样处理,所以如果报错的话只需将其单独在cmd中运行,处理images文件夹中的图片即可;记得要先下载mogrify命令的相关程序;
8. 如果没有其他问题,images_8下采样文件夹中的图片已经生成,就可以直接运行代码:
python run_nerf.py --config configs/box.txt
训练结束后,得到测试结果:
也可以通过添加"–render_only"命令运行测试程序,并可以修改render_path()中的一系列代码来生成深度图: