记录在论文复现过程中遇到的一些问题和解决方法
文献:https://research.nvidia.com/labs/dir/neuralangelo/?ref=blog.runpod.io
github代码:https://github.com/nvlabs/neuralangelo?tab=readme-ov-file
这里需要强调一下,本项目的显存需求大,低性能卡带不动,我是用的是RTX 3090显卡
1.项目安装
# 1.将项目克隆到本地
git clone https://github.com/NVlabs/neuralangelo
cd neuralangelo
# 2.安装虚拟环境和依赖
conda env create --file neuralangelo.yaml
conda activate neuralangelo
安装虚拟环境和依赖我选择Anaconda安装虚拟环境,出错易修改;
这里遇到两个问题:
1.依赖库的版本冲突,根据文件neuralangelo.yaml安装的虚拟环境里面已经安装了python3.8,这里我的系统python是3.7,在查询python版本时还是3.7,因此这里需要在.bashrc中配置环境变量,重新启用虚拟环境时就是python3.8了;
vim ~/.bashrc
# 插入
export PATH="~/anaconda3/envs/neurangelo/bin":$PATH
source ~/.bashrc
2.安装tiny-cuda-nn失败,失败的代码块就是这行;
# neuralangelo.yaml
- pip:
- -r requirements.txt
# requirement.txt
git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
这里失败的原因是gcc版本太低,需要升级高版本的gcc,我的系统是Ubuntu18.04,gcc版本是7.5.0,这里需要更新到9.0以上版本,并不是官方文档的8.0以上版本就行,服务器在没有root权限下升级gcc可以参考这篇文章:https://blog.csdn.net/weixin_52703185/article/details/141964767。
2.数据预处理
(1)首先安装colmap,我是用的是conda安装,在训练过程中暂时没遇到问题;
conda install colmap
(2)初始化colmap模块
git submodule update --init --recursive
(3)预处理,将视频文件放到neurlangelo文件中
SEQUENCE=lego
PATH_TO_VIDEO=lego.mp4
DOWNSAMPLE_RATE=2
SCENE_TYPE=object
bash projects/neuralangelo/scripts/preprocess.sh ${SEQUENCE} ${PATH_TO_VIDEO} ${DOWNSAMPLE_RATE} ${SCENE_TYPE}
3.运行neurangelo
EXPERIMENT=toy_example
GROUP=example_group
NAME=example_name
CONFIG=projects/neuralangelo/configs/custom/${EXPERIMENT}.yaml
GPUS=4 # use >1 for multi-GPU training!
torchrun --nproc_per_node=${GPUS} train.py \
--logdir=logs/${GROUP}/${NAME} \
--config=${CONFIG} \
--show_pbar
这里的训练过程是不会自动结束,因为在配置文件中设置的迭代次数是9999999999999,需要手动结束,结束后也可以回复训练,需要添加–chechpoiont和–resume参数:
EXPERIMENT=toy_example
GROUP=example_group
NAME=example_name
CONFIG=projects/neuralangelo/configs/custom/${EXPERIMENT}.yaml
CHECKPOINT_PATH=logs/example_group/example_name/xxx.pt
GPUS=4 # use >1 for multi-GPU training!
torchrun --nproc_per_node=${GPUS} train.py \
--logdir=logs/${GROUP}/${NAME} \
--config=${CONFIG} \
--show_pbar
--checkpoint=${CHECKPOINT_PATH} \
--resume
4.isosurface extraction
CHECKPOINT=logs/${GROUP}/${NAME}/xxx.pt
OUTPUT_MESH=xxx.ply
CONFIG=logs/${GROUP}/${NAME}/config.yaml
RESOLUTION=2048
BLOCK_RES=128
GPUS=4 # use >1 for multi-GPU mesh extraction
torchrun --nproc_per_node=${GPUS} projects/neuralangelo/scripts/extract_mesh.py \
--config=${CONFIG} \
--checkpoint=${CHECKPOINT} \
--output_file=${OUTPUT_MESH} \
--resolution=${RESOLUTION} \
--block_res=${BLOCK_RES}
最后生成.ply文件,可以使用MeshLab打开,到这就可以看到一个效果了。