[SIGGRAPH-23] 3D Gaussian Splatting for Real-Time Radiance Field Rendering

pdf | proj | code

  • 本文提出一种新的3D数据表达形式3D Gaussians。每个Gaussian由以下参数组成:中心点位置、协方差矩阵、可见性、颜色。通过世界坐标系到相机坐标系,再到图像坐标系的仿射关系,可将3D Gaussian映射到相机坐标系,通过对z轴积分,可得到对应Splatting 2D分布。
  • 针对3D Gaussians,提出对应的优化方法。去除可见性太低的高斯,对回传梯度较大的高斯,通过复制,克隆等操作,增强表达能力。
  • 针对3D Gaussians,提出对应的光栅化方法。将图像切分为16 x 16的块,每个块内对高斯根据深度进行排序。光栅时,从前向后遍历,当可见性累加到某个阈值即停止。梯度回传时从停止块开始,有后向前遍历。

目录

摘要

引言

近期工作

Traditional Scene Reconstruction and Rendering

Neural Rendering and Radiance Fields

Point-Based Rendering and Radiance Fields

Overview

Differentiable 3D Gaussian Splatting

Optimization with Adaptive Density Control of 3D Gaussians

Fast Differentiable Rasterizer for Gaussians

Implementation, Results and Evaluation

Implementation

Results and Evaluation

Real-World Scenes

Synthetic Bounded Scenes

Ablations

Initialization from SfM

Densification

Unlimited depth complexity of splats with gradients

Anisotropic Covariance 

Limitations


摘要

  • NeRF效果好,但是训练和渲染很花时间;特别是对1080p分辨率渲染的场景,现有方法无法实现实时渲染。
  • 本文引入三个关键部分,实现sota视觉质量、较短训练时间和1080p分辨率下新视角实时渲染。
    • 3D Gaussians。通过camera calibration中产生的稀疏点进行初始化。这种新的3D表达形式在保存NeRF优点的同时,避免了空白空间不必要的计算开销;
    • Optimization。实现3D Gaussian的交替优化和密度控制,优化各向异性协方差矩阵实现对场景的准确表达;
    • Rendering。实现快速可见感知渲染算法(fast visibility-aware rendering algorithm),支持各向异性飞溅(anisotropic splatting),同时加速训练和渲染。
  • 本文在多个数据集上,实现sota视觉质量和实时渲染。

引言

  • Mesh和点云是最常用的3D场景表达,这种显式表达非常适合快速GPU/CUDA-based rasterization。另一方面,NeRF可建立连续的场景表达,用volumetric ray-marching优化MLP,实现新视角生成。基于NeRF的高效算法,通常会引入一些新的表达形式,用插值的方式实现连续表达,例如:体素(voxel),hash grids,或点云。这些方法效果不错,但是渲染中要求的随机采样计算开销大、并且会导致噪声。本文提出的方法:3D Gaussian可以实现sota的视觉质量和具有竞争力的训练时间;tile-based splatting solution可以实现1080p的实时渲染。
  • 本文所提方法由三个主要部分组成。
    • 3D Gaussians:通过Structure-from-Motion (SfM) 相机标定得到的稀疏点云初始化,对于NeRF-synthetic dataset,本文方法在随机初始化情况下,也可取得较好的结果。3D Gaussian的优点在于(a)可导的体表示;(b)通过映射至2D,实现高效栅格化;(c)可以实施标准的alpha-blending;
    • 优化:提出一种优化3D Gaussians参数的方法,参数包括:3D position,opacity alpha,anisotropic covariance和球谐系数(spherical harmonic coefficients)。优化方法:交替执行密度控制步,在优化过程中增加或去除3D Gaussians。
    • 渲染:提出一种快速GPU排序算法,受tile-based rasterization方法启发。实现各向异性纹理飞溅(anisotropic splatting),一种可见性排序(visibility ordering)。受益于排序和alpha-blending,可以实现快速和准确的反向传播。

近期工作

Traditional Scene Reconstruction and Rendering

  • light fields (1996) -> Structure-from-Motion (SfM,2006) -> multi-view stereo (MVS,2007)
  • MVS-based方法会重投影(re-project)并融合(blend)输入图片到新相机视角,使用几何引导重投影。 

