为了训练自动驾驶系统,科技公司需要高精地图、海量数据和虚拟环境。每家公司都有自己的方法,例如 WayMo 拥有自动驾驶出租车队,而其他公司如英伟达则建立了用于大规模训练的虚拟环境。最近,谷歌的研究团队与旗下的 WayMo 公司合作,尝试通过 280 万张街景照片重建旧金山市区的 3D 环境。

借助大量街景图片,研究人员构建了一个名为 Block-NeRF 的网格,成功实现了迄今为止最大的神经网络场景表征,渲染了旧金山的街景。

Block-NeRF 是神经辐射场的一种变体,专门用于大规模环境的表征。研究显示,当扩展 NeRF 以渲染跨越多个街区的城市场景时,将场景分解为多个单独训练的 NeRF 是至关重要的。这种分解方法将渲染时间与场景大小分离,使得渲染能够扩展到任意大环境,并允许逐块更新场景。
该研究引入了几项架构改进,使 NeRF 能够适应数月内不同环境条件下捕获的数据,为每个 NeRF 增加了外观嵌入、学习姿态细化和可控曝光,并提出了一种对齐相邻 NeRF 外观的程序,以实现无缝组合。
《NeRF: RepResenting Scenes as NeuRal Radiance Fields foR View Synthesis》是加州大学伯克利分校研究人员在 ECCV 2020 上发表的一篇论文,获得最佳论文提名。该论文提出了一种隐式 3D 场景表征,与传统的显示场景表征(如点云、网格)不同,其原理是求解穿过场景的任意光线的颜色,从而渲染合成新视角的 2D 场景图像。
在给定一组姿态相机图像的情况下,NeRF 能够实现照片般逼真的重建和新视图合成。早期的 NeRF 工作主要集中在小规模和以对象为中心的重建。尽管现在有一些方法可以重建单个房间或建筑物大小的场景,但这些方法的范围仍然有限,无法扩展到城市规模的环境。由于模型容量的限制,这些方法在大型环境中的应用往往导致明显的伪影和低视觉保真度。
重建大规模环境在自动驾驶、航空测量等领域具有广泛的应用前景。例如,可以创建大范围的高保真地图,为机器人定位、导航等应用提供先验知识。此外,自动驾驶系统通常通过重新模拟以前遇到的场景进行评估,然而任何与记录存在的偏差都可能改变车辆的轨迹,因此需要沿着路径进行高保真的视图渲染。除了基本的视图合成,基于场景的 NeRF 还能改变环境照明条件,例如相机曝光、天气或一天中的不同时间,从而进一步增强模拟场景。

如上图所示,谷歌的 Block-NeRF 方法通过使用多个紧凑的 NeRF 表征环境,成功实现了大规模场景重建。在推理时,Block-NeRF 可以无缝结合给定区域的相关 NeRF 渲染。上图展示的示例使用了三个月内收集的数据重建了旧金山的阿拉莫广场社区。Block-NeRF 允许对环境的各个块进行更新,而无需重新训练整个场景。
重建如此大规模的环境面临额外挑战,包括瞬态物体(如汽车和行人)的存在、模型容量的限制以及内存和计算限制。此外,在一致的条件下,极不可能在一次捕获中获取如此大环境的训练数据。相反,环境的不同部分数据可能来自不同的数据收集工作,这会在场景几何(如建筑施工和停放的汽车)以及外观(如天气条件和一天中的不同时间)中引入差异。
该研究通过外观嵌入和学习姿态细化扩展了 NeRF,以应对收集数据中的环境变化和姿态错误,并为 NeRF 添加了曝光条件,以在推理过程中修改曝光能力。经过这些变化后,研究人员称该模型为 Block-NeRF。扩大 Block-NeRF 的网络容量可以表征更大的场景。然而,这种方法本身也存在许多限制:渲染时间随着网络大小的增加而变化,网络不再适合单个计算设备,而更新或扩展环境则需要重新训练整个网络。
为了解决这些挑战,研究人员提出将大型环境划分为多个单独训练的 Block-NeRF,在推理时动态渲染和组合。单独建模这些 Block-NeRF 可以实现最大的灵活性,扩展到任意大的环境,并提供以分段方式更新或引入新区域的能力,而无需重新训练整个环境。计算目标视图时,只需渲染 Block-NeRF 的子集,并根据它们相对于相机的地理位置进行合成。为了实现更无缝的合成,谷歌提出了一种外观匹配技术,通过优化不同 Block-NeRF 的外观嵌入,将它们进行视觉对齐。

