3D Guassians Splatting相关解读

从已有的点云模型出发,以每个点为中心,建立可学习的高斯表达,用Splatting即抛雪球的方法进行渲染,实现高分辨率的实时渲染。

1、主要思想

在这里插入图片描述

  • 1.引入了一种各向异性(anisotropic)的3D高斯分布作为高质量、非结构化的辐射场表达;
    在这里插入图片描述
    从SFM点云出发,以每个点为中心生成3D高斯分布;各向异性指从各个方向看上去都长得不一样,即把一个点往不同相机位姿上投影的时候会投出不一样的样子。

  • 2.实现了使用GPU进行快速可微的渲染,允许各向异性的抛雪球(splatting)和快速反向传播;
    在这里插入图片描述
    Splatting:计算机图形学里一个比较经典的用三维点进行渲染的方法,把三维点视作雪球往图像平面上抛,雪球在图像平面上会留下扩散的痕迹,这些点的扩散痕迹叠加在一起构成最后的图像。

  • 3.提出了针对3D高斯特性的优化方法,并同事进行自适应密度控制。
    在这里插入图片描述
    除此,存储在点里边的高斯参数需要再反向传播时进行优化更新;
    也会根据梯度自适应地调整点云的分布,如果一个点的3D高斯太大,不能完全拟合该处的细节则对其进行分割操作,用两个点来表达;如果一个位置的点太密集(用不着这么多的3D高斯),则合并为一个3D高斯。

在这里插入图片描述
总结:从左边开始对SFM的点云进行初始化得到3D高斯;再沿黑色箭头借助CAMERA的外参做投影Projection,接着用一个可微的光栅化渲染得到图像;再和Nerf一样,把渲染图像和GT图像求loss沿蓝色箭头反向传播,蓝色箭头向上更新3D高斯里的参数,向下送入自适应密度控制更新点云(Adaptive Density Control)。

2、补充预备知识

3D Gaussian

2.1、一维高斯分布的概率密度函数

在这里插入图片描述
变量x服从均值为μ,方差为σ²的高斯分布。

2.2、三维高斯分布的概率密度函数

在这里插入图片描述

变量为一个向量V,其中三个参数a、b、c均服从均值为0,方差为1的正态分布且相互独立。
一般情况,变量向量x并不一定满足正态分布,则需要将其转换为正态分布,通过矩阵可表示为:

在这里插入图片描述
在这里插入图片描述

其中均值向量μ中的三个分量分别为xyz各自的均值。向量x的分量各自减去均值即将整个数据的分布去中心化,再通过变换矩阵A对[x, y, z]进行线性组合使其等于[a, b, c]。

在这里插入图片描述

变换之后再代入到原式中得到:

在这里插入图片描述

到此仍是v的概率密度函数p(v),再通过以下计算得到x的概率密度函数p(x):

两边积分得

在这里插入图片描述

dv换成dx,把v换成包含向量x的表达式:

在这里插入图片描述

代入可得到:

在这里插入图片描述

向量x的概率密度函数即为图中黄色框的一部分:

在这里插入图片描述
在这里插入图片描述

至此,一维高斯分布通过均值和方差来表示,那么三维对应也应该用均值向量和协方差矩阵来表示,均值上述已经计算得到,下面求解协方差矩阵。

协方差矩阵:
在这里插入图片描述

协方差矩阵作为对称矩阵可以进行奇异值分解,上式中的矩阵U每一列都是相互正交的特征单位向量满足UUT等于单位矩阵IΛ对角线上的元素是协方差矩阵的特征值,其余元素均为0。

根据行列式性质再转化为:

在这里插入图片描述
一组正交基乘以一个对角阵表示一个线性变换。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终的x的概率密度函数p(x)。

2.3、光栅化(Rasterization)