Neural Rendering and Radiance Fields

  • Soft3D (2017,首次提出Volumetric representations) -> 将深度学习技术应用到volumetric ray-marching(2019)-> NeRF (2020,提出importance sampling和postional encoding,但是较大MLP影响了速度) -> MipNeRF360(2022,sota视觉效果,但训练和渲染时间太长)
  • 为了加速训练或渲染,现有的探索集中在三个方向:稀疏数据结构存储特征,不同的编码器和MLP容量。其中,值得一提的方法是InstantNGP(2022),该方法使用hash grid和occupancy grid来加速计算,用一个较小的MLP表示密度和外观。Plenoxels(2022),使用稀疏体素网格,插值表示连续密度场,并且能够不使用MLP。
  • 尽管上述方法产生了很好的结果,这些方法仍然不能高效表示空白区域。

Point-Based Rendering and Radiance Fields

\alpha-blending和体渲染(volumetric rendering)本质上是相同的成像模型。对于体渲染方法:

其中\sigma是密度,T是透光率,c是颜色,\delta是相邻采样点的间隙。\sigma_i\delta_i密度越大,\alpha_i越接近1,该点越重要;之前点的密度和越大,T越大,该点越不重要。上式可以被重新组织为:

alpha-blending可以表示为:

其中,所有点根据前后关系排序,c_i是该点颜色,\alpha_i是该点所在2D高斯的概率密度乘以该点的不透明性(opacity)。

相较于之前的\alpha-blending栅格化方法,本文提出可见性(visibility)排序。另外,本文反向传播梯度到像素点中的所有splats,栅格化所有各向异性splats。

Overview

  • Initialization:给定静态场景的一组图片,和对应经过SfM校准的相机参数,以及SfM在校准过程中产生的稀疏点云;
  • 3D Gaussians:给定稀疏点云,初始化3D Gaussians,每个3D Gaussian由位置mean,协方差矩阵和不透明性\alpha决定;辐射场中指向性外观部分(颜色),通过spherical harmonics (SH) 表征;
  • Optimization:逐步优化3D Gaussians的参数:位置、协方差矩阵、\alpha和SH系数;
  • Rendering:tile-based rasterizer,支持根据可见性顺序的各向异性splats的\alpha-blending

Differentiable 3D Gaussian Splatting

在世界坐标系下,3D Gaussians由三个系数定义:均值\mu,3D协方差矩阵\Sigma\alpha

将世界坐标系下的3D Gaussians转换到相机坐标下:

其中,W是世界坐标系坐标到相机坐标系坐标的转换矩阵,J是透视变换的Jacobian矩阵。

参考:EWA Volume Splatting

  • View transformation:将世界坐标系下坐标转换到相机坐标系。假设t = (t_0, t_1, t_2)^T是世界坐标系下坐标,u = (u_0, u_1, u_2)^T是相机坐标系下坐标,则有仿射变换u = Wt + d,可得\Sigma =W{\Sigma}''W
  • Projective Transformation(透视变换):将相机坐标系下坐标转换到图像空间,该转换不是仿射变换。假设x=(x_0, x_1, x_2)是图像空间下坐标,则有x = m(u) = (u_0/u_2, u_1/u_2, \left \| (u_0, u_1, u_2)^T \right \|)^T。由于该变换不是放射变换,因此考虑:m(u_k)=x_k+J_{u_k}(u-u_k) = J_{u_k}u + (x_k - J_{u_k} u_k),得到局部放射近似,其中x_k=m(u_k),J_{u_k}=\frac{\partial m}{\partial u}(u_k)。最终可得\Sigma = JW{\Sigma}''W^TJ^T

协方差矩阵具有物理含义,需要满足半正定条件。考虑协方差矩阵描述了一个标准球体向椭球体的变化过程,对标准球体先放缩S,再旋转R

因此,缩放可以用三维向量描述,也即协方差矩阵的三个特征值。旋转其实是三个特征向量,它们两两正交且模为1,通过分析可由四维向量描述。

综上,一个3D Gaussian可由三个缩放系数、四个旋转系数、中心点位置p和不透明率\alpha表示。除了上述提到的参数外,本文还用SH系数表示颜色。

Optimization with Adaptive Density Control of 3D Gaussians

  • 不透明率\alpha通过sigmoid激活函数映射至0到1之间。
  • 损失函数如下:

Gaussian的优化过程中,本文考虑以下两种情况:

  • \alpha异常:移除\alpha小于阈值\epsilon_\alpha的高斯。
  • 梯度异常:梯度超过阈值\tau_{pos} = 0.0002时,本文认为梯度异常,考虑存在under-reconstruction或over-reconstruction:
    • under-reconstruction:Gaussians太小了,不能覆盖必要几何。本文考虑复制相同大小的Gaussian,新Gaussian放至位置梯度所指方向;
    • over-reconstruction:对于方差太大的Gaussians,本文将其拆分为两个Gaussians,两个都缩放\phi=1.6,新Gaussian的位置通过在旧Gaussian中采样决定。
  • 特殊情况:
    • 漂浮物(floaters)会导致Gaussian密度的异常增加。本文提出,每N=3000 iter,将所有\alpha设置为近似为0的值。在优化后,对于\alpha没有增大的Gaussian,则根据前述规则去除掉。
    • 对于具有非常大worldspace和相机坐标中具有较大footprint的Gaussian也会去除掉。

Fast Differentiable Rasterizer for Gaussians

提出一种tile-based rasterizer

  • 光栅化:
    • 将屏幕划分为16 x 16块,一次性预排序所有primitives,避免针对每个像素排序的开销
    • 仅保留有99%置信度的Gaussians
    • 用保护带(guard band)拒绝极端位置的高斯,例如:距离平面太近,或在视锥体之外太远的高斯;
    • 实例化高斯,并赋予每个高斯一个键值,包括视觉空间深度和块ID
    • 根据键值排序高斯。对于每个块,得到一个根据深度由近到深排序的列表
    • 在光栅化过程中,每个块使用一个线程去处理,每个线程首先将Gaussians加载到shared memory。对于给定像素点,从前往后遍历列表,根据\alpha加权求和颜色。当\alpha达到目标饱和值时,该进程停止,得到该像素点的颜色。
  • 梯度回传:从最后一个点,从后往前遍历列表,选择对应的Gaussian反传梯度。

Implementation, Results and Evaluation

Implementation

Pytorch + 用于光栅化的custom CUDA kernels

Results and Evaluation

Real-World Scenes

Synthetic Bounded Scenes

  • 30K迭代后,每个场景由200-500K Gaussians组成

Ablations

Initialization from SfM

Densification

Unlimited depth complexity of splats with gradients

Anisotropic Covariance 

Limitations

  • 对于缺乏训练数据的场景,存在失真,Mip-NeRF360也存在:

  • 存在拉长失真(elongated artifacts),比较脏的高斯(splotchy Gaussians),Mip-NeRF360也有

  • 相较于NeRF-based方法,内存开销大,需要20GB GPU memory

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

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

相关文章

c语言:用迭代法解决递归问题

题目&#xff1a; 解释&#xff1a;题目的意思就是用迭代法的空间和时间复杂的太高了&#xff0c;需要我们减小空间与时间的复杂度&#xff0c;我就想到了迭代法&#xff0c;思路和代码如下&#xff1a; #include <stdio.h> //这里是递归法转迭代法 int main() {int x,i…

Rust语言特性探秘:宏的魔力

大家好&#xff01;我是lincyang。 今天我们继续深入探讨Rust语言中的一个有趣而强大的特性——宏&#xff08;Macros&#xff09;。 宏在Rust中扮演着特殊的角色&#xff0c;不仅提高了代码的灵活性&#xff0c;还增强了代码的可重用性。接下来&#xff0c;我们会通过具体的…

[ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …

Redis-Redis缓存高可用集群

1、Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可…

深信服技术认证“SCSA-S”划重点:信息收集

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师…

OpenCvSharp从入门到实践-(02)图像处理的基本操作

目录 图像处理的基础操作 1、读取图像 1.1、读取当前目录下的图像 2、显示图像 2.1、Cv2.ImShow 用于显示图像。 2.2、Cv2.WaitKey方法用于等待用户按下键盘上按键的时间。 2.3、Cv2.DestroyAllWindows方法用于销毁所有正在显示图像的窗口。 2.4实例1-显示图像 2.4实例…

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.多特…

校园圈子论坛,交友,帖子内短视频,二手市场,APP小程序H5三端交付,源码交付,支持二开

校园圈子论坛&#xff0c;交友频道&#xff0c;商城&#xff0c;二手市场&#xff0c;活动专区&#xff0c;短视频&#xff0c;从校园生活的方方面面展现出了充满活力和创造力的镜头。这个频道是一个让学生们相互交流、结识新朋友的平台&#xff0c;不仅有交友功能&#xff0c;…

【done+重点】剑指Offer56-I:找出数组中2个只出现1次的整数

力扣&#xff0c;https://leetcode.cn/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/description/ 题目&#xff1a;一个整型数组nums里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间…

启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析

原创/朱季谦 遇到一个很诡异的问题&#xff0c;我在启动多个配置相同zookeeper的Dubbo项目时&#xff0c;其他项目都是正常启动&#xff0c;唯独有一个项目在启动过程中&#xff0c;Dubbo注册zookeeper协议时&#xff0c;竟然出现了这样的异常提示—— Caused by: java.lang.…

OpenAI再次与Sam Altman谈判;ChatGPT Voice正式上线

11月22日&#xff0c;金融时报消息&#xff0c;OpenAI迫于超过700名员工联名信的压力&#xff0c;再次启动了与Sam Altman的谈判&#xff0c;希望他回归董事会。 在Sam确定加入微软后&#xff0c;OpenAI超700名员工签署了一封联名信&#xff0c;要求Sam和Greg Brockman&#x…

【尚硅谷】第06章:随堂复习与企业真题(面向对象-基础)

第06章&#xff1a;随堂复习与企业真题&#xff08;面向对象-基础&#xff09; 一、随堂复习 1. &#xff08;了解&#xff09;面向过程 vs 面向对象 不管是面向过程、面向对象&#xff0c;都是程序设计的思路。面向过程&#xff1a;以函数为基本单位&#xff0c;适合解决简单…

解决ElementUI时间选择器回显出现Wed..2013..中国标准时间.

使用饿了么组件 时间日期选择框回显到页面为啥是这样的&#xff1f; 为什么再时间框中选择日期&#xff0c;回显页面出现了这种英文格式呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; 其实这个问题直接使用elementui的内置属性就能解决 DateTimePicker 日期时间选择…

程序员指南六:数据平面开发套件

PORT HOTPLUG FRAMEWORK 端口热插拔框架为DPDK应用程序提供在运行时附加和分离端口的能力。由于该框架依赖于PMD实现&#xff0c;PMD无法处理的端口超出了该框架的范围。此外&#xff0c;在从DPDK应用程序分离端口后&#xff0c;该框架不提供从系统中移除设备的方法。对于由物…

opencv-图像梯度

目标 • 图像梯度&#xff0c;图像边界等 • 使用到的函数有&#xff1a;cv2.Sobel()&#xff0c;cv2.Schar()&#xff0c;cv2.Laplacian() 等 原理 梯度简单来说就是求导。 OpenCV 提供了三种不同的梯度滤波器&#xff0c;或者说高通滤波器&#xff1a;Sobel&#xff0c;Schar…

万界星空科技QMS质量管理系统介绍

QMS&#xff08;Quality Management System&#xff09;质量管理系统是五大基础系统之一&#xff0c;在工业企业中被广泛的应用&#xff0c;在质量策划、生产过程质量监督、体系审核和文档管理等业务上发挥着不可替代的作用。 一般制造业工厂现状&#xff1a;质量成本高&#x…

基于SSM的课程资源管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

聚类系列(一)——什么是聚类?

目前在做聚类方面的科研工作, 看了很多相关的论文, 也做了一些工作, 于是想出个聚类系列记录一下, 主要包括聚类的概念和相关定义、现有常用聚类算法、聚类相似性度量指标、聚类评价指标、 聚类的应用场景以及共享一些聚类的开源代码 下面正式进入该系列的第一个部分&#xff…

【MybatisPlus】简介与使用

MyBatisPlus 1.简介 MyBatisPlus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生 官网&#xff1a;https://baomidou.com/ MyBatis-Plus特性&#xff1a; 无侵入&#xff1a;只…

C#学习相关系列之Linq用法---group和join相关用法(三)

一、Group用法 在C#的LINQ中&#xff0c;Grou将集合中的元素按照指定的键进行分组。Group方法返回一个IEnumerable<IGrouping<TKey, TElement>>类型的集合&#xff0c;其中TKey表示分组的键类型&#xff0c;TElement表示集合中元素的类型。每个IGrouping<TKey, …