3D Gaussian Splatting的使用

news2025/2/25 6:22:30

3D Gaussian Splatting的使用

  • 1 下载与安装
  • 2 准备场景样本
    • 2.1 准备场景照片
      • 2.1.1 采集图片
      • 2.1.2 生成相机位姿
  • 3 训练
  • 4 展示

1 下载与安装

今年SIGGRAPH最佳论文,学习了一下,果然厉害,具体论文原理就不说了,一搜都有,主要是看看怎么用,自己能不能把身边的场景快速建个模。

赶紧记录下,好像这几天在这个基础上又有很多花样出来了…

我的系统是Ubuntu22.04。

开源作者已经都弄的很详细了,也有教程。
首先拉项目

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

然后,要建conda环境,而项目已经提供了配置文件包含了需要的各版本信息,文件就是:enviornment.ymal,所以这么调用就建好环境,并激活:

conda env create --file environment.yml
#文件里给环境的名字固定叫 gaussian_splatting
conda activate gaussian_splatting

此时呢,虽然建好了,但是呢也报错了,仔细分析了error,是因为安装项目里的submodules里的两个项目报错了,类似这样的报错:

/usr/include/c++/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘…’:
435 | function(_Functor&& __f) | ^ /usr/include/c++/11/bits/std_function.h:435:145: note: ‘_ArgTypes’ /usr/include/c++/11/bits/std_function.h:530:146: error: parameter packs not expanded with ‘…’: 530 | operator=(_Functor&& __f) | ^ /usr/include/c++/11/bits/std_function.h:530:146: note: ‘_ArgTypes’

查了半天以为是g++版本不对,有的说要将到版本10,还有说要改c++文件源码。我没敢改,再找了下,发现我的cuda版本是11.5,而该项目要求的是11.8,于是我就升级了一下,具体怎么升级,见我之前写的一篇 升级和切换CUDA版本 。

升级完CUDA,就手动再安装这两个子模块:

pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn

都没问题,成功安装~

2 准备场景样本

准备拿会议室整个屋子做一次尝试,看看能不能建出个模来。

2.1 准备场景照片

2.1.1 采集图片

根据原理吧,就需要这个场景中所有位置所有角度的图像,所以这个准备过程多仔细就能决定最终模型的效果。
我试了很多次,觉得拍视频最好,完了再抽帧。

因为训练的照片要分辨率统一,相机参数、光照等看着都比较统一才好。
另外,建议分辨率推荐1080p,至少720p。再退一步,至少保证宽或高有一个能到720 ,不然训练出来的效果不好,这是我的个人经验。

拍视频的时候,一定不要在一个位置转的拍,要缓慢走动,边走边转,上下左右,然后再走回来,这个路线根据场景要设计好,目的就是在任何位置上都有任何角度的照片。这只能尝试体会了。。。

然后,有了视频,就能通过抽帧拿到图片了,想要效果可以,我建议500张起,多的话我只试到2000张,再多我也没尝试。
怎么抽帧呢,就用ffmpeg

比如,先建一个data目录,data目录里一定要建个input文件夹,名字必须是这个。

ffmpeg -i room.mp4 -r 3 -f image2 input/%06d.jpg

-i就是输入视频,
-r就是帧率,控制抽的图片数量
后面input/%60d.jpg ,图片名字最终是 000001.jpg, 000002.jpg这样的格式。

最终在data/input下就有了一堆图片

2.1.2 生成相机位姿

首先呢,系统里要先安装colmap,使用源码装,具体怎么装,见我之前的文章:
Colmap在Linux下的安装

装好了呢,就在gaussian splatting 项目目录下,运行convert.py

python convert.py -s data

这里 -s 要传入数据目录,一定写data这个目录级别(input在这个目录下)

这时用的是CPU跑的,多等会儿,最终就在data目录下生成一堆目录和文件,包括相机位姿。

3 训练

前面都OK了,就开始训练了。

