参考代码:bev_lane_det(截止2022.11.01未开源)
1. 概述
介绍:这篇文章是毫末科技在单目场景下在bev视图下实现车道线检测的方法,其车道线检测的基础方法是源自于bev视图下车道线分割,再通过预测几个附加预测头用于辅助后处理。具体来讲这篇文章的工作可以划分为3点。1)这篇文章将图像坐标下的特征转换为bev坐标下使用的是全连接的形式,也就是直接通过学习的方式得到一个固定相机参数下的转换关系(这是出于实际部署与计算性能的考量),这样就可以不同显式去编码相机参数。同时为了增强特征表达使用了多个尺度的特征。2)由于使用全连接的方式学习相机坐标到bev坐标的映射关系,因较难同时编码相机参数等几何信息,所以文章将所涉及到的图像依据相机参数统一变换到virtual camera下,从而实现感知视角统一。3)文中对于车道线的感知基础是车道线语义分割(confidence),同时还会预测车道线偏移量(offset)、车道线实例辅助信息(embedding,可参考LaneDet方法实现)、车道线高度信息(height)。此外文中还是用一个小trick,便是在图像坐标添加了车道线语义分割和实例信息头,用于优化图像特征提取。
2. 方法设计
2.1 整体pipeline
这篇文章的算法整体流程见下图所示:
按照上图中的箭头朝向可以将整体流程划分为如下几个步骤:
- 1)图像往virtual camera下转换:在文中由于没有显式编码相机参数信息,直接是采用全连接层拟合的,这就需要保证输入的相机内外参数是一致的,使得整体网络不是那么难学习。因而在数据处理阶段会将图像往virtual camera下映射,这里做的过程是乘上一个单应矩阵。
- 2)2D特征到BEV特征转换:这里使用了两个stage的特征作为输入构建多尺度特征金字塔(用的都是大stride的特征图,因为语义信息更多更好学习),之后经过全连接层实现2D特征到bev特征的转换。
- 3)网络预测:这里的预测包含2个部分:bev特征下的预测和2D特征下的预测。bev下借鉴YOLO检测算法中的回归机制实现车道线预测,也就是分别预测confidence、offset、embedding、height。2D特征下是作为辅助损失形式添加到网络中用于提供更好特征表达,其预测车道线语义分割和实例embedding信息。
2.2 virtual camera
在文中设与车形式方向垂直的是 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=