参考:
目录
requirements
cuda 11.8(11.5以上)
conda
python 3.8 (>=3.8 )
cmake
visual studio 2019/2022
一、创建环境
anaconda prompt中创建conda环境:
conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
pip install --upgrade pip
二、安装依赖
1.安装pytorch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
2.安装tiny-cuda-nn
按照官方文档上的方法执行会报错,找了一个教程安装:https://blog.csdn.net/yangyu0515/article/details/131959907#comments_29299437 照着这个教程的【直接下载(推荐)】那里开始安装就可以了。
3.安装nerfstudio
简单的选择:
pip install nerfstudio
或者,如果您想要最新和最好的:
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .
三、训练模型
1.模型准备
方法一 drive.google.com下载:
下载kitchen测试集,解压缩,并将其拷贝到nerfstudio的data/nerfstudio目录下,data/nerfstudio需自己创建;https://drive.google.com/drive/folders/19TV6kdVGcmg3cGZ1bNIUnBBMD-iQjRbG
方法二 ns-download-data:
官网也提供了下载模型的方法:
# Download some test data:
ns-download-data nerfstudio --capture-name=poster
# Train model
ns-train nerfacto --data data/nerfstudio/poster# Train model
ns-train nerfacto --data data/nerfstudio/poster`
方法三 自己的数据集:
首先得到自己的照片序列:
- 围绕重建物体拍摄一段视频
- 在kitchen同级目录下新建一个LILO_STITCH文件夹,将视频放入并在cmd中执行:
FFMPEG -i D:\Projects\Nerf\nerfstudio\data\nerfstudio\LILO_STITCH\1.mp4 -qscale:v 1 -qmin 1 -vf fps=5 %04d.jpg
得到照片序列放进\data\nerfstudio\LILO_STITCH\train
回到虚拟环境中执行如下命令生成transforms.json:
ns-process-data images --data data/nerfstudio/LILO_STITCH/train --output-dir .\data\nerfstudio\LILO_STITCH\ --camera-type perspective --matching-method exhaustive --sfm-tool colmap --crop-factor 0.0 0.0 0.0 0.0
目录结构如下:
2.开始训练
执行如下命令进行训练:迭代产生的checkpoint存储在outputs/kitchen/nerfacto目录下
ns-train nerfacto --data data/nerfstudio/kitchen --vis viewer --max-num-iterations 50000
在第一次执行训练命令的时候我报错了:PytorchStreamReader failed reading zip archive: failed finding central
,解决方法如下:我估计是因为之前网络不好啥的导致下载的权重文件有点问题,所以找到 C:\Users\Administrator.cache\torch\hub\checkpoints\alexnet-owt-7be5be79.pth 将其删除。重新执行后问题解决。
训练进度如下图所示:
可视化效果:
用自己的数据集跑出来的效果如下:
训练到10%时:
训练完成:
3.用GaussianSplatting训练
在训练的命令里 nerfacto是一个可选参数,表示支持的类型。执行 ns-trian --help
可以查看还有其他可选项,例如我这里想要使用3D Gaussian Splatting再执行 ns-trian gaussian-splatting --help
开始训练:
ns-train gaussian-splatting --data .\data\nerfstudio\LILO_STITCH --vis viewer --output-dir /outputs/gaussian_splatting
代码运行效果:
四、加载预训练模型
可以加载预训练模型,如下命令所示:这将自动开始继续训练 :
ns-train nerfacto --data data/nerfstudio/kitchen --load-dir outputs/kitchen/nerfacto/2024-01-02_164443/nerfstudio_models
可以加载预训练模型进行可视化查看:
ns-viewer --load-config outputs/kitchen/nerfacto/2024-01-02_174829/config.yml
每个命令都有很多参数,可以通过–help查看具体支持哪些参数及参数的用处,如:
ns-render --help
ns-train --help
ns-train nerfacto --help
五、导出结果
获得 NeRF 模型后,您可以渲染视频或导出点云。
1.渲染视频
导出方法如图:
执行代码:
ns-render camera-path --load-config outputs\kitchen\nerfacto\2024-01-02_174829/config.yml --camera-path-filename data\nerfstudio\kitchen/camera_paths/2024-01-02_174829.json --output-path renders/data\nerfstudio\kitchen/2024-01-02_174829.mp4
渲染视频:
nerfstudio渲染视2024-01-02_174829
2.生成点云
在可视化web上面我们可以选择导出点云的配置,并复制command进行导出:
ns-export pointcloud --load-config outputs\kitchen\nerfacto\2024-01-02_174829/config.yml --output-dir exports/pcd/ --num-points 1000000 --remove-outliers True --normal-method open3d --use-bounding-box True --bounding-box-min -1 -1 -1 --bounding-box-max 1 1 1
3.生成网格
在可视化web上面我们可以选择导出网格的配置,并复制command进行导出:
ns-export poisson --load-config outputs\kitchen\nerfacto\2024-01-02_174829/config.yml --output-dir exports/mesh/ --target-num-faces 50000 --num-pixels-per-side 2048 --normal-method open3d --num-points 1000000 --remove-outliers True --use-bounding-box True --bounding-box-min -1 -1 -1 --bounding-box-max 1 1 1
导出后在exports\mesh中有四个文件:
MTL文件是一种包含材质定义的文件格式,通常用于与3D模型文件一起使用。MTL是英文Material Library的缩写,它存储了模型的材质信息,包括颜色、纹理、光照等属性。
4.对比一下
对比一下ply和mesh里点云的区别:可以看到ply里面是没有面数据的……