NeRF - 神经辐射场 原理分析与解释

标题:NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis

顾名思义:通过NeRF 神经辐射场合成新视角来表达场景

这是一篇来源于伯克利大学的论文研究

摘要

论文提出了一种方法,可以通过优化一个连续体积场景函数来合成复杂场景的新视角,这个函数使用了一组稀疏的输入视图。算法用一个全连接的(非卷积)深度网络来表示场景,输入是一个连续的5D坐标(空间位置\left ( x,y,z \right )和观看方向\left ( \theta, \phi \right )

输出是体积密度和在该空间位置依赖视角的发射辐射度

通过查询5D坐标沿相机光线并使用经典体积渲染技术,将输出颜色和密度投影到图像中来合成视图。

由于体积渲染自然是可微分的,优化表示只需要一组有已知相机姿态的图像。

论文描述了如何有效优化神经辐射场以渲染具有复杂几何和外观的场景的新视角,并演示了结果优于以往的神经渲染和视角合成方法。

引言

讨论了视角合成的长期问题,并提出了通过直接优化一个连续的5D场景表示参数的方法来解决这个问题,以最小化一组捕获图像的渲染误差。

采用了一个深度全连接神经网络,没有卷积层,经常被称为多层感知器或MLP,来表示这个函数,通过从单个5D坐标回归到一个体积密度和视角依赖的RGB颜色。为了渲染这个所谓的神经辐射场(NeRF),方法涉及到从静态场景的连续5D函数中累积辐射度。

这种优化连续5D神经辐射场表示的方法,能够从一组输入图像生成任意连续位置场景的体积密度和视角依赖色彩。这个过程使用体积渲染技术沿着光线累积场景表示的样本,并将这些颜色和密度累积成2D图像。

由于这个过程是自然可微的,可以使用梯度下降来优化这个模型,以最小化观察到的每个图像与对应视角渲染结果之间的误差。

这种优化鼓励网络预测一个连贯的场景模型,通过配高体积密度和精确颜色来反映场分景的真实内容。

  • 困难一及解决

尽管NeRF的基本实现在优化神经辐射场表示时面临着挑战,特别是在高分辨率表示和在不足的摄像机视角下重构复杂场景时。

为了解决这些问题,提出了使用位置编码来变换输入的5D坐标,这允许MLP表示更高频率的函数,并且减少了对高频场景表示进行采样的需求。


论文强调了其方法继承了体积表示的优势,能够表示复杂的真实世界几何形状和外观,同时非常适合基于梯度优化的投影图像。此外,与离散体素网格相比,该方法在建模复杂场景时避免了存储成本过高的问题。

技术贡献

  • 一个用于高分辨率连续场景的渲染输入的解决方案,使用5D神经辐射场,并以基本的MLP网络参数化。
  • 一种基于经典体积渲染技术的可微渲染程序,可以从标准的RGB图像中优化这些表示。
  • 一种优化MLP处理能力的策略,使其更适用于有可见场景内容的空间。

关键词

场景表示、视角合成、基于图像的渲染、体积渲染、3D深度学习

Related Work

通过制定可微分的渲染函数,允许从仅使用2D图像生成新的隐式形状表示。

尽管这些技术有潜力表示复杂和高分辨率的几何形状,但它们可能会因为对几何复杂性的过度平滑而导致渲染结果不够精确。

通过密集采样的视图,可以使用简单的光场采样或插值技术重建出真实感的新视角图像。

对于采样较少的新视角合成,则需要更多进步的技术来从观测图像中提取出额外的几何和外观表示。

一种流行的方法是使用基于网格的场景表示,结合漫反射或视角依赖外观。差分渲染器或路径追踪可以直接优化网格表示来重现输入图像集。

但,基于图像的网格优化通常很困难,因为可能会陷入局部最小值或由于损失景观的条件不良而变得复杂。

在此之外:此外,一些体积方法使用观察到的图像直接对体素网格进行上色。


近期的方法则采用了大量的结果样本,来构建能够从输入图像集合中学习体积表示的神经网络。

尽管这些体积合成技术可以用于新视角合成,但由于其离散采样的时间和空间复杂度,它们在扩展到更高分辨率图像时存在局限性。

为了解决这一问题,作者提出了一种新方法,使用全连接神经网络对3D空间进行细致采样,不仅能够生成更高质量的渲染图像,而且相比以往的体积方法,存储需求也大大减少

神经辐射场景景表示 - Neural Radiance Field Scene Representation

关于神经辐射场(NeRF)的场景表示方法。

NeRF将连续场景建模为一个5D向量值函数,其输入为3D空间位置 (x,y,z) 和2D观察方向 (θ,ϕ),输出为颜色 c=(r,g,b) 和体积密度 σ。通过沿着相机光线采样5D坐标(位置和观察方向),输入到一个多层感知器(MLP)网络中,产生颜色和体积密度,然后使用体积渲染技术将这些值合成新的图像。由于这个渲染函数是可微分的,可以通过最小化合成图像和实际观察图像之间的残差来优化场景表示。

 

该MLP网络 F_{\theta }​ 使用8层全连接层(使用ReLU激活函数和每层256个通道),输出颜色 c 和密度 σ 以及一个256维的特征向量。然后,这个特征向量与相机光线的观察方向结合,传递到另一个全连接层(使用ReLU激活和128个通道)来输出视角依赖的RGB颜色。

ReLU函数定义为 f(x)=max(0,x)

通过使网络预测体积密度 σ 作为位置 x 的函数,并允许RGB颜色 c 被预测为位置和观察方向的函数,促进了多视角一致性的场景表示。这种方法允许模型能够表示非朗伯效应,而对于在训练时仅将观察方向作为输入的模型是困难的,因为它难以表示高光等特性。

辐射场的体积渲染 - Volume Rendering with Radiance Fields

 在NeRF中,场景是通过5D神经辐射场来表示的,这里的5D指的是3D空间位置和2D视角方向。

体积渲染技术用于计算从场景中任何一点发出的辐射光的颜色,这个过程涉及对沿着相机射线的积分计算。

积分计算通常使用数值积分法(quadrature),但是确定性的数值积分,比如使用离散体素网格,会限制表示的分辨率,因为多层感知器(MLP)只能在固定的离散位置进行查询。

为了解决这一问题,文中提出了使用分层抽样(stratified sampling)方法,这种方法将 每一个 分区间隔为 N 个等间距的区间,并在每个区间内均匀地随机抽取一个样本

抽样得到的离散样本集用于估计光线颜色 C(r),这通过用积分规则(quadrature rule)累计沿光线的透射率 T 和体积密度 σ 来实现。这个过程可以简化为传统的alpha合成,使得透射率的累积可以通过一个简单的指数函数来计算。


在神经辐射场(NeRF)中,尽管采用了离散样本集来进行积分估计,但所采用的分层采样方法使得模型能够表现出场景的连续性。这是因为在优化过程中,多层感知机(MLP)是在连续的空间位置上进行评估的。相较于传统的体积渲染技术,这种方法能够生成更高质量的渲染图像,并且在存储需求上也更加经济,只需要传统方法的一小部分存储空间。

简而言之,NeRF通过智能的采样策略,实现了对连续场景的有效表示,同时提高了渲染质量并降低了存储成本。

神经辐射场的优化

Positional encoding - 位置编码

虽然神经网络是通用函数逼近器,但直接在空间位置和观测方向的输入上操作的网络在表现高频变化(如颜色和几何变化)方面不佳。

为了解决这个问题,文章引入了位置编码来辅助多层感知器(MLP)表示高频函数。

位置编码是一种将连续输入坐标映射到更高维空间的函数,以便MLP能够更容易地逼近高频率函数。这种方法显著提高了模型的性能。

位置编码函数 γ(p) 以正弦和余弦的形式应用于每个坐标值,并且这些值被规范化到 [−1,1] 的范围内。这个过程被分别应用于3D坐标 x 的每个分量,以及视线方向 d 的每个分量。通过这种编码方式,MLP能够捕捉输入数据的细微变化,从而生成更加细腻和真实的渲染图像。此外,这种方法与流行的Transformer架构中使用的位置编码相似,尽管Transformer是为了不同的目的,即为序列中的标记提供离散位置。而NeRF使用这些函数来将连续输入坐标映射到一个更高维空间,这有助于MLP更精确地近似复杂的频率函数。同时,这种位置编码的方式也被用于模拟3D蛋白质结构的相关工作中。

Hierachical volume sampling - 分层体积采样

分层体积采样方法,这是一种用于优化神经辐射场(NeRF)渲染策略的技术。在NeRF中,传统的渲染策略沿着每个相机光线密集评估网络在许多查询点上的效果,是低效的,因为自由空间和遮挡区域并不会为最终渲染图像的生成做贡献,但仍被重复采样。

为了提高渲染效率,论文提出了一种分层采样策略,灵感来自体积渲染的早期工作。这种策略通过分配样本,根据它们对最终渲染的预期效果,从而提高采样效率。具体来说,系统不是只使用一个网络来表示场景,而是同时优化两个网络:一个“粗糙”网络和一个“精细”网络。

在神经辐射场(NeRF)模型的优化过程中,先对场景中的一组预先选择的位置进行样本采样,这一步使用了一个称为“粗糙”网络的模型进行初步评估。基于“粗糙”网络输出的信息,再对每条光线路径上的点进行更精细的采样,这次采样更加关注场景中的关键部分,即那些对最终图像影响较大的区域。简而言之,就是先用一个粗略的模型评估整个场景,确定哪些部分是重要的,然后在这些重要部分进行更密集的采样,以便在后续的“精细”网络处理中获得更高质量的渲染结果。这种方法提高了渲染效率,因为它避免了对不重要区域的过度采样。

Implementation details - 实现细节

为了优化每个场景,研究者为每个场景独立地优化了一个连续体积表示网络。这个过程仅需要捕获的RGB图像数据集,以及对应的相机姿势、内在参数和场景边界。优化过程利用COLMAP结构从运动软件包估计这些参数。

在每次优化迭代中,首先从数据集中所有像素的集合中随机抽取一批相机光线,然后按照分层采样方法从粗糙网络中查询 NC​ 个样本,并从精细网络中查询 NC​+NF​ 个样本。接着,使用体积渲染过程来渲染每条光线的颜色。

损失函数是预测的粗糙和精细体积的RGB颜色与真实像素颜色之间总平方差的简单总和。即使最终的渲染图像来自精细体积,通过权重分布的策略,粗糙网络的损失也可以用于在精细网络中分配样本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一题---1547. 切棍子的最小成本

//当我们将棍子分段之后,我们是不是想到了怎么组合这些棍子 //并且这些棍子有一个性质就是只能与相邻的进行组合 //暴力搜索的话复杂度很高 //在思考暴力搜索的时候,我们发现一个规律 //比如棍子长度1 2 1 1 2 //那么与最后一个2组合的棍子有&#xff0c…

「绝世唐门」七怪一死六伤,98级玄子饕餮真身,伊莱克斯宣布神位

Hello,小伙伴们,我是拾荒君。 《斗罗大陆Ⅱ绝世唐门》第32期超前爆料,据透露史莱克监察团深入邪魂师的老巢,发现许多城中的百姓遭到残忍的毒手。为了对抗这些残忍的邪魂师,史莱克监察团成员纷纷发动武魂,展现出强大的…

人工智能原理实验2(1)——八数码问题(BFS、DFS、UCS、IDS、A*算法)

🧡🧡实验内容🧡🧡 要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态(左)到目标状态(右) 🧡🧡BFS、DFS实现🧡…

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息 二、检查网页,找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…

恢复因各种情况丢失的数据和文件的恢复软件汇集。

数据和文件恢复软件工具是直观的应用程序,可以从各种存储介质中恢复有价值且敏感的业务相关数据。这些宝贵的救生应用程序使企业能够恢复因不可预测的情况而丢失的数据。 存储介质解决方案可能会因网络攻击、病毒、数据泄露、硬盘故障等多种原因而丢失或损坏数据。…

Dart安装(Winodws)

Dart官网: https://dart.dev/ 一、命令行安装 https://dart.dev/get-dart You can install the Dart SDK using Chocolatey. error Important: These commands require administrator rights. Here’s one way to open a Command Prompt window that has admin …

ROS第 12 课 Launch 启动文件的使用方法

文章目录 第 12 课 Launch 启动文件的使用方法1.本节前言2.Lanuch 文件基本语法2.2 参数设置2.3 重映射嵌套 3.实操练习 第 12 课 Launch 启动文件的使用方法 1.本节前言 我们在前面的教程里面通过命令行来尝试运行新的节点。但随着创建越来越复杂的机器人系统中,打…

前后置、断言、提取变量、数据库操作功能

前置操作和后置操作都是 API 请求在发送和响应过程中执行的脚本,主要用于在发起 API 请求前和获得响应后完成验证或执行某些操作,目的是为了提高 API 调试和测试的效率,并确保接口的正确性。 前置操作​ 前置操作是在 API 请求之前执行的脚本…

[计算机网络]基本概念

目录 1.ip地址和端口号 1.1IP地址 1.2端口号 2.认识协议 2.1概念: 2.2知名协议的默认端口 3.五元组 4.协议分层 4.1分层的作用 4.2OSI七层模型 4.3TCP/IP五层(四层)模型 ​编辑4.4网络设备对应的分层: ​编辑以下为跨…

【51、32单片机】模块化编程(.c .h文件)

0、前言 USER:存放工程文件、主函数文件 main.c,以及其他包括system_stm32f10x.c等 CORE :用来存放核心文件和启动文件 OBJ :是用来存放编译过程文件以及hex 文件 STM32F10x_FWLib :用来存放 ST 官方提供的库函数源码文件 SY…

【开源】基于JAVA的CRM客户管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 用例设计3.2 E-R 图设计3.3 数据库设计3.3.1 客户表3.3.2 商品表3.3.3 客户跟踪表3.3.4 客户消费表3.3.5 系统角色表 四、系统展示五、核心代码5.1 查询客户5.2 新增客户跟踪记录5.3 新增客户消费订单5.4 查…

让uniapp小程序支持多色图标icon:iconfont-tools-cli

前景: uniapp开发小程序项目时,对于iconfont多色图标无法直接支持;若将多色icon下载引入项目则必须关注包体,若将图标放在oss或者哪里管理,加载又是一个问题,因此大多采用iconfont-tools工具,但…

设计模式-资源库模式

设计模式专栏 模式介绍模式特点应用场景资源库模式与关系型数据库的区别代码示例Java实现资源库模式Python实现资源库模式 资源库模式在spring中的应用 模式介绍 资源库模式是一种架构模式,介于领域层与数据映射层(数据访问层)之间。它的存在…

JVM工作原理与实战(二十一):内存管理

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、不同语言的内存管理 1.C/C的内存管理 2.Java的内存管理 二、垃圾回收的对比 1.自动垃圾回收与手动垃圾回收的对比 2.优点与缺点 总结 前言 JVM作为Java程序的运行环境&#…

Vue2:全局事件总线

一、场景描述 之前我们学习了,通过props实现父子组件之间的通信。通过自定义组件,实现了子给父传递数据。 那么,兄弟关系的组件,如何通信了?任意组件间如何通信了? 这个时候,就要学习全局事件总…

5G_射频测试_发射机测量(四)

6.2 Base station output power 用于测量载波发射功率的大小,功率越大小区半径越大但是杂散也会越大 载波功率(用频谱仪测)天线口功率(用功率计测)载波功率是以RBW为单位的filter测量的积分功率不同带宽的多载波测试时…

Spring-AOP入门案例

文章目录 Spring-AOP入门案例概念:通知(Advice)切入点(Pointcut )切面(Aspect) 目标对象(target)代理对象(Proxy)顾问(Advisor)连接点(JoinPoint) 简单需求:在接口执行前输出当前系统时间Demo原始未添加aop前1 项目包结构2 创建相…

在Java中调企微机器人发送消息到群里

目录 如何使用群机器人 消息类型及数据格式 文本类型 markdown类型 图片类型 图文类型 文件类型 模版卡片类型 文本通知模版卡片 图文展示模版卡片 消息发送频率限制 文件上传接口 Java 执行语句 String url "webhook的Url"; String result HttpReque…

pxe高效批量网络装机 以及安装教程

系统装机的三种引导模式 1.pe 2光驱 3.网卡 打开本机桌面 可以看见背景图片 查看配置文件内容 文件时引导选项的功能 pxe原理: 先根据dhcp找到IP地址、和引导程序的地址,还提供客户机tftp地址,因为tftp是小文件,容量小&#…

如何用H5+CSS+JS写一个简单的招聘网站

大家好,我是猿码叔叔,一个 Java 语言开发者。应网友要求,写一个简单的招聘页面。由于技术原因,页面相对简单,朋友们可以选择性的阅读,如果对您有帮助,也可直接拿去使用,因为接下来除…