惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
C
Cyber Attacks, Cyber Crime and Cyber Security
S
Secure Thoughts
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
D
Docker
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
TaoSecurity Blog
TaoSecurity Blog
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
Cyberwarzone
Cyberwarzone
V
V2EX
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
WordPress大学
WordPress大学
P
Palo Alto Networks Blog
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
Engineering at Meta
Engineering at Meta
S
Schneier on Security
Google DeepMind News
Google DeepMind News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
P
Proofpoint News Feed
S
SegmentFault 最新的问题
Hacker News: Ask HN
Hacker News: Ask HN
小众软件
小众软件
博客园 - 聂微东
S
Security Affairs
T
Tor Project blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Threat Research - Cisco Blogs
T
Threatpost
博客园 - 【当耐特】
L
LINUX DO - 热门话题
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
A
About on SuperTechFans
F
Fortinet All Blogs

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录 2025 Python 版本性能测试 Flutter Hello World Flutter 安装环境配置 Ubuntu VMware 硬盘扩容后 SMBus Host controller not enabled 报错问题解决 Python NetworkX 教程 Docker GPU 报错 - Failed to initialize NVML Unknown Error 解决方案 Python matplotlib 图表绘制 cuda-toolkit 安装替代 Cuda 与 Cudnn Jinja2 Python 利用 docxtpl 和 Jinja2 生成基于模板的 Word 文档 Docker 实现 CPU 核心隔离 LoFTR 基于 Transformer 的特征提取匹配算法 OmniGlue 特征匹配 SuperGlue 使用图神经网络学习特征匹配 Ubuntu 下将 xlsx 文件按照 sheet 转换为 图片 Python 使用 SQLAlchemy Python FastAPI 教程 openwrt 软路由配置安装 Nav2 地图文件(PGM/YAML)规范标准 3D OBJ 模型转换为 glb 瓦片格式 Python 源码 Redis 数据库介绍 Ubuntu 22.04 内核自动升级导致 MongoDB 7.0.12 错误记录 ubuntu 20.04 安装 ROS Noetic ubuntu 18.04 安装 ROS Melodic VMware Workstation Pro 个人免费版下载、安装、使用指南 Hybrid A-star 路径规划 Reeds-Shepp 曲线 Dubins 曲线 Linux kvm 虚拟机网络不通的问题解决方法 Ubuntu 自动内存清理 BiliBili 缓存视频转 mp4 Python 求解线性规划 3D Gaussian Splatting 官方源码实践记录 ImageMagick 教程 Ubuntu 22.04 安装 Colmap 对数几率 odds Ubuntu nmcli 网络管理工具使用指南 SuperPoint 自监督深度学习特征点提取 SyncTV Music Tag Web 在线音乐信息整理工具 ncm 格式转 mp3 MusicBrainz 音乐元数据百科数据库 Ubuntu 网络流量监控工具 私人云音乐平台 Navidrome 入门 手眼标定 四元数(Quaternions) OHTTPS 实现免费自动 https 证书申请、更新、部署 ubuntu 22.04 安装 CloudCompare 单机 KVM 虚拟机冷迁移 Ubuntu 22.04 使用 mdadm 实现软 raid 小鱼 一键安装 ROS-humble Fluid -46- 基于 Simpletex API 构建公式识别页面 公式识别 API 简介 -- Simpletex 使用 Python web 部署库 waitress Ubuntu Swap 简介与空间扩展 Ubuntu 24.04 安装 forticlient Clash Verge 使用 MongoDB 7.0.17 集群 Docker 构建源码 Error code - 2013. Lost connection to MySQL server during query 问题解决 Python 日志记录库 loguru 使用指北 Python 实现 Web 日志查看服务 MySQL LOAD DATA LOCAL INFILE 极速数据加载 Image size exceeds limit of 89478485 pixels 解决方案 Docker 使用 NVIDIA GPU 驱动错误解决 阿里云 docker 镜像仓库 Ubuntu中没有wired connected的解决方案 MinIO 简介 subconverter 代理订阅格式转换 修复 node –openssl-legacy-provider is not allowed in NODE_OPTIONS 错误 Ubuntu 使用 Clash For Linux 客户端
3D Gaussian Splatting for Real-Time Radiance Field Rendering
Yiwei Zhang · 2025-04-21 · via 又见苍岚

《3D Gaussian Splatting for Real-Time Radiance Field Rendering》论文学习。

ABSTRACT 摘要

最近,体素辐射场方法彻底改变了利用多张照片或视频拍摄的场景进行新视角合成的方式。然而,要实现高质量的视觉效果,仍然需要神经网络,而神经网络的训练和渲染成本非常高。对于无边界的完整场景(而不是孤立的物体)和 1080p 分辨率的渲染,目前还没有方法能够实现实时显示。为了解决这些问题,我们引入了三个关键要素,使我们能够在保持有竞争力的训练时间的同时实现最先进的视觉质量。更重要的是,我们能够在 1080p 分辨率下实现高质量的实时(≥ 30 fps)新视图合成。首先,我们从相机标定过程中产生的稀疏点开始,用三维高斯来表示场景,这不仅保留了用于场景优化的理想体素辐射场的连续适当关系,还避免了在空白空间进行不必要的计算。其次,我们对三维高斯进行了交错优化/密度控制,特别是优化各向异性协方差,以实现对场景的精确表示。第三,我们开发了一种快速可见性感知渲染算法,该算法支持各向异性拼接,既能加速训练,又能实现实时渲染。我们在几个已建立的数据集上展示了最先进的视觉质量和实时渲染效果。

