论文笔记:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

news2024/9/28 13:15:26

目录

文章摘要

1 Neural Radiance Field Scene Representation (基于神经辐射场的场景表示)

2 Volume Rendering with Radiance Fields (基于辐射场的体素渲染)

2.1 经典渲染方程

2.2 经典的体素渲染方法

2.3 基于分段采样近似的体素渲染方法

3 Optimizing a Neural Radiance Field (优化一个神经辐射场)

3.1 Positional Encoding (位置编码)

3.2 Hierarchical Sampling Procedure (分层采样方案)

3.3 Implementation Details (实现细节)

4 Results (实验结果)

4.1 Datasets (数据集)

4.2 Ablation Studies (消融实验)

论文小结

论文下载

参考材料

相关工作

参考网址


文章摘要

NeRF 是 ECCV 2020 的 Oral,影响非常大,可以说从基础上创造出了新的基于神经网络隐式表达来重建场景的路线。由于其简洁的思想和完美的效果,至今仍然有非常多的 3D 相关工作以此为基础。
NeRF 所做的任务是 Novel View Synthesis(新视角合成),即在若干已知视角下对场景进行一系列的观测(相机内外参、图像、Pose 等),合成任意新视角下的图像。传统方法中,通常这一任务采用三维重建再渲染的方式实现,NeRF 希望不进行显式的三维重建过程,仅根据内外参直接得到新视角渲染的图像。为了实现这一目的,NeRF 使用用神经网络作为一个 3D 场景的隐式表达,代替传统的点云、网格、体素、TSDF 等方式,通过这样的网络可以直接渲染任意角度任意位置的投影图像。

NeRF 的思想比较简单,就是通过输入视角的图像每个像素的射线对于密度(不透明度)积分进行体素渲染,然后通过该像素渲染的 RGB 值与真值进行对比作为 Loss。由于文中设计的体素渲染是完全可微的,因此该网络可学习:

其主要工作和创新点如下:
1)提出一种用 5D 神经辐射场 (Neural Radiance Field) 来表达复杂的几何+材质连续场景的方法,该辐射场使用 MLP 网络进行参数化;
2)提出一种基于经典体素渲染 (Volume Rendering) 改进的可微渲染方法,能够通过可微渲染得到 RGB 图像,并将此作为优化的目标。该部分包含采用分层采样的加速策略,来将 MLP 的容量分配到可见的内容区域;
3)提出一种位置编码 (Position Encoding) 方法将每个 5D 坐标映射到更高维的空间,这样使得我们可以让我们优化神经辐射场更好地表达高频细节内容。

1 Neural Radiance Field Scene Representation (基于神经辐射场的场景表示)

NeRF 将一个连续的场景表示为一个 5D 向量值函数(vector-valued function),其中:

  • 输入为:3D 位置 x=(x, y, z)x=(x,y,z) 和 2D 视角方向 (θ,ϕ)
  • 输出为:发射颜色 c=(r, g, b)c=(r,g,b) 和体积密度(不透明度) σ。

对于其中的 2D 视角方向可以用下图进行直观解释:

在实际实现中,视角方向表示为一个三维笛卡尔坐标系单位向量 d,也就是图像中的任意位置与相机光心的连线,我们用一个 MLP 全连接网络表示这种映射: 

通过优化这样一个网络的参数Θ来学习得到这样一个 5D 坐标输入到对应颜色和密度输出的映射。

为了让网络学习到多视角的表示,我们有如下两个合理假设:

  • 体积密度(不透明度) σ 只与三维位置 x 有关而与视角方向 d 无关。物体不同位置的密度应该和观察角度无关,这一点比较显然。
  • 颜色 c 与三维位置 x 和视角方向 d 都相关。

预测体积密度 σ 的网络部分输入仅仅是输入位置 x,而预测颜色 c 的网络输入是视角和方向 d。在具体实现上:

  • MLP 网络 Θ​ 首先用 8 层的全连接层(使用 ReLU 激活函数,每层有 256 个通道),处理 3D 坐标 x,得到 σ 和一个 256 维的特征向量。
  • 将该 256 维的特征向量与视角方向 d 与视角方向一起拼接起来,喂给另一个全连接层(使用 ReLU 激活函数,每层有 128 个通道),输出方向相关的 RGB 颜色。

