2dgs在linux端环境的复现过程

2dgs在linux端环境的复现过程

Project page

环境搭建
  # 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安装不上,所以我们后面手动安装pytorchsubmodules,这里的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官网查看版本对应关系。

20241026164542

因为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官网获取的命令完成对应版本的torchvisiontorchaudio的安装,因为这两个库的文件较小,不用阿里源也可以较快安装:

  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目录
    20241026204540

  • 设置环境变量

    为了确保能够在不同版本之间切换,需要在 .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

20241026204811

接下来执行命令安装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:

训练过程如下:
record1
record2

结果保存在2dgs根目录下的output/中,此时没有tarin目录,执行完render.py后才有。
20241026212802

测试
有界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:

record3

无界网格提取

请参考2dgs项目地址

查看结果

这里使用自己的数据集训练:

4090 24G服务器训练4次,其中2次使用3dgs的环境,torch版本为1.12.1。

3090 24G服务器上训练2次。

一些指标如下:

设备torch版本L1PSNRTime
4090 24G1.12.1+cu116+py370.024361228.631209226分26秒
4090 24G1.12.1+cu116+py370.022626329.085728526分30秒
4090 24G2.0.0+cu118+py380.023538828.923022826分36秒
4090 24G2.0.0+cu118+py380.023304429.062701426分34秒
3090 24G2.0.0+cu118+py380.022959929.013930139分41秒
3090 24G2.0.0+cu118+py380.023453328.956748639分33秒
  • 不同设备的性能对于训练时间的影响很大,但是对于评估指标基本没有影响。

  • 相同设备,不同torch版本对训练时间影响很小,但是对于评估指标基本没有影响。

由于服务器问题,我们这里使用非官方查看器

在服务器端的查看器环境下执行命令:

  python 2D-GS-Viser-Viewer/viewer.py 2d-gaussian-splatting/output/62fed73d-f -s 2d-gaussian-splatting/colmapdata/ --enable_transform`:

20241027141838


参考:

-阿里源手动下载pytorch并安装【保姆级教程】(亲测下载速度更快

-学习笔记之——2D Gaussian Splatting(2DGS)

### 复现2DGS项目的方案 为了成功复现2D高斯点绘(Gaussian Splatting,简称2DGS)相关的项目或解决相关问题,需理解其核心原理并遵循特定的技术路径。 #### 理解基本概念 在处理2D高斯点绘时,主要关注的是如何将三维数据映射到二维平面。此过程涉及使用透视变换矩阵 \( W \),以及投影操作中的雅可比矩阵 \( J \)[^1]。具体来说,对于给定的三维协方差矩阵 \( Σ \),经过一系列转换后,在屏幕上显示的效果可以通过下述公式近似计算: \[ \tilde{Σ} = JWΣW^TJ^T \] 这一步骤确保了即使是在复杂的几何结构上也能保持良好的视觉效果和精度。 #### 准备开发环境 考虑到目标是实现跨平台支持且高性能渲染器的需求,推荐采用类似于 `3DGS.cpp` 的框架作为起点[^2]。该项目不仅提供了完整的源码示例,还涵盖了多种操作系统下的编译指南和支持说明文档。因此,可以从该仓库获取灵感和技术细节来构建自己的2D版本。 #### 实施步骤建议 - **选择合适的图形API**:鉴于性能考量,Vulkan API 是一个理想的选择因为它能够充分利用现代GPU的能力。 - **移植现有功能至2D领域**:基于已有的3D实现,调整算法使其适用于更简单的二维情况。例如减少维度数量、简化光照模型等。 - **优化渲染管线**:针对不同硬件特性进行针对性调优,比如利用多线程技术加速数据预处理阶段;或者探索异步资源加载机制提高帧率稳定性。 ```cpp // 示例代码片段展示如何初始化Vulkan实例 VkInstanceCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; ... if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) { throw std::runtime_error("failed to create instance!"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值