3DGS:3D Gaussian Splatting for Real-Time Radiance Field Rendering 论文解读

news2024/11/13 16:29:06

目录

一、导言

二、相关工作

1、传统场景重建

2、神经渲染与辐射场

3、点云渲染

三、3DGS

1、SFM初始化稀疏点云

2、3D高斯椭球

3、协方差

4、球谐函数

5、3D高斯椭球集建立

6、3D投影2D 

7、3D渲染公式

四、损失函数

五、基于梯度自适应改变点云的分布方式

六、快速可微光栅化


一、导言

        该论文是2023年SIGGRAPH的新论文,收录于ACM T GRAPH。该论文第一次提出3DGS这一新场景表达。

(1)第一次使用3D高斯场景表示,保留了连续体积径向场的优点,同时也支持高效的优化和渲染。

(2)采用一种优化方法,交替更新3D高斯参数和自适应密度控制。

(3)3DGS也是第一个达到对于开放完整场景、无边界、1080p分辨率下实现高效渲染并达到SOTA性能的工作。

二、相关工作

1、传统场景重建

(1)基于光场的方法

        最初为密集采样光场方法,通过光场相机或多个相机阵列捕捉场景光场数据(包含坐标与方向),然后通过光场估计深度信息,进一步通过深度信息和光场数据来进行三维重建,一般用于早期的VR,AR工作。但存在计算量较大,且易受到光场条件影响的问题。

        之后也产生了无序采集方法,在不同时间不同位置进行采集,之后通过传统匹配算法(SIFT等)实现特征匹配,但由于时序问题,重建过程中在时间维度上存在不真实性,不连贯性,也缺失了上下文信息,这也导致快速运动物体的运动模糊,长时间容易改变的自然场景下时间连续性较差导致的重建模糊。

(2)结构恢复方法

        SFM方法通过一组照片合成欧式结构下新的视角下的图片,首先通过一组图片使用SIFT算法提取特征,并进行特征匹配去除噪声影响,并使用RANSAC后处理得到位姿估计。

        详细原理看下面链接:

三维重建(7)--运动恢复结构SfM系统解析_sfm三维重建-CSDN博客

(3)多视角立体算法(MVS)

        MVS相比于SFM来说,生成更为稠密的点云来满足稠密重建过程,而SFM生成稀疏的点云针对于位姿估计。另外就是MVS涉及多视角图像中推断每个像素的深度(利用相机参数),并使用几何图形约束来密集化点云。

        由于MVS输入特定的几何图形,当重建得到不存在的图形时不能进行恢复。

2、神经渲染与辐射场

        由于使用CNN改进MVS的渲染会存在受到光线的时间闪烁现象。

        NeRF解决了质量和速度的问题,对于基于NeRF的Mip-NeRF360上虽然渲染质量相当高,但渲染时间极长,所以难以做到高质量的实时渲染。

        InstantNGP使用哈希网格和占用网格来加速,并且使用小的MLP来表示密度和外观,保证渲染速度,但质量略逊于Mip-NeRF。

3、点云渲染

        通过点云渲染容易存在孔洞、锯齿、不连续性的问题,后续通过溅射点大于像素点来解决的,这也是3DGS的雏形。

三、3DGS

        下图为3DGS的流程图示。

1、SFM初始化稀疏点云

         相当于首先用colmap初始化一组点云,原理是通过输入一组图片使用sfm算法先估算一组点,作为初始稀疏点云。

2、3D高斯椭球

        椭球几何形状:首先将点云的位置信息,作为椭球集中每一个椭球的中心点,椭球使用三个高斯分布来规划三个方向的长短轴。类似于下面的这个图,只不过三个高斯分布并不是相同的,也就导致了椭球的不唯一性。

        高斯椭球的几何表示(协方差矩阵):\Sigma =RSS^T R^T ,其中R代表旋转矩阵(满足正交矩阵),S是缩放矩阵(对角矩阵)。

        3D高斯数学表达G(x)如下,上式通过3D高斯分布概率函数积分而来,其中由于均值\mu在椭球中心,所以可以忽略,另外前面的系数是为了高斯分布面积为1导致的,所以去除系数,达到更高的椭球伸缩性。

3、协方差

        协方差物理含义:\Sigma=AA^T,其中A是一个变换,将任意一个函数变换到均值为0,方差为1的分布中,而对于该论文定义A=RS,其中R为旋转矩阵,S为缩放矩阵。后续对于A进行改变即可对椭球实现放缩、旋转、方向等工作。

        另外在实际实现中,旋转矩阵R是使用四元数形式处理。

        协方差的目的就是将椭球的几何特征存储起来。

        下图为对于线性变换A的理解,可以解释为先进行缩放矩阵S(Y轴方向压缩),再进行旋转矩阵R(顺时针旋转)。

