[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.rhkb.cn/news/192610.html

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

相关文章

社区分享|杭银消费金融基于MeterSphere开展接口自动化测试

杭银消费金融有限公司(以下简称“杭银消费金融”)成立于2015年12月,是经中国银保监会批准,由杭州银行作为主发起人,联合滴滴出行、中国银泰等企业组建的持牌消费金融机构,注册资本为25.61亿元。杭银消费金融…

【C语法学习】23 - strlen()函数

文章目录 1 函数原型2 参数3 返回值4 示例4.1 示例1 1 函数原型 strlen():计算指针str所指向的字符串的长度,函数原型如下: size_t strlen(const char *str);2 参数 strlen()函数只有一个参数str: 参数str是指向待计算长度的字…

Web安全:Vulfocus 靶场搭建.(漏洞集成平台)

Web安全:Vulfocus 靶场搭建.(漏洞集成平台) Vulfocus 是一个包含了多种漏洞靶场的镜像。每个靶场都有具体的漏洞环境和攻击点。Vulfocus 的靶场包括了 Web 安全漏洞、系统安全漏洞、网络安全漏洞、密码学漏洞等多种类型。通关这个靶场我们可以…

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks - 翻译学习

知识密集型NLP任务的检索增强生成 - 论文学习 文章目录 Abstract1 Introduction2 Methods2.1 Models2.2 Retriever: DPR2.3 Generator: BART2.4 Training2.5 Decoding 3 Experiments3.1 Open-domain Question Answering3.2 Abstractive Question Answering3.3 Jeopardy Questio…

十方影视后期“领进门”,成长与成就还得靠自身

在这个充满视觉冲击的时代,影视后期制作已经成为了一种炙手可热的艺术形式。而在这个领域,Adobe After Effects(AE)这款软件无疑是王者之一。十方影视后期作为十方教育科技旗下的艺术设计学科,不仅培养了数万名优秀的后…

Windows如何正确设置PHP环境变量以在Git Bash中运行命令

1、随便找一个目录,鼠标右键打开git bash here 2、cd的根目录 3、找到php安装目录 4、 在根目录下打开 vim .bash_profile ,添加环境变量,php地址根据自己的本地地址而定 PATH$PATH:/d/phpstudy_pro/Extensions/php/php7.3.4nts 添加后保存…

算法笔记——递归(1)

这里写目录标题 递归的思想序列求最大值翻转字符串斐波那契数列数塔回文字符串上楼汉诺塔棋盘覆盖问题数字螺旋矩阵盒分形 递归的思想 子问题须与原始问题为同样的事,且更为简单。 不能无限制地调用本身,须有个出口,化简为非递归状况处理 序…

【原创】java+swing+mysql车辆维修管理系统设计与实现

摘要: 车辆维修管理系统是一个用于管理和追踪车辆维修过程的系统,它能够提高效率,减少错误,并提供详细的车辆历史记录,可以帮助车辆维修企业实现信息化管理,提高工作效率和客户满意度,降低运营…

系列八、Mybatis一对多查询,只查询出了一条记录

一、Mybatis一对多查询,只查询出了一条记录 1.1、问题说明 典型的权限管理框架的数据库表中,一般会存在这样3种角色的表,即用户表、角色表、用户角色关联表,表设计好之后,往这三张表中初始化了一些测试数据&#xff0…

在抖音电商,他们帮女性实现了L码自由

“很多(女装)店铺只做到L,甚至L(其实)是M码。”身高1米6、体重60公斤的达人鸭嗓明明120斤 在抖音上吐槽道,“尤其是夏天的连衣裙,胸围很多不超过85厘米,那它的意思就是你可以胖&…

Elasticsearch docker-compose 使用 Logstash 从 JSON 文件中预加载数据

在我们创建 Elasticsearch 进行开发时,最简单的办法就是在本地使用 docker-compose 来一键部署一个 Elasticsearch 集群。有时,特别是在准备测试环境时,开发人员希望从一开始就创建包含一些测试数据的数据库容器。我们可以使用 Logstash 来很…

3分钟带你了解前端缓存-HTTP缓存

前情提要 前端缓存分为下面三大类,本文主要讲解HTTP缓存~ 1. HTTP缓存 强缓存协商缓存 2. 浏览器缓存 本地小容量缓存本地大容量缓存 3. 应用程序缓存 HTML5应用程序缓存 缓存作用 减少了冗余的数据传输减少服务器的负担提高了网站的性能加快加载网页速度 …

IDEA 2023搭建 SpringMVC +FreeMarker+JDBC

1.IDEA的版本,目前最新是2023,要选择旗舰版。笔者曾选择社区版,发现少了很多功能。只能重新安装。 2.安装好以后的第1件事,是设置Maven,并将下载地址改为淘定站,参照这篇一次包会——最新IDEA配置Maven指南…

嵌入式LINUX——环境搭建 windows、虚拟机、开发板 互ping

摘要: 本文包含,如何设置linux开发板和虚拟机、windows 互ping成功 以及设置过程中出现的虚拟机、开发板查询不到eth0 windows ping开发板出项丢包等问题的解决方式。 windows端设置 windows端插入USB转网卡 打开windows桌面下右下角的网络标识 打…

51单片机+DS1302设计一个电子钟(LCD1602显示时间)

一、前言 电子钟是一种能够准确显示时间的设备,广泛应用于家庭、办公场所和公共场所,为人们提供了方便和准确的时间信息。本项目设计一个基于51单片机的电子钟,使用DS1302作为RTC时钟芯片,LCD1602作为显示屏,并通过串…

uniapp开发ios上线(在win环境下使用三方)

苹果 1、win环境下无法使用苹果os编译器所以使用第三方上传工具,以下示例为 初雪云 (单次收费,一元一次) 初雪云(注册p12证书):https://www.chuxueyun.com/#/pages/AppleCertificate 苹果开发者…

Postman常见报错与解决方法,持续更新~

postman中文文档 基本操作:从控制台查看请求报错 如果 Postman 无法发送你的请求,或者如果它没有收到你发送请求的 API 的响应,你将收到一条错误消息。此消息将包含问题概述和指向控制台的链接,你可以在其中访问有关请求的详细信…

Visual Studio Code安装和设置中文

文章目录 Visual Studio Code安装Visual Studio Code设置中文 步骤如下: Visual Studio Code安装 1.下载安装包 VS Code的官网 下载链接中的“az764295.vo.msecnd.net” 替换为国内镜像地址“vscode.cdn.azure.cn”,下载速度直接飙升至几十 Mb/s。(在官网下载速度…

【OpenCV(3)】linux arm aarch 是 opencv 交叉编译与使用

文章目录 1、直接找github 别人编译好的2、自主编译参考 3使用CMake检查 参考 1、直接找github 别人编译好的 测试很多,找到一个可用的。 https://github.com/dog-qiuqiu/libopencv 它用了超级模块! OpenCV的world模块也称为超级模块(supe…

NovelD: A Simple yet Effective Exploration Criterion论文笔记

NovelD:一种简单而有效的探索准则 1、Motivation 针对稀疏奖励环境下的智能体探索问题,许多工作中采用各种内在奖励(Intrinsic Reward)设计来指导困难探索环境中的探索 ,例如: ICM:基于前向动力学模型的好奇心驱动探索RND&…