2dgs在linux端环境的复现过程
环境搭建
# download
git clone https://github.com/hbb1/2d-gaussian-splatting.git --recursive
如果没有3dgs
的环境,需要重新创建虚拟环境。
conda env create --file environment.yml
conda activate surfel_splatting
由于使用官方源下载速度太慢,所以我们使用国内源,但是这里有一个问题,如果直接更改channels
这样pytorch
会默认下载cpu
版本的,因为submodules
依赖于gpu
版本的pytorch
,所以导致submodules
安装不上,所以我们后面手动安装pytorch
和submodules
,这里的environment.yml
如下:
name: surfel_splatting
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
dependencies:
- ffmpeg=4.2.2
- pillow=10.2.0
- pip=23.3.1
- python=3.8.18
- typing_extensions=4.9.0
- pip:
- -i https://pypi.tuna.tsinghua.edu.cn/simple
- open3d==0.18.0
- mediapy==1.1.2
- lpips==0.1.4
- scikit-image==0.21.0
- tqdm==4.66.2
- trimesh==4.3.2
- plyfile
- opencv-python
我们可以去pytorch官网查看版本对应关系。
因为pytorch
文件较大,所以官方源会下载很慢,所以选择国内源下载,这里使用阿里源。
pip install https://mirrors.aliyun.com/pytorch-wheels/cu118/torch-2.0.0+cu118-cp38-cp38-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
安装成功后再使用pytorch官网获取的命令完成对应版本的torchvision
和torchaudio
的安装,因为这两个库的文件较小,不用阿里源也可以较快安装:
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
安装完毕后,看一下cuda
版本,这里有一个问题,执行下面代码应该显示11.8
。
python -c "import torch; print(torch.version.cuda)"
但是如果服务器没有安装对应版本的cuda
,在安装submodules
时,会显示检测到的cuda
版本不匹配。
例如:服务器上安装的是CUDA 12.2
,而你希望使用CUDA 11.8
,通常需要满足以下条件:
-
安装
CUDA 11.8
:首先,确保在服务器上安装了
CUDA 11.8
。即使全局环境是12.2
,CUDA 11.8
也可以作为另一个版本共存。你可以从 NVIDIA官网 下载并安装。 -
安装
CUDA
每次安装
CUDA
时,确保选择不同的安装路径。NVIDIA
的安装程序通常会默认将CUDA
安装到/usr/local/cuda
,但你可以指定其他路径,例如/usr/local/cuda-11.8
、/usr/local/cuda-12.2
等。执行
ls /usr/local/
看看是否有cuda-11.8
目录
-
设置环境变量
为了确保能够在不同版本之间切换,需要在
.bashrc
或.bash_profile
文件中设置相应的环境变量。例如:
# 默认使用 CUDA 11.8
export CUDA_HOME=/usr/local/cuda-11.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
如果需要切换到 CUDA 12.2
,可以在命令行中运行以下命令,或者在 .bashrc
中添加切换命令:
export CUDA_HOME=/usr/local/cuda-12.2
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
- 验证安装
切换到不同的CUDA
版本后,可以使用以下命令验证当前使用的CUDA
版本:
nvcc --version
接下来执行命令安装submodules
pip install submodules/diff-surfel-rasterization
pip install submodules/simple-knn
训练
要训练场景,只需使用
python train.py -s <path to COLMAP or NeRF Synthetic dataset>
正则化的命令行参数
--lambda_normal # hyperparameter for normal consistency
--lambda_distortion # hyperparameter for depth distortion
--depth_ratio # 0 for mean depth and 1 for median depth, 0 works for most cases
这里在2dgs根目录
下执行命令python train.py -s ./colmapdata
:
训练过程如下:
结果保存在2dgs根目录
下的output/
中,此时没有tarin
目录,执行完render.py
后才有。
测试
有界mesh提取
要在有界体积中导出mesh
,只需使用
python render.py -m <path to pre-trained model> -s <path to COLMAP dataset>
命令行参数,您应该针对有界TSDF
融合的mesh
划分进行相应调整,请使用
--depth_ratio # 0 for mean depth and 1 for median depth
--voxel_size # voxel size
--depth_trunc # depth truncation
这里在2dgs根目录
下执行命令python render.py -m ./output/a85fa9d8-7 -s ./colmapdata
:
无界网格提取
请参考2dgs项目地址。
查看结果
这里使用自己的数据集训练:
在4090 24G
服务器训练4次,其中2次使用3dgs
的环境,torch版本为1.12.1。
在3090 24G
服务器上训练2次。
一些指标如下:
设备 | torch版本 | L1 | PSNR | Time |
---|---|---|---|---|
4090 24G | 1.12.1+cu116+py37 | 0.0243612 | 28.6312092 | 26分26秒 |
4090 24G | 1.12.1+cu116+py37 | 0.0226263 | 29.0857285 | 26分30秒 |
4090 24G | 2.0.0+cu118+py38 | 0.0235388 | 28.9230228 | 26分36秒 |
4090 24G | 2.0.0+cu118+py38 | 0.0233044 | 29.0627014 | 26分34秒 |
3090 24G | 2.0.0+cu118+py38 | 0.0229599 | 29.0139301 | 39分41秒 |
3090 24G | 2.0.0+cu118+py38 | 0.0234533 | 28.9567486 | 39分33秒 |
-
不同设备的性能对于训练时间的影响很大,但是对于评估指标基本没有影响。
-
相同设备,不同torch版本对训练时间影响很小,但是对于评估指标基本没有影响。
由于服务器问题,我们这里使用非官方查看器。
在服务器端的查看器环境下执行命令:
python 2D-GS-Viser-Viewer/viewer.py 2d-gaussian-splatting/output/62fed73d-f -s 2d-gaussian-splatting/colmapdata/ --enable_transform`:
参考: