声明
本章书写的目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。
NeRF-Pytorch源码地址
NeRF作者所给出的源码是TensorFlow版本的,由于本人的学习需求,所以采用来自yenchen lin的Pytorch版代码进行实现和注释,该版本是基于原版的NeRF所复现的,而且在实现的基础上还要比原版的结果输出时间快了1.3倍。
环境配置准备工作
提前安装好Anaconda3,学习如何在prompt上创建名为nerf-pytorch的虚拟环境,先创立一个python3.7版本的虚拟环境nerf,准备工作完成。
正式配置环境
源包安装命令:
git clone https://github.com/yenchenlin/nerf-pytorch.git
若安装超时,可以参考教程换源后逐个安装;亦可直接在GitHub下载安装包解压后放在相关路径下
进入虚拟环境:
cd XXXXXXX #进入下载的源包路径
conda activate nerf-pytorch #进入虚拟环境
安装CUDA和pytorch:
安装的package中pytorch的版本没有硬性要求,但一定要和CUDA版本以及python版本相对应,这个过程相对较为复杂。
首先,选择在虚拟环境下安装支持的CUDA版本:
conda search cudatoolkit --info # 查看当前可直接下载的cuda版本的详细信息
执行上述命令后,会显示出源内所有的cuda版本以及下载地址(conda下支持的CUDA版本有限,但conda支持CUDA版本可以安装在虚拟环境里,并非全局,可以随虚拟环境的删除而删除,不用担心和全局的CUDA版本相互冲突),如图所示:
选择合适的版本(我们选择支持python3.7的11.3.1版本):
conda install cudatoolkit==11.3.1 # 安装指定版本cuda
通常情况下,国外官方源下载速度受限,可选择国内镜像源:
conda install cudatoolkit==11.3.1 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64/ #安装指定版本cuda
安装完成即可,下面安装pytorch,去官网查看对应的版本:
我们选择pytorch1.12.0版本,直接复制官网的命令:
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
pytorch国外官方源速度受限,可选择国内镜像源:
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
安装完成即可。
安装其他库:
nerf源包下有requrement.txt文件,将requirements.txt文件中修改为(已安装过pytorch,注释前两行):
执行命令:
pip install -r requirements.txt
亦可一个一个安装
准备数据集
下载数据集
方法一:官方命令
bash download_example_data.sh
nerf源包下有download_example_data.sh文件,但在win环境下不支持bash,可以从虚拟机linux系统上下载,也可选择方法二
方法二:官网下载
安装好后的数据集文件夹(必须如此):
训练数据
修改配置:
保证自己的数据路径与configs/fern.txt文件里的datadir路径相同:
可以选择更改迭代次数(默认2000k次):
训练模型:
在命令行添加config的参数
python run_nerf.py --config configs/fern.txt
开始训练截图:
紧接着开始训练,训练完成后查看训练结果:
训练中出现的问题:
问题一:若出现如下报错,参考教程进行更改:
assert not step_t.is_cuda, "If capturable=False, state_steps should not be CUDA tensors.
在run_nerf.py的第206行添加相应语句即可:
optimizer.param_groups[0]['capturable'] = True
问题二:
出现如下问题:TypeError: read() got an unexpected keyword argument ‘ignoregamma‘
imageio的版本较高,可以尝试使用较旧的imageio版本,该版本支持ignoregamma参数。你可以通过以下命令安装指定版本的imageio:
pip install imageio==2.9.0
使用预训练模型
除了自己训练数据集之外,你还可以下载测试数据来测试结果:
https://drive.google.com/drive/folders/1jIr8dkvefrQmv737fFm2isiT6tqpbTbvhttps://drive.google.com/drive/folders/1jIr8dkvefrQmv737fFm2isiT6tqpbTbv
我这里下载了flower_test测试数据,放在logs文件夹下
然后执行测试对flower_test进行渲染:
python run_nerf.py --config configs/flower.txt --render_only
开始测试时运行截图:
训练完成:
查看渲染结果 在 ./logs/flower_test/renderonly_path_100000里面:
NeRF源码学习
NeRF神经辐射场学习笔记(二)—— Pytorch版NeRF实现以及代码注释 https://blog.csdn.net/weixin_44292547/article/details/126249933https://blog.csdn.net/weixin_44292547/article/details/126249933NeRF-pytorch 代码分析 https://zhuanlan.zhihu.com/p/636276084https://zhuanlan.zhihu.com/p/636276084NeRF源码解读(pytorch实现) https://zhuanlan.zhihu.com/p/598464999?utm_id=0https://zhuanlan.zhihu.com/p/598464999?utm_id=0