其他关键字:新视图合成、辐射场、3D 高斯、实时渲染

INTRODUCTION 简介

网格和点是最常见的三维场景表示法,因为它们是显式的,非常适合基于 GPU/CUDA 的快速光栅化。相比之下,最新的神经辐照场(NeRF)方法建立在连续场景表示法的基础上,通常是利用体积式的光线行进优化多层感知机(MLP),对捕捉到的场景进行新视角合成。同样,迄今为止最有效的辐射场解决方案也是建立在连续表征的基础上,对存储在体素 [Fridovich-Keil 和 Yu 等人,2022 年] 或哈希 [Müller 等人,2022 年] 网格或点 [Xu 等人,2022 年] 中的值进行插值。虽然这些方法的连续性有助于优化,但渲染所需的随机取样成本很高,而且会产生噪声。我们引入了一种新方法,将这两种方法的优点结合在一起:我们的三维高斯表示法允许以最先进(SOTA)的视觉质量和有竞争力的训练时间进行优化,而我们基于瓦片的拼接解决方案可确保在 1080p 分辨率下以 SOTA 质量对之前发布的几个数据集进行实时渲染。

我们的目标是对使用多张照片捕捉的场景进行实时渲染,并在典型真实场景中以比以往最有效方法快的优化速度创建表示。最新方法可实现快速训练但难以达到当前 SOTA NeRF 方法(即 Mip-NeRF360 [Barron 等人,2022 年])的视觉质量,后者需要长达 48 小时的训练时间。快速但质量较低的辐射场方法可以根据场景实现交互式渲染(每秒 10-15 帧),但无法实现高分辨率下的实时渲染。

我们的解决方案由三个主要部分组成。首先,我们介绍了三维高斯作为一种灵活而富有表现力的场景表示法。我们从与之前的 NeRF 类似方法相同的输入开始,即使用SfM校准的像机,并使用 SfM 过程中生成的稀疏点云初始化 3D 高斯集。与大多数需要多视图立体(MVS)数据的基于点的解决方案相比,我们只用 SfM 点作为输入就能获得高质量的结果。请注意,对于 NeRF 合成数据集,即使采用随机初始化,我们的方法也能获得高质量的结果。我们的研究表明,三维高斯是一个很好的选择,因为它们是一种可微分的体积表示法,但也可以通过将它们投影到二维并应用标准混合法,使用与 NeRF 相当的图像形成模型,非常高效地对它们进行光栅化处理。我们方法的第二部分是优化三维高斯的属性–三维位置、不透明度 𝛼 、各向异性协方差和球面度,与自适应密度控制步骤交错进行,我们在优化过程中添加并偶尔移除三维高斯。通过优化程序,可以得到一个相当紧凑、非结构化和精确的场景表示(所有测试场景的高斯数均为 100-500 万)。我们方法的第三个也是最后一个要素是我们的实时渲染解决方案,它使用快速 GPU 排序算法,灵感来自于基于瓦片的光栅化,沿袭了最近的研究成果 [Lassner and Zollhofer 2021]。不过,由于采用了三维高斯表示法,我们可以执行各向异性拼接,尊重可见性排序(归功于排序和混合),并通过跟踪所需的尽可能多的排序拼接的遍历,实现快速、准确的后向传递。

总结来说,我们做出了如下的贡献:

  • 引入各向异性三维高斯作为辐射场的高质量、非结构化表示方法
  • 三维高斯特性的优化方法,与自适应密度控制相互结合,为捕捉到的场景创建高质量的表现形式
  • 针对 GPU 的快速可微分渲染方法具有可视性感知功能,可进行各向异性拼接和快速后向传播,从而实现高质量的新视图合成

我们在之前发布的数据集上取得的结果表明,我们可以通过多视角捕捉对三维高斯进行优化,并获得与之前质量最好的隐式辐射场方法相当或更好的质量。我们还能达到与最快方法类似的训练速度和质量,更重要的是,我们首次为新视角合成提供了高质量的实时渲染。

我们首先简要介绍了传统的重建方法,然后讨论了基于点的渲染和辐射场工作,并讨论了其相似性;辐射场是一个广阔的领域,因此我们只关注直接相关的工作。如需了解该领域的全部内容,请参阅最近的优秀研究报告

Traditional Scene Reconstruction and Rendering 传统场景重建与渲染

最早的新视图合成方法基于光场,首先是密集采样[Gortler 等人,1996 年;Levoy 和 Hanrahan,1996 年],然后是非结构化捕捉[Buehler 等人,2001 年]。从SfM[Snavely 等人,2006 年] 的出现开创了一个全新的领域,可以利用照片集合成新的视图。SfM 在相机校准过程中估算出稀疏的点云,最初用于简单的三维空间可视化。随后的多视几何(MVS)多年来产生了令人印象深刻的全三维重建算法[Goesele 等人,2007 年],使得多种视图合成算法得以发展[Chaurasia 等人,2013 年;Eisemann 等人,2008 年;Hedman 等人,2018 年;Kopanas 等人,2021 年]。所有这些方法都是将输入图像重新投影并混合到新视角相机中,并使用几何图形来指导这种重新投影。这些方法在很多情况下都能产生出色的结果,但通常无法完全覆盖未重建区域,或在 MVS 生成不存在的几何图形时无法完全覆盖 "过度重建 "区域。最新的神经渲染算法[Tewari 等人,2022 年]大大减少了此类伪影,并避免了在 GPU 上存储所有输入图像的巨大成本,在大多数方面都优于这些方法。

Neural Rendering and Radiance Fields 神经渲染与辐射场

深度学习技术很早就被用于新视角合成[Flynn 等人,2016 年;Zhou 等人,2016 年];CNN 被用于估计混合权重[Hedman 等人,2018 年],或用于纹理空间解决方案[Riegler 和 Koltun,2020 年;Thies 等人,2019 年]。使用基于 MVS 的几何图形是大多数这些方法的主要缺点;此外,使用 CNN 进行最终渲染经常会导致时间闪烁。

Soft3D [Penner and Zhang 2017]提出了用于新视图合成的体积表示法;随后又提出了与体积光线行进相结合的深度学习技术[Henzler等人,2019;Sitzmann等人,2019],该技术基于连续可微分密度场来表示几何体。由于查询体积需要大量样本,使用体积光线行进法进行渲染的成本很高。神经辐射场(NeRFs)[Mildenhall 等人,2020 年] 引入了重要性采样和位置编码来提高质量,但使用了大量的多层感知器,对速度产生了负面影响。NeRF 的成功催生了大量解决质量和速度问题的后续方法,这些方法通常通过引入正则化策略来实现;目前在新视图合成图像质量方面最先进的方法是 Mip-NeRF360 [Barron 等人,2022]。虽然渲染质量非常出色,但训练和渲染时间仍然非常长;我们能够在提供快速训练和实时渲染的同时,达到甚至超过这一质量。

最新的方法主要通过以下三种设计选择来加快训练和/或渲染速度:使用特殊数据结构来存储(神经)特征,随后在体积光线行进过程中对这些特征进行插值;不同的编码方式、和 MLP 容量。这些方法包括空间离散化的不同变体 ,以及哈希表等编码方式,允许使用较小的 MLP 或完全放弃神经网络。

其中最著名的方法是 InstantNGP [Müller 等人,2022 年],它使用哈希网格和占位网格来加速计算,并使用较小的 MLP 来表示密度和外观;以及 Plenoxels [Fridovich-Keil 和 Yu 等人,2022 年],它使用稀疏体素网格来插值连续密度场,并能够完全放弃神经网络。这两种方法都依赖于球形谐波:前者直接表示方向效应,后者将其输入编码到色彩网络。虽然这两种方法都能提供出色的效果,但这些方法仍难以有效地表现空域,部分原因取决于场景/捕捉类型。此外,图像质量在很大程度上受到用于加速的结构化网格选择的限制,而渲染速度则因需要在给定的光线行进步骤中查询许多样本而受阻。我们使用的非结构化、显式 GPU 友好型 3D 高斯,无需神经组件即可实现更快的渲染速度和更好的质量。

Point-Based Rendering and Radiance Fields 基于点的渲染和辐射场

基于点的方法可有效渲染断开的、无结构的几何样本(即点云)[Gross 和 Pfister,2011]。最简单的点样本渲染[Grossman 和 Dally,1998 年]是将一组非结构化的点以固定大小栅格化,为此可利用图形应用程序接口本地支持的点类型[Sainz 和 Pajarola,2004 年]或 GPU 上的并行软件栅格化[Laine 和 Karras,2011 年;Schütz 等,2022 年]。点采样渲染虽然忠实于底层数据,但却存在漏洞,会造成混叠,而且严格来说是不连续的。基于点的高质量渲染的开创性工作通过 "拼接 "范围大于像素的点基元(如圆形或椭圆形圆盘、椭圆体或曲面)来解决这些问题。

最近,人们开始关注基于可微分点的渲染技术 [Wiles 等人,2020 年;Yifan 等人,2019 年]。利用神经特征对点进行增强,并使用 CNN 进行渲染 [Aliev 等人,2020 年;Rückert 等人,2022 年],从而实现了快速甚至实时的视图合成;不过,这些技术仍然依赖 MVS 来生成初始几何图形,因此继承了 MVS 的人工痕迹,最明显的是在无特征/有光泽区域或薄结构等困难情况下的过度或不足重构。

基于点的 𝛼 混合渲染和 NeRF 风格的体积渲染在本质上共享相同的图像形成模型。具体来说,色彩 𝐶 是通过沿射线的体积渲染来呈现的:
$$
C=\sum_{i=1}^{N}T_{i}(1-\exp(-\sigma_{i}\delta_{i}))\mathbf{c}{i}\quad\mathrm{with}\quad T{i}=\exp{\left(-\sum_{j=1}^{i-1}\sigma_{j}\delta_{j}\right)}
$$
其中,密度 𝜎 、透射率 𝑇 和颜色𝑐的样本沿射线以间隔 𝛿𝑖 采样。

一种典型的基于神经点的方法(如 [Kopanas 等人,2022 年,2021 年])是通过混合重叠像素的 N 个有序点来计算像素的颜色。

NeRF 是一种隐含地表示空/占空间的连续表示法;要找到公式 2 中的样本,需要进行昂贵的随机取样,因此会产生噪声和计算费用。与此相反,点是一种非结构化的离散表示,具有足够的灵活性,可以创建、破坏和移动与 NeRF 类似的几何图形。正如之前的工作[Kopanas 等人,2021 年]所显示的那样,通过对不透明度和位置进行优化,可以实现这一点,同时避免了全体积表示法的缺点。