图 2:重建场景被分成多个 Block-NeRF,每个 Block-NeRF 在特定原点坐标(橙色点)的某个原型区域(橙色虚线)内的数据上进行训练。
该研究在 MIPNeRF 的基础上构建了 Block-NeRF 实现,改善了因输入图像从多种不同距离观察场景造成的 NeRF 性能损害。研究人员结合了来自 NeRF in the Wild (NeRF-W) 的技术,在将 NeRF 应用于 Photo TouRiSM 数据集中的地标时,为每个训练图像添加潜在代码,以处理不一致的场景外观。NeRF-W 从数千张图像中为每个地标创建一个独立的 NeRF,而谷歌的新方法则通过从数百万张图像中重建一个连贯的大环境,结合了多个 NeRF,并引入了学习相机姿态细化。

图 3. 新模型是 MIP-NeRF 中提出的模型的扩展。
一些基于 NeRF 的方法使用分割数据来隔离和重建视频序列中的静态和动态对象(如人或汽车)。由于本研究主要关注环境的重建,因此在训练期间简单地选择屏蔽掉动态对象。
为了动态选择相关的 Block-NeRF 进行渲染,并在遍历场景时平滑合成,谷歌优化了外观代码以匹配光照条件,并使用基于每个 Block-NeRF 到新视图的距禂计算的插值权重。
[[[IMG_6]]
图 4. 外观代码允许模型展示出不同的照明和天气条件。
整个环境可以由任意数量的 Block-NeRF 组成。为了提高效率,研究人员利用两种过滤机制,仅渲染给定目标视点的相关区块,这里只考虑目标视点设定半径内的 Block-NeRF。此外,系统会为每个候选者计算相关的可见性。如果平均可见度低于阈值,则丢弃 Block-NeRF。图 2 提供了一个可见性过滤的示例。可见性可以快速计算,因为它与颜色网络独立,并且不需要以目标图像分辨率进行渲染。经过过滤,通常有 1 到 3 个 Block-NeRF 需要合并。
[[[IMG_7]]
图 5. 谷歌的模型包含曝光条件,这有助于解释训练数据中存在的曝光量变化,允许用户在推理过程中以人类可解释的方式更改输出图像的外观。
为了重建整个城市场景,研究人员在录制街景时捕获长期序列数据(超过 100 秒),并在几个月内在特定目标区域重复捕获不同序列。谷歌使用从 12 个摄像头捕获的图像数据,这些摄像头共同提供 360° 视图。其中 8 个摄像头从车顶提供完整的环视图,另外 4 个摄像头位于车辆前部,指向前方和侧面。每个相机以 10 Hz 的频率捕获图像并存储一个标量曝光值。车辆姿态是已知的,所有摄像机均经过校准。
借助这些信息,该研究在一个共同的坐标系中计算相应的相机光线原点和方向,同时考虑相机的滚动快门。
[[[IMG_8]]
图 6. 当渲染基于多个 Block-NeRF 的场景时,该算法使用外观匹配来获得整个场景的一致样貌。给定一个 Block-NeRF(图左)的固定目标外观,算法会优化相邻 Block-NeRF 的外观以匹配。在此示例中,外观匹配了在 Block-NeRF 中产生一致的夜间外观。
[[[IMG_9]]
图 7. 多段数据的模型消融结果。外观嵌入有助于神经网络避免添加云雾几何体来解释天气和光照等环境变化。移除曝光会略微降低准确度,而姿态优化有助于锐化结果并消除重复对象的重影,例如在第一行的电线杆上观察到的那样。
谷歌研究人员表示,新方法仍然面临一些待解决的问题,例如部分车辆和阴影未能正确移除,以及植被在虚拟环境中因季节变化而模糊。同时,训练数据中的时间不一致(例如施工工作)无法被 AI 自动处理,需要手动重新训练受影响区域。
此外,目前无法渲染包含动态对象的场景限制了 Block-NeRF 在机器人闭环模拟任务中的适用性。未来,这些问题或许可以得到解决。
