欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

自动驾驶车道线检测系列-3D-LaneNet:端对端三维多车道检测-3.D-LaneNet

最编程 2024-07-17 07:05:41
...

我们的方法以安装在车辆上的前置摄像头拍摄的单张图像作为输入,如图3所示。我们假设已知相机的内部参数 κ \kappa κ(例如焦距、投影中心)。我们还假设相机相对于局部地平面安装时的滚转角度为零度。由于车辆动态变化,我们不假设已知的相机高度和俯仰角。道路场景中的车道可以通过每条车道的中心线集合 C i i = 1 N C {C_i}{i=1}^{N_C} Cii=1NC 和车道分界线集合 D i i = 1 N D {D_i}{i=1}^{N_D} Dii=1ND 描述,如图5所示。每个这样的车道实体(中心线或分界线)都是用相机坐标系( C camera C_{\text{camera}} Ccamera)表示的3D曲线。任务是根据图像检测车道中心线和/或车道分界线的集合。

3.1 俯视图投影

我们简要回顾一下逆透视映射(IPM)。简而言之,IPM是一种单应性变换,将前视图图像扭曲为虚拟俯视图图像,如图1左上角图像所示。它相当于应用相机旋转单应性(视图向下旋转)然后进行各向异性缩放【11】。在我们的实现中,我们希望确保俯视图图像中的每个像素对应于道路上的预定义位置,而不依赖于相机的内部参数及其相对于道路的姿态。
在这里插入图片描述
见图3以了解以下定义的示意图。相机坐标 C camera = ( x ~ , y ~ , z ~ ) C_{\text{camera}} = (\tilde{x}, \tilde{y}, \tilde{z}) Ccamera=(x~,y~,z~) 设置为 y ~ \tilde{y} y~ 是相机的观看方向。设 P road P_{\text{road}} Proad 为局部道路表面的切平面。我们定义道路坐标 C road = ( x , y , z ) C_{\text{road}} = (x, y, z) Croad=(x,y,z) 如下: z z z 方向为 P road P_{\text{road}} Proad 的法线方向, y y y y ~ \tilde{y} y~ P road P_{\text{road}} Proad 上的投影,原点为相机中心在 P road P_{\text{road}} Proad 上的投影。设 T c 2 r T_{c2r} Tc2r C camera C_{\text{camera}} Ccamera C road C_{\text{road}} Croad 之间的6*度(3D平移和3D旋转)变换。由于我们假设相机滚转为零度, T c 2 r T_{c2r} Tc2r 由相机俯仰角 θ \theta θ 和其高度 h cam h_{\text{cam}} hcam 确定。单应性变换 H r 2 i : P 2 ↦ P 2 H_{r2i} : P^2 \mapsto P^2 Hr2i:P2P2 ,将 P road P_{\text{road}} Proad 上的每个点映射到图像平面坐标,由 T c 2 r T_{c2r} Tc2r κ \kappa κ 确定(见【11】,第8.1.1节)。最后,IPM 由 H r 2 i H_{r2i} Hr2i 使用一组固定参数 I P M P a r a m s IPM_{Params} IPMParams 确定俯视图区域边界并从米到像素进行各向异性缩放获得。俯视图图像使用由采样网格 S I P M S_{IPM} SIPM 定义的双线性插值生成。
在这里插入图片描述

3.2 网络结构

3D-LaneNet的概览如图4所示。信息在两个并行流或路径中处理:图像视图路径和俯视图路径。我们称之为双路径主干。图像视图路径处理并保留图像中的信息,而俯视图路径提供具有平移不变性的特征,用于预测3D车道检测输出。图像视图路径的架构基于VGG16【31】,而俯视图路径则结构相似。信息通过四个投影变换层流向俯视图路径。

3.2.1 投影变换层

