简单来说,nerf(神经辐射场)是一个结合了某种全连接深度网络,通过少量目标视角下的照片就能合成任意视角照片的技术。从代码入手算法进而掌握技术是一件高效的学习方式,本帖主要围绕nerf源码的安装debug步骤展开。后续会介绍算法的具体原理。
环境:windows
平台:pycharm(搭建pytorch环境)
首先简要罗列一下安装步骤:
1.下载源代码(github如果无法打开或者出现加载慢,下载卡顿可以尝试修改host文件或者使用gitee,具体百度即可,不再详述)
https:///github.xom/yenchenlin/nerf-pytorch.git
下载好后如图所示
2.准备anaconda,pycharm
两软件都可通过官网免费下载。anaconda建议安装适配本机的版本,跨本版容易出现深度学习环境不兼容的问题。
官网链接:
Anaconda | The World's Most Popular Data Science Platform
Download PyCharm: Python IDE for Professional Developers by JetBrains
如图为anaconda下载界面,卡顿可以右键在新标签页打开。
3.安装库,数据集,此步骤可能会很慢,速度都是几百k,等了很久才下好。这里附一个网盘链接
bash download_example_data.sh
链接:https://pan.baidu.com/s/1ZkU7hi3gdmZrZH7npELuzg
提取码:nkq1
--来自百度网盘超级会员V5的分享
4.环境配置及运行
函数库安装:
torch==1.11.0 注:根据个人电脑配置定,大于0.9.1即可(本机采用1.13.0)
imageio
imageio-ffmpeg
matplotlib
configargparse
tensorboard>=2.0
tqdm
opencv-python
以上库采用
pip install -r requirements.txt
即可,个人认为还是单独下载合适,有些库的安装是依赖其他库的。方便查看问题
注:pytorch安装需要配套cuda,所以我是单独安装的pytorch。
打开官网根据配置选择cuda版本(一般默认):
Start Locally | PyTorch
复制粘贴划线部分并移步命令行下载即可。(网上有说把后面-c pytorch -c conda-forge这块删掉会快一点,但我这样下载之后cuda就会报错,索性还是用国外源
pytorch环境配置,参考链接
(2条消息) 利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn(适合小白的保姆级教学)_炮哥带你学的博客-CSDN博客
5.运行,打开pycharm,选择配置好的pytorch环境,点击下方Terminal并输入
python run_nerf.py --config configs/lego.txt
如果到目前为止一切顺利,那么,恭喜你完成了最简单的部分,接下来我们进入主题
6.报错记录与调试:
错误一:CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)
解决方案:晚上搜了很多都是有关batch,代码部分的修改,可能不同的电脑的运行环境不一样,所以源代码未必能直接跑通。然鹅,,,我的问题不在于此
是的,我犯了一个十分低级的错误:中文路径!
我的源代码路径是存贮在中文命名的文件夹里,后来放到一个纯英文路径,问题咔一下就解决了,很快啊~
错误二:RuntimeError: CUDA out of memory. Tried to allocate 2.10 GiB (GPU 0; 14.76 GiB total capac ****************
解决方案,这里按照优先顺序提供三种解决方案
(1)降低迭代次数。(对于仅为了验证并实现算法,对精度没有什么要求的新手强烈推荐)。
比如源码这里应该是10万还是20万次来着,跑的越久显卡功耗是越大的,当我迭代了50000次后,发现就开始爆内存,于是我就把他改成了40000,20000,甚至2000,最终同样可以运行出结果。但这里改完之后不要忘了修改视频导出参数设置,不然跑不出来结果。
视频参数设置:
比如这里的frequency of render_poses video saving就是渲染结果mp4的保存频率(理论上只需要小于上面的迭代次数N_iters即可,其他需要保存的内容根据情况修改
以上工作修改后,再次运行即可
(2)修改batch_size
32*32,或者32*4
修改后运行
(3)修改 chunk以及netchunk
chunk:并行处理的光束个数
netchunk:并行法搜送给神经网络的特征点数
比如我这里就分别改为1024,修改后即可正常运行