火爆科研圈的三维重建技术:Neural radiance fields (NeRF)

2023-11-11

如果说最近两年最火的三维重建技术是什么,相信NeRF[1]是一个绝对绕不过去的名字。这项强到逆天的技术,一经提出,就被众多研究者所重视,对该技术进行深入研究并提出改进已经成为一个热点。仅仅过了不到两年的时间,NeRF及其变种已经成为重建领域的主流。由此可见,NeRF技术出色的实用性。今天,我们就来看一看NeRF是个啥,学习下该方法到底强在哪里。

1. 简介

NeRF全称为Neural Radiance Fields(神经辐射场),是一项利用多目图像重建三维场景的技术。该项目的作者来自于加州大学伯克利分校,Google研究院,以及加州大学圣地亚哥分校。NeRF使用一组多目图作为输入,通过优化一个潜在连续的体素场景方程来得到一个完整的三维场景。该方法使用一个全连接深度网络来表示场景,使用的输入是一个单连通的5D坐标(空间位置x,y,z以及观察视角θ,\phi),输出为一个体素场景,可以以任意视角查看,并通过体素渲染技术,生成需要视角的照片。该方法同样支持视频合成。

整体来说,该方法是一个基于体素重建的方法,通过在多幅图片中的五维坐标建立一个由粗到细的对应,进而恢复出原始的三维体素场景。那么接下来,我们就看一下具体的实现。

2. 实现

NeRF大致可以分为三步:1.通过分析照相视角射线,从一组图片来生成一组采样点;2. 将获得的采样点以及与之对应的2D视角方向作为输入,来输出一组颜色和密度(原文中使用的是densities,我的理解应该就是体素表示的一个参数); 3. 利用体素渲染技术,利用之前得到的颜色和密度生成希望看到的任意视角照片。下图显示整个算法的pipeline:

值得注意的是,作者说直接输入5D坐标可能会造成算法不能收敛,在文章中,采用一个基于MLP(多层感知器,一种前向人工神经网络)的位置编码来表示高频函数,并提出一个分层抽样程序来减少用于场景重建的查询次数。

2.1 体素渲染

这里的体素渲染即表示在以某一个视角去观察体素模型的时候,根据视角发射的光线通过追踪累加到图像上,即得到了我们希望获得的指定视角下的渲染结果,其公式表示为:

C表示渲染结果的颜色,r表示为一条射线,射线经过的两端边界,由近到远,表示为tn于tf,\sigma表示体素密度参数。由上述公式可以看到,颜色是经过射线的一组以tn和tf为边界的t累加而成的。T(t)表示的是这种累积的透光率。当我们希望从一个给定的视角看向目标场景的时候,其对应的颜色信息C(r)就要从neural radiance field中被重建出来。

文章提出使用正交法来解决。由于MLP需要使用固定的离散位置来查找,不同光线的tn到tf在提速上的长度肯定是不同的,因此文章提出使用分层抽样的方法,从tn到tf选出N个均匀间隔,之后再每个间隔随机算一个做累加:

使用间隔采样,能够表示一个连续的场景表示,因为经过MLP产生的结果是被验证的一个连续的位置表示。通过正交累加规则,基于射线的颜色被估计:

 表示相邻两个样本的距离。这个计算是可微的,并且降低了体素累加的结果,使最终结果更加准确。 

2.2 Neural Radiance Field优化

文章指出,只是通过上述步骤还是不能得到高分辨率渲染结果,如下图:

可以看到,在缺少优化的情况下,图像的高频信息会有损失。因此,作者给出两个提升的方法用来获取高分辨率渲染结果:positional encoding与hierarchical sampling procedure。

Positional encoding

直接使用五维坐标作为输入很难建立高分辨率结果。原因在于Deep learning更倾向于学习低频信息(以卷积神经网络为例,低频信息的学习能力决定了其在目标检测方面的优势,而高频更倾向于表达个性化的信息)。Rahaman [5] 提出使用高频函数将数据映射在一个高维空间中,能够在最终结果中保留更多的高频信息。基于此,NeRF提出利用一个positional encoding [6] 实现对高频信息的保持。网络表示为 ,其中,第一项通过学习获得,第二项表示为: 

注意,第二项分别应用于五维坐标中的x,y,z,并且被归一化到 [-1.1]. 一个类似的应用可以在[6]中看到。这里我觉得就是做了一个傅里叶变换变种,用于防止学习过程中对高频的平滑。因为分离了频段,所以可以保持细节信息。

Hierarchical sampling procedure

很显然,这一部分是为了提高体素渲染效率的。这个让我想起当年做光线追踪时,大家玩烂了的八叉树和包围盒什么的。就是用分级的分区结构来避免重复的渲染计算。整体上,Hierarchical sampling procedure 提出一个由粗到细的结构来训练体素网。首先采样一组位置信息,基于stratied sampling,然后训练一个“粗”网络。在此基础上,再训练一个"细"网络。这里就要重写C颜色积分的公式用于粗网络训练:

 

2.3 一些疑问

