3D Gaussian Splatting Linux端摆设指南(含Linux可视化)

打印 上一主题 下一主题

主题 662|帖子 662|积分 1986

3D Gaussian Splatting Linux端摆设指南

目次
项目地址
摆设记录
11. Linux端在线远程可视化训练进程
准备自己的数据
SIBR_remoteGaussian在线远程可视化
增补:sibr_3Dgaussian离线可视化训练好的模子

   朋侪浩哥说环境是最难配的,配好环境,你就乐成了一半!
  项目地址


  • windows摆设版本:https://github.com/jonstephens85/gaussian-splatting-Windows
  • windows和linux摆设版本:https://github.com/graphdeco-inria/gaussian-splatting
摆设记录


  • 根据官方的环境配置environment.yml配置好环境,发现出了种种问题,先不管。
  • 按教程准备好图片数据:【AI生成场景新突破】3D Gaussian Splatting入门指南_哔哩哔哩_bilibili+[视频文章],由于我电脑没有gpu,linux服务器(rtx4090-24G)有,自己准备数据集需要用windows的colmap程序举行相机位姿计算,固然可以下载no cuda版本,但是比较慢,于是直接使用官方数据集,发起先试用小型单物体数据集,训练速度快,如官方的卡车图片,这里使用官方covert好的tuck数据集,然后举行训练:
  1. python train.py -s data/truck/
复制代码
报错:没有子模块,原因其一,git clone添加了--recursive,但是由于网络原因没将子模块下载下来,原因二,实验时间2024年1月25官方源码缺少一个子模块,找不到了,在之前网友网盘备份那边复制一份。
      3. 子模块有了,手动继承安装子模块:
  1. pip install submodules/diff-gaussian-rasterizatio/
  2. pip install submodules/simple_knn/
复制代码
又有报错:cuda和pytorch不匹配的问题,看来必须处置惩罚环境配置问题了。由于环境限制:linux服务器使用的是nvidia545显卡驱动,cuda12.3,备用cuda11.8,不能随便更改显卡驱动版本,对应的cuda版本应为11.8以上才能调用显卡。在使用官方环境配置environment.yml发现出现问题,在下载子模块时总是报错,由于安装子模块pip install使用的也是服务器系统环境的cuda库,更改bashrc环境变量选择服务器系统安装的cuda12.3和cuda11.8,都无法编译官方的pytorch1.12.1
 

      4. 于是不用官方的,根据pytorch官方文档,使用pip方式,而非conda方式下载包,自己手动下载符合系统cuda环境的pytorch:(下面任选其一)
  1. #torch 2.1.2
  2. pip install --pre torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
  3. # CUDA 11.8
  4. pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
  5. # CUDA 12.1
  6. pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu121
复制代码
      5. 发现不管下载CUDA 11.8的pytorch还是CUDA 12.1版本的pytorch,都需要cuda12.1,于是下载cuda12.1,系统允许存在多个cuda版本,实际使用时按需选择,更改bashrc环境变量或者为实行的代码添加一个环境路径参数就行。下面是有效的一种安装cuda12.1的方式,注意的是,安装时不要勾选下载驱动,否则会将545的显卡驱动覆盖掉。
  1. wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
  2. sudo sh cuda_12.1.1_530.30.02_linux.run
复制代码
      6. 更改bashrc环境变量,然后把cudnn的东西也复制到cuda12.1中,确保深度学习的部分也能用:

  1. export PATH="/usr/local/cuda-12.1/bin:$PATH"
  2. export LD_LIBRARY_PATH="/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH"
  3. export LIBRARY_PATH="/usr/local/cuda-12.1/lib64:$LIBRARY_PATH"
  4. export CUDNN_INCLUDE_PATH="/usr/local/cuda-12.1/include"
  5. export CUDNN_LIBRARY="/usr/local/cuda-12.1/lib64
复制代码
最终的环境配置如下environment_sera.yml,但未试验
  1. name: gaussian_splatting
  2. channels:
  3.   - pytorch
  4.   - conda-forge
  5.   - defaults
  6. dependencies:
  7.   - plyfile=0.8.1
  8.   - python=3.10.12
  9.   - pip=22.3.1
  10.   - pytorch=2.1.1
  11.   - torchaudio=2.1.1
  12.   - torchvision=0.16.1
  13.   - tqdm
  14.   - pip:
  15.     - submodules/diff-gaussian-rasterization
  16.     - submodules/simple-knn
复制代码
      7. bashrc里更改环境变量使用cuda12.1库,重新下载子模块pip install submodules/diff-gaussian-rasterization,提示没有glm:fatal error: glm/glm.hpp: No such file or directory
  1. sudo apt-get install libglm-dev
