欢迎光临散文网 会员登陆 & 注册

NeurlPS'23开源 | 大规模室外NeRF也可以实时渲染

2023-11-07 20:36 作者:3D视觉工坊  | 我要投稿

作者:泡椒味的口香糖  | 来源:3D视觉工坊

在公众号「3D视觉工坊」后台,回复「原论文」可获取论文pdf和代码链接。

添加微信:dddvisiona,备注:三维重建,拉你入群。文末附行业细分群。


NeRF确实很火,但现有工作主要还是面向室内场景。因为室外环境是一个典型的无边界问题,这样NeRF射线就没办法采样,而且室外环境的计算量也是很大的问题。

今天,笔者将为大家分享一篇NeurlPS 2023开源的最新工作UE4-NeRF,是一种大规模室外场景的实时NeRF框架,还支持交互式的编辑渲染。希望能对NeRF领域的小伙伴有所帮助~这里也推荐「3D视觉工坊」新课程《基于深度学习的三维重建MVSNet系列 [论文+源码+应用+科研]》。

先介绍一下UE4-NeRF的输入输出,输入是无人机采集的大规模场景,输出是在UE4中进行的实时渲染,还有场景编辑功能。


然后看看具体的重建效果对比,UE4-NeRF渲染的清晰度很高,但之前的Mobile-NeRF和Mega-NeRF就比较模糊模糊。

即使是对玻璃这种半透明物体,也可以渲染的很好。

代码已经开源了,目前支持Windows和20/30系列显卡,感兴趣的小伙伴可以测试一下效果。下面我们来看具体的论文信息。

神经辐射场 (NeRF)是一种新颖的隐式三维重建方法,显示出巨大的潜力,受到越来越多的关注。它能够仅从一组照片中重建3D场景。然而,它的实时渲染能力,尤其是对于大规模场景的交互式实时渲染,仍然具有显著的局限性。为了应对这些挑战,本文提出了一种新的神经渲染系统UE4-NeRF,专门用于大规模场景的实时渲染。我们把每个大场景分成不同的子场景。为了表示分割后的独立场景,我们通过在场景中构造多个正八面体来初始化多边形网格,并在训练过程中不断优化多边形面的顶点。从细节层次(LOD)技术中汲取灵感,我们为不同的观察层次训练了不同细节层次的网格。我们的方法与Unreal Engine4 (UE4)中的光栅化管道相结合,实现了4K分辨率的大规模场景的实时渲染,帧率高达43 FPS。UE4中的渲染也有助于后续阶段的场景编辑。此外,通过实验,我们证明了我们的方法实现了可与最先进的方法相媲美的渲染质量。

UE4-NeRF的核心思想是将大场景分块为多个小场景,将小场景表征为多面体,然后再不断优化网格顶点位置

具体的Pipeline包含三个模块:

(1) 训练模块,划分子NeRF并初始化每个小场景的网格。整个训练过程不断优化编码器-解码器网络的参数和网格顶点位置;

(2) 预渲染,提取不同细节层次的多边形网格,为最终渲染做准备;

(3) 渲染模块,由推理子模块和UE4子模块组成,通过通信来实现最终的实时渲染。

Pipeline里有几个trick:

1、分割block时,实际训练区域要比提取区域稍大一些,这样来保证不同block边界的平滑过渡;

2、初始化是先建立一个128×128×128的网格,然后选择每个网格的中心点及其六个相邻的网格(前、后、左、右、上、下)来创建多边形网格。

3、为了解决Mobile-NeRF在处理倾斜表面时遇到的收敛速度慢且不稳定的问题,使用具有20个面的正八面体,包括8个外部面和12个内部面。

然后说一下具体的训练过程:

对于从相机原点发射到像素的每条射线,计算与多边形网格的交点作为采样点。对于每个模块,编码器以位置信息pi作为输入,输出包含不透明度的8D特征向量Mi,解码器以Mi和射线方向作为输入,输出采样点的颜色。射线方向编码用的球谐系数。

渲染就和传统NeRF很相似了,包括光度损失和深度损失两部分。不同点一个是把体密度换成了不透明度,另一个是光度损失分成了两个级别。第一级就是传统的光度损失,Vp是顶点位置:

为了提高三角形网格与物体表面的接近度,设计了光度损失的第二个分量:

