局部语义地图构建——HDMapNet

高精度地图

高精地图提供了精准的、综合的道路几何与语义信息,通常包含影像地图(Imagery Map)和语义地图(Semantic Map)这两部分,是其他自动驾驶模块不可或缺的一部分。其中影像地图主要包括 3D 雷达点云、反射率、高度、斜率等物理信息,而语义地图主要提供了丰富的标注信息,如道路的向量化表示、类型(车道、自行车道或公交车道)、速度限制、车道线类型(虚线、实线、双实线)等等。

高精度与导航地图大体有如下区别

  • 使用对像:导航地图给人看,高精地图给机器看
  • 精度:导航地图精度存在米级以上(5-10米)的误差,高精地图精度在厘米级
  • 地图元素:高精地图道路元素及交通相关动态元素更丰富,比如详细的车道线、路标、交通提示牌、交通灯、车道曲率、坡度及车道级实时交通动态信息,主要服务于机器自动驾驶环境判断、决策、控制等。而导航道路元素只到道路级,除导航路线准确、合理性,人们更注重视效及语音引导体验
  • 导航地图与高精地图的关系:从技术演进角度,汽车上的导航地图与高精地图会在较长的时间内共存,并可能最终使用一个高精底图同时满足人和车的应用需求

高精地图为自动驾驶应用提供全方位的辅助

  • 定位:结合高精地图道路特征、点云地图,车辆可实现视觉定位和点云定位
  • 感知:通过提供道路信息等先验知识辅助车辆传感器缩小识别范围、提升识别效率、降低错误率,同时弥补一定环境下其它传感器感知缺陷(如雨、雪、黑暗情况下的其它传感器失效),和 V2X 结合进一步突破传感器感知局限
  • 规划、预测:高精地图可结合导航规划、实时路况、自动驾驶功能等级、适合自动驾驶路线,帮助车辆进行车道级路径规划,并根据先验知识及实时路况预测前方道路情况及障碍物等辅助局部路径规划
  • 安全:基于地图已知道路信息,如已知障碍物、道路标识等特征信息与传感器实时检测匹配互检,提升冗余、降低误判,同时辅助检测传感器故障、失效、被欺骗行为

HDMapNet

高精地图的生成涉及到了定位、融合、检测、标注等复杂的流程,在生成高精地图之后,还需要不时地对其进行更新,以适应路况信息的变化。虽然高精地图能够提供丰富的信息,但标注、 维护高精地图需要耗费大量的人力和资源,因而限制了其的可拓展性。为了减轻这些工作量,本文提出了一种可供选择的解决方法 HDMapNet

HDMapNet 是使用车载传感器(相机 and/or 雷达)来动态构建局部高精地图的方法,该方法使用数据集为 nuScenes。其将道路预测向量化,并实现从相机前视图到鸟瞰图的视角转换。值得注意的是,该方法并不是要替代全局 HD map 的重建,而是提供一种预测实时运动预测、规划中使用的局部语义地图的方法。

  • 向量化:最终得到的地图信息不是图片形式的,而是用点、线、框等几何形状表示的,这种表示在地图的下游任务使用、存储等方面都有巨大优势。
  • 鸟瞰图转换:由于没有图片上每个像素点的深度信息,无法简单地利用几何投影将图像投回到鸟瞰视角。一种做法是假设地面高度全部为0,直接通过 Inverse Perspect Mapping 来进行投影。但因为地面会有倾斜,再加上车的颠簸,并不能保证车道线被正确的投影到鸟瞰视角。Lift-Splat-Shoot 很巧妙的利用 attention 的方式端到端地学了一个深度,但是因为没有显式的深度作为监督,所以实际的性能并不是很好。在这里,作者团队参考了 VPN 的做法,使用全连接网络来让 network 自己学习如何进行视角的变换。与其不同的是,HDMapNet 显式地使用了相机外参来将从不同相机抽取的特征拼接到鸟瞰视角,从而提升了特征在鸟瞰视角的分辨率。

