如果说最近两年最火的三维重建技术是什么,相信NeRF[1]是一个绝对绕不过去的名字。这项强到逆天的技术,一经提出,就被众多研究者所重视,对该技术进行深入研究并提出改进已经成为一个热点。仅仅过了不到两年的时间,NeRF及其变种已经成为重建领域的主流。由此可见,NeRF技术出色的实用性。今天,我们就来看一看NeRF是个啥,学习下该方法到底强在哪里。
1. 简介
NeRF全称为Neural Radiance Fields(神经辐射场),是一项利用多目图像重建三维场景的技术。该项目的作者来自于加州大学伯克利分校,Google研究院,以及加州大学圣地亚哥分校。NeRF使用一组多目图作为输入,通过优化一个潜在连续的体素场景方程来得到一个完整的三维场景。该方法使用一个全连接深度网络来表示场景,使用的输入是一个单连通的5D坐标(空间位置x,y,z以及观察视角θ,
总体而言,该方法是一种基于体素的重建方法,通过在多张图片中从五维坐标建立粗到细的对应关系,恢复原始的三维体素场景。那么,我们来看看具体的实现。
2. 实现
NeRF大致可以分为三步:1.通过分析照相视角射线,从一组图片来生成一组采样点;2。将获得的采样点以及与之对应的2D视角方向作为输入,来输出一组颜色和密度(原文中使用的是densities,我的理解应该就是体素表示的一个参数); 3。利用体素渲染技术,利用之前得到的颜色和密度生成希望看到的任意视角照片。下图显示整个算法的pipeline:
值得注意的是,作者说直接输入5D坐标可能会造成算法不能收敛,在文章中,采用一个基于MLP(多层感知器,一种前向人工神经网络)的位置编码来表示高频函数,并提出一个分层抽样程序来减少用于场景重建的查询次数。
2.1 体素渲染
这里的体素渲染是指当从某个视角观察体素模型时,根据该视角发出的光线通过追踪累加到图像中,即得到我们希望得到的指定视角下的渲染结果。公式表示为:
C表示渲染结果的颜色,r表示为一条射线,
文章提出使用正交法来解决。由于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)
版权声明:本文为博主程序猿老甘原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/aliexken/article/details/122664056