注意:如果训练图片比较多,比如超过1000张了,那要先给系统设置一下同时打开的文件数上限,因为默认的数太小了,会报错:
OSError: [Errno 24] Too many open files:
所以先临时调大一下上限:
ulimit -n 10000
1w一般就够了,这个设置重启电脑后就失效了。想要永久有效,搜一下就知道了。

然后运行:

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

-s还是一样,要写到data这个目录级别
-m 是输出文件夹,就写data下的output,output目录会自动创建的

整个训练是30000步,在7000步的时候会自动保存一个中间模型。

运行时间的话我举个我的测试例子:

分辨率 1920x1080,939张照片,convert.py的时间是二十几分钟,train.py的时间一共是15分钟。
GPU显存占用22GB,训练得到的ply文件 156MB。

4 展示

该项目也提供了展示的软件,在SIBR_viewers目录里:
进去要编译安装一下这个软件。

编译过程因为有东西下不下来,会出错,得想办法,之后有空单独简单记录一下。

这个软件也要用GPU跑,我就在Ubuntu上跑的,最终安装的目录在SIBR_viewers/install/bin里,所以就进目录里运行:

install/bin/SIBR_gaussianViewer_app -m /home/xxxx/data/output

-m 就是给上面训练后的output目录就行了。

有用的模型就一个,就是30000步里的那个Ply文件。

我这会议室效果展示,就不录屏了,来几个角度的照片吧:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我其实弄的也没那么仔细,但是效果还挺厉害,如果不动的话,就和照片一样。

这个模型出来,和传统模型其实不一样,不好弄成obj fbx啥的,就是它这算法直接渲染的。至于怎么在产品或者其他场景里用,后面有空再说,我已经尝试了一个在web里打开的demo了,只是没那么流畅而已。

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

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

相关文章

Kubernetes(K8s)安全认证-10

安全认证 访问控制概述 Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 客户端 在Kubernetes集群中,客户端通常有两类: User Acco…

【算法刷题】Day13

文章目录 1658. 将 x 减到 0 的最小操作数题干:算法原理:滑动窗口代码: 91. 解码方法题干:算法原理:1、状态表示2、状态转移方程3、初始化4、填表顺序5、返回值6、代码:7、优化 1658. 将 x 减到 0 的最小操…

华为云RDS通用型(x86) vs 鲲鹏(ARM)架构的性能对比

概述 之前,我们对比了阿里云RDS的经济版(ARM)与x86版的性价比,这次我们来看看华为云的RDS MySQL的“通用型”(x86)与“鲲鹏通用增强型”(ARM)版本的情况如何。 这里依旧选择了用户较为常用的4c16g的规格进行测试,测试…

mp3的播放

1.这段vue代码会播放声音&#xff0c;但是会有audio标签 <template><div><audio id"myAudio" controls><source src"./test.mp3" type"audio/mp3" />Your browser does not support the audio tag.</audio></…

webGL开发科学模拟

开发科学模拟应用涉及到使用 WebGL 进行高性能的图形渲染&#xff0c;同时结合科学计算和模拟算法。以下是一般的技术方案&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.WebGL 框架&#xff1a; …

C/C++,数字序列——查找第n个鲍姆甜序列(Baum Sweet Sequence)的计算方法与源程序

1 文本格式 // CPP code to find the nth term of the Baum Sweet Sequence #include <bits/stdc.h> using namespace std; int nthBaumSweetSeq(int n) { // bitset stores bitwise representation bitset<32> bs(n); // len stores the number of bits…

【云原生 | Docker】Docker核心概念 应用上手最佳流程

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

基因组变异注释 — ANNOVAR(一)

基因组变异注释 — ANNOVAR&#xff08;一&#xff09; 1 简介 ANNOVAR 是一款高效的基因组注释工具&#xff0c;专门用于分析和注释来自多种生物基因组&#xff08;包括人类的 hg18、hg19、hg38&#xff0c;以及小鼠、蠕虫、果蝇、酵母等&#xff09;的遗传变异。这个工具实际…

数字营销竞争激烈,这是真的吗?

