查看原文
其他

Google发布最新研究成果,城市级3D神经渲染再升级~

深度抑郁患者 GIS小丸子 2022-07-25
最近Google发布了一份名为《Block-NeRF:可扩展的大场景神经视图合成》的最新研究成果,该研究的重点就是将NeRF的应用场景从小微场景或者说单个场景对象扩展到的城市级别,并且实现了在场景需要更新的时候只需要进行场景的分块更新,而不再需要整个场景的全量训练和更新。

很多网友将该成果称作Google Maps 2.0或者 Neural Google Maps,一个可以想象的场景就是未来的街景地图会不会就不再是现在这种“点+全景图片”的方式,而是可以做成这种连续真实、视角可以任意切换的灵活场景,同时未来的元宇宙中的物理空间表达又多了一种可选的形式。
根据项目页面上的介绍当前横过是由UC Berkeley、 Google Research 和Waymo三方共同完成,同时从备注上看该工作成果其实是一份在Waymo的实习成果。

最近这段时间神经渲染(Neural rendering)相关的进展发展非常快,也有人提出该方案是最有可能挑战目前游戏引擎的渲染方案,NeRF在一系列具有挑战性的场景中,都展现出非常高的保真度,其核心的思想包含两个部分:
第一、 用神经网络权重建模了场景的辐射场和密度,这个用我们GIS的语言来时就是数据模型;
第二、就是体积渲染(Volume rendering)用于合成新视角视图,所谓的新视角合成其实也是一个细分的领域,其主要研究通过给定场景的一组输入图像及其相机姿态,然后可以合成以前未观察到的视点渲染观察到的场景内容,从而允许用户以高视觉保真度在重新创建的环境中导航。

论文还回顾了目前传统3D重建方法的共同流程:
1、提取 2D 图像特征(例如 SIFT );
2、在不同图像中匹配这些特征;
3、联合优化一组 3D 点和相机的姿态与这些匹配一致(经过深入研究的光线平差问题)。
这些方法通常为每个输入图像和一个稀疏的 3D 点云输出一个相机姿态,为了获得完整的 3D 场景模型,这些输出必须通过密集的多视图立体算法(例如 PMVS )进一步处理,以生成密集的点云或三角形网格。这个过程存在其自身的扩展困难,生成的 3D 模型通常在纹理有限或镜面反射有限的区域中包含伪影或孔洞,因为它们难以跨图像进行三角测量,而NeRF的思路则完全与当前的方案不同。
2021年年底的时候我发过一篇《城市海量3D数据可视化新思路~》的文章大概跟进了一下NeRF和香港中文大学基于NeRF扩展的City-NeRF,该方案的核心也是试图将NeRF从小范围扩展到城市大范围场景,其核心思路则是分尺度的渐进渲染融合,也取得了不错的效果。

Block-NeRF虽然也是研究如何将NeRF扩展到城市大范围场景,但是主要研究内容主要还是集中在横向范围的扩展上,在纵向的尺度上并未过多的涉及,当然这应该也是和相应的业务需求牵引导致的,当前的成果是在Waymo完成,从论文中适用的应用场景介绍上来看,当前的研究成果主要还是希望能够应用到自动驾驶相关领域,因为自动驾驶经常需要通过重新模拟之前遇到的场景来进行系统的评估和优化,所以需要一个高保真的地图来提供这样的先验问题训练环境,同时还需要能够改变相应的环境条件,包括相机曝光,天气或一天中的时间,来进一步增强模拟场景。
如果利用原生的NeRF进行城市级别场景重建会遇到如下几方面的问题:
1、模型容量的限制;
2、内容和计算约束;
3、瞬时态物体的存在,比如针对大型的地标建筑,我们不可能全部拍摄到静态的地物,大部分都会存在行人、车辆以及施工工地等等,但是在实际使用中我们是不希望存在这些瞬时态信息的存在的;

4、外观不一致,如此大型环境的训练数据不可能在一致的条件下通过一次捕获中收集。相反,环境不同部分的数据可能需要来自不同的数据收集工作,这样会引入两种场景几何形状的差异以及外观条件的差异。
5、NeRF 只适用于控制好的环境:这些场景都是在一小段时间内进行拍摄,光照影响都保持不变,并且所有场景的内容都保持不变,当面对移动的物体或者光照变化情况下的场景,NeRF 的性能会明显下降。
NeRF 假设场景是在几何、材质和摄影角度上,都是静态的,即场景的密度和辐射场都是静态的。因此,NeRF 需要让两个在相同位置和朝向上,拍摄出的照片必须完全一致。  但是这种假设在很多真实数据集上并不成立,例如大量网络上的地标建筑的数据集。把 NeRF 应用在这种数据集中,会出现不精确的重构:会出现鬼影、过度的平滑和其他问题。
为了解决这个问题,Martin-Brualla R提出了NeRF-W方案对NeRF进行扩展,这也是Block-NeRF在处理外观和瞬时态对象的基础,其核心的思路分为两个部分:第一、显式建模图像外观的变化,如曝光、光照、天气和后处理,应用GLO技术,在输入的时候针对每张图像赋给一个对应的实值外观嵌入(appearance embedding)向量;第二、把场景建模为共享(shared)元素和图像相关(image-dependent)元素的并集,这样把场景内容分解为静态和瞬态分量,优化时能够识别和消除瞬态图像内容,因此只渲染出静态组件,进而合成逼真的新视图,详细过程如下图所示:

在容量和计算约束方面,Block-NeRF网络则是将整个场景拆分成多个可以独立训练的 Block-NeRF,比如论文中案例给出的方案(如下图所示,3 个月内收集的数据重建了旧金山的阿拉莫广场社区)是在每个十字交叉路口防止了一个Block-NeRF,其需要覆盖和交叉路口相连任何街道的75%,这样就导致任何两个相邻的Block-NeRF有50%的重叠度。


在进行场景渲染的时候,计算可视范围内关联到的Block-NeRF,对于虽然是范围内但是低可见度的Block-NeRF需要抛弃,对于剩余的Block-NeRF可以通过反距离加权的方式进行场景计算和组合。


以上就是关于Block-NeRF一些内容,理解不是特别深入,可能会存在一些错误,主要是对于思路的理解和分享,当然最近伯克利团队也发表了一份研究成果觉得基于神经网络的训练需要付出的是大量的计算时间,以进行训练和渲染,所以他们提出了一种不需要神经网络的训练方法,可以取得更高的效率,这部分内容等有机会再了解介绍一下,但是总体上围绕NeRF展开的研究和实践确实可以在未来在3D场景重建和表达上带来不少的进步,也值得3D相关领域从业人员的关注和跟进。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存