slam系列4:nerf和3dgs

常用的3维表示法:
在这里插入图片描述
NeRF属于是density的模型,模型的参数如下:
在这里插入图片描述
传统的 3D 模型表示方法,如 离散的Mesh 和点云,以及连续的 Nerf,通常面临着一个主要问题:随机采样过程中产生的噪声,这直接影响了渲染质量。3DGS 是在离散和连续间的一个平衡:在高斯球内部是连续的、可微的;在整个空间中,每个高斯球又是离散的。

1. NeRF基本概念

1.1 建模方法

训练一个函数,将位置和摄像头参数转化为颜色和体密度
在这里插入图片描述
然后使用体渲染技术,生成图片:
在这里插入图片描述
神经网络是用了一个9层256通道的全连接MLP,姑且算是神经网络。训练过程如下:
在这里插入图片描述

1.2 Instant NGP

Instant NGP相对于NeRF的核心改进在于它采用了“多分辨率哈希编码” (Multi-resolution hash encoding) 的数据结构。
你可以理解为 Instant NGP 把原始 NeRF 中神经网络的大部分参数扔掉,换成一个小得多的神经网络;同时额外训练一组编码参数 (feature vectors),这些编码参数是存储在网格的顶点上的,这样的网格一共有 层,它们按照分辨率从低到高,用于学习场景不同层次的细节。在每次训练时,小神经网络的参数和每层网格上只有点周围的 8 个顶点中的编码参数会被更新。
Instant NGP 的另一个重要的工程优化是将整个网络实现在一个 CUDA kernel 中 (Fully-fused MLP),使得网络的所有计算都在 GPU 的 local cache 中进行。据论文所称这会带来 10x 的效率提升。
在这里插入图片描述

2. 3dgs

2.1 建模方法

3D Gaussian Splatting 干了什么:使用3D Gaussian球表示三维模型,并通过 Splatting 技术渲染出来。
在 NeRF 里去表达一个三维场景的信息时,使用的是三维场景的点和它的体密度值σ、颜色C。3DGS内不再用点表达,而是使用 3D 高斯组件替代了点,所以在空间中的表达是一堆堆的3D高斯。这些3D高斯的信息没有保存在神经网络里,而是存在了硬盘上,所以它是一个显式的表达场景。
3D高斯体参数包括:
在这里插入图片描述

2.1.1 谐波函数

球面谐波是一种类似高斯展开的在极坐标系上的函数,用来拟合空间体
在这里插入图片描述
在这里插入图片描述
作为对比,我们来看另一种球面高斯函数:
在这里插入图片描述
和SH定死的基函数相比,SG的特点就是自由度极高:基函数用几个、怎么分布、胖瘦如何,都随意。然而SH也有很多长处是SG没有的,比如SH除了正交性还有旋转不变性。
在这里插入图片描述
反馈到实际高光计算上,就会发现SG不能很好地保持高光形状。基函数定义方向上的高光形状能保持的比较好,但如果位置在几个基函数的角度之间,高光形状就会比较散了。

2.1.2 协方差

协方差用于控制高斯体各方向的尺寸。
在这里插入图片描述

2.1.3 splating

Splatting是一种传统的3D->2D的光栅化渲染方式。
3DGS首先将这些3D高斯投影到基于像素的图像平面上,这一过程被称为“splatting”。然后,3DGS对这些高斯进行排序,并计算每个像素的值。
在这里插入图片描述
在这里插入图片描述

给定像素位置 x x x,通过视图变换 W W W,可以计算与所有重叠高斯体的距离,即这些高斯体的深度,形成高斯体的排序列表 N N N。然后,进行Alpha Blending,也就是混合 alpha 合成来计算整体图像的最终颜色:
在这里插入图片描述

2.1.4 α blending

多个高斯体splat到平面上,最终形成的图形需要使用α blending进行叠加。
在这里插入图片描述

2.1.5 光栅渲染

在这里插入图片描述

2.2 初始化点云

