简介

github主页:https://github.com/Gword/Recursive-NeRF

Recursive- nerf的核心是学习查询坐标的不确定性,代表每一级预测颜色和体积强度的质量。只有具有高不确定性的查询坐标才会被转发到下一层具有更强大表示能力的更大的神经网络。最终渲染的图像是由各级神经网络的结果组成的

贡献点

  1. 一种递归场景渲染方法,一旦输出质量足够好,早期终止阻止进一步处理,以大大减少的计算实现最先进的新视图合成结果
  2. 一种新颖的多阶段动态增长方法,将不确定查询划分在网络的浅层,并在不同增长的深层网络中继续改进它们,使该方法适应具有不同复杂性区域的场景。

实现流程

NeRF回顾




在Lego数据集上测试了NeRF的PSNR,用于不同数量的网络层(2、4、6、8)、网络宽度(64、128、256)和图像大小(25、50、100、200、400、800)。网络容量与网络层数和网络宽度呈正相关。在这里,图像大小是场景复杂性的代表。可以看出,随着场景复杂性的增加,PSNR先增大后减小。这是因为当场景太简单时,可供学习的信息太少,而当场景太复杂时,就会超出网络的能力。从图2可以看出,当场景比较简单时,不同网络的表征能力是相似的。随着场景变得复杂,不同网络的表示能力之间的差距越来越大。

有一个直观的解决方案:简单地将场景分成几个部分,每个部分由一个相同的独立网络表示。然而,这种解决方案存在问题。每个部分使用相同的网络体系结构,而场景的不同部分的复杂性可能不同,所以理想情况下,应该使用具有不同功能的网络来表示它们。此外,粗粒度的信息将被反复学习。Recursive- nerf使用更复杂的方法克服了这两个问题。


给定位置(x, y, z) 和观看方向 d,初始网络 Φ 1 Φ_1 Φ1​ 输出颜色 c 1 c_1 c1​,密度 σ 1 σ_1 σ1​,不确定度 δ 1 δ_1 δ1​。将所有的不确定点划分为几个类别,然后 Φ 1 Φ_1 Φ1​ 动态增长几个分支网络,继续对每个不确定点的子集进行训练,直到网络相信所有的点都被可靠地预测。在渲染时,早期终止允许不同的点在不同的时间退出,减少网络负载

Recursive Neural Fields


Recursive- nerf的网络结构。对于每个查询(x, y, z, d),网络预测一个不确定性 δ,用于决定查询是否应该尽早完成。如果有,将进入Out Module 预测其颜色 c 和密度 σ。如果不是,则点分割单元(Branch Module)决定它应该随后进入哪个分支。

递归神经场以母分支的输出 y p i y_{pi} ypi​和观看方向 d 为输入,预测颜色 c i c_i ci​、密度 σ i σ_i σi​、不确定性 δ i δ_i δi​ 和潜在向量 y i y_i yi​:

其中 F Φ i F_{Φi} FΦi​ 表示第 i 个子网络。 F Φ 1 F_{Φ1} FΦ1​ 是递归网络的根;在本例中, y p i y_{pi} ypi​ 被设置为查询坐标 (x, y, z)。

子网 F Φ i F_{Φi} FΦi​ 由三个主要部分组成,MLP模块、Branch模块和Out模块

MLP模块包括两个或多个线性层,以确保MLP模块执行足够复杂的特征处理

Branch模块预测每个查询点的不确定度 δ i δ_i δi​,将不确定度低的点转发给Out模块输出,并根据到 F Φ i F_{Φi} FΦi​ 的 k i k_i ki​ 聚类中心的距离将不确定度高的点分配到不同的子网络中

Out模块负责将特征解码为 c i c_i ci​ 和 σ i σ_i σi​

Uncertainty prediction

每个分支网络预测查询坐标的不确定性,用它来确定分支网络的出口。 使用原始的NeRF损失来帮助预测不确定性。NeRF采用渲染图像与真实图像之间的均方误差(MSE)作为粗、细网络训练的损耗:

R包含小批中的射线,而 C ^ c ( r ) \hat{C}_c(r) C^c​(r) 和 C ^ f ( r ) \hat{C}_f(r) C^f​(r) 分别为粗网络和细网络渲染的颜色,C®为真实值

粗和精细的架构专门用于采样点,因为网络设计避免了对每个采样点进行不必要的计算。事实上,之前的不确定性响应可以作为NeRF精细网络的采样指导

引入两个正则化损耗来有效地训练不确定性,在 F Φ i F_{Φi} FΦi​ 的输出特征 y p i y_{pi} ypi​ 之后使用一个线性层来计算不确定度 δ i δ_i δi​

使用像素的平方误差来监督 δ i δ_i δi​,目的是如果像素有很大的误差,产生与样本点相关的不确定性的样本点的 δ i δ_i δi​ 也应该很大。因此,惩罚 δ i δ_i δi​ 小于平方误差:


其中 E® 为射线 r 的平方误差, c i c_i ci​ 为射线 r 的采样点, δ c i δ_{ci} δci​为查询坐标 c i c_i ci​ 的预测不确定度。

