[SIGGRAPH2023-best]3D Gaussian Splatting for Real-Time Radiance Field Rendering

标题:3D Gaussian Splatting for Real-Time Radiance Field Rendering

链接:https://arxiv.org/pdf/2308.04079.pdf

本文提出了一种基于3D高斯体进行场景重建的方案,并提供了高效的渲染器实现。其重建精度,训练速度和推理速度均超越之前的SOTA方案。整体的思路就是先使用传统方案(COLMAP)将多视角图像对齐,并提取稀疏点云。然后以这些点为基础构建高斯体,在训练中动态的增减高斯体的数量和半径。之后对高斯体进行渲染,获得最终的重建结果。

模型结构

预处理

最左边的SfM Points就是用COLMAP从多视角图像中获得的初始点云。

初始化

初始点云的点的位置x就是高斯体的中心点\mu,然后每个高斯体分配一个协方差矩阵\Sigma,和\alpha值。其中\mu控制高斯体的移动,\Sigma控制高斯体在各个方向上的长短,\alpha控制高斯体在渲染时的不透明度。

这里多一嘴,下文中有说,初始的\Sigma是设置为每个方向上方差一样,且其值等于与最近三个点的平均距离。即一个球形。

投影

这里讲的就是如何将3D高斯体投影到2D平面上去,因为最终成像肯定是2D的图片嘛。那这里就涉及到了相机的投影矩阵W,和高斯体在当前方向上投影时发生的的仿射变换J。通过公式\Sigma' = J W \Sigma W^T J^T获得高斯体在2D平面上的投影的协方差矩阵\Sigma'

但是这里有一个问题,就是协方差矩阵必须是半正定的,否则没有意义(比如方差如果是负数,那是没有意义的),但我们在模型训练时,无法保证其一直都是半正定的。因此作者将协方差矩阵分解为一个旋转矩阵R和一个缩放矩阵S来表示(想象成空间中的一个椭圆),即\Sigma = RSS^T R^T。这样,通过约束RS就可以很轻易的保证\Sigma是半正定得了。然后,作者进一步将旋转矩阵R转换成四元数q以便于后续梯度下降的优化。

优化

之前已经讲了,对于一个高斯体,我们要优化的参数有\mu(位置),\alpha(不透明度)和\Sigma(旋转+缩放)。除此以外,作者还增加了一组新的优化参数,用于控制颜色的,即球谐函数系数(SH coefficient),简单来说就是用一个球面来模拟光照情况。这个比单纯的朗伯反射要好很多。

从结构图中也可以看出,模型结构很简单,因此文中只使用了基于rgb的损失,包括一个L1项和一个D-SSIM项。

高斯体的动态优化:本文的一大亮点就是如何在训练过程中动态优化这些高斯体,也即什么时候需要增加新的高斯体,增加什么样的高斯体,又或者什么时候删除高斯体。

何时删除高斯体?:这个其实比较简单,就是当一个高斯体的\alpha即不透明度过于低时,就删除,因为透明的高斯体根本不会有任何贡献。这里会人工设定一个阈值\epsilon_{\alpha}

何时增加高斯体?:直观上来讲,我们肯定是希望在高斯体密度比较稀疏的地方增加新的高斯体,这样能帮助场景拟合更多细节。因此就分为两种情况:1.局部的高斯体过小且少,有很多地方cover不到。2.局部的高斯体过大,很多地方都被同一个高斯体cover了。并且作者发现,在这两种情况下,坐标接收到的回传导数都很大,作者认为这是因为高斯体也想要努力去重建这一部分的细节。因此作者就将所有回传梯度平均值大于\tau_{\text{pos}}的高斯体设为需要增加高斯体的备选。

增加什么样的高斯体?:按照上文说的,情况分为两种:高斯体太小且少和高斯体太大。对于太小且小的情况,作者选择复制当前的高斯体,并将其放置到梯度方向上去。对于太大的高斯体,作者则删除原有高斯体,并根据原有高斯体的分布重新采样出新的小高斯体,比原来的要小1.6倍(实验出来的结果)。

特殊情况?:当某些高斯体过于接近相机时,在视图中就会变大,此时会错误的被分裂成新的高斯体。作者的方案就是每隔一定时间就将所有高斯体的\alpha都变得特别小,这样的话,那些没用的高斯体的\alpha增长的就会很慢,也就会低于阈值\epsilon_{\alpha},从而被删掉了。

渲染

在进行点云类数据的重建时,一个比较大的问题就是怎么渲染。通常来说,点云的渲染是在渲染时对每个像素确定一个采样半径,对半径内的点做加权平均来获得当前像素的颜色。而本文中除了点以外,还有一个高斯体的分布,每个点的影响范围都是不一样的。因此,对于这种情况必然需要一套新的渲染方案。并且我们当然希望这个方案的是高效以及可微的。