初始化时的输入量使用的是 COLMAP 等 SFM 方式输出的点云,这里与 NeRF 就完全不同了,NeRF 使用的 仅是 COLMAP 等输出的相机位姿,而 3DGS 中,这些点云是有用的。3DGS 将根据这些点云进行初始化:基于这些点云的位置,会在每一个位置上放置一个高斯球,系数随机。
在这里插入图片描述
在这里插入图片描述

2.3 训练过程

在这里插入图片描述
在这里插入图片描述
3DGS 从近到远每个球投下来以后都形成了一个图像区,那么在重叠区域就可以进行光栅化的融合了。每个点都进行融合以后就可以得到图像。为了避免为每个像素推导高斯系数的成本计算,3D GS将精度从像素级转移到patch级细节。每个瓦片包括16×16个像素。3D GS进一步确定哪些tiles与这些投影的高斯图相交,然后按照tile进行排序,最后并行地对tile进行计算:
在这里插入图片描述
NeRF 内逐像素进行计算,即采集一个 batch 的像素,送进去训练,然后输出损失;而在 3DGS 内,每次采集一小批图,以图像为单位进行损失计算。
在这里插入图片描述
训练图中,上面的分支更新 3D 高斯椭球体的属性,下支实现 3D 高斯椭球体的克隆和分裂等:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. 软件

通用软件splatviz,见https://github.com/Florian-Barthel/splatviz。支持实时编辑和分析。通过利用Python GUI库pyimgui,splatviz能够在渲染前直接操作高斯对象,从而实现无限的编辑和可视化可能性。
存储为ply文件,压缩文件为yml文件。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

P5430 7.68T U.2 NVME SBFPF2BU076T001 Solidigm固态硬盘

SBFPF2BU076T001 Solidigm P5430 7.68T U.2 NVME企业级固态硬盘 Solidigm针对企业应用推出D5-P5430固态硬盘,针对主流和读取密集型应用程序进行了优化,面向大量企业工作它采用PCIe Gen 4总线与QLC类型NAND颗粒,提供大量的存储密度并降低总拥…

《云计算网络技术与应用》实训6-1:配置KVM虚拟机使用NAT网络

任务1、计算节点基础环境准备 1. 使用VMware安装CentOS 7虚拟机,安装时记得开启CPU虚拟化,命名为“KVMC6”。 2. (网卡配置和之前的一样,都用100网段)网关设置为192.168.100.1,地址段为192.168.100.10-25…

数据分析:R语言计算XGBoost二分类模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据建模平均SHAP值计算单个样本的每个特征的SHAP值蜜蜂图依赖图单个样本的SHAP解释(Force Plot)其他方法计算SHAP值单个个体预测结果系统信息…

轻松掌握:如何查找家中WiFi的IP地址

在如今数字化生活的时代,WiFi已成为我们日常生活中不可或缺的一部分。无论是上网冲浪、在线学习、还是远程办公,稳定的WiFi连接都显得尤为重要。然而,有时我们可能需要了解家中WiFi的IP地址,以便进行网络设置、故障排查或进行其他…

基于springboot留守儿童爱心网站

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…

爬虫之数据提取

HTML数据提取 这一片文章, 我们一起学习如何利用HTML标签来提取数据。 我们打开二手房网站: 我们打开开发者工具, 找到请求: 这次我们找的请求, 和以前的不一样了, 所以这里面带大家找一找, 以前我们找的请求都是json格式的响应数据, 那今天由于我们要学习如何提取html数据, …

Jenkins实践(三):分包编译部署到Maven私仓

本文主要是针对springboot多模块项目,参数化构建、分包部署到maven私仓的记录。本文以上篇文章为基础进行记录。 系列文章: Jenkins入门(一):从搭建到部署第一个Springboot项目(踩坑记录)_ub24.04安装jenkins-CSDN博…

LinkedList和链表(上)