复制代码
      8. 重新下载子模块submodules/diff-gaussian-rasterization,提示乐成下载子模块

举行训练,发现又少了一个子模块submodules/simple_knn:

      9. 继承下载该子模块,下载乐成
  1. pip install submodules/simpe_knn/
复制代码

      10. 至此,环境问题就解决掉了,继承训练数据,15分钟训练乐成:
  1. python train.py -s data/truck/
复制代码

L1是L1损失,PSNR是图像峰值信噪比,单位是dB,数值越大表示失真越小。因为数值越大代表MSE越小。MSE越小代表两张图片越靠近,失真就越小。
好家伙,gpu利用坦白接100:

由于训练未用-m参数指定用模子导出路径,生成的模子文件在训练的模子结构如下:

若用-m参数指定用模子导出路径,再举行训练,模子文件有如下结构:
  1. python train.py -s data/truck/ -m data/output
复制代码

10分钟训练完了train,23分钟训练完了drjohnson
过后实验,使用cuda12.3也可以举行训练,说明训练跟使用哪个cuda版本没有关系,而下载子模块需要对应的cuda版本,因为pip下载子模块时,构建 PyTorch C++ 扩展的 Python setuptools 脚本需要使用CUDA来加快运算,系统环境中需要使用pytorch对应的cuda版本才能顺遂安装。

11. Linux端在线远程可视化训练进程

由于我的windows电脑没有gpu,不能用SIBR_gaussianViewer_app的windows版本,于是选择使用官方文档中的第二种方案:网络远程可视化,即linux自行构建SIBR_gaussianViewer_app,由于官方源码缺少SIBR_viewers的文件,再从网友网盘备份中拷贝一份举行构建:
Ubuntu的 22.04在运行项目安装程序之前,需要安装一些依靠项。
  1. # Dependencies
  2. sudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev
  3. #Project setup
  4. cd SIBR_viewers
  5. cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release # add -G Ninja to build faster
  6. cmake --build build -j32 --target install #j32使用系统最大内核数32,可以按需要分配内核数执行
复制代码
报错:

找到:/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/subbuild/CMakeLists.txt

更改为本地路径
  1. include(ExternalProject)
  2. ExternalProject_Add(cudarasterizer-populate
  3.     URL "/home/wyc/sera_ws/gaussian-splatting/submodules/diff-gaussian-rasterization"
  4.     SOURCE_DIR "/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/CudaRasterizer"
  5.     BINARY_DIR "/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/build"
  6.     CONFIGURE_COMMAND ""
  7.     BUILD_COMMAND ""
  8.     INSTALL_COMMAND ""
  9.     TEST_COMMAND ""
  10.     USES_TERMINAL_DOWNLOAD YES
  11.     USES_TERMINAL_UPDATE YES
  12. )
复制代码
罪魁罪魁,下面的内容删掉/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/subbuild/cudarasterizer-populate-prefix/src/cudarasterizer-populate-stamp/cudarasterizer-populate-gitinfo.txt

再实行cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release,实行乐成!

实行cmake --build build -j32 --target install,乐成!

经过试验发现,远程可视化软件只能连接正在训练的模子文件,才可以运行远程可视化:
  1. python train.py -s data/truck/ -m data/output #调用GPU进行训练
  2. ./SIBR_remoteGaussian_app -s /home/wyc/sera_ws/gaussian-splatting/data/output #对正在训练的模型文件进行可视化
复制代码
 

准备自己的数据

需要软件:COLMAP、FFMPEG
参考博客:


  • 3D Gaussian Splatting复现-CSDN博客
  • Linux 编译安装colmap_linux colmap-CSDN博客
   1. FFMPEG安装:
  1. // 删除所有安装的 ffmpeg
  2. sudo apt-get remove ffmpeg
  3. sudo apt-get purge ffmpeg
  4. // 删除 Anaconda ffmpeg 模块
  5. conda remove ffmpeg
  6. 重新安装
  7. sudo apt-get install ffmpeg
复制代码
    2. COLMAP安装:

  • 仓库:https://github.com/colmap/colmap
  • 文档:https://colmap.github.io/install.html
安装依靠:
  1. sudo apt-get install \
  2.     git \
  3.     cmake \
  4.     ninja-build \
  5.     build-essential \
  6.     libboost-program-options-dev \
  7.     libboost-filesystem-dev \
  8.     libboost-graph-dev \
  9.     libboost-system-dev \
  10.     libeigen3-dev \
  11.     libflann-dev \
  12.     libfreeimage-dev \
  13.     libmetis-dev \
  14.     libgoogle-glog-dev \
  15.     libgtest-dev \
  16.     libsqlite3-dev \
  17.     libglew-dev \
  18.     qtbase5-dev \
  19.     libqt5opengl5-dev \
  20.     libcgal-dev \
  21.     libceres-dev