Pulsar [Lassner and Zollhofer 2021] 实现了快速的球面光栅化,这启发了我们基于瓦片和排序的渲染器。然而,考虑到上述分析,我们希望在排序后的花片上保持(近似)自然混合,以获得体积表示法的优势: 我们的栅格化方法尊重可见性顺序,而他们的方法与顺序无关。此外,我们在像素中的所有斑点上反向传播梯度,并对各向异性的斑点进行光栅化。这些因素都有助于提高我们结果的视觉质量(见第 7.3 节)。此外,上文提到的前几种方法也使用 CNN 进行渲染,这导致了时间上的不稳定性。尽管如此,Pulsar [Lassner and Zollhofer 2021] 和 ADOP [Rückert et al . 2022] 的渲染速度仍是我们开发快速渲染解决方案的动力。

神经点浮尘法[Kopanas 等人,2022 年] 基于漫射点的渲染轨迹侧重于镜面效果,通过使用 MLP 克服了这种时间不稳定性,但仍需要 MVS 几何图形作为输入。该类别中最新的方法 [Zhang 等人,2022 年] 不需要 MVS,也使用 SH 表示方向;但它只能处理一个物体的场景,并且需要遮罩进行初始化。虽然对于小分辨率和低点计数来说速度很快,但目前还不清楚它如何能扩展到典型数据集的场景。我们使用三维高斯进行更灵活的场景再现,避免了对 MVS 几何图形的需求,并通过基于瓦片的投影高斯渲染算法实现了实时渲染。

最近的一种方法[Xu 等人,2022 年]采用径向基函数方法用点来表示辐射场。他们在优化过程中采用了点剪枝和致密化技术,但使用的是体积射线行进法,无法实现实时显示率。

在人体表现捕捉领域,三维高斯被用于表示捕捉到的人体;最近,它们被用于视觉任务的体积光线行进[Wang 等人,2023 年]。神经体积基元也在类似情况下被提出 [Lombardi 等人,2021]。虽然这些方法启发了我们选择三维高斯作为场景表示,但它们都侧重于重新构造和渲染单个孤立物体(人体或面部)的特定情况,导致场景的深度复杂度较小。相比之下,我们对各向异性协方差的优化、交错优化/密度控制以及高效的深度排序渲染,使我们能够处理包括背景在内的完整复杂场景,无论是室内还是室外,深度复杂度都很高。

OVERVIEW 概述

我们方法的输入是一组静态场景图像,以及通过 SfM 校准的相应摄像机,和产生的稀疏点云。从这些点中,我们创建了一组三维高斯(第 4 章),由位置(均值)、协方差矩阵和不透明度定义,允许非常灵活的优化机制。这样就能合理紧凑地表示三维场景,部分原因是高度各向异性的体积斑块可以用来紧凑地表示精细结构。辐射场的方向性外观分量(颜色)通过球协函数(SH)表示,遵循标准做法[Fridovich-Keil 和 Yu 等人,2022;Müller 等人,2022]。我们的算法通过一系列三维高斯参数(即位置、协方差和 SH 系数)的优化步骤,并结合高斯密度的自适应控制操作,来创建辐射场表示(第 5 章)。我们的方法之所以高效,关键在于我们基于瓦片的光栅化器(第 6 章),它允许各向异性斑点的混合,并通过快速排序尊重可见性顺序。快速栅格化器还包括通过跟踪累积值实现的快速后向传递,对可接收梯度的高斯数量没有限制。

图2. 优化从稀疏的 SfM 点云开始,创建一组三维高斯。然后,我们对这组高斯的密度进行优化和自适应控制。在优化过程中,我们使用基于瓦片的快速渲染器,与 SOTA 快速辐射场方法相比,训练时间更短。一次训练完成后,我们的渲染器就可以对各种场景视角进行实时导航观测。

DIFFERENTIABLE 3D GAUSSIAN SPLATTING 可微分三维高斯泼溅

我们的目标是优化一种场景表示法,使其能够从无法向的稀疏(SfM)点集开始,进行高质量的新视图合成。为此,我们需要一种基元,它继承了可微分体积表示法的特性,同时又是非结构化的、明确的,可以实现非常快速的渲染。我们选择了三维高斯,它是可微分的,可以很容易地投射到二维斑块上,从而实现快速混合渲染。

我们的表示方法与之前使用二维点的方法有相似之处[Kopanas 等人,2021 年;Yifan 等人,2019 年],并假定每个点都是具有法线的平面小圆。鉴于 SfM 点的极度稀疏性,很难估算法线。类似地,从这样的估计中优化噪声非常大的法线将非常具有挑战性。相反,我们将几何建模为一组无需法线的三维高斯。我们的高斯是由以点(平均值) 𝜇 为中心的全三维协方差矩阵 Σ 定义的[Zwicker 等人 2001a] :

$$
G(x)=e{-\frac12\left(x\right)T\Sigma^{-1}(x)}
$$
在我们的混合过程中,这个高斯乘以了 𝛼 。

