NerfStudio复现

1、简介

Nerfstudio是神经辐射场(Nerf)开发的模块化框架。

神经辐射场(Nerf)是一个快速发展的研究领域,在计算机视觉、图形、机器人等领域有着广泛的应用。为了简化Nerf研究的开发和部署,提出了模块化的Pytorch框架Nerfstudio。

Nerfstudio框架包括用于实现基于Nerf的方法即插即用组件,这使得研究人员和从业者可以轻松的将Nerf纳入其项目。此外,模块化设计支持广泛的实时可泛化工具、用于导入野外数据的流线化管道,以及用于导出为视频、点云和网格表示的工具。Nerfstudio的模块化使Nerffact的开发成为可能,Nerfstudio结合了最近论文中的组件,以实现速度和质量之间的平衡,同时也保持对未来修改的灵活性。为了促进社区驱动的开发,所有的相关代码和数据都通过开源许可证在nerfstudio中呈现。

下述是Nerfstudio开发之初就包含的方法:

下述是后期相关人员添加的第三方方法:

Nerfstudio不断的在收集研究者们使用 nerfstudio 来实现有关Nerf新的(甚至是现有的)方法,并提供了相关的指南。

2、在Winows上进行NerfStudio的环境配置

参考博客链接:(三维重建学习)NeRFStudio安装win11-CSDN博客

2.1 配置要求

cuda 11.8(11.5以上),本机为12.1版本 conda python 3.8 (>=3.8 ) cmake visual studio 2019/2022,本机为2022版本

2.2 创建环境
 conda create --name nerfstudio -y python=3.8#创建名为nerfstudio的环境
 conda activate nerfstudio#激活环境
 pip install --upgrade pip#更新pip安装选项
2.3 安装依赖
2.3.1 安装visual studio 2019

visual studio 2019下载地址

在D盘创建一个名为visualstudio的文件夹,将下载的程序放入:

双击exe程序开始安装:

然后稍微等待即可。

安装完成后会自动弹出以下窗口,根据你要使用Visual Studio所做的事情选择不同的功能集和工作负载,同时选择安装路径(建议使用默认安装路径)。在窗口的上方还有单个组件、语言包、安装位置这些选项,可以不用管,均为默认值。最后点击安装。

接着慢慢等待即可。

安装完毕后,重启。

找到visualstudio的安装位置,然后右键点击Visual Studio,选择发送到桌面快捷方式。

2.3.1 安装pytorch
 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
2.3.3 安装tiny-cuda-nn

【tiny-cuda-nn的下载地址】【fmt的下载地址】【cutlass的下载地址】 ​ 解压fmt和cutlass,并将文件内容放到dependenciesfmt和dependenciescutlass中。

以管理者身份打开”x64 Native Tools Command Prompt for VS 2019″终端,cd到合适的路径,输入以下指令:

 cd tiny-cuda-nn/bindings/torch
 python setup.py install

