开源项目Nerf2Mesh运行记录

最近因为项目需要,在尝试跑通这个nerf2mesh的开源代码,在这里记录一下过程。

代码地址:ashawkey/nerf2mesh: [ICCV2023] Delicate Textured Mesh Recovery from NeRF via Adaptive Surface Refinement (github.com)

代码的运行是在服务器上实现的,具体配置如下:

在服务器上下载相应的代码后,按照要求安装所需的包:

pip install -r requirements.txt

# tiny-cuda-nn
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

# nvdiffrast
pip install git+https://github.com/NVlabs/nvdiffrast/

# pytorch3d
pip install git+https://github.com/facebookresearch/pytorch3d.git

注意安装的版本对应问题,requirements里面的包如下图所示:

torch-ema和torchmetrics没有说明支持的pytorch版本。

目前的torch-scatter支持的最高pytorch版本为2.1.X,手动安装的指令为:

pip install torch-scatter -f https://data.pyg.org/whl/torch-2.1.0+cu118.html

安装的pytorch3d是0.7.7,其官网文档中写明其支持的pytorch版本为2.0到2.3之间。注意检查pytorch版本和pytorch3d版本是否对应。如不对应可以通过下面的语句重新安装pytorch。

pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

安装所需的扩展包:

# install all extension modules
bash scripts/install_ext.sh

或者通过raymarching文件夹下面的setup.py进行安装:

# if you want to install manually, here is an example:
cd raymarching
python setup.py build_ext --inplace # build ext only, do not install (only can be used in the parent directory)
pip install . # install to python path (you still need the raymarching/ folder, since this only install the built extension.)

在用自己的数据集进行训练之前,需要先安装colmap用于后续对数据进行处理,具体的教程看这篇:ubuntu16安装colmap的问题及解决方案_cudasetupargument 未定义的引用-CSDN博客

跟着教程一步步走就行

安装好colmap以后运行你的colmap,注意单独建立一个data/custom文件夹用于存放你的数据(我拍摄了一段视频,文件名为input.mp4,存放于custom文件夹中),结构如下:

运行colmap的命令如下:

python scripts/colmap2nerf.py --video ./data/custom/video.mp4 --run_colmap # 对于视频
python scripts/colmap2nerf.py --images ./data/custom/images/ --run_colmap # 对于图像

运行后会对拍摄相机的位姿估计以及对视频画面的抽帧结果:

虽然是对单个物体360拍摄,但本次运行并没有按照GitHub项目中推荐的那样进行背景去除(要配置的包有一些版本不兼容的物体,在跑完全流程以后会尝试背景去除)

直接快进到下一步,开始第一阶段的训练:

python main.py data/custom/ --workspace trial_custom -O --data_format colmap --bound 1 --dt_gamma 0 --stage 0 --clean_min_f 16 --clean_min_d 10 --visibility_mask_dilation 50 --iters 10000 --decimate_target 1e5 --sdf

运行会需要较长时间,训练后会得到粗糙的重建成果,之后可以开启第二阶段的训练(btw上述第一阶段训练的指令是针对单个物体360度建模的指令,对室外场景的建模有其他的指令,具体可以参考项目的readme文件)

开启第二阶段的训练:

python main.py data/custom/ --workspace trial_custom -O --data_format colmap --bound 1 --dt_gamma 0 --stage 1 --iters 5000 --lambda_normal 1e-2 --refine_remesh_size 0.01 --sdf

报错:OSError: /environment/miniconda3/lib/python3.10/site-packages/torch_scatter/_scatter_cuda.so: undefined symbol: _ZN5torch8autograd13_wrap_outputsERKSt6vectorIN2at6TensorESaIS3_EERKSt13unordered_setIPN3c1010TensorImplESt4hashISB_ESt8equal_toISB_ESaISB_EESJ_NS9_8ArrayRefINS9_8optionalIS3_EEEERKSt10shared_ptrINS0_4NodeEESt8functionIFS5_S5_S5_EE

应该是scatter和torch或者cuda存在版本不兼容的问题,看来之前预防的pytorch和torchscatter不兼容的问题还是存在,尝试以下文章中提到的方法:(12月最新)完美兼容安装torch-geometric与torch-scatter torch-sparse torch-cluster、torch-spline-conv的方法及版本对应关系_geometric 和troch版本对应关系-CSDN博客

https://pytorch-geometric.com/whl/网站中找到对应版本的torchscatter下载,然后用pip install+完整文件名进行重装,重装后再次运行上述训练第二阶段的指令不再报相同错误。

等待训练完成。

训练时出现报错:

查到pymeshlab在最新版本中移除了许多旧版本的属性,需要将pymeshlab的版本降低到适配当前项目的版本,但项目的GitHub文档里面并没有写明他们安装的是哪个版本,只能推测(是个低效率的办法,如果有更好的方法可以评论区交流)论文完稿于22年,所以使用的是22年之前的版本。

在pymeshlab的PyPi页面中找到官方的changelog(记录项目变更情况的文档)查到2021.10的版本中提到了AbsoluteValue,于是尝试将版本降级至2021.10

大量报错,2022.2的版本更改了所有函数的命名,于是尝试安装pymeshlab 2022.2的版本,刚刚报错的节点不再报错。

pip install pymeshlab==2022.2

看他跑一个小时,没什么问题我就去睡觉,有问题再更新。

跑完了,耗时比想象中少

输出的模型保存在了trial_custom/mesh_stage1里面,把他下载下来看看。

效果一般般,似乎是把背景当成了物体的主体来建模

明天运行一下去除背景的代码。然后再把stage0和stage1重新跑一遍(果然还是不应该跳步。。。)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值