光栅化:光栅化是找到所有被几何原型所占据的所有像素点(The process of finding all the pixels in an image that are occupied by a geometric primitive is called rasterization),将图形或图像的矢量数据转换为像素数据,从而能够在计算机屏幕上显示的过程。通过将图像转换为像素级别,计算机可以更容易地处理和显示图形,同时确保图像在屏幕上以高速率绘制。很通俗的l理解就是几何图形在光栅像素上的表达,更通俗地讲就是将一些图形画到屏幕(在图形学中把其抽象成一个二维数组,二维数组的每个元素就是一个像素//屏幕空间//)上的过程。

最基本的就是三角形。因为计算机图形学本质是把多边形投影到成像平面并对成像平面绘画,而三个不共线的点可以确定一个面,任何其他的多边形都可以拆分为三角形。另外,三角形可以很好判断一个点是在三角形的内部还是外部,在光栅化过程中,利用这个可以有效判断像素是否在多边形内。光栅化时,先将三角网格映射到二维平面,然后使用采样函数获取三角形内的像素情况 ,再根据走样情况(如锯齿 Jaggies、摩尔纹 Moire Patterns、车轮效应 Wagon Wheel Illusion 等)进行反走样 ,最后使用顶点片元着色 或其他方法进行像素点着色 。
光栅化是实现计算机屏幕上图形显示和渲染的关键步骤,能够以非常高的速度生成图像,适用于实时渲染,例如视频游戏和模拟器。

2.4、Splatting

Splatting 是一种用于光栅化 3D 对象(如前文讨论的椭球)的技术。这些 3D 对象被映射到投影平面后得到的 2D 图形称为 splat,类似于一个点、圆、矩形或其他形状,就像雪球打在墙上留下的印记,能量从中心向外扩散并减弱。这个过程可以在 GPU 上并行处理,因为每个 Splat 之间是独立的。

在这里插入图片描述
Splatting 可以将三维空间中的点投影到二维图像平面上,这些投影的数据点以某种方式在图像上产生视觉效果,从而呈现在最终的渲染图像中。Splatting 通常并不是由传统的图形硬件管线 8 自动执行,而是需要相对复杂的 GPU 编程,通常由图形开发者在需要时自行实现。

2.5 几何的隐式表达

传统的几何显式表达使用点云、体素、网格等方式,可以沿着存储空间遍历场景中的所有元素。几何隐式表达则是使用函数或神经网络来表示几何信息,而不是使用显式的几何对象。在经典的隐式几何表达 —— NeRF 中,使用一个多层感知机作为几何的隐式表示方法,输入三维空间坐标和观测视角,就可以输出对应点的几何密度和颜色。渲染场景时把光线上的一系列采样点加权积起来,就可以渲染得到一个像素颜色。

从表达方式来看,几何的隐式表达可以分为体积类表达和表面类表达两种:

体积类表达:NeRF 属于体积类表达,通过几何密度决定采样点颜色的贡献度。
表面类表达:在表面类表达方式中,输入采样点,符号距离函数 SDF 输出空间中距离该点最近的表面的距离,正值表示表面外,负值表示表面内,表面类方法判定越靠近表面的采样点颜色贡献度越高。

3、相关工作

3.1、Point-NeRF(CVPR2022:Point-Based Neural Radiance Fileds)

  • 1.为每个点赋予特征向量;
  • 2、体渲染时取采样点周边一定领域内的点的特征做线性插值,解码得颜色和体密度;
  • 3、自适应点云生长剔除
    在这里插入图片描述

在这里插入图片描述
为每个点提取一个特征,储存在点里边;渲染采用体渲染,即从相机光心发出穿透像素的采样射线上取采样点,取采样点周边一定范围内的三维点的特征向量做插值得到采样位置的特征表达;再对特征进行解码得到采样位置的体密度和RGB;再堆叠整条射线上的点得到像素RGB的值。(常见的NerF思路:特征向量、体渲染、插值、解码)

与本文一样由点云出发,构建辐射场,但不同点在于本文点里边存储了物理含义更加明确的3D高斯,避开了Point-NeRF中对抽象特征的学习过程,从而使得训练更容易收敛;在渲染方面,Point-NeRF用体渲染,本文用Splatting更加传统且效率更高。

3.2、Plenoxels(CVPR2022:Radiance Fields without Neural Networks)

体素格点存储球谐函数(spherical harmonic)系数,系数做插值得到采样位置的球谐函数。
在这里插入图片描述
继承了NeRF体素、三线性插值和体渲染的要素,抛弃了常用的MLP和隐式特征,直接用更加显示的球谐函数(CG常用),没有神经辐射场。此论文凭此跻身NeRF加速前沿的第一梯队。
本文的3D高斯Splatting的思想和Plenoxels一脉相承,均用尽可能传统但高效的表达方式来提高模型表达能力的下限,再结合一些可微的和可学习的思想来提高模型拟合的上限。简洁优雅效率高。

4、3D Guassian

4.1、可微的3D高斯Splatting

在这里插入图片描述
左边绿点即为3D高斯点云,每个点里边存储数据有:
Position(Mean):默认就有的信息,坐标xyz,也是3D高斯的均值;Covariance matrix,协方差矩阵,椭圆绿球的形状和方向;球谐函数本身即是用一组正交基的线性组合来拟合广场。

为何选择高斯:作者表示是因为需要一种图元能够在拥有场景表达能力的时候可微而且显示地支持快速渲染,因此有了上图所示的3D高斯点云。3D高斯点云中的参数可在迭代优化的过程中更新,也能够很容易地用splat的方法投影到2D图像上做较快的α混合即渲染。
在这里插入图片描述

4.11 3D高斯的定义

在这里插入图片描述
本文通过协方差矩阵来表达该点,此矩阵控制3D高斯的形状。较之3节中推导的传统表达式,本文中的公式去掉了均值,因为该高斯分布以点为中心,xyz的均值就在点上已经中心化了,所以均值设为0;左侧系数是为控制整个概率密度函数的积分为1,但此处不需要,没有积分为1的限制所以整个分布的大小能够自由控制。

4.12 协方差矩阵的物理含义

在这里插入图片描述

A为一个线性变换,把任意一个分布变换到均值为μ方差为1的范围内。二维分布通过图像可表示为:

在这里插入图片描述

二维数据通过矩阵A做线性变换,可看作是先在Y方向进行压缩,再绕原点旋转一定角度。
由此,A的构造通常如下:
在这里插入图片描述
旋转变换矩阵R,尺度变换矩阵S(对角线上为两个缩放系数)。

本文中的公式:

在这里插入图片描述
迭代优化过程中,优化矩阵A的参数即可改变该高斯椭球的形状、大小、方向等等几何外观,从而使其能够在Splatting时投影出正确的效果。

存在问题

  • 1)、旋转矩阵的优化:直接让3*3的旋转矩阵参与优化不可行,所以本文采用四元数参与优化再进行转化,如此便将参数从9个降到了4个,同时能够保持协方差矩阵的半正定性质( 设A是n阶方阵,如果对任何非零向量X,都有XTAX≥0,其中X’表示X的转置,就称A为半正定矩阵)。
  • 2)、求导:如何让矩阵A对尺度S和四元数q求偏导:论文附录有详细推导;
  • 3)、3D高斯如何做渲染(椭球怎样投影成平面的图像):对鞋方差矩阵做一个变换即可。(该问题在CG领域有较深入研究,本文中引用是一个01年的文献)