当我看完了整个框架,对于作者的基本思路有了一个宏观的看法。该方法基本上是利用体素来假定一个三维场景,之后通过多目图象,重建光线追踪中的射线在体素中的查询并累加颜色,最终渲染出指定视角下的一副结果图。网络做的事情就是需要清楚的学习到这个假定体素结构的一些信息,包括颜色以及密度。

让我产生疑问的地方是,作者提到在初始时,需要一些对应的点的五维坐标作为引导,来训练网络,那么对应点是如何获得的?至少在阅读文章后,我依然比较困惑。另一个比较困惑的是,事实上我们并没办法直接给出一个五维坐标,因为输入图片的视角以及三维坐标我们是不知道的。那么如果以五维坐标的形式作为输入,那输入又是从何而来呢?可以知道的是,我们有一组图,这组图由图像的二维坐标以及RGB值。但是深度信息以及视角信息是不知道的。这一部分还要再认真阅读文献以及相关文章进行确认。

3. 部分改进工作

这里只列出一些被媒体报道的部分改进性工作,分别为:

Plenoxels [2] 报道链接:本科生新算法打败NeRF

Block-NeRF [3] 报道链接: 为了自动驾驶,谷歌用NeRF在虚拟世界中重建了旧金山市_TechWeb

Instant Neural Graphics [4] 报道链接:

不可思议!英伟达新技术训练NeRF模型最快只需5秒,单张RTX 3090实时渲染,已开源_腾讯新闻

基本上这些改进工作都是针对原始的NeRF在网络训练阶段的效率问题。Plenoxels是直接拿掉网络训练,在保留体素渲染方程的前提下,使用一个更简单的模型来替换网络训练部分,以提高效率。Block-NeRF是一个分区方案吗,在超大规模场景重建时,使用合适的分区方式,将多个NeRF场景做组合,使得NeRF能够被用来重建超大规模场景。作者用该工具重建了旧金山。Instant Neural Graphics则是利用一种新的技术来加速NeRF训练。考虑到作者是Nvidia的研究者,该项技术应该使用了更好的并行技术。未来我们将对Instant Neural Graphics做深入的学习,有兴趣的同学可以持续关注我的博客。

4. 总结

NeRF一经提出就被众多学术界于工业界的研究者所重视。相关的改进技术被不断地提出。其对体素渲染方程的使用以及利用网络框架优化三维场景的想法,基本上奠定了未来一段时间三维重建的技术路线。这项技术的一些原理,非常像光线追踪技术。我甚至怀疑作者当初做过光线追踪,然后觉得似乎可以将其用作三维重建中,毕竟利用体素的累积形成指定视点的结果以及分层架构等概念,都跟光线追踪的一些经典技术保持了一致。由于很多工业界研究者已经开始尝试利用该项技术解决三维重建的问题,相信在不远的将来,此项技术将大放异彩,对于元宇宙概念落地,具有极大的帮助。按照科研技术落地的研究周期,一般为5-10年时间。NeRF是2020年提出的技术,那么,至少到2025年,对于该项技术的研究都属于前沿。因此,有志于三维重建技术学习的同学,可以尽早准备,入坑NeRF变种算法研究。

Reference

[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] Yu A, Fridovich-Keil S, Tancik M, et al. Plenoxels: Radiance Fields without Neural Networks[J]. arXiv preprint arXiv:2112.05131, 2021.

[3] Tancik M, Casser V, Yan X, et al. Block-NeRF: Scalable Large Scene Neural View Synthesis[J]. arXiv preprint arXiv:2202.05263, 2022.

[4] Müller T, Evans A, Schied C, et al. Instant Neural Graphics Primitives with a Multiresolution Hash Encoding[J]. arXiv preprint arXiv:2201.05989, 2022.[]

[5] Rahaman, N., Baratin, A., Arpit, D., et al. On the spectral bias of neural networks. In: ICML (2018)

[6] Vaswani, A., Shazeer, N., Parmar, et al. Attention is all you need. In: NeurIPS (2017)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

火爆科研圈的三维重建技术:Neural radiance fields (NeRF) 的相关文章