不过,我们需要将三维高斯投影到二维空间,以便进行渲染。Zwicker 等人 [2001a] 演示了如何将三维高斯投影到图像空间。给定视图变换矩阵 𝑊 后,相机坐标中的协方差矩阵 Σ′如下所示:
$$
\Sigma^{\prime}=JW\Sigma WTJT
$$
其中 𝐽 是投影变换仿射近似的雅可比。Zwicker 等人[2001a]的研究还表明,如果跳过Σ′的第三行和第三列,就会得到一个 2×2 方差矩阵,其结构和性质与以前的工作中从有法线的平面点出发的矩阵相同。

一种显而易见的方法是直接优化协方差矩阵 Σ,以获得代表辐射场的三维高斯。然而,协方差矩阵只有在半正定时才具有物理意义。在对所有参数进行优化时,我们使用梯度下降法,但这种方法并不容易产生有效矩阵,而且更新步骤和梯度很容易产生无效协方差矩阵。

因此,我们选择了一种更直观、但同样有效的优化表示方法。三维高斯的协方差矩阵 Σ 类似于描述一个椭球体的构型。给定缩放矩阵和旋转矩阵后,我们可以找到相应的 Σ:
$$
\Sigma=RSSTRT
$$
为了对这两个因素进行独立优化,我们将它们分开存储:一个三维向量用于缩放,一个四元数用于表示旋转。我们可以将它们转换为各自的矩阵并进行组合,同时确保进行归一化处理,以获得有效的单位四元数。

为避免在训练过程中自动微分造成大量开销,我们明确推导出所有参数的梯度。精确导数计算的详情见附录A。

各向异性协方差的这种表示方法适合优化,使我们能够优化三维高斯,以适应拍摄场景中不同形状的几何图形,从而获得相当紧凑的表示方法。

OPTIMIZATION WITH ADAPTIVE DENSITY CONTROL OF 3D GAUSSIANS 三维高斯自适应密度优化

我们方法的核心是优化步骤,它创建了一组密集的三维高斯,准确地代表了用于自由视角合成的场景。除了位置 𝑝 、 𝛼 、和协方差 Σ 之外,我们还优化了代表每个高斯颜色的 SH 系数,以正确捕捉场景随视角变化的外观。这些参数的优化与控制高斯密度的步骤交错进行,以更好地表现场景。

Optimization 优化

优化基于连续的迭代渲染,并将生成的图像与捕获数据集中的训练视图进行比较。由于三维到二维投影的不确定性,几何体的位置难免会不正确。因此,我们的优化需要能够创建几何图形,并在几何图形被错误定位时将其销毁或移动。三维高斯协方差参数的质量对表示的紧凑性至关重要,因为只需少量各向异性的大高斯就能捕捉到大面积的同质区域。

我们采用随机梯度下降技术进行优化,充分利用标准的 GPU 加速框架,并按照最近的最佳实践[Fridovich-Keil 和 Yu 等人,2022;Sun 等人,2022],为某些操作添加定制的 CUDA 计算核。特别是,我们的快速光栅化(见第 6 章)对优化效率至关重要,因为它是优化的主要计算瓶颈。

我们使用 sigmoid 激活函数将其限制在 [0 - 1) 范围内,以获得平滑的梯度;出于类似的原因,我们还使用指数激活函数来计算协方差的尺度。

我们将初始协方差矩阵估计为各向同性高斯矩阵,其轴等于最近三点距离的平均值。我们使用了与 Plenoxels [Fridovich-Keil 和 Yu 等人,2022 年] 类似的标准指数衰减调度技术,但只针对位置。损失函数是$𝐿_1$与 D-SSIM 项相结合:
$$
L=(1-\lambda)L_1+\lambda L_{D-SSIM}
$$
我们在所有测试中都使用 $𝜆=0.2$ .

Adaptive Control of Gaussians 高斯自适应控制

我们从 SfM 的初始稀疏点集开始,然后应用我们的方法自适应地控制单位体积内的高斯数量和密度,这样我们就能从初始稀疏的高斯集变为更密集的高斯集,从而以正确的参数更好地表现场景。在优化预热(见第 7.1 节)之后,我们每迭代 100 次就会进行一次高斯致密化处理,并移除基本透明的高斯,即 𝛼 小于阈值 𝜖𝛼 的高斯。

我们对高斯的自适应控制需要填充空白区域。它不仅关注几何特征缺失的区域(“重建不足”),也关注高斯覆盖场景大面积的区域(通常对应 “重建过度”)。我们观察到,两者都有较大的视空间位置梯度。直观地说,这可能是因为它们对应的区域还没有得到很好的重构,而优化试图移动高斯来纠正这一点。

由于这两种情况都很适合进行致密化处理,我们会对视图空间位置梯度的平均值高于阈值 $𝜏_{𝑝𝑜𝑠}$ 的高斯进行去高斯化处理,我们在测试中将阈值设为 0.0002。接下来我们将详细介绍这一过程,如图4所示:

对于处于未完全重建区域的小高斯,我们需要覆盖必须创建的新几何体。为此,最好是复制高斯,只需创建一个相同大小的副本,并沿位置梯度方向移动即可。

另一方面,高方差区域的大高斯需要分割成小高斯。我们用两个新的高斯来替换这些高斯,并用实验确定的系数 𝜙=1.6 来划分它们的比例。我们还使用原始三维高斯作为采样的 PDF 来初始化它们的位置。