本文中一个示意的网络结构如下:

Fig 3 展示了我们的网络可以表示出非朗伯体效应(non-Lambertian effects);Fig 4 展示了如果训练时没有视角 (View Dependence) 的输入(只有 x),则网络无法表示高光效果。

2 Volume Rendering with Radiance Fields (基于辐射场的体素渲染)

2.1 经典渲染方程

也就是二者的乘积为光速 cc。而我们又知道可见光的颜色 RGB 就是不同频率的光辐射作用于相机的结果。因此在 NeRF 中认为辐射场就是对于颜色的近似建模。

2.2 经典的体素渲染方法

我们通常接触的是渲染有网格渲染、体素渲染等,对于很多类似云彩、烟尘等等特效,常用的就是体素渲染:

Ray casting for volume rendering (© Zhanping Liu).

2.3 基于分段采样近似的体素渲染方法

下图非常形象地演示了体素渲染的流程:

3 Optimizing a Neural Radiance Field (优化一个神经辐射场)

上述方法就是 NeRF 的基本内容,但基于此得到的结果并能达到最优效果,存在例如细节不够精细、训练速度较慢等问题。为了进一步提升重建精度和速度,我们还引入了下面两个策略:

  • Positional Encoding (位置编码):通过这一策略,能够使得 MLP 更好地表示高频信息,从而得到丰富的细节;
  • Hierarchical Sampling Procedure (金字塔采样方案):通过这一策略,能够使得训练过程更高效地采样高频信息。

3.1 Positional Encoding (位置编码)

相似地,在 Transformer 中也有一个类似的位置编码操作,不过本文中与其还是根本不同。在 Transformer 中位置编码是用来表示输入的序列信息的,而这里的位置编码是做用于输入将输入映射到高维从而让网络能够更好地学习到高频信息。

3.2 Hierarchical Sampling Procedure (分层采样方案)

分层采样方案来自于经典渲染算法的加速工作,在前述的体素渲染 (Volume Rendering) 方法中,对于射线上的点如何采样会影响最终的效率,如果采样点过多计算效率太低,采样点过少又不能很好地近似。那么一个很自然的想法就是希望对于颜色贡献大的点附近采样密集,贡献小的点附近采样稀疏,这样就可以解决问题。基于这一想法,NeRF 很自然地提出由粗到细的分层采样方案(Coarse to Fine)。

Fine 部分:在第二阶段,我们使用逆变换采样 (Inverse Transform Sampling),根据上面的分布采样出第二个集合 N_fNf​,最终我们仍然使用公式 (3) 来计算 \hat{​{C_{f}}}(r)。但不同的是使用了全部的 N_c + N_fNc​+Nf​ 个样本。使用这种方法,第二次采样可以根据分布采样更多的样本在真正有场景内容的区域,实现了重要性抽样 (Importance Sampling)。

如图所示,白色点为第一次均匀采样的点,通过白色均匀采样后得到的分布,第二次再根据分布对进行红色点采样,概率高的地方密集,概率低的地方稀疏 (很像粒子滤波)。

3.3 Implementation Details (实现细节)

4 Results (实验结果)

本文对比了很多相关的工作例如:

  • Neural Volumes (NV):GitHub - facebookresearch/neuralvolumes: Training and Evaluation Code for Neural Volumes
  • Scene Representation Networks (SRN):GitHub - vsitzmann/scene-representation-networks: Official Pytorch implementation of Scene Representation Networks: Continuous 3D-Structure-Aware Neural Scene Representations
  • Local Light Field Fusion (LLFF):GitHub - Fyusion/LLFF: Code release for Local Light Field Fusion at SIGGRAPH 2019

4.1 Datasets (数据集)

作者对比了在不同数据集中的表现,可以看出基本上所有数据集上都是遥遥领先的:

在仿真数据集上的可视化效果:

在真实数据集上的可视化效果:

4.2 Ablation Studies (消融实验)

我们在数据集 Realistic Synthetic 360◦ 上进行了不同参数和设置下的消融实验,结果如下:

主要对比的是如下几个设置:

  • Positional encoding (PE),即 x
  • View Dependence (VD),即 d
  • Hierarchical sampling (H)

