3D Gaussian Splatting Linux端部署指南(含Linux可视化)

news2024/11/24 7:01:54

3D Gaussian Splatting Linux端部署指南

目录

项目地址

部署记录

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

准备自己的数据

SIBR_remoteGaussian在线远程可视化

补充:sibr_3Dgaussian离线可视化训练好的模型

朋友浩哥说环境是最难配的,配好环境,你就成功了一半!

项目地址

  1. windows部署版本:https://github.com/jonstephens85/gaussian-splatting-Windows

  2. windows和linux部署版本:https://github.com/graphdeco-inria/gaussian-splatting

部署记录

  1. 根据官方的环境配置environment.yml配置好环境,发现出了种种问题,先不管。

  2. 按教程准备好图片数据:【AI生成场景新突破】3D Gaussian Splatting入门指南_哔哩哔哩_bilibili+[视频文章],由于我电脑没有gpu,linux服务器(rtx4090-24G)有,自己准备数据集需要用windows的colmap程序进行相机位姿计算,虽然可以下载no cuda版本,但是比较慢,于是直接使用官方数据集,建议先试用小型单物体数据集,训练速度快,如官方的卡车图片,这里使用官方covert好的tuck数据集,然后进行训练:

python train.py -s data/truck/

报错:没有子模块,原因其一,git clone添加了--recursive,但是由于网络原因没将子模块下载下来,原因二,实验时间2024年1月25官方源码缺少一个子模块,找不到了,在之前网友网盘备份那里复制一份。

      3. 子模块有了,手动继续安装子模块:

pip install submodules/diff-gaussian-rasterizatio/ 
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

 d7c8757739844f7cbc5b82174ab9241e.pngcf6bd568f3bb4406aa5f7e7df39c8c3c.png

      4. 于是不用官方的,根据pytorch官方文档,使用pip方式,而非conda方式下载包,自己手动下载符合系统cuda环境的pytorch:(下面任选其一)

#torch 2.1.2 
pip install --pre torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple 
# CUDA 11.8 
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118 
# CUDA 12.1 
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的显卡驱动覆盖掉。

wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run 
sudo sh cuda_12.1.1_530.30.02_linux.run

      6. 更改bashrc环境变量,然后把cudnn的东西也复制到cuda12.1中,确保深度学习的部分也能用:a1bc8284c9b449cdafa71df39329049a.png

export PATH="/usr/local/cuda-12.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH"
export LIBRARY_PATH="/usr/local/cuda-12.1/lib64:$LIBRARY_PATH"

export CUDNN_INCLUDE_PATH="/usr/local/cuda-12.1/include"
export CUDNN_LIBRARY="/usr/local/cuda-12.1/lib64

最终的环境配置如下environment_sera.yml,但未试验

name: gaussian_splatting
channels:
  - pytorch
  - conda-forge
  - defaults
dependencies:
  - plyfile=0.8.1
  - python=3.10.12
  - pip=22.3.1
  - pytorch=2.1.1
  - torchaudio=2.1.1
  - torchvision=0.16.1
  - tqdm
  - pip:
    - submodules/diff-gaussian-rasterization
    - submodules/simple-knn

      7. bashrc里更改环境变量使用cuda12.1库,重新下载子模块pip install submodules/diff-gaussian-rasterization,提示没有glm:fatal error: glm/glm.hpp: No such file or directory

sudo apt-get install libglm-dev

      8. 重新下载子模块submodules/diff-gaussian-rasterization,提示成功下载子模块d817d042e7d34bd486a211600b88745c.png

进行训练,发现又少了一个子模块submodules/simple_knn5033b00c0d7645fa8017346551caf5cb.png

      9. 继续下载该子模块,下载成功

pip install submodules/simpe_knn/

a50cecc1814f4d75afd53b629479657d.png

      10. 至此,环境问题就解决掉了,继续训练数据,15分钟训练成功:

python train.py -s data/truck/

ab5d55c83a9e4622baf228406dbd0b44.png

L1是L1损失,PSNR是图像峰值信噪比,单位是dB,数值越大表示失真越小。因为数值越大代表MSE越小。MSE越小代表两张图片越接近,失真就越小。

好家伙,gpu利用率直接100:b768c0362da84f7699e06d16709f9989.png

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

若用-m参数指定用模型导出路径,再进行训练,模型文件有如下结构:

python train.py -s data/truck/ -m data/output

daa1d0240e4642429375940d03b2b411.png

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在运行项目安装程序之前,需要安装一些依赖项。

# Dependencies
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
#Project setup
cd SIBR_viewers
cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release # add -G Ninja to build faster
cmake --build build -j32 --target install #j32使用系统最大内核数32,可以按需要分配内核数执行

报错:61c09fa20def49249eef6d7b59a5e929.png

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

更改为本地路径