在第一种情况下,我们会检测并处理增加系统总体积和高斯数量的需求;而在第二种情况下,我们会保留总体积,但增加高斯数量。与其他体积表示法类似,我们的优化可能会陷入浮点靠近输入摄像头的情况;在我们的案例中,这可能会导致高斯密度的不合理增加。缓和高斯数量增加的有效方法是,每 𝑁=3000 次迭代后,将 𝛼 数值设置为接近于零。优化后,我们会在需要的地方增加高斯的密度,同时允许我们的剔除方法去除小于上述密度的高斯。高斯可能会缩小或增大,并与其他高斯有相当程度的重叠,但我们会定期移除世界空间中非常大的高斯和视图空间中足迹较大的高斯。这种策略可以很好地控制高斯总数。与其他方法[Barron 等人,2022 年;Fridovich-Keil 和 Yu 等人,2022 年]不同,我们不需要对遥远或大型高斯进行空间压缩、扭曲或投影策略。

FAST DIFFERENTIABLE RASTERIZER FOR GAUSSIANS 高斯快速可微分光栅器

我们的目标是实现快速的整体渲染和快速排序,以便进行近似混合(包括各向异性拼接),并避免以往工作中存在的对可接收梯度的拼接数量的硬性限制。

为了实现这些目标,我们设计了一种基于瓦片的高斯泼溅光栅化器,其灵感来自于最近的软件光栅化方法[Lass- ner 和 Zollhofer 2021],可以一次对整个图像的基元进行预排序,避免了之前的混合解决方案[Kopanas 等人 2022, 2021]中每个像素排序的开销。我们的快速光栅化器可对任意数量的混合高斯进行高效的反向传播,额外内存消耗低,只需要每个像素的恒定开销。我们的光栅化流水线是完全可微分的,在投影到二维(第 4 章)的情况下,可以对各向异性的拼接进行光栅化,类似于之前的二维拼接方法。

我们的方法首先将屏幕分割成 16×16 块瓷砖,然后根据视图穹顶和每块瓷砖剔除三维高斯。具体来说,我们只保留 99% 置信区间内与视图挫面相交的高斯。此外,我们还使用一个保护带来剔除极端位置的高斯(即均值接近近平面但远离视图挫面的高斯),因为计算它们的投影二维协方差将是不稳定的。然后,我们根据它们重叠的瓦片数,并为每个实例分配一个结合了视图空间深度和瓦片 ID 的键。然后,我们使用单个快速 GPU Radix 排序(Merrill 和 Grimshaw,2010 年)根据这些键对高斯进行排序。需要注意的是,没有额外的按像素或点排序,混合是在初始排序的基础上进行的。因此,我们的混合在某些配置下是近似的。不过,当斑点的大小接近单个像素时,这些近似值就变得不可用了。我们发现,这种选择大大提高了训练和渲染性能,而且在融合场景中不会产生明显的人工痕迹。

在对高斯进行排序后,我们会为每个瓦片生成一个列表,标出第一个和最后一个深度排序的条目,这些条目会溅射到给定的瓦片上。在光栅化过程中,我们为每个瓦片启动一个线程块。每个线程块首先协同将高斯数据包加载到共享内存中,然后针对给定像素,通过前后遍历列表来累积颜色和数值,从而最大限度地提高数据加载/共享和处理的并行性。当像素达到目标饱和度时,相应的线程就会停止。每隔一定时间,我们会对磁贴中的线程进行查询,当所有像素都达到饱和(即 𝛼 饱和度为 1)时,整个磁贴的处理就会终止。有关排序的详细信息和整个光栅化方法的高级概述见附录C。

在光栅化过程中, 𝛼 饱和度是唯一的停止因素。与之前的工作不同,我们不限制接受梯度更新的混合基元的数量。我们强制执行这一特性,是为了让我们的方法能够处理具有不同深度复杂度的场景,并对其进行精确学习,而无需进行特定场景的超参数调整。因此,在后向处理过程中,我们必须恢复前向处理过程中每个像素混合点的完整序列。一种解决方案是在全局内存中存储每个像素任意长的混合点列表[Kopanas 等人,2021 年]。为了避免隐含的动态内存管理开销,我们选择再次遍历每个像素的列表;我们可以重复使用前向传递中的高斯排序数组和像素范围。为了方便梯度计算,我们现在从后向前遍历它们。

遍历从影响瓦片中任何像素的最后一个点开始,并再次以协作方式将点加载到共享内存中。此外,每个像素只有在其深度小于或等于前向遍历过程中对其颜色有影响的最后一个点的深度时,才会开始(昂贵的)重叠测试和点处理。计算第 4 章所述的梯度需要原始混合过程中每一步累积的不透明度值。我们可以只存储前向传递结束时的总累积不透明度,而不是在后向传递中遍历一个逐渐缩小的不透明度的显式列表,从而恢复这些中间不透明度。具体来说,每个点都会存储前向过程中最终累积的不透明度;我们将其除以前后遍历过程中每个点的不透明度,就能得到梯度计算所需的系数。

IMPLEMENTATION, RESULTS AND EVALUATION 实现,结果与评估

接下来,我们将讨论实施的一些细节、目前的结果,以及与之前的工作和消融研究相比,对我们的算法进行的评估。

Implementation

我们使用 PyTorch 框架在 Python 中实现了我们的方法,并编写了用于光栅化的自定义 CUDA 内核,它是以前方法的扩展版本 [Kopanas 等人,2021],并使用英伟达 CUB 排序例程进行快速 Radix 排序 [Mer- rill 和 Grimshaw,2010]。我们还使用用于交互式查看的开源 SIBR [Bonopera 等人 2020] 构建了一个交互式查看器。我们用它来测量我们实现的帧速率。源代码和所有数据可在以下网址获取:3D Gaussian Splatting for Real-Time Radiance Field Rendering