A=RS这样设计的原因?

(1)结合旋转和缩放矩阵的嵌套,可以通过协方差矩阵将原来的标准高斯分布推到一个带有任意形状的高斯分布椭球体。

(2)另外这样的表达,可以满足\Sigma仍然是一个对称半正定矩阵,保证特征值均非负,也就可以进行特征值分解。

4、球谐函数

        3DGS使用球谐函数的目的:存储椭球的颜色信息。

        球谐函数可以类比使用多项式或者傅里叶级数去近似拟合一条曲线,球谐函数使用不同阶的基函数(类似球体,化学的元素原子轨道围成的曲面)线性组合,去拟合一个不规则的曲面。

        球谐函数的基函数定义一般是f(\theta,\varphi) 。

        将基函数降维到2维便于理解,而此处是基函数,对于拟合的曲面则需要取多个加权求和。

阶数第几个公式
01r=\sqrt{1/2\pi}
11r=\sqrt{1/\pi}cos\theta
12r=\sqrt{1/\pi}sin\theta
21r=\sqrt{1/\pi}cos2\theta
22r=\sqrt{1/\pi}sin2\theta

 参考:

https://zhuanlan.zhihu.com/p/351289217

https://www.cnblogs.com/GeraltofChina/p/15542446.html

https://zhuanlan.zhihu.com/p/681085846

        对于三维情况,也类似于二维情况,取多个基函数并加权求和,在3DGS中我们取3阶内的16个基函数进行加权求和。

        对于3DGS,我们使用球谐函数分别来计算RGB三个颜色值,即对于不同\theta,\varphi下距离球心的距离r映射为[0,255]的颜色值。所以三通道乘以基函数数量为16*3=48个参数。

         如下图所示。

5、3D高斯椭球集建立

        对于每一个椭球都有下面的参数:分别是椭球中心位置信息(3维),法向量信息(没有用上),颜色信息(48维),不透明度\alpha,缩放矩阵(3维),旋转矩阵(四元数4维)。

6、3D投影2D 

        投影变换如下:  \Sigma'=JW\Sigma W^TJ^T

        其中\Sigma代表三维协方差矩阵,J代表投影变换雅克比矩阵(通过多元函数求导而来),W是视图变换矩阵(这里就是图中使用到Camera相机参数的地方),从世界坐标系到相机坐标系的变换。这一变换目的是将世界坐标系下三维椭球变换到相机坐标系下二维的光栅化平面空间。之后也便于与相机参数进行交互。

        转换后光栅化的平面空间的已进行CUDA加速以及自适应的密度控制(对于前后不透明度对颜色的影响的处理)

7、3D渲染公式

        C=\sum_{i \in N}c_i \alpha_iT_i,其中T_i= \Pi_{j=1}^{i-1}(1-\alpha_j)

        其中\alpha_i指当前点不透明度,T_i代表前i-1个透明度的和,所以值越大前面越透明。此处由于没有NeRF的光线取采样点,所以前i-1个计算一定范围内椭球集的透明度。

四、损失函数

        损失函数由L1范数和D-SSIM指标构成。

        L1损失:计算渲染图像与真实图像的绝对差值。下式两幅图的所有像素点值作差并取平均。

                                           Loss_{L1}=\frac{1}{N}\sum_{i=1}^N |A_i-B_i|

        D-SSIM损失:渲染图像与真实图像之间的结构相似性差异。下式中\mu_x代表图x的均值,\sigma_x^2代表图像x的方差,\sigma_{xy}代表图像x和y的均方差,C_1,C_2是为避免分母为0而引入的小常数。

        其中,D-SSIM值越小,两幅图像之间相似性越高。

                                        Loss_{D-SSIM}=1-\frac{(2\mu_x\mu_y+C_1)(2\sigma_{xy}+C_2)}{(\mu_x^2+\mu_y^2+C_1)(\sigma_x^2+\sigma_y^2+C_2)}

        总损失表示:L=(1-\lambda)L_1+\lambda L_{D-SSIM},一般取λ为0.2

五、基于梯度自适应改变点云的分布方式

        由于我们不能保证初始化的点云建立椭球集一定满足当前所需要拟合的模型,可能存在以下两个问题:

(1)由于离相机距离过近的一些点而造成伪影,这里我们将不透明度低于一定阈值或者距离相机过近的点进行删除,每100次删除一次这种点。

(2)存在上图的欠采样和过重建问题,基于梯度变化来进行判断。

        欠采样(方差过小)就是椭球不足够覆盖整个重建区域,过重建(方差过大)是过度覆盖整个重建区域。

        这里对于欠采样问题,我们克隆一个椭球一模一样的重新加入迭代,对于过重建问题,我们分裂为两个椭球集,将分布等比除以因子1.6之后复制为两个更小集。

        对于如何判断欠采样和过重建?

        监控点云中Gaussian的平均位置梯度幅度是否到达阈值 \tau_{pos}(设置为0.0002)。如果超过该阈值,说明存在"欠重建"或"过重建"的区域,需要进行处理。