include(ExternalProject)

ExternalProject_Add(cudarasterizer-populate
    URL "/home/wyc/sera_ws/gaussian-splatting/submodules/diff-gaussian-rasterization"
    SOURCE_DIR "/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/CudaRasterizer"
    BINARY_DIR "/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/build"
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    TEST_COMMAND ""
    USES_TERMINAL_DOWNLOAD YES
    USES_TERMINAL_UPDATE YES
)

罪魁祸首,下面的内容删掉/home/wyc/sera_ws/gaussian-splatting/SIBR_viewers/extlibs/CudaRasterizer/subbuild/cudarasterizer-populate-prefix/src/cudarasterizer-populate-stamp/cudarasterizer-populate-gitinfo.txt2dcdfb0cec8a407090a10356ab473458.png

再执行cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release,执行成功!da9b45a5e230424abbeab03793a04a84.png

执行cmake --build build -j32 --target install,成功!0a9f892bb4884c19921385790dfaf040.png

经过试验发现,远程可视化软件只能连接正在训练的模型文件,才可以运行远程可视化:

python train.py -s data/truck/ -m data/output #调用GPU进行训练
./SIBR_remoteGaussian_app -s /home/wyc/sera_ws/gaussian-splatting/data/output #对正在训练的模型文件进行可视化

89f4d98024e542cfa99881519c2409ff.png 69bb93c6b8f94e00817a6ee9ac492525.pngbcbaa1adce4c4d4cac94de4321834fb3.png

准备自己的数据

需要软件:COLMAP、FFMPEG

参考博客:

  • 3D Gaussian Splatting复现-CSDN博客

  • Linux 编译安装colmap_linux colmap-CSDN博客

   1. FFMPEG安装:

// 删除所有安装的 ffmpeg
sudo apt-get remove ffmpeg
sudo apt-get purge ffmpeg
// 删除 Anaconda ffmpeg 模块
conda remove ffmpeg
重新安装
sudo apt-get install ffmpeg

    2. COLMAP安装:

  1. 仓库:https://github.com/colmap/colmap

  2. 文档:https://colmap.github.io/install.html

安装依赖:

sudo apt-get install \
    git \
    cmake \
    ninja-build \
    build-essential \
    libboost-program-options-dev \
    libboost-filesystem-dev \
    libboost-graph-dev \
    libboost-system-dev \
    libeigen3-dev \
    libflann-dev \
    libfreeimage-dev \
    libmetis-dev \
    libgoogle-glog-dev \
    libgtest-dev \
    libsqlite3-dev \
    libglew-dev \
    qtbase5-dev \
    libqt5opengl5-dev \
    libcgal-dev \
    libceres-dev

配置和编译 COLMAP:

git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build
cmake .. -GNinja #CMake预处理,生成Ninja构建系统所需的文件
ninja #默认使用系统最大可用cpu核心数进行编译,如果系统cpu有32个核,等效与ninja -j32
sudo ninja install

ninja报错:3c389fa2c6c94c858f62ae5cbe7f2c8d.png

解决记录:

写个cuda程序,查询自己gpu架构版本

#include <iostream>
#include <cuda_runtime.h>

int main() {
    cudaDeviceProp prop;
    cudaGetDeviceProperties(&prop, 0); // Assumes one GPU device

    std::cout << "GPU Architecture: " << prop.major << "." << prop.minor << std::endl;

    return 0;
}

编译并运行

nvcc query_gpu_arch.cu -o query_gpu_arch
./query_gpu_arch

e4b15db7a7f54beaa709df273ad9271b.png

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

set(CMAKE_CUDA_ARCHITECTURES 8.9)

猜测分支3.10-dev太新不太支持自己的cuda,git checkout 3.9切换分支到3.9bc541508ef674fb886eb0b9cc1233332.png

继续cmake .. -GNinja ,报错:588871b68e084d849c5463c77d56734d.png

添加set(CMAKE_CUDA_ARCHITECTURES 8.9) 后继续cmake .. -GNinja4f81d8b5bee2468cb48b03fec9182ece.png

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

90719594546249b8a1bf6b985ff02a87.png

然后sudo ninja install安装colmap成功!

运行 COLMAP:

colmap -h
colmap gui

4a7183794fdb444b8381ee512d6b731a.png

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

使用ffmpeg和colmap从视频准备数据:

参考视频:3D Gaussian Splatting本地部署【windows系统免环境配置】_哔哩哔哩_bilibili + [网盘code]

准备自己的视频,放在data文件夹下,

写一个脚本/home/wyc/sera_ws/gaussian-splatting/train_video.py:

import os
import subprocess

# 视频绝对路径
video_path = r"/home/wyc/sera_ws/gaussian-splatting/data/mouse.mp4"
# 切分帧数,每秒多少帧
fps = 2

