目录
场景/物体三维重建过程:首先用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
发表评论