前不久,谷歌公布了一系列与AR导航、沉浸式立体地图相关的更新,让我们进一步了解谷歌3D地图的发展路径,包括基于海量街景数据合成3D,以及后续会在街景相机上加入LiDAR模组,来实现3D定位等等。
相比于Niantic、Snap等初创公司,谷歌LBS AR、3D地图领域更具优势,仅背靠谷歌地图、谷歌地球就拥有大量的环境和定位数据,因此扩展3D地图布局将更加顺利。
不仅如此,谷歌已经开始从多方面着手收集3D的环境数据。比如,谷歌母公司Alphabet旗下的自动驾驶汽车项目Waymo,近期就公布了图像合成模型NeRF的衍生版本:Block-NeRF,其特点是可通过自动驾驶汽车的传感器来收集街区的环境数据,并根据这些数据来合成大规模的3D场景。
据了解,NeRF简单来讲就是神经辐射场,原理是使用MLP神经网络隐式的学习一个静态3D场景,并通过静态图像,去渲染大规模3D场景的任意角度。
与此前谷歌的其他NeRF模型相比,Block-NeRF采用自动驾驶汽车Waymo用传感器收集的路面数据,来生成区域神经辐射场,并组合成3D场景。Block-NeRF不局限于车辆经过的路面场景,也可以3D重建完整的大规模环境。比如,Waymo利用Block-NeRF渲染了旧金山阿拉莫广场街区(约半平方公里),其中包括35个街区NeRF模型。
经过三个月时间,Waymo捕捉280万张图片。一些场景甚至需要超过13小时车程(1330次驾驶)收集的数据。Waymo表示:我们构建了迄今为止最大的神经辐射场,可渲染出旧金山的完整街区。
Block-NeRF的亮点是比NeRF方案渲染的环境规模更大,其规模可跨越城市多个街区,因此有潜力渲染城市规模的3D场景。实际上,Block-NeRF是将多个街区分解为单独的NeRF,并分别训练这些分区NeRF,然后通过进行组合而生成完整场景。
分区训练NeRF的好处是,可分解渲染时间,可快速扩展至任意大渲染规模,而且每一块NeRF都可以独立更新。
因此,利用Block-NeRF生成的3D场景可任意角度查看,而且可以调整一天任意时间的光影等元素变化。
等等,怎么听上去像这么像是一个三维建模引擎,传统的引擎是基于虚拟场景建模,而Block-NeRF则是基于真实场景来建模,同样是建模,也见证了不同公司的不同视角。
很显然,在面向LBS AR/MR的交互场景下,基于Block-NeRF的潜力无穷大。未来的AR将不局限于Local模式,基于真实世界的虚拟场景锚定将呈现完全不同的体验。
随着技术发展,神经辐射场在给定一组相机姿态图像后,可实现照片级保真的3D重建和新视图合成。不过,早期的方案主要针对小规模场景、目标物体为中心进行重建,难以实现城市级的规模化3D重建(重建大场景时容易导致明显的伪影和低视觉保真度)。
大规模3D场景重建有多种用途,可用于自动驾驶、航空测量等领域。比如地图映射,为真实场景创建高保真的3D地图,以帮助机器人定位、导航和躲避障碍。此外,大规模场景建模也可用于闭环机器人模拟。
对于自动驾驶系统来讲,可生成任意视图的3D场景可提升导航的稳定性,因为3D场景模型记录了场景中可能出现的变化(比如环境照明条件、相机曝光、天气和时间变化、汽车和行人运动),因此在实际导航时,即使路面信息变化,车辆的轨迹也不容易被改变。
不过,这种动态变化的3D场景无法依赖一次性采集的环境数据,为了体现场景中不同区域的变化,这些区域分别需要独立的数据源。因此,Waymo在NeRF基础上进行扩展,将一个场景分为多个block/区域,并通过外观嵌入和学习姿态细化,以此开发了Block-NeRF模型,来计算动态环境变化。
相比于统一的NeRF模型,Block-NeRF更加模块化,其好处是降低渲染时间和对算力的依赖,在扩展3D场景规模时,无需重新训练整个网络。也就是说,只需要独立渲染每一个Block-NeRF的分区,然后根据它所在的位置,合称为3D场景。
这些NeRF模块可并行渲染和训练,在计算过程中可实现场景的平滑合成。同时,还优化了外观代码,以匹配环境光照条件,动态调整亮度权重。
而为了让Block-NeRF在不同环境中也能稳定捕捉数据,Waymo更改了几种架构设计,并为每个独立的NeRF加入外观嵌入、学习姿态细化和可控曝光功能。此外,为了提升NeRF模块的组合效果,还引入了一个专门的拼接匹配程序。
为了覆盖目标环境,Waymo会在每个交叉口放置一个Block-NeRF,可覆盖相关街道75%面积。这意味着两个相邻街区常常有50%试图重叠。这些NeRF模块的尺寸和布局可自定义,只要确保完整覆盖整个场景即可。
为了展示研究成果,科研人员分别创建了基于旧金山阿拉莫光场和使命湾合成的3D场景。据悉,阿拉莫广场面积960x570米,数据分别捕捉于6月、7月和8月,共由35个Block-NeRF组成,经过了38到48次数据收集训练,训练每个Block-NeRF分别使用了6.5万到10.8万张图像数据,累计采集时间为13.4小时(1330次数据采集)。
使命湾数据集则是一个对照数据,作为Block-NeRF的训练基准。该数据是在2020年11月一次性采集的,捕捉到的图像拥有一支的环境条件,采集时间超过100秒,包含1.08公里车程、1.2万张图像。
经过实验验证,科研人员发现Block-NeRF还存在一些局限,比如:
1)如果对象未正确遮盖,它们可能会导致生成的渲染中出现伪影,比如正确移除汽车后,常常还会留下汽车的影子。
2)另外,合成场景中的植被也打破了沉浸感,因为树叶会随风移动的特性,导致树木和植物的渲染结果模糊。
3)训练数据中可能会出现时间不一致的模块,需要手动重新训练。
值得注意的是,目前Block-NeRF还无法渲染动态对象,未来可以在优化过程中训练瞬态对象,或是直接对动态对象建模来解决这一问题。也可以通过分割掩模、边界框来分离Block-NeRF和单独可控的NeRF对象。
此外,还需要采用缓存技术、稀疏体积网格等方式,来优化NeRF渲染的计算成本、延迟。参考:Waymo