# 获取视频文件名(不包含扩展名)
video_name = os.path.splitext(os.path.basename(video_path))[0]
# 获取视频文件所在目录
folder_path = os.path.dirname(video_path)
# 数据保存路径
data_path = os.path.join(folder_path, video_name)
os.makedirs(data_path, exist_ok=True)
# 图片保存路径
images_path = os.path.join(data_path, 'input')
os.makedirs(images_path, exist_ok=True)
# 模型保存路径
model_path = os.path.join(data_path, 'output')
os.makedirs(model_path, exist_ok=True)

# 脚本运行
# 视频切分脚本
command = f'ffmpeg -i {video_path} -qscale:v 1 -qmin 1 -vf fps={fps} {images_path}/%05d.jpg'
subprocess.run(command, shell=True)
# COLMAP估算相机位姿
command = f'python convert.py -s {data_path}'
subprocess.run(command, shell=True)
# 模型训练脚本,模型会保存在output路径下
command = f'python train.py -s {data_path} -m {model_path}'
subprocess.run(command, shell=True)

SIBR_remoteGaussian在线远程可视化

执行脚本,会得到如下目录结构,并执行可视化:

python train_video.py
./SIBR_remoteGaussian_app -s /home/wyc/sera_ws/gaussian-splatting/data/mouse/output

ce3fc1557b484145b4a2e336bf392dc5.png

d6e8e4a9e2f54692817046a3ddd056a1.png 23b6efef27f44c8780d5e86070fbac3d.png

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

68244a5fc20d40caae72e17e4075ad86.png

 b15443f6e0a5442f92559432be1ed89a.png

e2c8180a9af040ddb692e9d08b8b771b.png

补充:sibr_3Dgaussian离线可视化训练好的模型

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

 执行,-m参数带的是训练好的模型:

./SIBR_gaussianViewer_app -m /home/wyc/sera_ws/gaussian-splatting/data/mouse/output

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1566014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tinymce富文本编辑器二次开发电子病历时解决的bug

前言 本文是在Tinymce富文本编辑器添加自定义toolbar&#xff0c;二级菜单&#xff0c;自定义表单&#xff0c;签名的基础之上进行一些bug记录&#xff0c;功能添加&#xff0c;以及模版的应用和打印 项目描述 建立电子病历模版—录入&#xff08;电子病历模版和电子病历打印…

运筹学基础(三):求解整数规划的切平面法(cutting plane method)

文章目录 算法思想一个例子参考文档 算法思想 先将整数规划问题松弛为线性规划问题&#xff0c;然后割掉线性规划问题可行域的一部分&#xff08;只包含非整数解&#xff09;&#xff0c;使得线性规划问题的最优解在原整数规划问题的可行域某顶点上取得。 因此&#xff0c;割平…

Spring之BeanFactoryPostProcessor详解

目录 功能与作用 使用案例 spring提供的常见BeanFactoryPostProcessor 1.EventListenerMethodProcessor 2.BeanDefinitionRegistryPostProcessor 功能与作用 使用案例 spring提供的唯一BeanDefinitionRegistryPostProcessor 总结 功能与作用 参考BeanFactoryPostProce…

如何插入LinK3D、CSF、BALM来直接插入各个SLAM框架中

0. 简介 LinK3D、CSF、BALM这几个都是非常方便去插入到激光SLAM框架的。这里我们会分别从多个角度来介绍如何将每个框架插入到SLAM框架中 1. LinK3D:三维LiDAR点云的线性关键点表示 LinK3D的核心思想和基于我们的LinK3D的两个LiDAR扫描的匹配结果。绿色线是有效匹配。当前关…

C++ 中的 vector 的模拟实现【代码纯享】

文章目录 C 中的 vector 模拟实现1. vector 的基本概念2. vector 的基本操作3. vector 的模拟实现4.代码纯享5. 总结 C 中的 vector 模拟实现 在 C 中&#xff0c;vector 是一个非常重要的容器&#xff0c;它提供了动态数组的功能。在本篇博客中&#xff0c;我们将尝试模拟实现…

搭建电商网站外贸网站用API接口可以实现哪些功能(天猫API接口|京东API接口)

在电商领域&#xff0c;API接口可以实现多种功能&#xff0c;起到连接内外部系统及优化电商业务流程等多种作用&#xff0c;从而来提高电商企业的运营效率。 具体来看&#xff0c;API接口接入可以用来&#xff1a; 商品管理&#xff1a; API接口能够用来获取商品详情等&#…

OR- M406A固态继电器SSR光耦,对标替代TLP170A/ASSR-1218等

低工作电流 低导通电阻 高隔离电压 400V , 600V 输出耐受电压 工业温度范围&#xff1a;-40 to 85℃ 特征 高输入输出隔离电压 &#xff08; Viso 3&#xff0c;750Vrms &#xff09; 采用 400V 和 600V 负载电压系列 常开信号极点信号投射继电器 低工作电流 低…