我们架构中的一个主要构建块是图4中标记为蓝色的投影变换层。这个层是空间变换模块【14】的一种特定实现,具有轻微的变化。它通过对输入特征图进行可微分采样,将其空间对应于图像平面,输出特征图空间对应于场景的虚拟俯视图,同时保留通道数。可微分采样通过如第3.1节所述的网格生成,使用由道路投影预测分支预测的IPM实现。除了第一组投影特征图外,其余的投影特征图与来自俯视图路径的下游特征图连接。随后的神经元在连接的特征图上操作,结合了车道检测的以下两个理想特性。首先,在俯视图平面上的平移不变性。这很有价值,因为在俯视图中,车道在整个空间中具有相似的外观和几何形状。其次,保留双信息上下文——在图像和俯视图中。附加的图像视图上下文编码了俯视图中不存在的信息,如围栏、天际线和树木,这对于解读场景的3D结构至关重要。特别是,在远距离,图像视图上下文在视觉信息上更为丰富,并且相比于俯视图,表示了一个实际面积更大的区域。
在这里插入图片描述

3.2.2 投影变换层

我们架构中的一个主要构建块是图4中标记为蓝色的投影变换层。这个层是空间变换模块【14】的一种特定实现,具有轻微的变化。它通过对输入特征图进行可微分采样,将其空间对应于图像平面,输出特征图空间对应于场景的虚拟俯视图,同时保留通道数。可微分采样通过如第3.1节所述的网格生成,使用由道路投影预测分支预测的IPM实现。除了第一组投影特征图外,其余的投影特征图与来自俯视图路径的下游特征图连接。随后的神经元在连接的特征图上操作,结合了车道检测的以下两个理想特性。首先,在俯视图平面上的平移不变性。这很有价值,因为在俯视图中,车道在整个空间中具有相似的外观和几何形状。其次,保留双信息上下文——在图像和俯视图中。附加的图像视图上下文编码了俯视图中不存在的信息,如围栏、天际线和树木,这对于解读场景的3D结构至关重要。特别是,在远距离,图像视图上下文在视觉信息上更为丰富,并且相比于俯视图,表示了一个实际面积更大的区域。

3.2.3 道路投影预测分支

图像视图路径网络的第一个中间输出是对“道路投影平面” P road P_{\text{road}} Proad 的估计。本质上,这个分支预测了相机( C camera C_{\text{camera}} Ccamera)到道路( C road C_{\text{road}} Croad)的变换 T c 2 r T_{c2r} Tc2r。它是以监督方式训练的。 T c 2 r T_{c2r} Tc2r 确定了俯视图的单应性 H r 2 i H_{r2i} Hr2i 和采样网格 S IPM S_{\text{IPM}} SIPM,如第3.1节所解释的,因此需要用于俯视图路径的前向传播步骤。在推理时,它还用于将网络输出从 C road C_{\text{road}} Croad 转换回 C camera C_{\text{camera}} Ccamera。如第3.1节所述,在我们的情况下, T c 2 r T_{c2r} Tc2r 由相机高度 h cam h_{\text{cam}} hcam 和俯仰角 θ \theta θ 确定,因此这是这个分支的两个输出。

3.3 车道预测头

在我们端到端方法的核心是基于锚点的车道表示。受目标检测的启发,我们使用锚点定义车道候选,并使用精细的几何表示来描述每个锚点的精确3D车道形状。输出坐标系是由 h cam h_{\text{cam}} hcam θ \theta θ 确定的 C road C_{\text{road}} Croad 的估计。我们的锚点对应于该坐标系中的纵向线,并且精细的车道几何形状对应于相应锚点的3D点。如图5所示,我们通过在 x x x 位置等间距的垂直(纵向)线 X i A , i = 1 , … , N X_i^A, i=1, \ldots, N XiA,i=1,,N 定义锚点。每个锚点 X i A X_i^A XiA 的3D车道由2个 K K K个输出神经元激活 n x i , z i = ( x ~ i j , z ~ i j ) j = 1 K n_{x_i, z_i} = (\tilde{x}{ij}, \tilde{z}{ij}){j=1}^K nxi,zi=(x~ij,z~ij)j=1K 表示,这些激活与预定义的 K K K y y y 位置( y = y j j = 1 K y = {y_j}{j=1}^K y=yjj=1K)的固定向量一起定义了一组3D车道点。值 x ~ i j \tilde{x}{ij} x~ij 是相对于锚点位置 X i A X_i^A XiA 的水平偏移量。也就是说,输出 ( x ~ i j + X i A , y j , z ~ i j ) ∈ R 3 (\tilde{x}{ij} + X_i^A, y_j, \tilde{z}{ij}) \in \mathbb{R}^3 (x~ij+XiA,yj,z~ij)R3 C road C{\text{road}} Croad 坐标中表示一个点。此外,对于每个锚点 i i i,我们输出一个置信度 p i p_i pi 表示与该锚点相关的车道。我们使用预定义的纵向坐标 Y ref Y_{\text{ref}} Yref 进行关联。与车道相关的锚点 X i A X_i^A XiA 是最接近 y = Y ref y = Y_{\text{ref}} y=Yref 处车道 x x x 坐标的锚点。