出现错误:

 (nerfstudio) D:	iny-cuda-nnindings	orch>python setup.py install
 setup.py:5: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
   from pkg_resources import parse_version
 Building PyTorch extension for tiny-cuda-nn version 1.7
 Obtained compute capability 89 from PyTorch
 'nvcc' 不是内部或外部命令,也不是可运行的程序
 或批处理文件。
 Targeting C++ standard 14
 Traceback (most recent call last):
   File "setup.py", line 187, in <module>
     ext_modules = [make_extension(comp) for comp in compute_capabilities]
   File "setup.py", line 187, in <listcomp>
     ext_modules = [make_extension(comp) for comp in compute_capabilities]
   File "setup.py", line 172, in make_extension
     ext = CUDAExtension(
   File "C:Users123.condaenvs
erfstudiolibsite-packages	orchutilscpp_extension.py", line 1077, in CUDAExtension
     library_dirs += library_paths(cuda=True)
   File "C:Users123.condaenvs
erfstudiolibsite-packages	orchutilscpp_extension.py", line 1211, in library_paths
     paths.append(_join_cuda_home(lib_dir))
   File "C:Users123.condaenvs
erfstudiolibsite-packages	orchutilscpp_extension.py", line 2419, in _join_cuda_home
     raise OSError('CUDA_HOME environment variable is not set. '
 OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

主要的问题是 nvcc 命令未找到,以及 CUDA_HOME 环境变量未设置。

然后我就去搜索了一系列的方法,先是修改环境变量,也是显示一系列的报错,然后我就把cuda卸载了,重新配置这个nerfstudio环境中的pytorch和对应的cuda版本,后来是冲突问题(卸载不干净),最后又是visualstudio环境变量的问题,总之解决完一个下一个问题又来,最后在Windows上配置Nerfstudio的环境我就放弃了。

之所以在windows上安装Nerfstudio是因为我想和Intsat-NPG(Winows上配置安装)一样可以看到可视化的渲染过程,但是没想到在windows上安装Nerfstudio过程太过于繁琐,然后我就退而求其次选择在autodl上的命令行界面进行Nerfstudio环境的配置。

3、在Autodl(ubuntu系统)上进行NerfStudio的环境配置

3.1 在autodl中创建实例

在autodl中创建实例时需要选择Nerfstudio对应版本的Pytorch和cuda,如下图选择2.0.0的pytorch和11.8的cuda(注意:cuda是基础层的,所有环境共用,pytorch是每个环境特有的,那么这里服务器自带的pytorch2.0.0是属于基础环境base的):

3.2 利用SSH远程连接Autodl服务器

之所以要用SSH远程连接Autodl服务器是因为一会要卸载创建实例自带的cuda,一旦卸载了实例自带的cuda,就无法用Jupyter网页登录到服务器(由于把miniconda3删除了,另外安装的Anaconda,所以autodl界面的jupyter-lab打不开了),只好用SSH远程访问登录。之所以要卸载创建实例自带的cuda是因为实例自带的cuda是轻量级的miniconda,miniconda无法支撑Nerfstudio的应用。

到FinalShell官网 (hostbuf.com)下载比较好用的SSH远程服务软件FinalShell:

然后按照默认的提示步骤安装就可以了(注意调整安装位置)。

获取创建实例的ssh登录指令和密码:

打开安装好的Finalshell,输入以下信息(名称自取,主机是实例的域名从ssh的登录指令中获取,端口也是从ssh的登录指令中获取,用户名为root,密码为获取的实例密码):

3.3 配置环境

利用命令nvcc -v和whereis nvcc查看cuda版本以及安装路径。

实例自带的cuda是轻量级的miniconda,miniconda无法支撑Nerfstudio的应用,因此需要重新安装Anaconda。

到网站 anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror中利用清华园下载Anaconda镜像:

将下载好的Anaconda镜像通过Finalshell上传至autodl,上传的文件夹为/root/:

上传完成之后,执行如下命令给这个镜像文件赋予权限:

 chmod 775 ./Anaconda3-2024.02-1-Linux-x86_64.sh

执行如下命令,运行该镜像文件,下载Anaconda:

 ./Anaconda3-2024.02-1-Linux-x86_64.sh

由于下载安装了Anaconda,也就是对ubuntu系统的配置文件进行修改,需要重启终端使得配置文件生效,执行如下命令可以在不重启终端的情况下应用对配置文件所做的更改:

  source ~/.bashrc

既然新安装了Anaconda,就执行如下命令把autodl实例自带的miniconda删掉:

 rm -rf miniconda3/

基础配置做好了之后,在实例中运行如下命令,下载Nerfstudio项目:

 cd autodl-tmp
 git clone https://github.com/nerfstudio-project/nerfstudio.git

然后执行如下命令,创建名为nerfstudio的环境:

 conda create -n nerfstudio

然后执行如下命令,激活环境:

 conda activate nerfstudio

然后在该环境中下载Python3.8(nerfstudio要求的python版本):

 conda install python=3.8

由于刚才系统自带的pytorch2.0.0是给基础环境base的,现在创建了新环境nerfstudio,需要给这个新环境也配置一个pytorch,对应conda11.8的pytorch版本是2.1.2,执行如下命令进行安装:

 conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio=2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia

执行如下命令安装nerfstudio:

 cd autodl-tmp/nerfstudio
 pip install -e .

nerfstudio安装好之后可以输入ns命令检查nerfstudio是否安装好,如下图所示:

输入以下命令安装nerfstudio 的命令行界面(CLI)。这个命令用于在用户的计算机上安装 nerfstudio 的命令行工具,允许用户通过命令行执行 nerfstudio 的各种功能,比如渲染场景、管理项目等。

 ns-install-cli

接下来安装Nerfstudio很重要的一个库tiny-cuda-nn。

执行如下命令,下载tiny-cuda-nn项目:

 cd autodl-tmp
 git clone https://github.com/NVlabs/tiny-cuda-nn.git

执行如下命令安装tiny-cuda-nn:

 cd autodl-tmp/tiny-cuda-nn
 mkdir build
 cd build
 cmake ../
 cmake --version
 cd autodl-tmp/tiny-cuda-nn/bindings/torch
 pip install ninja
 python setup.py install 

上述命令运行的结果好像会报错,不过不要紧,继续执行以下命令安装tiny-cuda-nn:

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

通过运行如下命令查看tiny-cuda-nn库安装成功没有(包含tiny-cuda-nn就说明安装好了):

 pip list

至此Nerfstudio的环境就配置好了。

4、在测试数据集上训练第一个Nerfactor模型(Autodl上的ubuntu系统)

到网站data – Google Drive下载测试数据集,这里我下载的是kitchen数据集。

下载好kitchen测试集之后,将其拷贝到autodl实例的autodl-tmp/nerfstudio/data/nerfstudio目录下,这里的data/nerfstudio需自己创建,如下:

运行如下命令训练一个 nerfacto 模型,这是nerfstudio推荐用于真实场景的模型(其中- -data是指明数据集路径,–pipeline.model.predict-normals 参数是保证在训练过程中启用了法线预测):

 cd autodl-tmp/nerfstudio
 ns-train nerfacto --data data/nerfstudio/kitchen --pipeline.model.predict-normals True

训练得到的结果保存于目录/root/autodl-tmp/nerfstudio/outputs/kitchen/nerfacto/2024-06-09_212818中,如下:

运行如下命令,将训练得到的结果转为点云(其中–load-config是输出的配置文件config.yml的路径,–output-dir是指定输出点云保存的路径):

 cd autodl-tmp/nerfstudio
 ns-export pointcloud --load-config /root/autodl-tmp/nerfstudio/outputs/kitchen/nerfacto/2024-06-09_153110/config.yml --output-dir /root/autodl-tmp/nerfstudio/outputs/kitchen/nerfacto/2024-06-09_153110/pointcloud.ply

最后得到测试数据集kitchen的nerfacto点云模型,如下(注意:这个点云模型很大,需要裁剪,裁剪之后才是下面的效果):

5、在植物数据集上训练Nerfactor模型(Autodl上的ubuntu系统)

5.1 安装Colmap

到网站COLMAP — COLMAP 3.9-dev documentation中下载colmap项目:

输入上述命令,下载colmap项目:

 cd autodl-tmp
 git clone https://github.com/colmap/colmap

接下来执行以下命令利用cmake编译colmap:

 cd autodl-tmp/colmap
 mkdir build
 cd build
 cmake ../

输入以下命令查看操作系统的版本信息(/etc/os-release文件就是记录的操作系统的版本信息):

 cat /etc/os-release

本操作系统的版本信息如下:

执行如下命令,安装colmap在ubuntu系统中的依赖项:

 cd autodl-tmp/colmap/build
 apt update
 apt upgrade -y
 apt --fix-broken install
 apt upgrade -y
 apt-get install 
     git 
     cmake 
     ninja-build 
     build-essential 
     libboost-program-options-dev 
     libboost-filesystem-dev 
     libboost-graph-dev 
     libboost-system-dev 
     libeigen3-dev 
     libflann-dev 
     libfreeimage-dev 
     libmetis-dev 
     libgoogle-glog-dev 
     libgtest-dev 
     libsqlite3-dev 
     libglew-dev 
 apt-get install qtbase5-dev 
     libqt5opengl5-dev 
     libcgal-dev 
     libceres-dev

重新使用cmake编译colmap:

 cd autodl-tmp/colmap/build
 ls#查看build目录下cmake的编译文件,如下:

 rm -rf ./*
 cmake ../
 make -j 6
 make install -j

输入以下命令检查colmap是否安装成功:

 colmap

有如下信息则说明colmap安装成功:

现在autodl-tmp下有如下几个文件:

至此colmap安装完毕。

5.2 训练植物数据集

上传N3数据集至实例的目录/root/autodl-tmp/data(该目录为自己创建),并执行下述命令进行解压:

 cd /root/autodl-tmp/data
 unzip pre_N3

解压后如下:

官方文档给出如下使用自己数据集进行预处理的命令:

 ns-process-data {video,images,polycam,record3d} --data {DATA_PATH} --output-dir {PROCESSED_DATA_DIR}
 ​
 ​
 ns-process-data images --sfm-tool hloc --feature-type superpoint --matcher-type superglue --data '/path/to/IMG'  --output-dir '/path/to/IMG' 
 ​
 ​
 ns-process-data images --data /root/autodl-tmp/data/dayezhiwu --output-dir /root/autodl-tmp/data/2processed_dayezhiwu --camera-type perspective --matching-method exhaustive --sfm-tool colmap --crop-factor 0.0 0.0 0.0 0.0
 ​

其中第一个参数是指定输入的数据格式如image video等,第二个参数是的指定源数据位置,第三个参数是指定colmap处理后的数据的位置。

那么对N3植物数据集进行预处理的命令是:

 ns-process-data images --data /root/autodl-tmp/data/pre_N3 --output-dir /root/autodl-tmp/data/processed_N3 

预处理成功将输出以下信息:

预处理成功后的文件夹processed_N3中有如下7个文件(其中colmap为输出的相机位姿信息,images是数据集,images_2、images_4、images_8是预处理过后的图片,sparse_pc.ply是稀疏点云,transforms.json是将相机位姿转为的json格式文件。):

预处理完成之后,执行如下命令就可以跑出N3数据集的Nerfacto模型:

 ns-train nerfacto --data /root/autodl-tmp/data/processed_N3 --pipeline.model.predict-normals True

执行如下命令提取Nerfactor的点云模型:

 ns-export pointcloud --load-config /root/autodl-tmp/nerfstudio/outputs/processed_N3/nerfacto/2024-06-11_155926/config.yml --output-dir /root/autodl-tmp/nerfstudio/outputs/processed_N3/nerfacto/2024-06-11_155926/pointcloud.ply

提取点云如下:

执行如下命令提取Nerfacto的网格模型:

 ns-export poisson --load-config /root/autodl-tmp/nerfstudio/outputs/processed_N3/nerfacto/2024-06-11_155926/config.yml --output-dir /root/autodl-tmp/nerfstudio/outputs/processed_N3/nerfacto/2024-06-11_155926/mesh.ply

执行提取网格的命令后得到如下文件:

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容