3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,第1张

项目网址

graphdeco-inria/gaussian-splatting: Original reference implementation of “3D Gaussian Splatting for Real-Time Radiance Field Rendering” (github.com)

第一次在自己电脑上配环境(MX350显卡)

环境配置

以下是最初电脑所安装的内容:

Anaconda3

2022.10-Windows-x86_64

CUDA

电脑只支持11.6,所以装的是11.6版本。

虚拟环境配置出错记录

使用git去克隆repository

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

尽管挂了梯子,但是还是需要多次刷新才能成功克隆,不然会始终报错“网络重置”

创建虚拟环境

在项目文件夹使用conda指令,从.yml文件中创建虚拟环境

SET DISTUTILS_USE_SDK=1 # Windows only conda env create --file environment.yml

这时可以成功安装以上所有包,并且创建虚拟环境,但是会在安装以下两个模块的时候报错,最开始一直以为是pip版本问题,在pip上花了很长时间都没有解决。

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第2张

submodules无法安装

后来仔细研究报错内容,发现是无法打开CUDA文件夹中nvcc这个可执行文件,所以在CUDA上下功夫,这个时候注意到read me中有个软件要求:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第3张

上面提到CUDA11.6版本存在issue,所以我把CUDA11.6版本删了干净,重新装了CUDA11.8

这个时候再去执行创建虚拟环境指令,还是会出错,不过这次不报错nvcc可执行文件找不到,而是这两个模块依赖的CUDA相关文件根本找不到。这个时候我陷入麻烦,尝试单独去装这两个模块。

read me文件中其实已经给出了一个解决方法,就是在虚拟环境中使用pip指令手动安装这两个模块:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第4张

按照这个方式,在anaconda promote中进入虚拟环境,运行pip,等待了好长时间,终于看到successfully!

activate gaussian_splatting #事实证明在promote中进虚拟环境不需要再敲conda cd <dir_to_repo>/gaussian-splatting pip install submodules/diff-gaussian-rasterization pip install submodules/simple-knn

但是这个时候整个repo已经被我搞得面目全非,而且我的虚拟环境gaussian_splatting经过了大量的报错,有些东西我感觉安装的不太对,所以把虚拟环境删掉,重新克隆repo,打算重头再试一次。

conda env list #这个用来查看以创建过的虚拟环境 conda env remove --name gaussian_splatting

虚拟环境无法创建

这次重新克隆repo之后,在创建虚拟环境这一步就卡住了,它提示在那两个模块中有文件出错,不能创建虚拟环境。出错文件内容和CUDA版本有问题。这下我百思不得其解,因为从11.6转到11.8才正确安装两个模块,现在又因为CUDA版本而无法创建虚拟环境。在这里卡了好久。

于是我暂时停下来,开始阅读论文,同时也看一些网上资料。

改用全局变量

这个时候我阅读到了一位b站博主的分形噪波的文章3D Gaussian Splatting入门指南 - 哔哩哔哩 (bilibili.com),他提到的方法没有创建虚拟环境,而是直接在电脑上用已有的base环境去跑。
3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第5张
3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第6张

这样看来可以省略很多麻烦。我按照它的方式,在base环境安装pytorch,并且装上了所需的几个库。

在repo文件夹下直接创建data文件夹:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第7张

并且在github上直接把论文作者拍摄的图片当作测试数据下载下来:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第8张

这个时候会得到一个两个文件夹的数据,分别是tandt和db,以下是两个文件夹内容:

data ┣ db ┃ ┣ drjohnson ┃ ┃ ┣ images ┃ ┃ ┣ sparse ┃ ┣ playroom ┃ ┃ ┣ images ┃ ┃ ┣ sparse ┣ tandt ┃ ┣ train ┃ ┃ ┣ images ┃ ┃ ┣ sparse ┃ ┣ truck ┃ ┃ ┣ images ┃ ┃ ┣ sparse

然后执行训练文件。

python train.py -s data/tandt/train

GPU剩余内存不够