为了防止 δ i δ_i δi​ 膨胀,引入了另一个正则化损失:对于每个查询点,鼓励 δ i δ_i δi​ 尽可能接近零

L S E L_{SE} LSE​ 和 L 0 L_0 L0​ 的加权和得到总体不确定性损失:

其中 α 1 α_1 α1​ 和 α 2 α_2 α2​ 为权值,此处设 α 1 α_1 α1​ = 1.0, α 2 α_2 α2​ = 0.01。

使用正则化损失而不是直接使用 L1 损失来训练 δ i δ_i δi​,因为准确预测 E® 的难度与直接预测神经网络查询坐标的颜色差不多。在网络结构中,浅网络很难有准确的 E®。因此, 对 α 1 α_1 α1​ 和 α 2 α_2 α2​ 使用具有不平衡值的正则化损失,使得网络可以对不确定性小于损失的点使用较大的惩罚,而不确定性大于损失的点将较少惩罚。这样,网络将不确定性学习到复杂损失函数的上界,只有真正确定的点才能提前终止。

Multi-scale joint training

因此,尽早完成不确定度低于 ε \varepsilon ε 的查询,并将不确定度大于或等于 ε \varepsilon ε 的点转发到更深的网络。这种提前终止机制可以减少不必要的计算,但不幸的是,也带来了训练困难。对于查询坐标 (x, y, z, d),不确定度可能在某个阶段超过 ε \varepsilon ε,坐标将被发送到更深的网络。然而,如果更深层次的网络之前没有在这个坐标上训练过,它将输出一个几乎随机的值。这会在损耗中造成很大的不稳定性,影响训练,甚至可能造成梯度爆炸。

为了解决这一问题,遵循多尺度密集网络中的做法:每次,所有查询坐标通过所有出口输出;同时输出早期终止的图像,在训练过程中对其损失进行等权加权。总损失函数为:

式中,D为当前的阶段数(也是网络增长的D−1倍), L M S E i L^i _{MSE} LMSEi​ 和 L u n c t i L^i_{unct} Luncti​分别为第 i 层输出图像的 MSE 损失和不确定性损失。 β 1 β_1 β1​ 和 β 2 β_2 β2​ 为权重,设 β 1 β_1 β1​ = 1.0, β 2 β_2 β2​ = 0.1

Dynamic Growth

自适应动态增长策略,该策略在当前阶段对不确定查询进行聚类,并根据聚类结果进行更深层次的网络增长

在初始阶段,网络只包含一个子网络 Φ 1 Φ_1 Φ1​,该子网络由两个线性层组成。在对初始网络进行 I 1 I_1 I1​ 次迭代训练后, 对空间中的一些点进行采样,并计算它们的不确定性。然后将不确定度高于 ε \varepsilon ε 的点聚类;聚类结果决定了下一阶段网络的成长。为了保证聚类的简单可控,使用k-means算法,可以用更高效的聚类算法代替,k∈[2,4]。网络根据聚类中心增加 k 个分支;例如 Φ 2 Φ_2 Φ2​和 Φ 3 Φ_3 Φ3​。在下游,查询点被分配给具有最近集群中心的分支。

当场景变得复杂时,NeRF必须深化它的网络,可以简单地添加更多的分支来获得相同的结果。把这个成长的网络一分为二有两个原因。首先,对点进行分割将降低网络的复杂性,否则,需要对所有点进行更深层次的网络。其次,每个子网络只独立负责场景的一部分,使其更有效和适应性。完整模型优于使用单一分支

基于增长的网络经过多次迭代训练,然后聚类和增长。这个过程可以连续重复,直到大多数点的不确定度小于 ε \varepsilon ε 。为了在合理的时间内完成训练,我指定递归NeRF总计增长3倍。每个增长步骤使用的 k 值可以不同,但默认情况下,将每个增长步骤的 k 设置为2。

在训练过程中,样本点可以在多个阶段退出,而在推理过程中的某一特定阶段,点只会退出一次。较早发现的可靠点将立即退出并被渲染。采用哪个分支取决于聚类的结果。将当前阶段的不确定点聚类,下一阶段将它们传递给具有相同结构的不同子分支。


Alpha线性初始化比较。左:真实图像。中:完整模型的结果。右:没有alpha线性初始化的模型结果。

试验表明,随机初始化网络的直接增长会导致分阶段训练的不稳定性,导致部分增长网络的密度降至0。结果渲染的场景可能缺少片段,上图所示。


OutNet的网络结构。绿色块:全连通层。黄色块:网络的输入输出变量。

其中alpha linear负责将特征解码为查询点的密度。克服这一问题的方法是将成长子网络的alpha线性权值初始化为与父网络相同的权值。这使得子网的密度生成网络可以继承父节点的部分密度信息,避免了这种不稳定性。

Recursive Rendering