首先,作者将一个图像分裂成16*16个小块,每个小块独立进行渲染。首先先获取所有与当前小块相交度超过99%的高斯体(置信度区间),然后对这些高斯体按照其中心与相机的距离(深度)进行排序。后续在做渲染时,就直接使用这个排序的结果进行渲染,而不再基于每个像素单独排序。(需要说明的是,基于这个排序结果进行渲染的话,那结果并不是绝对准确的,其精确度必然比不过体渲染,但是这样主要的好处是速度快,而且当后期每个高斯体大小都近似于一个像素的大小时,其结果和体渲染的结果也就差不多了。)

在渲染时,当累积\alpha值足够大时,就不再继续往后渲染了,因此每次渲染并不是都要遍历所有的高斯体,从而进一步增加了效率。

此外,在计算方向传播的梯度时,也可以利用这里的排序结果,并且在每个像素上只计算那些对当前像素的\alpha值有贡献的高斯体计算梯度。

结语

至此,本文的方法部分就讲完了,剩余的实验结果看原论文即可。最近正在研究这一块,有感兴趣的同学欢迎留言和我交流,或者加微信讨论:wrk226。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矩阵置零00

题目链接 矩阵置零 题目描述 注意点 使用 原地 算法 解答思路 思路是需要存储每一行以及每一列是否有0,因为要尽可能使用更少的空间,且新设置为0的格子不能对后续的判断产生影响,所以要在原有矩阵上存储该信息先用两个参数存储第一行和第…

Umi-OCR :一个完全离线的OCR图片转文字识别软件。

Umi-OCR :一个完全离线的OCR图片转文字识别软件。 开源免费,支持截屏或批量导入图片,并能识别多国语言,合并段落,处理竖排文字。 排除图片中的水印区域,提取干净的文本。 忽略特定区域的文字识别&#x…

功率放大器在生物医疗测试领域研究中的应用

生物医学相关测试,就是运用生物学及工程技术手段来研究和解决生命科学,特别是医学中的有关问题,是关系到提高医疗诊断水平和人类自身健康的重要工程领域。功率放大器作为生物医学领域相关实验平台的重要组成部分,在生物医学领域研…

antd中的form表单数据不更新

antd中的form表单 initialValue导致数据不更新问题 理解 : initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变,却又有一些不同,因为 initialValue又会因其他改动而改变。 解决: form.resetFields();

【FPGA】zynq 单端口RAM 双端口RAM 读写冲突 写写冲突

RAMRAM读写分类RAM原理及实现RAM三种读写模式不变模式写优先读优先 单端口 RAM伪双端口 RAM真双端口 RAM读写冲突和写写冲突读写冲突写写冲突总结: RAM RAM 的英文全称是 Random Access Memory,即随机存取存储器,简称随机存储器,…

记一次线上问题引发的对 Mysql 锁机制分析 | 京东物流技术团队

背景 最近双十一开门红期间组内出现了一次因 Mysql 死锁导致的线上问题,当时从监控可以看到数据库活跃连接数飙升,导致应用层数据库连接池被打满,后续所有请求都因获取不到连接而失败 整体业务代码精简逻辑如下: Transaction p…

阶段七-Day02-SpringMVC

一、Restful请求格式 1. 介绍 Rest(Representational State Transfer:表现层状态转移)是一种软件架构风格,其核心是面向资源的一种设计。何为面向资源,意思是网络上的所有事物都可以抽象为资源,而每个资源都有唯一的资源标识&…

【WIFI】MTK WiFi降sar如何开发

1.Sar 简介 SAR即英语“Specific Absorption Rate”的缩写。SAR值一般指手机产品中电磁波所产生的热能,它是对人体产生影响的衡量数据,单位是W/Kg(瓦/公斤)。 对于测量手机产品的“SAR”,通俗地讲,就是测量手机辐射对人体的影响是否符合标准。国际通用的标准为:以6分钟…

【ARM入门】ARM、SOC、ARM授权 概念篇

什么是ARM ARM前身是Acorn公司设计的第一款微处理器,叫ARM:Acorn RISC Machine ARM公司的名字叫ARM:Advanced RISC Machines ARM内核 包括了寄存器组、指令集、总线、存储器映射规则、中断逻辑和调试组件等 内核是有ARM公司设计并以销售方…

pyCharm新建项目

1.新建界面点击Create New Project。 或点击File->New Project... 2.选择Pure Python后,如图选择路径。 Location的地址一致,点击Create。 3.等待新建成功后,在新建的项目名字右击,如下图可以选择新建文件夹、python包和python…

数据结构笔记:R树

R-trees: a dynamic index structure for spatial searching 1984 1 介绍 R树可以看作B树再高维空间的扩展。它很好的解决了在高维空间搜索等问题。 采用了B树分割空间的思想,并在添加、删除操作时采用合并、分解结点的方法,保证树的平衡性R树就是一棵…

岗前酒精检测仪

岗前酒精检测仪:集“酒精检测智能测温人脸考勤”三合一智能检测仪。 酒精检测功能:采用电化学传感器检测检测酒精浓度,具有吹气中断及吹气流量侦测,吹气防欺骗设计,吹气温度及吸气侦测;响应时间≤20毫秒&am…