使用互联网、社交媒体、搜索引擎、移动设备和其他数字渠道等数字技术来营销和销售商品或服务称为数字营销。使用各种策略和策略来接触目标受众并与之互动、提高品牌知名度、产生潜在客户并推动转化。 如今&#xff0c;借助智能手机和其他数字设备&#xff0c;企业可以更轻松地…

在Windows操作系统上使用rtsp simple server和ffmpeg推送录屏视频流

大纲 1 搭建启动rtsp server2 推送录屏视频流下载FFmpeg 3 检验3.1 获取本机IP3.2 检测 1 搭建启动rtsp server 从https://github.com/aler9/rtsp-simple-server/releases下载Windows版本的编译结果。 解压&#xff0c;然后启动该程序 2 推送录屏视频流 下载FFmpeg 从htt…

C语言数组(下)

我希望各位可以在思考之后去看本期练习&#xff0c;并且在观看之后独立编写一遍&#xff0c;以加深理解&#xff0c;巩固知识点。 练习一&#xff1a;编写代码&#xff0c;演⽰多个字符从两端移动&#xff0c;向中间汇聚 我们依旧先上代码 //编写代码&#xff0c;演⽰多个字…

学习数分--简单案例1

业务背景&#xff1a;某服务类app&#xff0c;近期发现日新增用户数下滑明显。 具体描述&#xff1a;假设公司产品&#xff08;一款本地服务类app&#xff09;&#xff0c;近期发现日新增用户数下滑明显。老板要求你分析&#xff1a;数据异动的原因是什么&#xff1f; #最开始…

烤鱼纸包鱼外卖配送小程序商城作用是什么

烤鱼、纸包鱼等餐品是聚会、娱乐、餐食等场景中常见的餐品&#xff0c;到店和外送都有较高需求度&#xff0c;对消费者来说需要找到美味的餐厅和快速享受到美食的流程&#xff1b;对商家来说是如何找到更多消费&#xff0c;并且能快速转化和持续复购及相应的管理。 线下竞争激…

【面试经典150 | 二叉树】相同的树

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;递归方法二&#xff1a;迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题…

前端时间的失败总结复盘

分享失败经验&#xff0c;前段时间的总结复盘&#xff1a; 与伙伴合作面对异常决策要及时提出质疑&#xff0c;怼&#xff0c;别太客气&#xff0c;客气起来&#xff0c;小心翼翼在意他人情绪那么这个项目就会让人难受&#xff0c;不要因为因为伙伴身上有标签/光环/权威就觉得…

【带头学C++】----- 九、类和对象 ---- 9.4 拷贝构造函数、赋值

目录 9.4 拷贝构造函数、赋值 9.4.1 定义拷贝构造函数 9.4.2 拷贝构造和无参构造、有参构造的关系 9.4.3 拷贝构造的几种调用形式 1、旧对象给新对象初始化&#xff0c;调用拷贝构造 2、给对象取别名不会调用拷贝构造 3、普通对象作为函数参数&#xff0c;调用函数时会发…

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

「Verilog学习笔记」时钟分频(偶数)

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule even_div(input wire rst ,input wire clk_in,output wire clk_out2,output wire clk_out4,output wire clk_out8); //********…

WebSocket入门介绍及编程实战

HTTP的限制 全双工和半双工&#xff1a; 全双工&#xff1a;全双工&#xff08;Full Duplex&#xff09;是允许数据在两个方向上同时传输。 半双工&#xff1a;半双工&#xff08;Half Duplex&#xff09;是允许数据在两个方向上传输&#xff0c;但是同一个时间段内只允许一个…

在AWS Lambda中使用FFmpeg处理m3u8视频流

大纲 1 部署有FFmpeg功能的Lambda环境1.1 部署层1.2 部署代码1.2.1 FFmpeg指令1.2.2 代码 2 配置Lambda角色权限2.1 选择角色类型2.2 设置权限2.3 保存角色2.4 绑定角色 参考文献 在直播里领域&#xff0c;我们经常需要对视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文…