当前位置: 代码网 > it编程>编程语言>其他编程 > 【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南(更新中)

【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南(更新中)

2024年08月02日 其他编程 我要评论
Nerfstudio,一个用于NeRF开发的模块化PyTorch框架。框架中用于实现基于NeRF的方法的组件即插即用,使得研究人员和相关从业者可以轻松地将NeRF集成到自己的项目中。框架的模块化设计支持实时可视化工具,导入用户真实世界捕获的数据集外(in-the-wild)数据,以及导出为视频,点云和网格表示的工具。近期,还导入了InstantNGP、3D Gaussian Splatting等最新重建算法。

场景/物体三维重建过程:首先用colmap估计图像位姿,而后以图像和位姿作为出入,用nerf或gaussian splatting进行三维重建

一、nerfstudio安装

  简介:nerfstudio,一个用于nerf开发的模块化pytorch框架。框架中用于实现基于nerf的方法的组件即插即用,使得研究人员和相关从业者可以轻松地将nerf集成到自己的项目中。框架的模块化设计支持实时可视化工具,导入用户真实世界捕获的数据集外(in-the-wild)数据,以及导出为视频,点云和网格表示的工具。近期,还导入了instantngp、3d gaussian splatting等最新重建算法。

在这里插入图片描述

1.安装(ubuntu系统)

  下载项目代码到本地:

git clone https://github.com/nerfstudio-project/nerfstudio.git

  可以去github直接下载zip文件,也可以按照以上命令git。网络不好可以去gitee(码云)加速。

cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .

2.安装(windows系统)

2.1.安装vs2019 + cuda 11.6;
2.2.通过conda创建虚拟环境nerfstudio,依次执行如下命令:

conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
python -m pip install --upgrade pip

3.3.安装依赖:
  (1).pytorch 1.13.1, 执行如下命令:

pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 -f https://download.pytorch.org/whl/torch_stable.html

  (2).tinycudann, 执行如下命令:

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

3.4.安装nerfstudio,依次执行如下命令:

git clone git@github.com:nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .

5.安装ffmpeg, 执行如下命令:

conda install -c conda-forge ffmpeg

6.安装colmap, 执行如下命令:

conda install -c conda-forge colmap
conda install -c conda-forge mpir

7.安装hloc,依次执行如下命令: 可选,windwos上不支持pycolmap

cd ..
git clone --recursive https://github.com/cvg/hierarchical-localization/
cd hierarchical-localization/
pip install pycolmap # windows不支持
python -m pip install -e .

二、安装tinycudann

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

  这句命令不成功的,请切换gcc与g++版本,方法见最后

三、colmap安装与使用

   colmap是用来对一系列图像进行位姿匹配,从而生成场景的三维模型(点云)。也就是你对一个场景拍摄了很多照片,colmap可以估计出每张照片的相机位置(pose,是nerf的输入),并利用sfm算法生成三维模型。使用nerf和gaussian splatting进行三维重建必备的工具。

1. 安装依赖

sudo 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 \
    qtbase5-dev \
    libqt5opengl5-dev \
    libcgal-dev \
    libceres-dev

2. 安装colmap

git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build
sudo cmake .. \
      -d cmake_cuda_compiler="/usr/local/cuda-11.3/bin/nvcc" ../cmakelists.txt \
      -d cmake_cuda_architectures='89'    
cd ..
sudo make -j24 
sudo make install

  注意:
  更改以上命令中cuda路径,以及最后的显卡算力(75代表turing架构,如rtx 20系列;80代表ampere架构,如rtx 30系列;89为rtx4080 显卡等)

3.使用colmap

3.1 可视化界面使用

使用命令打开colmap

colmap gui

打开界面如下:

在这里插入图片描述1.创建 project_cat 文件夹,把图片放 project_cat/images 下
2.执行 automatic reconstruction 重建,如下:‘
在这里插入图片描述
在这里插入图片描述
  需要等待比较久的时间,最开始比较占用cpu,大概执行的是特征点计算和匹配一类的,后面会占用比较大的gpu使用率,gpu内存占用大概2g.

  到下面的界面后表明完成。

在这里插入图片描述
  同时介绍了可视化sparse, dense, mesh 模型结果的方法。最终效果如下:

在这里插入图片描述
一些参数说明:

3.2 nerfstudio命令行调用colmap

  除以上可视化界面直接计算图片的pose以外,还可以用nerfstudio调用colmap:

ns-process-data images --sfm-tool hloc --feature-type superpoint --matcher-type superglue --data '/path/to/img'  --output-dir '/path/to/img' 

  其优点是利用superpoint 和 superglue深度特征,替代原始的sift提取特征

四、使用nerfstudio进行三维重建

4.1.通过colmap生成数据集,也可从网上,如https://data.nerf.studio/nerfstudio/ 下载lego 乐高玩具测试集,并拷贝到nerfstudio的data/nerfstudio目录下,data/nerfstudio需自己创建;

4.2.采用colmap生成数据集时,需执行如下命令生成transforms.json:

ns-process-data images --data data/nerfstudio/lego/train --output-dir data/nerfstudio/lego --camera-type perspective --matching-method exhaustive --sfm-tool colmap --crop-factor 0.0 0.0 0.0 0.0

4.3.训练命令如下:迭代产生的checkpoint存储在outputs/lego/nerfacto目录下

ns-train nerfacto --data data/nerfstudio/lego --vis viewer --max-num-iterations 50000