复制代码
配置和编译 COLMAP:
  1. git clone https://github.com/colmap/colmap.git
  2. cd colmap
  3. mkdir build
  4. cd build
  5. cmake .. -GNinja #CMake预处理,生成Ninja构建系统所需的文件
  6. ninja #默认使用系统最大可用cpu核心数进行编译,如果系统cpu有32个核,等效与ninja -j32
  7. sudo ninja install
复制代码
ninja报错:

解决记录:
写个cuda程序,查询自己gpu架构版本
  1. #include <iostream>
  2. #include <cuda_runtime.h>
  3. int main() {
  4.     cudaDeviceProp prop;
  5.     cudaGetDeviceProperties(&prop, 0); // Assumes one GPU device
  6.     std::cout << "GPU Architecture: " << prop.major << "." << prop.minor << std::endl;
  7.     return 0;
  8. }
复制代码
编译并运行
  1. nvcc query_gpu_arch.cu -o query_gpu_arch
  2. ./query_gpu_arch
复制代码

在CMakeList文件中添加一句设置gpu架构版本也没用

  1. set(CMAKE_CUDA_ARCHITECTURES 8.9)
复制代码
推测分支3.10-dev太新不太支持自己的cuda,git checkout 3.9切换分支到3.9

继承cmake .. -GNinja  ,报错:

添加set(CMAKE_CUDA_ARCHITECTURES 8.9) 后继承cmake .. -GNinja,

ninja编译失败,跟3.10-dev一样的报错,转而猜想gpu架构设置的格式不对,结合报错中出现的提示,将8.9改成70,80,89,90 后,cmake .. -GNinja 然后ninja都编译乐成,反推之前3.10-dev也是这个原因,经过测试,正是gpu架构设置的格式的问题,不能带小数点。官方文档也给出了提示哈哈没看到:


然后sudo ninja install安装colmap乐成!
运行 COLMAP:
  1. colmap -h
  2. colmap gui
复制代码

打开官方数据看看点云和计算的相机位姿,File->Import model->data->truck->spase->0

使用ffmpeg和colmap从视频准备数据:
参考视频:3D Gaussian Splatting本地摆设【windows系统免环境配置】_哔哩哔哩_bilibili + [网盘code]
准备自己的视频,放在data文件夹下,
写一个脚本/home/wyc/sera_ws/gaussian-splatting/train_video.py:
  1. import os
  2. import subprocess
  3. # 视频绝对路径
  4. video_path = r"/home/wyc/sera_ws/gaussian-splatting/data/mouse.mp4"
  5. # 切分帧数,每秒多少帧
  6. fps = 2
  7. # 获取视频文件名(不包含扩展名)
  8. video_name = os.path.splitext(os.path.basename(video_path))[0]
  9. # 获取视频文件所在目录
  10. folder_path = os.path.dirname(video_path)
  11. # 数据保存路径
  12. data_path = os.path.join(folder_path, video_name)
  13. os.makedirs(data_path, exist_ok=True)
  14. # 图片保存路径
  15. images_path = os.path.join(data_path, 'input')
  16. os.makedirs(images_path, exist_ok=True)
  17. # 模型保存路径
  18. model_path = os.path.join(data_path, 'output')
  19. os.makedirs(model_path, exist_ok=True)
  20. # 脚本运行
  21. # 视频切分脚本
  22. command = f'ffmpeg -i {video_path} -qscale:v 1 -qmin 1 -vf fps={fps} {images_path}/%05d.jpg'
  23. subprocess.run(command, shell=True)
  24. # COLMAP估算相机位姿
  25. command = f'python convert.py -s {data_path}'
  26. subprocess.run(command, shell=True)
  27. # 模型训练脚本,模型会保存在output路径下
  28. command = f'python train.py -s {data_path} -m {model_path}'
  29. subprocess.run(command, shell=True)
复制代码
SIBR_remoteGaussian在线远程可视化

实行脚本,会得到如下目次结构,并实行可视化:
  1. python train_video.py
  2. ./SIBR_remoteGaussian_app -s /home/wyc/sera_ws/gaussian-splatting/data/mouse/output
复制代码

 

训练完毕,打开colmap gui选择Import model from查看7000步点云和30000步点云: 

 


增补:sibr_3Dgaussian离线可视化训练好的模子

后面发现SIBR_gaussianViewer这个离线可视化程序也是可以运行的,跟SIBR_gaussianViewer windows版本是一样的,我之前以为只能使用sibr_remoteGaussian在线远程可视化程序呢。

 实行,-m参数带的是训练好的模子:
  1. ./SIBR_gaussianViewer_app -m /home/wyc/sera_ws/gaussian-splatting/data/mouse/output
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表