随机推荐

  • leetcode分类刷题:哈希表(Hash Table)(三、循环存在问题)

    1 当需要快速判断某元素是否出现在序列中时 就要用到哈希表了 2 本文针对的总结题型为给定的序列或需要构造的序列中是否存在循环 与 160 相交链表 141 环形链表 142 环形链表 II的题型一样 202 快乐数 这道题还考察如何对正整
  • AndroidStudio内各个模拟器的安装位置

    As中 下载的本地模拟器的位置位于 android avd目录下 当该目录被删除后 打开AndroidStudio的AVD 会发现所有的下载过的模拟器都没有了
  • 【2021-04-07华为机试】第二题:各任务执行完毕需要的时间

    题目 给定N个任务 1 lt N lt 100 任务编号从0开始顺序累加 这N个任务在系统中排队顺序执行 每个任务的自身执行时间为非负整数 依次为t1 t2 tn 部分任务之间存在依赖关系的 某任务所依赖的任务如果没有执行 则该任务需要重回
  • IDEA 中设置自动补全方法

    最近转用 IDEA 但习惯于 Eclipse 的快捷键和快捷输入 以下是在 IDEA 中增添快捷键和快捷输入的方法 1 File Settings 2 Editor Live Templates Add Template Group gt
  • Ant Design Pro新增页面步骤

    新增页面步骤 根据页面结构规范创建页面文件后 接着在项目根目录寻找config文件夹下的routes js中添加该页面项的路由配置 如创建子路由则在父路由下定义routes属性 值为一个数组 数组中为该路由的子路由路由配置项 如下图 exp
  • 微信隐藏功能系列3:微信关闭朋友圈广告推送

    我们使用微信好多年了 这个工具不仅仅在社交上为我们带来许多好处 工作 消费中也是给我们带来不少方便之处 大家对微信隐藏功能了解多少 本期分享 微信关闭朋友圈广告推送 虽然微信为我们带来许多方便 但令人不适的东西也是有的 广告就是其中之一 特
  • python如何创建二维数组

    关于python中的二维数组 主要有list和numpy array两种 好吧 其实还有matrices 但它必须是2维的 而numpy arrays ndarrays 可以是多维的 两者可以相互转化 下边是两者区别 数组list gt g
  • linux va_start 编译,如何把unix 下的c程序移植到suse linux下,编译出错?

    FILE gfp out stdout 第45行 报 err c 45 error initializer element is not constant include int err set info char ps error typ
  • c++:STL容器及其接口(string、vector、deque、stack、queue、list、set/multiset、map/multimap)

    STL Standard Template Library 标准模板库 目录 一 STL 六大组件简介 二 string容器 2 1 string容器基本概念 2 2 string 构造函数 2 3 string基本赋值操作 2 4 str
  • 第五章可视化

    1散点图 1 代码 A 未处理异常值 import ggplot as gp import pandas as pd import numpy as np crime pd read csv crimeRatesByState2005 cs
  • git交互式暂存 git add -i 这个骚操作存在的意义为何

    文章目录 启用交互暂存 暂存常用的命令 交互暂存的意义在哪 应该场景的进一步说明 你已经能非常熟练的使用 git了 暂存是其中最基本的操作了 交互暂存是暂存的高级用法 虽然可以不用 但是在某些特定场景下 可以提高我们的工作效率 下边请看详细
  • Opencv3.1+python2.7的CentOS7安装

    time Jan 13 2016 20 29 author duanxxnj 163 com 花了两天时间才把Openv3 1的Python安装完成 中间遇到了好多奇怪的错误 在这里记录下整个安装过程 系统环境 Duanxx CentOS
  • js debugger的两种方式

    第一种 在js代码中加上debugger class ReactiveEffect constructor fn scheduler this fn fn this scheduler scheduler this active true
  • HDU - 6126 Give out candies

    Give out candies 题解 第一次遇见这样处理的网络流模型 将问题转换成最小割问题 具体的题解参考自 传送门 先将每个人的拆成m个人 然后s向第1人连边流量为inf 第i个人向第i 1个人连边 流量为 3000 w 将t视为每组
  • 自用IdeaVim配置

    具体配置如下 nnoremap
  • STL之set集合容器

    set集合容器实现了红黑树 Red Black Tree 的平衡二叉检索树的的数据结构 在插入元素时 它会自动调整二叉树的排列 把该元素放到适当的位置 以确保每个子树根节点的键值大于左子树所有节点的键值 而小于右子树所有节点的键值 另外 还
  • 校门外的树C语言详解

    题目描述 某校大门外长度为 l 的马路上有一排树 每两棵相邻的树之间的间隔都是 1 米 我们可以把马路看成一个数轴 马路的一端在数轴 0 的位置 另一端在 l 的位置 数轴上的每个整数点 即 0 1 2 l 都种有一棵树 由于马路上有一些区
  • 自动化办公:4、 Python操作PDF

    1 相关介绍 PyPDF2 读取 写入 分割 合并PDF文件 pdfplumber 读取 PDF 文件中内容和提取 PDF 中的表格 pip install PyPDF2 pip install pdfplumber 2 批量拆分 将一个完
  • 2017“编程之美”终章:AI之战勇者为王

    编者按 8月15日 第六届微软 编程之美 挑战赛在选手的火热比拼中圆满落下帷幕 编程之美 挑战赛是由微软主办 面向高校学生开展的大型编程比赛 自2012年起 微软每年都在革新比赛命题 紧跟时代潮流 如今的 编程之美 挑战赛已成为优秀学子切磋
  • 火爆科研圈的三维重建技术:Neural radiance fields (NeRF)

    如果说最近两年最火的三维重建技术是什么 相信NeRF 1 是一个绝对绕不过去的名字 这项强到逆天的技术 一经提出 就被众多研究者所重视 对该技术进行深入研究并提出改进已经成为一个热点 仅仅过了不到两年的时间 NeRF及其变种已经成为重建领域