参数为数据路路径,迭代次数等。还可添加其他参数,用命令ns-render --help查看官方文档

  训练进度如下图所示:

在这里插入图片描述
训练结束后,会显示本地浏览地址。打开web实时预览: https://viewer.nerf.studio/versions/23-04-10-0/?websocket_url=ws://localhost:7007 ,如下图所示:

在这里插入图片描述加载预训练模型,继续训练命令为:

ns-train nerfacto --data data/nerfstudio/person --load-dir outputs/person/nerfacto/2023-08-23_152364/nerfstudio_models

加载预训练模型进行可视化查看:

ns-viewer --load-config outputs/person/nerfacto/2023-04-23_152364/config.yml

训练结果可以导出为 (1).渲染视频; (2).点云;(3).mesh.

五、3d gaussiansplatting安装与使用(即将到来)

5.1 安装

  首先,克隆代码到本地(–recursive是为了添加sibr的可视化库,用于显示结果)

git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive

  然后,cd目录到gaussian-splatting 下,按照yml创建环境:

cd gaussian-splatting
set distutils_use_sdk=1                   # 只有 windows 需要
conda env create --file environment.yml
conda activate gaussian_splatting

安装整体比较简单,基本一键式安装

5.2 使用

  首先,自带的库可以把视频,处理成图片。例如:

ffmpeg -i -qscale:v1-qmin1-vffps c:users\data\crane.mov -qscale:v 1 -qmin 1-vf fps= %04d.jpg

  然后,是用colmap处理图像,获得每张图像的pose:

python convert.py -s data/crane

由于我已经用colmap处理好了图像,因此需要修改以上代码。首先,需要创建 ‘ distorted’文件夹,并将 ‘colmap’中的‘spase’ 文件夹复制进去;然后复制 ‘images’文件夹,并重命名为‘input’。然后执行修改后的命令:

python convert.py -s 'data/crane' --skip_matching

得到的数据集格式如下:
在这里插入图片描述
  最后,开始训练:

python train.py -s 'data/crane' --data_device cpu  --iterations  30000

以上参数可选gpu或cpu,一般训练30k就能收敛。想细节更好,建议往100k训练。500张图,4080gup,30k大概需要半小时内(但是colmap需要一小时)。以下是训练截图:
在这里插入图片描述最上面一行output那,显示了保存路径。

  结果可视化:

./sibr_viewers/install/bin/sibr_gaussianviewer_app -m ./output/ee33ed94-3

以上命令,需要将路径改为自己的。可视化效果如下:

在这里插入图片描述

  可以通过键盘的‘wsad’进行移动,‘ikjl’键来切换视角。只要照片拍的好,效果就好。具体数据采集问题,可以咨询博主。

五* cuda安装(附c++编译器说明)

提示:安装cuda前,首先要确保gcc与g++编译器的版本,与cuda版本相匹配。不确定的先看第5节

1、查看已安装的cuda版本

  所有已安装的cuda版本默认保存在/usr/local路径下,cd到该路径下通过ls命令查看:

在这里插入图片描述

2、查看当前使用的cuda版本

  在/usr/local路径下通过 stat cuda 命令查看当前使用的cuda版本:

3、安装新的cuda版本——cuda11.3为例

3.1、下载对应版本的cuda安装包: 链接(选择下载runfile文件)

3.2、在下载文件的目录下,通过命令进行安装:

sudo sh cuda_10.0.130_410.48_linux.run
## 安装时去掉对显卡驱动的安装,如下图中去掉第一行

在这里插入图片描述
3.3、修改环境变量
  系统环境中修改cuda版本。执行以下命令,打开环境路径,在最后添加并保存:

gedit ~/.bashrc
## 默认为以上软连接的路径
export path=/usr/local/cuda/bin:$path  
export ld_library_path=/usr/local/cuda/lib64:$ld_library_path
export cuda_home=/usr/local/cuda

## 也可以指定具体路径
export path=/usr/local/cuda-11.3/bin:$path
export ld_library_path=/usr/local/cuda-11.3/lib64:$ld_library_path

保存环境变量:

source ~/.bashrc

4、cuda版本的切换

4.1、删除原版本的cuda软连接

sudo rm -rf /usr/local/cuda

4.2、建立新的指向cuda-10.0的软连接

sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda

5.切换gcc与g++版本

  cuda支持的最高版gcc与g++如下表,大部分人都需要降级gcc:

在这里插入图片描述

  安装对应版本gcc与g++(这里以cuda11.3对应的9.5为例):

sudo apt-get install gcc-9
sudo apt-get install g++-9

  随后,进入/usr/bin目录下删除旧版本gcc/g++文件(这里只是删除了软连接):

cd /usr/bin
sudo rm gcc g++

  最后,将gcc/g++和新安装的gcc-9/g+±9关联起来:

sudo ln -s gcc-9 gcc
sudo ln -s g++-9 g++

  查看最新版本:

gcc -v

  其他切换版本方法:gcc版,默认使用优先级最高的版本。设置gcc 10优先级为100,设置gcc 9优先级为70。那么默认使用gcc10。

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 70 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9

  随后,使用以下命令来选择版本(默认选择第1行的,序号为0)

sudo update-alternatives --config gcc
  • 批量修改文件名(先cd到对应路径):
    for i in katex parse error: expected group after '_' at position 21: …0 300); do mv *_̲{i}.png ${i}.png 2>/dev/null; done
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com