接下来遇到这样的报错:

D:/Monster_Di/Desktop/Project/PyProj/gaussian-splatting>python train.py -s data/tandt/train Optimizing Output folder: ./output/debbe6b4-6 [04/11 23:52:54] Reading camera 301/301 [04/11 23:52:59] Converting point3d.bin to .ply, will happen only the first time you open the scene. [04/11 23:52:59] Loading Training Cameras [04/11 23:53:02] Traceback (most recent call last): File "D:\Monster_Di\Desktop\Project\PyProj\gaussian-splatting\train.py", line 219, in <module> training(lp.extract(args), op.extract(args), pp.extract(args), args.test_iterations, args.save_iterations, args.checkpoint_iterations, args.start_checkpoint, args.debug_from) File "D:\Monster_Di\Desktop\Project\PyProj\gaussian-splatting\train.py", line 35, in training scene = Scene(dataset, gaussians) File "D:\Monster_Di\Desktop\Project\PyProj\gaussian-splatting\scene\__init__.py", line 73, in __init__ self.train_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.train_cameras, resolution_scale, args) File "D:\Monster_Di\Desktop\Project\PyProj\gaussian-splatting\utils\camera_utils.py", line 58, in cameraList_from_camInfos camera_list.append(loadCam(args, id, c, resolution_scale)) File "D:\Monster_Di\Desktop\Project\PyProj\gaussian-splatting\utils\camera_utils.py", line 49, in loadCam return Camera(colmap_id=cam_info.uid, R=cam_info.R, T=cam_info.T, File "D:\Monster_Di\Desktop\Project\PyProj\gaussian-splatting\scene\cameras.py", line 39, in __init__ self.original_image = image.clamp(0.0, 1.0).to(self.data_device) torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB. GPU 0 has a total capacty of 2.00 GiB of which 0 bytes is free. Of the allocated memory 1.54 GiB is allocated by PyTorch, and 148.62 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

卡在这里让我有点不知所措,GPU运行不了是硬伤,而且已经到了周末,项目还没能跑出来让我非常焦虑。这个时候我记得舍友新买的电脑的显卡是RTX4060,就想着借用一下试试。

改用另一台电脑(RTX 4060)

舍友平时忙着考研,一直没用电脑,所以这台新电脑非常干净。接手之后我很快就着手搭建环境。

环境配置

Git

直接在官网上下载最新版

Anaconda3

这里的anaconda也用的2022.10这个版本。

Visual Studio 2019

因为每次安装CUDA的时候会提示有关VS的某些版本是否配置,所以我留了个心眼,在安装CUDA之前就按照read me里面的要求安装了VS2019。并且安装了python和C++桌面开发(主要是有cmake)两个组件。

CUDA

直接在官网上下载11.8版本,并且安装时参照那篇CSDN博客上说*“Visual Studio Intergration这个选项不要勾选,否则会报错。”*,所以唯独没有勾选这个选项,为后来一处错误埋下伏笔。

克隆项目、创建虚拟环境、运行代码

这次基本没有出多少问题,而且在之前一直没有搞明白的虚拟环境报错问题这次也没有出现(现在想来,我估计是因为我的电脑最高允许的CUDA版本是11.6,所以11.8版本根本无法使用

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第9张

训练太慢

在花费半天时间重整环境后,我终于跑起来train.py这个文件,最开始选择db中drjohnson这一组图片作为训练对象。在训练进度4000到5000这个区间,训练速度非常慢,等待了三个小时后,每秒只能以个位数的速度去训练:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第10张

想了很久,因为我看到db文件夹内的图片是在房间里,而tandt文件夹内的图片是针对某个物体,所以我这次改用tandt中的train来作为训练对象。ctrl+Backspace强制中断程序,改用另一个路径。这次只用了三十分钟左右就完成训练:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第11张

训练结果保存在了项目目录里output这个文件夹中。文件格式是这样的:

┣ output ┃ ┣ 一串乱码 ┃ ┣ cameras.json ┃ ┣ cfg_args ┃ ┗ input.ply ┃ ┣ point_cloud ┃ ┃ ┣ iteration_7000 ┃ ┃ ┃ ┗ point_cloud.ply ┃ ┃ ┣ iteration_30000 ┃ ┃ ┃ ┗ point_cloud.ply

结果可视化过程

read me中给了一个交互式查看器:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第12张

按照要求,我进入repo中的SIBR_vierers这个文件夹,用cmake指令来构建项目。

CMake版本问题和环境变量

这时先出现报错,说是没有cmake环境,但我已经安装了VS2019以及C++桌面开发组件,于是从VS的promote中运行cmake指令。这时报错cmake版本必须在3.22以上,VS2019所带的cmake是3.20。

于是我在官网上下载cmake3.28版本的zip文件,解压后把bin文件夹环境变量添加到PATH中,过了好一会3.28版本才被检测到。

这个时候在repo中运行构建指令:

cd SIBR_viewers cmake -Bbuild . cmake --build build --target install --config RelWithDebInfo

主要还是跟CUDA相关,大概内容如下所示:

-- **************************************************************** -- Adding dataset_tools project -- BUILD_IBR_DATASET_TOOLS is OFF -- Adding ulr project -- BUILD_IBR_ULR is OFF -- Adding basic project -- BUILD_IBR_BASIC is ON -- Adding gaussianviewer project -- BUILD_IBR_GAUSSIANVIEWER is ON -- Library CudaRasterizer already available, skipping. CMake Error at D:/Diyeye/cmake-3.28.0-rc3-windows-x86_64/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:529 (message): No CUDA toolset found. Call Stack (most recent call first): D:/Diyeye/cmake-3.28.0-rc3-windows-x86_64/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:8 (CMAKE_DETERMINE_COMPILER_ID_BUILD) D:/Diyeye/cmake-3.28.0-rc3-windows-x86_64/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:53 (__determine_compiler_id_test) D:/Diyeye/cmake-3.28.0-rc3-windows-x86_64/cmake-3.28/Modules/CMakeDetermineCUDACompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID) extlibs/CudaRasterizer/CudaRasterizer/CMakeLists.txt:14 (project) -- Configuring incomplete, errors occurred!

意思是说cmake无法找到CUDA工具集,但我实在不明白,明明安装好CUDA并且添加了环境变量,怎么会在CUDA这里出现问题。这个时候ChatGPT提到了一点引起我注意:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第13张
3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第14张

Visual Studio 2019中没有CUDA组件,我当时在安装CUDA时刚好按照CSDN博客的建议没有勾选Visual Studio Intergration。这下我重新打开CUDA的setup,仅勾选Visual Studio Intergration安装,并且再次运行cmake指令。这次没有再报错。VS2019成功帮我创建了交互式查看器SIBR_viewers这个cmake项目。

这期间没有排出这个问题,还走了弯路,去VS2019中用SIBR_viewers中的CMakeList.txt文件去创建cmake项目,其实是多此一举,因为命令行运行cmake指令完全可以创建项目的

成功可视化

创建好了项目,我已经非常紧张了,这一路上一直错误不断,终于走到了显示结果的最后一步。在项目命令行输入以下指令后,viewers打开,训练的3D结果终于可以查看了!

./< SIBR install dir > /bin/SIBR_gaussianViewer_app -m <path to trained model>

这里多一嘴,SIBR_gaussianViewer_app[_config]后面要带上自己的cmake环境配置,比如我的就是rwdi(RelWithDebInfo)

./SIBR_viewers/install/bin/SIBR_gaussianViewer_app_rwdi -m output/<train完的一串乱码>

接下来就能看到结果了:

3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第15张
3D Gaussian Splatting for Real-Time Radiance Field Rendering论文中代码复现及排错过程,在这里插入图片描述,第16张

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/13518700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024-02-15
下一篇 2024-02-24

发表评论

登录后才能评论

评论列表(0条)

保存