每个锚点,网络输出多达三种类型( t t t)的车道描述符(置信度和几何形状),前两种( c 1 , c 2 c_1, c_2 c1,c2)代表车道中心线,第三种类型( d d d)代表车道分界线。为每个锚点分配两个可能的中心线使网络支持合并和分离,这常常导致两个车道的中心线在 Y ref Y_{\text{ref}} Yref 处重合并在不同的道路位置分开,如图5最右侧示例所示。相比于中心线,车道分界线的拓扑通常更复杂,我们的表示不能捕获所有情况(例如车道分界线不穿过 y = Y ref y = Y_{\text{ref}} y=Yref 的情况如图5)。3D-LaneNet的预测头设计用于生成所描述的输出。通过一系列在 y y y 维度无填充的卷积,特征图被减少,最终预测层的大小为 3 ⋅ ( 2 ⋅ K + 1 ) × 1 × N 3 \cdot (2 \cdot K + 1) \times 1 \times N 3(2K+1)×1×N,使得每列 i ∈ 1 … N i \in {1 \ldots N} i1N 对应于单个锚点 X i A X_i^A XiA。对于每个锚点 X i A X_i^A XiA 和类型 t ∈ c 1 , c 2 , d t \in {c_1, c_2, d} tc1,c2,d,网络输出表示为 y x i t , z i t , p i t y_{x_it, z_it, p_it} yxit,zit,pit。最终预测执行了一维非极大值抑制,这在目标检测中很常见:只保留在置信度上局部最大(与左右相邻锚点比较)的车道。每个剩余的车道由少量( K K K)个3D点表示,并使用样条插值转换为平滑曲线。

3.4 训练和真实值关联

给定一个图像示例及其对应的3D车道曲线 C i i = 1 N C {C_i}{i=1}^{N_C} Cii=1NC(中心线)和 D i i = 1 N D {D_i}{i=1}^{N_D} Dii=1ND(分界线),训练过程如下进行。首先,使用已知的俯仰角( θ ^ \hat{\theta} θ^)和相机高度( h ^ cam \hat{h}{\text{cam}} h^cam),为局部道路切平面定义真实值(GT)坐标系 C road C{\text{road}} Croad,如第3.1节所述。接下来,每条车道曲线投影到 C road C_{\text{road}} Croad x y xy xy 平面,并与 Y ref Y_{\text{ref}} Yref 处最接近的锚点相关联。最左边的车道分界线和与锚点相关联的最左边中心线被分配给该锚点的输出类型 c 1 c1 c1 d d d。如果还有另一条中心线与同一个锚点相关联,则它被分配给输出类型 c 2 c2 c2。这种分配以与输出相同的格式定义了每个示例的GT:每个锚点 X i A X_i^A XiA 和类型 t t t 的关联GT表示为 y ^ x i t , z ^ i t , p ^ i t \hat{y}{x_it}, \hat{z}{it}, \hat{p}{it} y^xit,z^it,p^it,其中 p ^ i t \hat{p}{it} p^it 是锚点/类型分配指示符,以及 C road C_{\text{road}} Croad 中的坐标。

无论是在训练时还是在评估时,如果整个车道没有穿过有效俯视图图像边界内的 Y ref Y_{\text{ref}} Yref,则忽略整个车道;如果车道点被地形遮挡(即在山顶之后),则忽略这些车道点。网络的整体损失函数如公式1所示。它结合了三个等权重的损失项:车道检测(交叉熵损失)、车道几何和道路平面估计(L1损失)。
在这里插入图片描述