六、快速可微光栅化

        快速可微光栅化(Tile-based Rasterizer):目的是渲染不同视角下的图像。

        流程:

(1)将图像分割为16*16的tiles,每个tile视锥内挑选合适的3DGS椭球

(2)每个视锥内只取置信度大于99%的3DGS,并且按照深度排序,其中每个高斯实例化一个key,key由视空间深度和title ID组成。

(3)并行的在每个tile上进行抛雪球,逐个像素进行前向遍历以及累加不透明度和颜色值。

(4)当存在像素不透明度达到饱和则停止线程。

(5)反向传播误差按title进行遍历,计算梯度。

        一个问题就是:对于这个得到2D协方差后进行光栅化得到图像的过程,不太清晰。

参考文献:https://arxiv.org/abs/2308.04079

参考代码:https://github.com/graphdeco-inria/gaussian-splatting

参考视频1:3D Gaussian Splatting原理速通(三)--迭代参数与渲染_哔哩哔哩_bilibili

参考视频2:​​​​​​​【论文讲解】用点云结合3D高斯构建辐射场,成为快速训练、实时渲染的新SOTA!_哔哩哔哩_bilibili

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

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

相关文章

第四天旅游线路预览——从贾登峪到喀纳斯景区入口(贾登峪游客服务中心)

第四天:从贾登峪到喀纳斯风景区入口,晚上住宿贾登峪; 从贾登峪到喀纳斯景区入口(贾登峪游客服务中心): 1)早上8:00起床,吃完早饭,8:30出发&#…

Leetcode 旋转图像

