参考代码:bev_lane_det(截止2022.11.01未开源)
介绍:这篇文章是毫末科技在单目场景下在bev视图下实现车道线检测的方法,其车道线检测的基础方法是源自于bev视图下车道线分割,再通过预测几个附加预测头用于辅助后处理。具体来讲这篇文章的工作可以划分为3点。1)这篇文章将图像坐标下的特征转换为bev坐标下使用的是全连接的形式,也就是直接通过学习的方式得到一个固定相机参数下的转换关系(这是出于实际部署与计算性能的考量),这样就可以不同显式去编码相机参数。同时为了增强特征表达使用了多个尺度的特征。2)由于使用全连接的方式学习相机坐标到bev坐标的映射关系,因较难同时编码相机参数等几何信息,所以文章将所涉及到的图像依据相机参数统一变换到virtual camera下,从而实现感知视角统一。3)文中对于车道线的感知基础是车道线语义分割(confidence),同时还会预测车道线偏移量(offset)、车道线实例辅助信息(embedding,可参考LaneDet方法实现)、车道线高度信息(height)。此外文中还是用一个小trick,便是在图像坐标添加了车道线语义分割和实例信息头,用于优化图像特征提取。
这篇文章的算法整体流程见下图所示:
按照上图中的箭头朝向可以将整体流程划分为如下几个步骤:
在文中设与车形式方向垂直的是 y y y方向,车行进方向为 x x x,则这里需要感知的范围是 x ∈ [ 3 m , 100 m ] , y ∈ [ − 10 m , 10 m ] x\in[3m,100m],y\in[-10m,10m] x∈[3m,100m],y∈[−10m,10m],bev下最小的网格单元为 0.5 ∗ 0.5 m 2 0.5*0.5m^2 0.5∗0.5m2,也就是bev网格的大小为 ( s 1 = 200 , s 2 = 40 ) (s_1=200,s_2=40) (s1=200,s2=40)。在 z = 0 z=0 z=0的平面 P r o a d P_{road} Proad为当前车点处相对道路平面的切面,高度的计算便是基于此为标准计算得到的。这里补充网格单元大小对向能带来的影响:
在数据集中或是在实际算法部署中相机的参数是各式各样的,为了降低网络学习2D到bev空间转换的难度这里添加了virtual preprocess的处理过程。首先对于virtual camera是通过统计手段对数据集中的相机内参和外参计算均值作为其相机参数,从而得到 K i , [ R i ∣ T i ] K_i,[R_i|T_i] Ki,[Ri∣Ti]。由于是以 P r o a d P_{road} Proad作为基准,因而这里在该平面上采样几个点 k i = ( x i , y i , 0 ) , k = 1 , 2 , 3 , 4 k_i=(x_i,y_i,0),k=1,2,3,4 ki=(xi,yi,0),k=