4.2、优化和自适应密度控制

4.21 优化

点中存储的参数比如点的位置不透明度、协方差矩阵、球谐函数系数等均参与优化,此优化过程的实现是整个系统正常工作不可或缺的一环。

  • 随机梯度下降(Stochastic Gradient Descent):优化策略
  • CUDA核心:写了部分CUDA核心用以加速
  • 快速光栅化:提高效率
  • SigmodExpotential激活函数:不透明度通过Sigmoid函数限制在[0, 1)之内,协方差中的尺度用指数激活函数
  • 损失函数:L1loss是渲染图像和GT图像求广度误差,再按一定比例λ加上SSIM(结构相似性的误差)。
  • 在这里插入图片描述

4.22 自适应密度控制(Adaptive Control of Gaussians)

  • 每100次迭代移除不透明度小于阈值的点:接近透明已经无用
  • 重建不充分的区域往往会有较大的梯度:判断是否重建的依据为梯度,再更新点的位置时如果梯度过大说明该处的误差较大,需要修改的量较大,梯度超过阈值就会执行densify,第一排图像中沿梯度方向安置新的点;分为“欠重建”和“过重建”,根据方差区别,方差大,说明该3D高斯很大需要做分割,反之做克隆;
    Under-reconstruction:clone,下图第一排,黑色线条为真是几何外形,它已不足以用一个高斯来拟合,所以克隆为2个,从而建模整个几何图案。
    Over-reconstruction:split,下图第二排,当一个位置点太少,不足以完美覆盖一个复杂区域时,通过细胞分裂spli分成两个3D高斯来拟合。
  • 周期性将不透明度重置为0用于去除floaters(floaters:漂浮的一些东西,不属于模型重建);
  • 周期性移除较大的高斯用于避免重叠。