1. 顺序表ArrayList的缺点和优点 优点: 1> 在给定下标进行查找的时候,时间复杂度是O(1) 缺点: 1> 插入数据必须移动其他数据,最坏情况下,插入到0位置,时间复杂度为O(N) 2> 删除数据也需要移动数据,最坏情况下,就是删除0位置.时间复杂度为O(N) 3> 扩容之后(1.5倍扩容…

《深度学习》OpenCV 物体跟踪 原理及案例解析

目录 一、物体跟踪 1、什么是物体跟踪 2、步骤 1)选择跟踪算法 2)初始化跟踪器 3)在每个视频帧上执行跟踪 4)可选的重新初始化 3、原理 二、案例实现 1、完整代码 1)使用方式 2)运行结果 2、关…

麒麟桌面版v10 SP1以docker方式安装达梦数据库

安装docker 0.切换root用户(可以不切换,但要注意权限问题,我是用root) ymym-pc:~/桌面$ whoami ym ymym-pc:~/桌面$ sudo -i rootym-pc:~# whoami root rootym-pc:~# 1.查看系统版本 [rootlocalhost opt]# cat /etc/os-release…

java类和对象(上)

前言: 不知道大家有没有将java方法的使用熟记入心呢?如果没有的话,可以打开博主的上一篇博文阅读哦,在这里谢谢大家一路的陪伴。也希望我的内容能够帮到你更快的掌握java语言的学习。接下来我们要讲的是java类和对象。让我们整理…

最新Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版图文教程

CleanMyMac X mac版下载是一款功能更加强大的系统优化清理工具,软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。CleanMyMac X for mac相比于 CleanMyMac3来说,功能增加了不少,比如新增…

Java并发 - AQS之CountDownLatch

文章目录 基本使用源码分析awaitcountDowngetCount 可重置的CountDownLatch总结 CountDownLatch是一个多线程同步工具类,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。主要用来解决一个线程或多个线程等待另外多个线程的场景。 初始化需…

在Linux中搭建WordPress并实现Windows主机远程访问

WordPreWordPress是一个基于PHP开发的开源平台,适用于在支持PHP与MySQL数据库的服务器上搭建个性化博客或网站。同时,它也能够作为功能强大的内容管理系统(CMS)被广泛应用。 虚拟机:VirtualBox 虚拟机安装&#x1f449…

win10中mysql数据库binlog恢复

win10中mysql数据库binlog恢复 昨天有朋友江湖救急,说测试库里的表不小心删除更新了数据。这里也复习下binlog数据恢复,当然需要一定的条件:首先mysql开启binlog,然后每天需要备份对应的数据库 1 单库单表准备 在恢复数据前&am…

QT开发--文件的读写操作

第十三章 文件的读写操作 Qt提供两种读写纯文本文件的方法: 1、直接使用 QFile 类的IO功能; 2、结合 QFile 和 QTextStream,利用流(Stream)进行操作。 13.1 文件读操作 13.1.1 使用QFile类 Qt封装了QFile类,方便我们对文件进行操…

鸿蒙OS启动流程

启动流程(基于openharmony4.1) 系统上电加载内核后,按照以下流程完成系统各个服务和应用的启动: 内核加载init进程,一般在bootloader启动内核时通过设置内核的cmdline来指定init的位置。init进程启动后,会挂载tmpfs,…

bat脚本banenr

飞出个未来班得 echo off echo .-. echo ( ) echo - echo J L echo ^| ^| echo J L echo ^| ^| echo J L echo …

MySQL-表相关(DDL DML)

文章目录 表的基本操作表的创建表的删除 MySQL中的数据类型整数类型浮点数类型定点数类型日期和时间类型字符串类型charvarchartext 二进制类型 DDL语句查看建表语句修改表名新增字段修改字段(名类型)修改字段(仅类型)删除字段 DML语句insert 增delete 删truncate 语句update 改…

前端学习-CSS的三大特性(十七)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 层叠性 继承性 行高的继承性 优先级 优先级注意点 权重叠加 总结 前言 引入css特性的学习 CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 层叠…