与NeRF输出网络最后一层所有点的颜色和密度不同,Recursive-NeRF递归地渲染最终图像。在当前视图下,所有不确定度低于当前阶段阈值的点都可以渲染出一个相对模糊的图像。所有不确定度高于阈值的点进入下一阶段网络进行进一步细化,其他不确定度较低的点退出这一阶段。这些点加上前面所有阶段的点可以渲染出清晰的图像。上图渲染了使用在不同阶段完成的点的图像,这些被合并形成在坐上的最终图像。不确定性在上图中隐式可视化,早期不确定性较低的区域主要是空间和结构简单的表面,如乐高模型的地板。

每个输入查询点 r(t) 从其不确定概率小于 ε \varepsilon ε 的第一个分支网络中退出。 用分支网络预测的颜色 c i c_i ci​ 和密度 σ i σ_i σi​ 来表示公式1所需的 c(r(t)) 和 σ(r(t))。然后用公式1计算查询点的颜色。

其中 R i R_i Ri​ 是包含在第 i 个分支中的点集合。

效果


51、Recursive-NeRF: An Efficient and Dynamically Growing NeRF相关推荐

  1. LeetCode—笔记—51、N皇后——递归回溯,个人思路,简单易懂

    LeetCode-笔记-51.N皇后--递归回溯,个人思路,简单易懂 51. N 皇后 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...

  2. 35、StylizedNeRF Consistent 3D Scene Stylization as Stylized NeRF via 2D-3D Mutual Learning

    简介 主页:http://geometrylearning.com/StylizedNeRF/ 给定一组真实的照片(a)和一个风格图像(b),模型能够生成风格化的新视图©,通过学习风格化的NeRF在3 ...

  3. 51、PIC、AVR、16、32-BIT系列单片机区别与特点

    8031/8051/8751是Intel公司早期的产品. 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764 ...

  4. 51、基于51单片机的GPS定位系统(GSM短信)

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.程序 六.资料包括 摘要 1978年2月22日第一颗GPS试验卫星的入轨运行,开创了以 ...

  5. 51、基于51单片机洗衣机控制系统(带水位)系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+任务书+流程图+元器件清单等)

    摘 要 随着数字技术的快速发展,数字技术被广泛应用于智能控制的领域中.单片机以体积小.功能全.价格低廉.开发方便的优势得到了许多电子系统设计者的青睐.它适合于实时控制,可构成工业控制器.智能仪表.智能 ...

  6. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 有啥区别

    ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...

  7. HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC-05是一款主从一体化的蓝牙模块,因此其使用起来比较方便,只需要进行简单的配置即可. 本文就手把手的介绍小白入手模块后如何使用. 对于模块使用:1.蓝牙配置→2.手机与蓝牙的传输→3.手机通过蓝牙 ...

  8. 51、stm32单片机初学者经验之谈

    51单片机作为最经典的一款单片机,已在各大高校的电子.通信专业的入门单片机课程,想学单片机这是最好的入门单片机. 单片机就是一块芯片,如stc89c52.stm32f103zet6.stm32f103 ...

  9. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?

    本文转自嵌入式资讯精选公众号,特别鸣谢, 编者按:初学习ARM单片机的同学们可能会对ARM的架构定义并不是很明确,形形色色的名词背后到底代表什么含义呢?请听听这位嵌入式工程师的经验总结. ARM架构: ...

最新文章

  1. Session机制二(简易购物车案例)
  2. leetcode 563. 二叉树的坡度(Java版)
  3. 【字符串操作之】返回指定长度的字符串→→substr方法
  4. 前端学习(3167):react-hello-react之鼠标添加一个todoList
  5. python模拟浏览器请求的库_基于Python模拟浏览器发送http请求
  6. 二叉树前序遍历_LeetCode125|二叉树的前序遍历
  7. 解决sodu echo写入文件是权限不足-bash: test.txt: Permission denied
  8. 如何使用定时器产生两路频率可调的PWM波
  9. universal link使用
  10. Redis 下载安装教程 及 客户端可视化工具
  11. jtopo 把节点做成背景图效果
  12. 微信公众号(头部GIF动图)制作方法
  13. 引入Flutter module,执行flutter pub get提示:XXX using an older version of the Android plugin API
  14. Wifi热点java_Wifi热点实现文件传输
  15. 数据结构之树的相关名字解释
  16. 在不开启回收站的情况下恢复Hadoop误删除文件
  17. beego/logs模块的使用
  18. 数据分析项目实战1——淘宝用户购买行为分析(天池)
  19. 如何制作Mountain Lion系统镜像
  20. BATT集体发力搜索,争夺下一代搜索平台的“引路人”

热门文章

  1. VMware vSphere6.0 服务器虚拟化部署安装图解
  2. Java程序设计教程(第三版) 雍俊海 7.3 答案/代码
  3. vue json可视化编辑器 vue-json-editor
  4. onvif 视频28181 1400 区别
  5. simulink+FlightGear飞行器建模仿真
  6. Python open函数打开文件路径
  7. vivo深度学习AI算法面试
  8. Egret中使用TiledMap
  9. 全网优秀的攻防渗透工具总结
  10. 模拟器连不上解决方法