三维重建方法3D gaussian splatting与NeRF的区别和异同

最近学习了一些三维重建相关的内容,目前比较主要的重建流派就是3DGS以及NeRF,NeRF作为2020年发布的文章轰动一时,影响深远,有很多NeRF based的相关工作在这些年涌现。3DGS作为2023年的new talk of the town,其在保证合成质量的情况下能够以数倍乃至数十倍的速度碾压许多NeRF based的方法,因此得到了广泛关注。这篇文章从几个角度比较了NeRF(最初的版本)和3D gaussian splatting的异同,道行尚浅,若有错误,欢迎大家讨论、批评、指正。

(原文中有一些词汇很难找到很恰当的中文翻译,为了不产生歧义在文中就直接使用了)

1.数据输入(INPUT)

NeRF:Nerf的输入是一张图像+该图像对应的相机位姿5D输入(xyz和θ与φ)

3DGS:3DGS的输入是由一张图像+经过SFM方法后生成的稀疏点云

比较:两者的差距在于一个是注重于相机的位姿(观测者的姿态)一个是注重于图像中各点的位置(2D图像转换为3D点云 观测内容的姿态

需要注意的是,Nerf的5D位姿会进行一个正弦编码才会输入到MLP网络中进行运算,这个编码过程让网络能够学习到更多的高频数据,从而提升了网络对于图像细节的重建能力,如果把这个过程看作input数据的初始化,那么与之对比,3DGS的输入在得到稀疏点云之后同样进行了初始化,将稀疏点云建模为了3D高斯,才进行后续的处理,因此两者在初始化阶段也有一些不同。

但是两者都可以由colmap等sfm方法从视频中恢复对应的位姿和位置,这一点是类似的,所以在3DGS中描述它的INPUT用了“NeRF-liked”

2.数据输出(output)

NeRF:NeRF的输出是经由神经网络之后直接输出对应camera ray上各个采样点的RGB值和体密度(volume density),随后经过体渲染(volume rendering)得到最终的重建图像。

3DGS:3DGS的输出,从下面这一张pipeline能够看出来,作者直接将最终重建得到的图像作为了整个方法的最终输出。

比较:两者的最终输出都是重建图像,但是获得重建图像的过程中存在差异,即两者的渲染方式不同。NeRF的渲染方式是体渲染,神经网络输出camera ray上不同采样点的RGB和体密度后,对该camera ray进行一个accumulate,最终得到2D图像。3DGS在会在过程中将建模好的3D高斯进行光栅化处理,将其投影到2D图像中,这个过程可以理解为向一个平地抛雪球,这个雪球被染上了不同的颜色,雪球落地之后会溅开,产生不同颜色的痕迹,多个雪球(3D高斯)丢到平地上之后,把不同的颜色痕迹按照深度等进行混合,就得到了最终的图像,这个渲染过程就叫做splatting,这里的渲染技术是a-blending,放一段GPT老师的解释:

 3.三维信息表达(3D Information Expression)

NeRF:作为神经辐射场,其三维信息藏在MLP网络中,而神经网络具有不可解释性,类似于一个黑匣子,因此神经辐射场常常和隐式等词一起出现,就是因为其重建三维世界的信息是隐式表达。

3DGS:由SFM建立得到的稀疏三维点云,在建模成3D高斯后,3D高斯中明确的包含了三维世界的信息(位置,颜色,不透明)因为3D高斯的前身是三维点云,而三维点云是典型的显示表达数据,因此不难理解3DGS是一种显示表达。

比较:NeRF是隐式表达,三维信息藏在神经网络中,3DGS是显示表达,由3D高斯直接表达三维信息。

4.优化方式

两者的优化方案在思路上都是相同的,都是将渲染出来的图像和真实图像进行对比,求loss,然后不断最小化这个loss来优化过程中的各个参数变量,都采用了经典的梯度下降优化策略。

5.时间与效果

两者的效果实际上相差不是很大,对于一些细节的重建见仁见智,3DGS在文中描述其在一些数据集的效果是优于NeRF的,但是从其github页面来看,实际上效果差别不是很大。但是时间上3DGS有明显的优势,可以从其提供的图中看出来。NeRF对于简单的单一场景(isolated object)的训练时间就需要12个小时,而3D高斯只需要几分钟,在保证时间的过程中不损失质量,实际上就是3DGS一直追寻的目的,在文章能看出:

 附上官方给出的时间对比图:

以及效果对比:

最后通过一个表格简单总结一下两者的差异:

NeRF3D Gaussian splatting
InputCamera pose(5D)Image point clouds from SFM
OutputImageImage
RenderingVolume rendering              α-blending

Optimization

gradient descendGradient descend
3D Information ExpressionImplicit        Explicit
Time&Effect12hour for isolated object6min for isolated object

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

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

相关文章

HBase 数据导入导出

HBase 数据导入导出 1. 使用 Docker 部署 HBase2. HBase 命令查找3. 命令行操作 HBase3.1 HBase shell 命令3.2 查看命名空间3.3 查看命名空间下的表3.4 新建命名空间3.5 查看具体表结构3.6 创建表 4. HBase 数据导出、导入4.1 导出 HBase 中的某个表数据4.2 导入 HBase 中的某…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客,网上也有很多教程,很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

代码随想录算法训练营DAY11 | 栈与队列 (2)

一、LeetCode 20 有效的括号 题目链接:20.有效的括号https://leetcode.cn/problems/valid-parentheses/ 思路:遇到左括号直接进栈;遇到右括号判断站顶是否有匹配的括号,没有就返回flase,有就将栈顶元素出栈&#xff1…

ctfshow——文件包含

文章目录 web 78——php伪协议第一种方法——php://input第二种方法——data://text/plain第三种方法——远程包含(http://协议) web 78——str_replace过滤字符php第一种方法——远程包含(http://协议)第二种方法——data://&…

Nicn的刷题日常之杨氏矩阵(三种方法求解,逐级递增详解,手把手教学,建议三连收藏)

目录 1.杨氏矩阵知识普及:什么是样式矩阵 2.题目描述 3.解题 3.1暴力求解,遍历法 3.2巧妙解题:对角元素法 3.3将巧解法封装为函数 4.结语 1.杨氏矩阵知识普及:什么是样式矩阵 杨氏矩阵,是对组合表示理论和…

蓝牙 - BLE Basics

BLE Basics [ BLE基础 ] 需要了解的两个主要概念是 BLE 设备的两种模式: Two major concepts to know about are the two modes of BLE devices: * 广播模式(也称为通用访问配置文件 GAP) * 连接设备模式(也称为通用属性配置文件…

halcon中的坐标系相关

一、定义 世界坐标系:真实世界中物体实际位置(三维) 相机坐标系:以镜头光心为原点,光轴为Z轴(三维) 图像物理坐标系:以成像图像中心维原点(二维) 像素坐标系…

如何计算两个指定日期相差几年几月几日

一、题目要求 假定给出两个日期,让你计算两个日期之间相差多少年,多少月,多少天,应该如何操作呢? 本文提供网页、ChatGPT法、VBA法和Python法等四种不同的解法。 二、解决办法 1. 网页计算法 这种方法是利用网站给…

数据中心机房建设的关键痛点及解决方案

随着信息技术的飞速发展,数据中心机房已成为企业信息系统的核心。然而,在机房系统的建设过程中,投资及运行维护成为项目管理的关键痛点。合理的投资决策和高效的运维管理是确保机房系统经济性和可靠性的重要因素。本文将探讨机房系统建设的投…

学习Spring的第十三天

Repository : 注解Dao层 Service : 注解Service层 Controller : 注解Web层 值得注意的是 : 当业务中出现一个bean三层都不属于时 , 我们用Component进行注解 Bean依赖注入注解开发 : Value : 可把zhangsan注解进username属性 Value("zhangsan")private String …

debian12 解决 github 访问难的问题

可以在 /etc/hosts 文件中添加几个域名与IP对应关系,从而提高 github.com 的访问速度。 据搜索了解(不太确定),可以添加这几个域名:github.com,github.global.ssl.fastly.net,github.global.fa…

Linux 多线程 | 线程的操作、线程库、线程ID

Linux进程和线程 进程是资源分配的基本单位线程是调度的基本单位线程共享进程数据,但是也有自己的一部分数据:线程ID(LWP)、一组寄存器、栈、errno、信号屏蔽字、调度优先级 进程的多个线程共享 同一地址空间,因此Text Segment、Data Segment都是共享的…