这个损失的原理是,仅选择不透明度大于阈值的采样点。并且当累积的不透明度超过0.8时,直接停止渲染过程。刚开始训练时其实第二个损失没有什么影响,随着训练进行,第二个成分的权重逐渐增加,将不透明度集中在有限数量的特定网格上,并将其向目标压缩,从而改善渲染结果。

下面再说这个预渲染是啥?

先一句话总结一下:利用来自加速网格的预测值来识别和移除不具有显著几何表面的网格。目的是提高网格利用率、渲染推理速度,降低存储成本。

具体流程是:

1、对每个block,除了用于训练的相机视角外,引入上方各个角度的平行射线。计算每条射线与多边形网格的交点,当累积不透明度超过0.8时,光线的遍历停止。如果一个三角形面上所有交点的不透明度都低于0.3,那就直接裁掉这个面。

2、进行坐标变换,对齐获得的网格和现实世界的尺度。

3、将三角形的顶点坐标映射到它们在UV坐标中的相应位置。

最后,就可以将预渲染的多边形网格与Unreal Engine 4 (UE4)中可用的光栅化pipeline相结合。随后,应用解码器网络将每个像素的17D特征(8个通道和9D观察方向)转换为RGB颜色。

训练在3090上进行,每个block大约需要训练40分钟。UE4-NeRF是面向室外大场景,具体的实验环境包括无人机采集的农村(FL)、建筑工地(CS)、工业园区(IP)。采集的图像分辨率为6000×4000像素并且包含GPS信息(用来转换尺度)。使用4k分辨率实时重建的速度为43 FPS(论文中提到提升续航后可以更快)。

重建精度的定量对比,UE4-NeRF的重建速度和精度都非常好,并且对GPU要求很低。这也是实时性的一个体现,毕竟无人机不能真顶一个4090去飞。

UE4-NeRF和其他3个NeRF重建效果的定性对比,NeRFacto和Instant-NGP(NVIDIA提出的5s训练)也是实时方案。结果显示UE4-NeRF特别擅长渲染小、密集、半透明的物体。

训练时间和FPS的对比,Mobile-NeRF训练一个块就需要2天时间,并且需要4块3090ti。而且Mega-NeRF在训练过程中会生成几百G的临时文件。

低纹理区域的渲染质量也很不错。

最后是一个交互性的编辑实验,UE4-NeRF允许导入和编辑渲染的场景,还能自动处理遮挡场景(因为使用了Unreal Engine4)。而且当目标遮挡NeRF渲染的场景时,由于NeRF计算量减少,渲染帧率略有提高。这里也推荐「3D视觉工坊」新课程《基于深度学习的三维重建MVSNet系列 [论文+源码+应用+科研]》。

UE4-NeRF提出了一个面向室外大场景的实时NeRF渲染系统,主要思想是将场景划分为多个block,并为每个block训练单独的NeRF。感觉这项工作还是挺有意思的,但是模型设计上用了特别多的trick。此外,作者也提到了一些他们工作的问题:

1、依赖GPU,渲染几平方公里的大场景时内存开销太大(这好像不是问题吧?);

2、在预渲染过程中,很难捕捉到任何视角的射线,导致最终的渲染场景存在空洞。

3D视觉细分群成立啦!

目前工坊已经建立了3D视觉方向多个社群,包括SLAM、工业3D视觉、自动驾驶方向。
细分群包括:
[工业方向]三维点云、结构光、机械臂、缺陷检测、三维测量、TOF、相机标定、综合群;
[SLAM方向]多传感器融合、ORB-SLAM、激光SLAM、机器人导航、RTK|GPS|UWB等传感器交流群、SLAM综合讨论群;
[自动驾驶方向]深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器讨论群、多传感器标定、自动驾驶综合群等。
[三维重建方向]NeRF、colmap、OpenMVS、MVSNet等。
[无人机方向]四旋翼建模、无人机飞控等。
除了这些,还有求职、硬件选型、视觉产品落地等交流群。
大家可以添加小助理微信: dddvisiona,备注:加群+方向+学校|公司, 小助理会拉你入群


NeurlPS'23开源 | 大规模室外NeRF也可以实时渲染的评论 (共 条)

分享到微博请遵守国家法律