nerf_pytorch训练自己的数据集
1、参考教程
https://zhuanlan.zhihu.com/p/576416530
2、制作数据集
可以用手机拍摄一段视频,然后使用PR进行抽帧导出为图片。
把视频导入为视频帧到图层
我这里设置为每10帧抽取一张图片
使用Everything批量重命名文件(因为图片不能包括中文路径,如果包含在后续处理会有各种问题报错,而且为了美观,这里对图片重新命名)
选择图片
选择重命名
根据自己需要调整
这时候重命名完成
3、根据数据集使用COLMAP获取相机位姿
LLFF格式数据可以将对应图片参数、相机位姿和相机参数简洁有效地存储在一个npy文件中,以方便python读取,且NeRF模型源码拥有直接对LLFF格式数据集进行训练的配置和模块,便于研究者使用。
下载COLMAP软件,下载链接,我下的是稳定版
https://demuc.de/colmap/
解压后,运行bat
此时,需要将新建文件路径定位到我们的工作路径(新建一个文件夹并命名为自己数据集的名称,这里我们创建为/COLMAP_test/,注意,该文件夹的完整路径中不能有中文);接着,在工作目录下创建/images/文件夹并将图片存放在这里;然后,在工作目录下创建database.db文件(需要手动输入)后点保存。
然后,选择图片路径,点击Select并选择刚才存放图片的/images/文件夹后保存,点击Save
进行特征提取
待特征提取完毕后,关闭Feature extraction窗口。并点击Processing -> Feature matching 进行特征匹配
接下来对匹配到的点进行稀疏重建,点击Reconstruction -> Start reconstruction 此时将会开始进行重建
根据匹配到的特征点数目,此过程可能会持续一段时间,在窗口中可以看到重建过程。重建完毕后,得到如下图,可以通过右下角Images和Points来判断是否重建成功(如果重建的图片较少或者点较少都会导致后续导出模型失败)
最后,点击File -> Export model 以导出模型,注意,请在工作目录下新建/sparse/0/文件夹,并将模型导入到该路径下例如(./sparse/0/),选择改文件夹。
此时,将会在该目录下得到如下文件。至此,第一步位姿获取步骤完成
4、使用LLFF脚本对位姿数据进行格式转化,把数据集转换成LLFF格式数据集
得到COLMAP位姿匹配数据后,我们要对每张图片的位姿信息进行格式转换,转换为LLFF格式方便Nerf模型读取。
打开LLFF脚本https://github.com/Fyusion/LLFF
打开imgs2poses.py文件,修改如下内容,改为刚才的工作目录,然后在终端运行该代码,例如:
提示没有No module named 'skimage'
使用pip安装
pip install scikit-image
又报错要输入参数,少了--加上去
提示系统找不到指定的文件,这个是因为以为你还没有进行colmap操作,因为文件夹名写错了,sparse粗心写成了spare
这个报错我猜测是中文编码的问题,我的图片是带有中文的。。。到这里我打算重头开始弄
!!!重头弄了后成功了,不要有中文名字的图片
5、把处理好的数据集配置到Nerf代码目录下
将整个工作目录的文件夹复制到nerf代码的/nerf-pytorch/data/nerf_llff_data/目录下
注意,之前/images/文件夹中的图片,只能保留已经匹配上的图片(匹配成功的图片名称及数目可以如步骤2最后所提到的方法来查看)
接着,需要设置配置文件。
在NeRF代码目录下,复制/nerf-pytorch/configs目录下的fern.txt文件,并重命名为自己模型的名称(建议和工作目录名称一致),并修改如下内容:
最后就可以运行训练代码了
python run_nerf.py --config configs/basketball_ustb.txt
但是毫无效果,一开始训练就nan,试了调小学习率但没啥用。我怀疑是数据集预处理的不好导致的,位姿太不准了。
后来重新拍了个场景,位姿弄好了训练出来就有效果了。
本文来自博客园,作者:JaxonYe,转载请注明原文链接:https://www.cnblogs.com/yechangxin/articles/17287670.html
侵权必究