优化细节。为了保持稳定,我们在较低分辨率下进行计算 “热身”。具体来说,我们在开始优化时使用的图像分辨率是原来的 4 倍,并在迭代 250 次和 500 次后进行两次上采样。

SH 系数优化对缺乏角度信息非常敏感。对于典型的 "类 NeRF "捕捉,即中心物体通过在其周围整个半球拍摄的照片进行观测,优化效果会很好。但是,如果捕捉的角度区域缺失(例如,捕捉场景的角落或进行 “内向外”[Hedman 等人,2016 年] 捕捉时),优化就会产生完全错误的 SH 零阶分量值(即基色或漫反射色)。为了解决这个问题,我们首先只优化零阶成分,然后每迭代 1000 次就引入一个 SH 波段,直到所有 4 个 SH 波段都得到体现为止。

Results and Evaluation 结果与评估

结果。我们在之前发布的数据集和合成 Blender 数据集 [Mildenhall 等人,2020] 中的总共 13 个真实场景上测试了我们的算法。特别是,我们在《Mip-Nerf360》[Barron et al . 2022]中展示的全套场景、《Tanks&Temples》数据集[2017]中的两个场景和 Hedman 等人提供的两个场景[Hedman et al. 2018]上测试了我们的方法,后者是目前 NeRF 渲染质量的最新技术水平。我们选择的场景具有截然不同的捕捉风格,涵盖了有界室内场景和大型无界室外环境。我们在评估中的所有实验都使用了相同的超参数配置。除 Mip-NeRF360 方法(见下文)外,所有结果均在 A6000 GPU 上运行。

在补充部分,我们展示了一些场景的渲染视频路径,这些场景的景色与输入照片相去甚远。

真实世界场景。就质量而言,目前最先进的方法是 Mip-Nerf360 [Barron 等人,2021 年]。我们将该方法作为质量基准进行比较。我们还与两种最新的快速 NeRF 方法进行了比较: InstantNGP [Müller 等人 2022] 和 Plenoxels。

我们采用 Mip-NeRF360 建议的方法,将数据集分为训练/测试两部分,每隔 8 张照片进行测试,以便进行一致且有意义的比较,从而生成误差指标,并使用文献中最常用的标准 PSNR、L-PIPS 和 SSIM 指标;请参见表 1。表中所有数字均来自我们自己运行作者代码的所有先前方法,但 Mip-NeRF360 在其数据集上的数字除外,其中我们复制了原始出版物中的数字,以避免与当前 SOTA 混淆。对于图中的图像,我们使用了自己的 Mip-NeRF360 运行数据:这些运行数据见附录 D。我们还显示了平均训练时间、渲染速度和用于存储优化参数的内存。我们报告了运行 35K 次迭代的 InstantNGP 基本配置(Base)、作者建议的稍大网络(Big)以及我们的两种配置(7K 和 30K 次迭代)的结果。我们显示图 6 显示了两种配置的视觉质量差异。在很多情况下,7K 次迭代时的质量已经相当不错了。

不同数据集的训练时间各不相同,我们将分别报告。请注意,不同数据集的图像分辨率也不尽相同。在项目网站上,我们提供了所有测试视图的渲染图,用于计算所有方法(我们的方法和之前的工作)在所有场景下的统计数据。请注意,我们在所有渲染中都保留了原始输入分辨率。

从表中可以看出,我们完全收敛模型的质量与 SOTA Mip-NeRF360 方法相当,有时甚至略胜一筹;需要注意的是,在相同硬件条件下,他们的平均训练时间为 48 小时,而我们为 35-45 分钟,他们的渲染时间为 10 秒/帧。经过 5-10分钟的训练,我们获得了与 InstantNGP 和 Plenoxels 相当的质量,但额外的训练时间使我们能够获得 SOTA 质量,而其他快速方法则无法做到这一点。对于 “坦克与寺庙”,我们在相似的训练时间内(在我们的案例中为 7 分钟)达到了与基本 InstantNGP 相似的质量。

我们还在图 5 中展示了我们的渲染方法和之前的渲染方法在左侧测试视图中的对比结果;我们的方法的结果是 30K 次迭代训练的结果。我们看到,在某些情况下,即使是 Mip-NeRF360 也会出现我们的方法所能避免的残留假象(例如,在《自行车》和《树桩》中植被的模糊,或在《房间》中墙壁的模糊)。在补充视频和网页中,我们提供了远距离路径比较。我们的方法倾向于保留覆盖区域的视觉细节,即使从很远的地方看也是如此,而以前的方法并非总是如此。

合成边界场景。除了现实场景,我们还在合成 Blender 数据集 [Mildenhall 等人,2020] 上对我们的方法进行了评估。这些场景提供了详尽的视图集,大小有限,并提供了精确的摄像机参数。在这种情况下,即使采用随机初始化,我们也能获得最先进的结果:我们从包围场景边界的体积内的 100K 个均匀随机高斯开始训练。我们的方法能快速自动地将它们剪裁到大约 6-10K 个有意义的高斯。经过 30K 次迭代后,训练模型的最终规模达到每个场景约 200-500K 个高斯。为了兼容起见,我们在表 2 中使用白色背景对我们取得的 PSNR 分数与之前的方法进行了报告和比较。示例可以请参见图 10(左起第二张图片)和补充材料。训练有素的合成场景以 180-300 FPS 的速度渲染。