其中:
第1行表示不包含以上任何一个部分的最小网络;
第2-4行表示每次分别去掉一个部分;
第5-6行表示样本图像更少时的效果差异;
第7-8行表示频率 LL (也就是位置编码x 的频率展开级别)设置不同时的效果差异。

论文小结

本文最大的创新点就是通过隐式表达绕过了人工设计三维场景表示的方法,能够从更高维度学习到场景的三维信息。但缺点是速度非常慢,这一点在后续很多工作也有改进。另一方面本文的可解释性,隐式表达的能力,依然需要更多工作来探索。
但归根结底,相信这样简洁有效的方式,未来会成为 3D 和 4D 场景重建的革命点,给三维视觉带来新的爆发。

论文下载

PDF | Website | Code (Official) | Code (Pytorch Lightning) | Recording | Recording (Bilibili)
Colab Example:Tiny NeRF | Full NeRF

参考材料

[1] Mildenhall B, Srinivasan P P, Tancik M, et al. Nerf: Representing scenes as neural radiance fields for view synthesis[C]//European Conference on Computer Vision. Springer, Cham, 2020: 405-421.
[2] https://www.cnblogs.com/noluye/p/14547115.html
[3] https://www.cnblogs.com/noluye/p/14718570.html
[4] https://github.com/yenchenlin/awesome-NeRF
[5] https://zhuanlan.zhihu.com/p/360365941
[6] https://zhuanlan.zhihu.com/p/380015071
[7] https://blog.csdn.net/ftimes/article/details/105890744
[8] https://zhuanlan.zhihu.com/p/384946242
[9] https://zhuanlan.zhihu.com/p/386127288
[10] https://blog.csdn.net/g11d111/article/details/118959540
[11] https://www.bilibili.com/video/BV1fL4y1T7Ag
[12] https://zh.wikipedia.org/wiki/%E6%B8%B2%E6%9F%93%E6%96%B9%E7%A8%8B
[13] https://zhuanlan.zhihu.com/p/380015071
[14] https://blog.csdn.net/soaring_casia/article/details/117664146
[15] https://www.youtube.com/watch?v=Al6NTbgka1o
[16] https://github.com/matajoh/fourier_feature_nets

相关工作

DSNeRF:https://github.com/dunbar12138/DSNeRF (SfM 加速 NerF)
BARF:https://github.com/chenhsuanlin/bundle-adjusting-NeRF
PlenOctrees:https://alexyu.net/plenoctrees/ (使用 PlenOctrees 加速 NeRF 渲染)
https://github.com/google-research/google-research/tree/master/jaxnerf (使用 JAX 实现加快训练速度)

参考网址

  1. http://www.liuxiao.org/2021/11/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%EF%BC%9Anerf-representing-scenes-as-neural-radiance-fields-for-view-synthesis/

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

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

相关文章

高通开发系列 - linux kernel启动阶段串口无打印采用LED点灯

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题背景kernel启动汇编探测kernel启动C函数阶段探测这篇文章之前请参考下:高通开发系列 - MSM8909指示灯操作 问题背景 最近在基于…

38. 外观数列

打卡!!!每日一题 今天给大家带来一道比较有意思的题目,先看看题目描述 题目描述: 题目示例: 大家题目读完可能还没太理解什么意思,我简单给大家翻译翻译: n:表示我们要计算多少次 每一次都是对前面一个…

详细介绍Sentence-BERT:使用连体BERT网络的句子嵌入

Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks 使用连体BERT网络的句子嵌入 BERT和RoBERTa在诸如语义文本相似性(STS)的句子对回归任务上创造了新的最优的性能。然而,它要求将两个句子都输入网络,这导致了巨大的…

代码随想录--二叉树章节总结Part IV 完结篇

代码随想录–二叉树章节总结Part IV 完结篇🎉 1.Leetcode501 二叉树中的众数 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如…

大数据行业如何获取高薪岗位offer?

在互联网行业需要保持不断的学习。学习大数据先思考自身未来想往哪个方向发展,想要入门快、基础深厚,并且需求多应用广建议从JAVA开始学起,找到适合自己的学习方法。 大数据行业人才稀缺,据第三方统计2020年全国招收程序员394699…

mybatis-plus2

目录 一、乐观锁 二、乐观锁与悲观锁的区别 1.乐观锁和悲观锁的应用场景 三、条件查询构造器 四、分页查询 五、逻辑删除 六、在Mybatis-plus中使用xml配置 一、乐观锁 乐观锁插件 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/0d93c0/ 当要更新一条…