Redis安装-Docker

安装redis的docker容器 1、创建redis挂载目录 mkdir -p /liuchaoxu/redis/{data,conf}2、复制配置文件 在 /liuchaoxu/redis/conf 目录中创建文件 redis.conf&#xff0c;文件从 redis-6.2.7.tar.gz 中解压获取 修改默认配置(从上至下依次)&#xff1a; #bind 127.0.0.1 …

小明的背包-dp_python

用户登录 动态规划的思想是自底向上&#xff0c;先求局部最优解然后求全局最优解。 dp[i][j]代表的是当前状态物品的数量以及背包的容量。 N, V map(int,input().split()) dp [[0 for _ in range(V1)] for _ in range(N1)]for i in range(1,N1):v, w map(int,input().split(…

CSS样式-字体类型,文本对齐,外观修饰,文本缩进,文本行间距,外部引用css样式

字体类型和字体属性调整 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Css字体类型大小</title&…

浅述安防视频监控平台EasyCVR视频汇聚管理系统运维管理能力

智慧安防监控EasyCVR视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

如何保证Redis的缓存和数据库中的数据的一致性?

Redis的缓存如何和数据库中的数据保持一致性&#xff1f; 我们都知道&#xff0c;Redis是一个基于内存的键值存储系统&#xff0c;数据完全存放在内存中&#xff0c;这使得它的读写速度远超传统的硬盘存储数据库。对于高访问频率、低修改率的数据&#xff0c;通过将它们缓存在…

4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

4.6 offset指令&#xff0c;jmp short指令&#xff0c;far&#xff0c;dword ptr各种跳转指令 可以修改IP&#xff0c;或同时修改CS和IP的指令统称为转移指令。概括的讲&#xff0c;转移指令就是可以控制CPU执行内存中某处代码的指令 1. 转移指令 1.1 8086CPU的转移行为有以…

城市治理/县域治理方案:构建基于AI视频能力的“一张网”,助力新型城市发展

TSINGSEE青犀AI算法中台是一款平台型产品&#xff0c;专注于提供各行业中小场景部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点&#xff0c;可提供丰富的视图接入能力和智能分析能力。 平台采用了多项IT高新技术&#xff0c;包括视频编解码技术、嵌入式…

宁盾身份域管与Coremail邮件系统完成兼容互认证,持续深化信创布局

在信创国产化改造的背景下&#xff0c;企业邮箱的替换是许多党政、央国企、金融、制造企业面临的重要任务。为了满足企业对国产邮箱、OA等其他应用、终端实现统一身份认证&#xff0c;宁盾国产化身份域管与 Coremail XT 安全增强电子邮件系统 V5.0、V6.0 完成了产品兼容互认证&…

从redux的基本概念渐进式理解redux/toolkit的用法

概念 Redux toolkit是帮助提高redux开发效率的一个库 React-redux 是将React和Redux toolkit绑定在一起的一个库 action 是一个对象,里面有一个type属性 action creator是一个函数,这个函数可以返回上面的action对象。 reducer 是一个函数,接受两个参数(initilastate, acti…

【Vue3源码学习】— CH2.8 Vue 3 响应式系统小结

Vue 3 响应式系统小结 1.核心概念1.1 Proxy和Reflect1.2 响应式API1.3 依赖收集与更新触发1.4 触发更新&#xff08;Triggering Updates&#xff09;&#xff1a;1.5 副作用函数&#xff08;Effect&#xff09;1.6 计算属性和观察者1.7 EffectScope1.8 性能优化&#xff1a; 2.…

基于深度学习的机场航拍小目标检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;在本博客中介绍了基于YOLOv8/v7/v6/v5的机场航拍小目标检测系统。该系统的核心技术是采用YOLOv8&#xff0c;并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;从而进行性能指标的综合对比。我们详细介绍了国内外在机场航拍小目标检测领域的研究现状、数据集处理…

多类别分类器(Machine Learning研习十八)

多类别分类器 二元分类器可以区分两个类别&#xff0c;而多类别分类器&#xff08;也称为多叉分类器&#xff09;可以区分两个以上的类别。 一些 Scikit-Learn 分类器&#xff08;如 LogisticRegression、RandomForestClassifier 和 GaussianNB&#xff09;能够原生处理多个类…

硬件了解 笔记 2

CPU 内存控制器&#xff1a;负责读写数据 代理系统和平台IO&#xff1a;与主板上的芯片组通信&#xff0c;并管理PC中其他组件之间的数据流 主板&#xff1a;巨大的印刷电路板 Chipset&#xff1a;芯片组&#xff0c;位于散热器下方&#xff0c;直接连接到CPU的系统代理部分 …