紧凑性。与之前的显式场景表示相比,我们优化中使用的各向异性高斯能够以较少的参数数量模拟复杂的形状。我们通过评估我们的方法与 [Zhang 等人,2022 年] 所获得的高度紧凑、基于点的模型来展示这一点。我们从他们使用前景遮罩进行空间雕刻后得到的初始点云开始优化,直到与他们报告的 PSNR 分数持平为止。这通常发生在 2-4 分钟内。我们使用的点数约为其报告指标的四分之一,因此模型的平均大小为 3.8 MB,而其报告指标为 9 MB。我们注意到,在本实验中,我们只使用了两度的球协函数,这与他们的情况类似。

Ablations (对各个因素的)分割切除

我们将所做的不同贡献和算法选择分离出来,并构建了一组实验来衡量它们的效果。具体来说,我们对算法的以下方面进行了测试:从 SfM 初始化、我们的致密化策略、各向异性协方差、我们允许无限数量的斑块具有梯度以及球谐波的使用。表 3 总结了每种选择的量化效果。

从 SfM 进行初始化。我们还评估了从 SfM 点云初始化 3D 高斯的重要性。为了进行这种分割切除,我们对一个立方体进行均匀采样,该立方体的大小等于输入相机边界框范围的三倍。我们发现,我们的方法表现相对较好,即使没有 SfM 点也能避免完全失败。相反,我们的方法主要在背景区域表现不佳,见图 7。另外,在训练视图没有很好覆盖的区域,随机初始化方法似乎有更多的浮点,无法通过优化去除。另一方面,合成 NeRF 数据集没有这种现象,因为它没有背景,并且受到输入摄像机的良好限制(见上文讨论)。

致密化 接下来,我们将评估我们的两种密集化方法,更具体地说,是第 5 节中描述的克隆和拆分策略。我们分别禁用每种方法,并在其他方法不变的情况下进行优化。结果表明,如图 8 所示,分割大高斯对于实现良好的背景重建非常重要,而克隆小高斯而不是分割大高斯则可以实现更好、更快的收敛,尤其是当场景中出现较薄的结构时。

带有梯度的溅射斑的无限深度复杂性。我们将评估是否在最前端的点之后跳过梯度计算将在不牺牲质量的前提下提高速度,正如 Pul- sar [Lassner 和 Zollhofer 2021] 所建议的那样。在本次测试中,我们选择了 N=10,比 Pulsar 的默认值高出两倍,但由于梯度计算中的严重近似,导致优化结果不稳定。对于卡车场景,PSNR 的质量下降了 11dB(见表 3,Limited-BW),视觉结果如图 9 所示 Garden。

各向异性协方差。我们方法中的一个重要算法选择是优化三维高斯的全协方差矩阵。为了展示这一选择的效果,我们进行了一次控制切除,通过优化控制所有三个轴上三维高斯半径的单一标量值来消除各向异性。图 10 直观展示了这一优化的结果。我们观察到,各向异性大大提高了三维高斯与曲面对齐的能力,从而在保持相同点数的情况下,大大提高了渲染质量。

球协函数。最后,球协函数的使用提高了我们的 PSNR 总分,因为它们补偿了视角效应(表 3)。

Limitations 局限性

我们的方法并非没有局限性。在场景观察不佳的区域,我们的方法会产生伪影;在这些区域,其他方法也很难做到(例如图 11 中的 Mip-NeRF360)。尽管各向异性高斯具有上述许多优点,但我们的方法也会产生拉长的伪影或 "斑点状 "高斯(见图 12);同样,以前的方法在这种情况下也会很吃力。

当我们的优化方法产生大高斯时,偶尔也会出现 "弹出 "伪影;这往往发生在视图相关的区域。产生这些 "弹出伪影 "的原因之一是光栅化器中的保护带琐碎地剔除了高斯。如果采用更有原则的剔除方法,就能减少这些伪影。另一个因素是我们的可见度算法过于简单,可能导致高斯突然切换深度/混合顺序。这可以通过抗锯齿来解决,我们将其作为未来的工作。此外,我们目前没有对优化进行任何正则化处理;这样做将有助于解决未见区域和弹出伪影问题。

虽然我们在全面评估中使用了相同的超参数,但早期实验表明,在超大型场景(如城市数据集)中,降低位置学习率可能是收敛的必要条件。

尽管与之前基于点的方法相比,我们的方案非常紧凑,但内存消耗却明显高于基于 NeRF 的解决方案。在大型场景的训练过程中,我们未经优化的原型的 GPU 内存消耗峰值可超过 20 GB。不过,通过对优化逻辑进行细致的底层实现(类似于 InstantNGP),这一数字可以大大降低。渲染训练好的场景需要足够的 GPU 内存来存储完整模型(大型场景需要几百兆),光栅化器还需要 30-500 MB,具体取决于场景大小和图像分辨率。我们注意到,有很多机会可以进一步降低我们方法的内存消耗。点云压缩技术是一个经过深入研究的领域[De Queiroz and Chou 2016];看看如何将这些方法应用到我们的表示法中将会很有趣。

参考资料

文章链接:
https://www.zywvvd.com/notes/3d/3d-gaussian-splatting-intr/3d-gaussian-splatting-intr/