在这里插入图片描述
点云密度的自适应控制使得系统能够从稀疏的质量不那么高的初始点云,甚至随机初始化的点云中拟合出较好的模型。

4.3 快速可微光栅化(Tile-based Rasterizer)

渲染方法仅依靠Splatting无法达到较高的实时渲染帧率,本文通过Tile-based Rasterizer

(1)、把整个图像划分为16*16个tiles,每个tile视锥内挑选可视的3D Gaussian;
(2)、每个视锥内只取执行度大于99%的高斯,并按深度排序;(
(3)、并行地在每个tile上splat;
(4)、有像素的不透明度达到饱和就停止对应线程;
(5)、反向传播误差时按tile对高斯进行索引。

取执行度大于99%的高斯后实例化为高斯对象,对象中包含所在tile的ID以及所在对应视域下的深度,通过这些信息对高斯对象进行排序;(将(2)中高斯按其到图像平面的深度值的排序顺序从近到远的tile上做splat,把splat留下的痕迹做堆叠累积直到不透明度饱和即为;每个tile都单独为一个线程块,所以可认为所有tile上的光栅化是并行运行的(光栅化指从堆叠的splat痕迹中去划分像素网格来生成像素值)

5、总结

  • 从初始的SFM点云出发,以每个点为中心生成3D高斯;
    在这里插入图片描述
  • 然后用相机参数把点投影到图像平面上(Splatting);
    在这里插入图片描述
  • 从Splatting的痕迹中进行Tile-base光栅化得到渲染图像,将渲染图像和GT图像求loss沿蓝色箭头反向传播;
    在这里插入图片描述
  • 根据传递到点上的梯度来决定是否需要对3D高斯进行克隆或分割,梯度同时也会传递到3D高斯来更新其中储存的位置(协方差矩阵、球谐函数、不透明度等参数)。
    在这里插入图片描述
    核心:构建以协方差为主导的3D高斯点云,然后围绕3D高斯点云进行渲染和优化。

感谢UP主的视频解读,可是这里贴不了小破站的链接。感兴趣的可以小破站搜【【论文讲解】用点云结合3D高斯构建辐射场,成为快速训练、实时渲染的新SOTA!】

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

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

相关文章

查看centos的CPU、内存、磁盘空间等配置信息

目录 查看CPU/proc/cpuinfo中的信息 查看内存/proc/meminfo中的信息 查看磁盘空间df 命令du命令使用fdisk命令 查看CPU /proc/cpuinfo中的信息 前置: [ltkjltkj front]$ cat /proc/cpuinfo| grep "physical id" physical id : 0 physical id : 0 physi…

智慧校园大数据平台架构

平台架构 基础硬件层 基础硬件层是由一组低廉的PC或服务器组合构建而成。基础硬件层主要承载着数据的存储、运算、容错、调度和通信等任务,对基础应用层下达的指令进行执行和反馈。 数据集成 大数据特征表现在实时、交互、海量等方面,并且以半结构化、非结构化数据为主,价…

机器学习系统或者SysMLDL笔记

在使用过TVM、TensorRT等优秀的机器学习编译优化系统以及Pytorch、Keras等深度学习框架后,总觉得有必要从理论上对这些系统进行一些分析,虽然说在实践中学习是最快最直接的(指哪儿打哪儿、不会哪儿查哪儿),但恶补一些关于系统设计的一些知识还…

搜索经典题——填充 9*9矩阵

题目:给定一个九行九列矩阵,填充矩阵元素,要求: 1、每一行每一列,每个小九宫格(图片画粗的地方就是)不能包含相同元素 2、每一行,每一列,每个小九宫格均会完整出现1-9的数…

Python进程池multiprocessing.Pool

环境: 鲲鹏920:192核心 内存:756G python:3.9 python单进程的耗时 在做单纯的cpu计算的场景,使用单进程核多进程的耗时做如下测试: 单进程情况下cpu的占用了如下,占用一半的核心数: 每一步…

第二百六十九回

文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容,本章回中将介绍国际化设置.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作,这样可以让不同国家的…

SAP PI之Rest adapter

一,简介 REST风格接口是以http为传输协议,以xml或json或text为有效负载。下图展示了REST到XI再返回的一个过程,一个REST接口包含的信息有:服务URL、URL中带的参数、http方法(post/get/put等)、http头部、body部分的有效载荷。而X…

2023年全球软件质量效能大会(QECon北京站):核心内容与学习收获(附大会核心PPT下载)

此次大会的主题为“智能时代的质量新篇章”。来自全球的软件质量与效能专家、企业领袖、技术研发人员等齐聚一堂,共同探讨软件质量与效能的新理念、新技术、新实践。 一、大会的核心内容 1、智能时代软件质量的新挑战与机遇 随着人工智能、大数据等技术的快速发展…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件,写入 module.exports {publicPath: ./, }

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实,“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解,但不是最优解 1.痛点 上一篇文章的标题是: 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就…

matlab 直道转向时方向盘最小转角算法

1、内容简介 略 33-可以交流、咨询、答疑 2、内容说明 汽车主动转向,直道转向时方向盘最小转角算法,一个m脚本和simulink的计算结果 略 3、仿真分析 略 4、参考论文 汽车主动转向关键技术研究

黑马程序员_多线程

基础知识 什么是线程 被包含在进程之中, 可以调度的最小单位应用软件中互相独立,可以同时运行的功能 什么是进程 程序的基本执行实体 总结: 什么是多线程? 有了多线程,可以让程序同时做多件事情 多线程有什么作用&…

DC电源模块在新能源领域的应用前景

BOSHIDA DC电源模块在新能源领域的应用前景 DC电源模块在新能源领域有着广阔的应用前景。随着可再生能源技术的发展和普及,如太阳能和风能等的应用逐渐增多,DC电源模块在这些领域的应用越来越重要。 首先,DC电源模块可以用于太阳能发电系统…

车载音频EMI的产生及典型音频功放AW836XX的解决方案

之前针对 eCall的文章中有提到D类音频功放需要关注EMI问题(点击文章回看《车载eCall系统音频应用解决方案》),在此展开此问题并寻求解决方案。 1. EMI定义与分类 电磁干扰(Electromagnetic Interference,EMI&#xff…

geemap学习笔记049:下载Landsat数据时遇到的一个问题

前言 最近在下载Landsat 8 地面反射率数据(Surface Reflectance)时,遇到了一个问题,无论是使用geemap.ee_export_image_to_drive() 函数还是geemap.download_ee_image() 函数下载的数据,易康都打不开,显示…

【CSDN博客系列】自定义模块

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

还在为crontab表达式发愁吗,快使用这个工具

是不是每次要定义cron表达式的时候,都去百度翻找资料,cron表达式难写难记真是苦天下程序员久已。有没有什么不拥记的办法就轻松掌握呢?最近发现这个CrontabGuru神器,强烈推荐,真是广大程序员的福音了。 简介 Crontab…

电脑技巧:安装手机与Win10电脑怎样互传文件,看完你就会了

目录 一、Windows网络邻居功能 二、数据线传输 三、蓝牙连接 大家在日常工作当中,会遇到需要实现手机和Win10电脑之间的文件传输,今天小编给大家推荐使用Win10系统自带的网络邻居功能来实现手机与电脑之间数据的传输,希望对大家日常办公提…

喜讯!无垠智能模糊测试系统入选“2023软件供应链优秀成果”

近日,中国信通院信息通信软件供应链安全社区正式公布了“2023软件供应链优秀成果”,其中,云起无垠的无垠智能模糊测试系统凭借其自主研发的创新成果,成功入选该名单。 图 获奖成果 自发起以来,软件供应链优秀成果案例…

html画动态桃心

html画动态桃心 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetwindows-1252"><title></title><style>* {padding: 0;margin…