16. JSON解析

1. 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是轻量级的文本数据交换格式。 JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台…

Kettle基础操作

目录 Kettle基础操作 1 启动Kettle 2 创建本地资源库 3 基础操作 3.1 新建转换 3.2 新建作业 3.3 节点连接 4 导入/导出资源库 5 创建数据库连链接 Kettle基础操作 1 启动Kettle 前置环境:JDK 1.7以上、IE浏览器升级至IE10以上(Kettle7.0以下…

Java——打家劫舍

题目链接 leetcode在线oj题——打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&#xff…

Hive数仓建设手册

1 数仓的分层及建模理论 1.1 数据仓库的用途 整合公司所有业务数据,建立统一的数据中心产生业务报表,用于作出决策为网站运营提供运营上的数据支持可以作为各个业务的数据源,形成业务数据互相反馈的良性循环分析用户行为数据,通…

MySQL中的正则表达式

目录 一.介绍 二.格式 三.操作 一.介绍 正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正…

5G小区选择重选参数的设置

学习大唐杯的过程中的一些总结。 目录 前言 一、S准则 二、R准则 三、关于频点优先级 总结 前言 5G参数总体的设计思想是在总体成本的控制下,满足覆盖范围和容量的同时,达到5G各个小区之间正确进行通信。 一、S准则 在后续介绍的频点优先级中&#xff0…

【多任务】任务损失/梯度优化策略合集

本文分享如何从loss和gradient方面,优化多任务模型,缓解负迁移或跷跷板的问题。不足之处,还望批评指正。 背景 最近工作中,有使用到多任务模型,但实际使用时,会面临负迁移、跷跷板等现象。 除了从模型角度优化,这里介绍从loss和gradient方面的优化

SpringBoot创建接口

目录 一、创建Spring Boot Project (一)配置Spring Boot (二)配置数据库连接,并启动tomcat 二、新建测试网页——这一步可以忽略,主要是测试配置是否成功 1.新建一个页面 2.创建TestController类 3.启动SpringbootpracticeApplication类——sprin…

【Linux】makemakefile

【Linux】make & makefile 文章目录【Linux】make & makefile1、makefile文件2、make命令3、make原理规则4、.PHONY5、编译与否的判断法1、makefile文件 makefile实际上是一个文件,配置文件 充当Linux上的工程管理工具,可以实现自动化编译 mak…

transformer库的思想

transformer库建立思路 (1) Model类: 如BertModel , 目前收录有超过30个PyTorch模型或Keras模型; (2) Configuration类: 如BertConfig , 用于存储搭建模型的参数; (3) Tokenizer类: 如BertTokenizer , 用于存储分词词汇表以及编码方式; 使用from_pretrained()和save_pretraine…

区块链知识系列 - 系统学习EVM(二)

特点 EVM出于所谓运算速度和效率方面考虑,采用了非主流的256bit整数。不支持浮点数缺乏标准库支持,例如字符串拼接、切割、查找等等都需要开发者自己实现给合约打补丁或是部分升级合约代码在EVM中是完全不可能的 存储 Code code 部署合约时储存 data 字段也就是合…

08-linux网络管理-iptables扩展模块

文章目录1. 概述2. icmp 模块2.1 示例(禁止本机ping其它主机)2.2 示例(其他主机ping本机)2.3 --icmp-type 说明3. iprange模块4. multiport 模块5. state 模块5.1 语法5.2 完整示例6. limit模块6.1 语法6.2 完整示例7. connlimit7…

[2019红帽杯]easyRE1题解

迷蒙马背眠,月随残梦天边远,淡淡起茶烟。 ——松尾芭蕉 目录 1.查壳 2.拖入64位IDA,找到主函数 3.静态分析主函数 4.wp 1.查壳 ELF文件,64bit 2.拖入64位IDA,找到主函数 没有标明main函数,我们打开str…

OSCP_VULHUB COVFEFE: 1

文章目录前言信息收集渗透过程权限提升前言 靶机下载地址:https://www.vulnhub.com/entry/covfefe-1,199/ 攻击机:kali(192.168.132.139) 靶机:covfefe(192.168.132.146) 下载好靶机之后直接使…