解题思路: 转置矩阵:通过将矩阵的行列互换来实现转置操作。水平翻转矩阵:通过将每行的数据进行对称交换,从而完成90度旋转。 通过这两个步骤,矩阵就会顺时针旋转90度。 class Solution { public:void rotate(vector…

Unity报错:error CS8805: Program using top-level statements must be an executable.

大多数人都不想犯错,但压力大时总是动作变形 大概意思网上查了一下,就是说 C# 的第一(top)行有错误,或者类(类的头部)就没写全 这什么意思呢?又定位不到具体是哪个类 但肯定是刚修改了一点点代…

RocketMQ 基本概念

RocketMQ的由来 随着使⽤中队列和虚拟主题的增加,阿⾥巴巴团队使⽤的 ActiveMQ IO 模块达到了瓶颈。为了尽⼒通过节流、断路器或降级来解决这个问题,但效果不佳。所以开始 关注当时流⾏的消息传递解决⽅案Kafka 。不幸的是, Kafka ⽆法满⾜…

【linux笔记dpkg-buildpackage打包】把一个helloworld程序打包为deb包

说明 打包发布可以不用编译源代码安装&#xff0c;看起来是更方便的软件拷贝方式&#xff0c;下面是一个dpkg-buildpackage工具的最简打包过程实例 先建立一个helloworld程序 main.c #include <stdio.h>int main() {printf("Hello, World!\n");return 0; }…

小程序开关组件

前提是vant组件库不太好改&#xff0c;干脆就手写了一个 <template><view class"switch-container" click"toggleOrder"><view :class"[switch-text, left-text, { left-textChoose: isReverseOrder }]">{{ leftText }}</…

渣土车监控摄像头

渣土车监控摄像头 是一种结合了监控摄像技术和车辆安全管理的先进设备&#xff0c;旨在通过实时监测和录制车辆行驶过程中的画面&#xff0c;提高渣土车的安全性和管理效率。这种摄像头在建筑工地、城市道路、交通执法等领域有着广泛的应用前景。 渣土车监控摄像头在建筑工地运…

在AIoT设备上加速深度神经网络推理的进展:一项综述

这篇论文的标题是《Advancements in Accelerating Deep Neural Network Inference on AIoT Devices: A Survey》&#xff0c;作者是 Long Cheng, Yan Gu, Qingzhi Liu, Lei Yang, Cheng Liu, Ying Wang。论文主要探讨了在人工智能物联网&#xff08;AIoT&#xff09;设备上加速…

多层建筑能源参数化模型和城市冠层模型的区别

多层建筑能源参数化&#xff08;Multi-layer Building Energy Parameterization, BEP&#xff09;模型和城市冠层模型&#xff08;Urban Canopy Model, UCM&#xff09;都是用于模拟城市环境中能量交换和微气候的数值模型&#xff0c;但它们的侧重点和应用场景有所不同。以下是…

重要涉密文件如何防窃取?一分钟了解这5个有效的办法,超实用!

在信息化时代&#xff0c;重要涉密文件承载着企业的核心业务机密、技术专利和敏感客户信息等关键数据。 一旦这些文件被不法分子窃取&#xff0c;不仅会导致无法估量的经济损失&#xff0c;还会严重损害企业的声誉。 因此&#xff0c;构建一个全面的防护体系来防止涉密文件被…

癌症细胞状态的十年探索:单细胞RNA测序的启示

癌症细胞状态的十年探索&#xff1a;单细胞RNA测序的启示 引言 在过去的十年里&#xff0c;单细胞RNA测序&#xff08;scRNA-seq&#xff09;技术彻底改变了我们对复杂生物系统的理解&#xff0c;尤其是在癌症研究领域。癌症作为一种由多种遗传克隆和恶性细胞状态组成的复杂生…

2024年开学季,有哪些大学宿舍必备好物?

随着2024年开学季的到来&#xff0c;新生们即将离开熟悉的家乡&#xff0c;踏入充满未知与挑战的大学生活。对于许多学子而言&#xff0c;宿舍不仅是他们未来几年的居住之所&#xff0c;更是承载青春记忆、实现自我成长的重要空间。为了帮助大家更好地适应校园生活&#xff0c;…

基于Arduino和PCB技术的机器人炫彩矩阵点屏的制作过程

第一部分&#xff1a;引入 随着物联网和嵌入式系统技术的发展&#xff0c;炫彩点阵屏在装饰和信息显示中得到广泛应用。本文将记录如何使用Arduino板、WS2812灯珠和PCB制作技术实现机器人炫彩点阵屏的制作过程。WS2812灯珠以其高亮度、色彩丰富和可编程性&#xff0c;成为制作…

探索代码的守护者:Pyflakes,Python代码的隐形盾牌

文章目录 探索代码的守护者&#xff1a;Pyflakes&#xff0c;Python代码的隐形盾牌第一部分&#xff1a;背景介绍第二部分&#xff1a;Pyflakes是什么&#xff1f;第三部分&#xff1a;如何安装Pyflakes&#xff1f;第四部分&#xff1a;Pyflakes的简单使用方法第五部分&#x…

STM32 移植FATFS时遇到ff_oem2uni函数未定义问题

STM32 移植FATFS时遇到ff_oem2uni/ff_uni2oem/ff_wtoupper函数未定义问题 在移植STM32 FATFS文件系统代码时&#xff0c;完成后编译遇到如下错误&#xff1a; 经过排查分析&#xff0c;是文件没有添加完全导致的&#xff1a; 把ffunicode.c文件添加进工程就可以了&#xff…

CAN数据记录仪与乘用车或者工程车辆OBD口连接注意事项

CAN数据记录仪配置好参数后&#xff0c;车上OBD接口CAN信号线定义是3&#xff0c;11(CANH,CANL)&#xff1b;6&#xff0c;14(CANH,CANL)&#xff0c;直接插到车上可以正常记录数据&#xff1b; 具体分析步骤如下&#xff1a; 1.使用之前了解CANFDLog-VCI设备的接口定义。 下图…

Java Web实战:利用三层架构与Servlet构建登录注册模块

前言导读 三层架构&#xff1a;View&#xff08;视图层&#xff09;Service&#xff08;业务层&#xff09;DAO&#xff08;持久层&#xff09; 使用了JDBCtemplate技术&#xff0c;封装了原生的JDBC技术操作MySQL数据库&#xff08;DAO层&#xff09;实现了登录功能和注册功能…

PyQt5 图标(icon)显示问题

遇到这种情况&#xff0c;一般采用下面几种方法&#xff0c;特别是第三种。 第一种&#xff0c;直接应用绝对路径&#xff1a; self.setWindowIcon(QIcon("F:/Workspace/PyQT5-Study/images/cat.png"))第二种&#xff0c;采用动态路径&#xff1a; from PyQt5.QtC…

轻量级模型解读——轻量transformer系列

先占坑&#xff0c;持续更新 。。。 文章目录 1、DeiT2、ConViT3、Mobile-Former4、MobileViT Transformer是2017谷歌提出的一篇论文&#xff0c;最早应用于NLP领域的机器翻译工作&#xff0c;Transformer解读&#xff0c;但随着2020年DETR和ViT的出现(DETR解读&#xff0c;ViT…

YOLOv9改进策略【卷积层】| SCConv:即插即用,减少冗余计算并提升特征学习

一、本文介绍 本文记录的是利用SCConv优化YOLOv9的目标检测网络模型。深度神经网络中存在大量冗余&#xff0c;不仅在密集模型参数中&#xff0c;而且在特征图的空间和通道维度中。SCConv模块通过联合减少卷积层中空间和通道的冗余&#xff0c;有效地限制了特征冗余&#xff0…