下图为 HDMapNet 的整体架构,主要由四部分组成:
局部语义地图构建——HDMapNet_第1张图片

  • 透视图像编码器(PV image encoder) ϕ I \phi_I ϕI:输入周围相机获取的图像,每张图片 I i I_i Ii 通过共享的神经网络 ϕ I \phi_I ϕI 来产生 PV 特征图 F I i P V ⊆ R H P V × W P V × K F_{I_i}^{PV} \subseteq R^{H_{PV} \times W_{PV} \times K} FIiPVRHPV×WPV×K,其中 H P V H_{PV} HPV W P V W_{PV} WPV K K K 分别为特征图的高、宽和维度。
  • 神经视图变换器(neural view transformer) ϕ V \phi_V ϕV:透视图视角和相机坐标系中对应像素的关系由 MLP ϕ V i \phi_{V_i} ϕVi 计算得出,具体公式为 F I i c [ h ] [ w ] = ϕ V i h w ( F I i P V [ 1 ] [ 1 ] , ⋯   , F I i P V [ H P V ] [ W P V ] ) F_{I_i}^{c}[h][w]=\phi_{V_i}^{hw}(F_{I_i}^{PV}[1][1], \cdots, F_{I_i}^{PV}[H_{PV}][W_{PV}]) FIic[h][w]=ϕVihw(FIiPV[1][1],,FIiPV[HPV][WPV]) F I i c [ h ] [ w ] F_{I_i}^c[h][w] FIic[h][w] 是位于 F I i c F_{I_i}^c FIic 在位置 ( h , w ) (h, w) (h,w) 的像素。鸟瞰图视角特征 F I i b e v ⊆ R H b e v × W b e v × K F_{I_i}^{bev} \subseteq R^{H_{bev} \times W_{bev} \times K} FIibevRHbev×Wbev×K F I i c F_{I_i}^{c} FIic 使用相机外设的几何投影(geometric projection with camera extrinsics)转换得到。最终图像特征 F I b e v F_{I}^{bev} FIbev N m N_m Nm 个相机鸟瞰图视角特征的平均值
  • 点云编码器(pillar-based point cloud encoder) ϕ P \phi_P ϕP:该编码器是具有动态体素化(dynamic voxelization)的 PointPillar 变体,它将 3D 空间划分为多个柱子(pillars),并从柱状点云的柱状特征中学习特征图。点云中的每个点不只具有三维坐标,还包含一个 K K K 维的额外特征,因此点 f p ⊆ R K + 3 f_p \subseteq R^{K+3} fpRK+3。当将点云的特征投影到鸟瞰图视角时,可能会有多个点落到同一个 pillar 中。记 P j P_j Pj 为落在第 j 个 pillar 中所有点的集合,为了从 pillar 中聚类点的特征,本文使用 PointNet(记为 PN) 来处理,公式如下

f j p i l l a r = P N ( { f p ∣ ∀ p ∈ P j } ) f_j^{pillar} = PN(\{f_p | \forall p \in P_j \}) fjpillar=PN({fppPj})

pillar-wise 的特征通过卷积神经网络 ϕ p i l l a r \phi_{pillar} ϕpillar 做更进一步处理,从而生成特征图 F P b e v F_P^{bev} FPbev

  • 地图元素解码器(map element decoder) ϕ M \phi_M ϕMBEV 是一个包含 3 个分支的 FCN,这 3 个分支分别是语义分割、实例嵌入和方向预测分支。如果点云数据和图像数据都存在,则将这两者的特征图拼接起来输入 BEV 中。然后通过后处理的手段来将这些信息处理成向量化的道路表达。

以下是在 nuScenes 数据集上构建高精度地图例子

项目地址:https://tsinghua-mars-lab.github.io/HDMapNet/
论文地址:https://arxiv.org/abs/2107.06307
代码地址:https://github.com/Tsinghua-MARS-Lab/HDMapNet

你可能感兴趣的:(深度学习,计算机视觉,自动驾驶,神经网络)