作者 | erkang 编辑 | CVer
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心技术交流群
过年休息,有时间做一下 3d 车道线检测工作的小记,讲讲我们为什么做这个工作。
CurveFormer: 3D Lane Detection by Curve Propagation with Curve Queries and Attention, ICRA 2023
https://arxiv.org/abs/2209.07989
这篇文章的主要工作可以概括为以下3点:
C1: BEV/3D 车道线检测;
C2: 车道线参数曲线输出;
C3: 最重要的:不显式构建bev,而是从图像feature直接求解3d车道线;
首先关于C1&C2,在自动驾驶/辅助驾驶产品中,车道线检测的下游模块是planning,往往需要本车坐标系下的车道线参数曲线,一般情况下,本车坐标系原点为车辆的后轮中心,车道线被formulate为多项式曲线,为下游服务。例如,在mobileye的EyeQ系列产品里面,车道线一般表示为2维(BEV视角)的4次多项式曲线;另外Tesla从2019年起,在auto-pilot产品中,定义的车道线为3d车道线。因此,车道线检测的输出为BEV视角下的2d或者3d的车道线参数曲线,为下游模块服务。
但是,除此之外,在计算机视觉中,深度学习大规模应用以来,开源出来的数据集和工作大多以图像平面(UV-space)上的车道线检测为主,典型的数据集包括,tusimple的车道线数据集[1], 港中文开源的车道线数据集CULane Dataset [2]。
图1: 图像上计算车道线中间结果 + 后处理转换到BEV视角下的参数曲线如图1所示,在图像(UV-space)上做车道线检测的缺陷是,得到的车道线是在图像空间,需要后处理才能转换到BEV空间。往往在工程实践中,这个UV-space to BEV-space的转换需要大量的后处理代码,另外,把图像上的中间结果,例如分割等,转换到BEV-space之后,往往也需要复杂的后处理才能得到下游所需的参数曲线。总结:在图像UV-space计算的车道线,一般需要大量复杂的后处理,才能转换到BEV视角下的参数曲线。
在learning为主的算法设计角度,需要把上面描述的后处理转化为learning的模块,这也符合原Tesla AI 总监Andrej Karpathy倡导的software 2.0机制 [4]。通过问题的重新定义,让learning的方法在整个工程模块中的比重越来越大。
那么对于车道线检测来说,重新定义问题就比较直接:输入图像(单目或者多目,或者再加上激光),输出BEV视角下的车道线参数曲线;
注1: BEV视角一般在此为摄像头坐标系,摄像头坐标系和车辆后轮中心的坐标系,两个坐标系的转换(平移和旋转)一般在车辆下线时标定;
注2: 车道线可以描述为2D或者3D,一般由下游的需求决定;
3D 车道线检测
随着新的、更面向自动驾驶/辅助驾驶任务的数据集的出现,3D车道线检测变成新的研究方向和热点。例如百度开源的Apollo 3D Lane Synthetic Dataset [5],商汤等基于Waymo dataset发布的OpenLane Dataset [6], 华为诺亚实验室开源的ONCE-3DLanes [3,7] 的出现,吸引了不少研究者跟进这一实际工作。我们的curveformer工作也是直接输出bev视角3d车道线的参数曲线,而不是聚焦在图像空间做输出。
那么图像空间的车道线检测or理解是否还有意义?有两个角度可以思考:
1: 从获得GT得角度,如果图像空间的车道线标注比较便捷或者廉价,那么图像空间的标注信息同样值得关注;
例如在ONCE-3DLanes [3,7] 中,使用几乎零成本的图像空间车道线预标注,去实现3d车道线GT提取。
2: 在图像空间车道线的标注信息,如何帮助更好的完成bev视角的车道线检测or更广义的local map,也是一个很好的出发点。
例如我们在curveformer中使用的图像空间车道线分割作为额外监督信号,还有[8]中提出的,在loss端加入图像空间车道线和BEV视角车道线的几何约束。类似的设计,这里统称为deep-supervision;
下面转入curveformer最想探索的话题,能不能不去显示构建BEV,而直接从图像特征空间求解BEV视角的3d车道线参数曲线。
为了回答这个问题,我们首先简单回顾下最近非常热的BEV + Transformer。从研究角度,BEV视角的研究首先从机器人角度开始,例如Zhou Bolei老师从室内移动机器人角度,研究multi-view (or corss-view)如何直接得到BEV视角的语义信息[9],随着Tesla的AI day的推广而变得炙手可热,也成为各家自动驾驶相关公司的工程落地重点。
图2: BEV + Transformer架构设计如图2所示,简单总结,BEV + Transformer的架构设计,通过利用
(1)cross attention机制
(2)Nx decoder机制
完成输入(图像空间)和输出(BEV视角的感知结果)的mapping。后面会简介在curveformer中如何利用这两个机制完成BEV视角下的3d车道线检测。
注:图2-5取自之前分享过 BEV + Transformer的总结。
Cross attention一般把图像特征当作K/V,计算query(如目标检测中的一个目标)和KV之间的attention,利用多次decoder解析query对应的输出。这里面一个query需要和dense的KV里面的所有元素计算attention,计算量很大。为了节约计算量,deformable detr[11]提出可以通过query先预测一个reference point,然后仅计算和这个reference point相关的几个位置,大大减少计算量。这个attention简记为deformable attention。至此deformable detr还是在图像空间做的目标检测。
Deformable detr带来2个核心观点:
1: query在cross attention中的reference point的设计,可以粗略关联到目标框;
2: 通过N个decoder逐渐细化目标,这里记作iterative refinement;
这两点也是上面总结 BEV + Transformer技术架构的核心机制。
Deformable detr中的1,实现的是图像空间中的query和图像中的目标之间的关联,那么,能否实现BEV空间中的query和图像中的信息之间的关联呢?这也是我们做BEVSegFormer[12]的出发点:利用deformable attention机制中的cross attention,完成BEV空间的query和图像feature之间的关联。这种设计带来的好处:
1: 相比后面提出的BEVFormer[13], BEVSegFormer不依赖相机参数(内参和外参),可以完成BEV空间和图像空间的转化;
2: query和图像特征之间的attention计算量小;
注:BEVSegFormer不依赖相机参数(内参和外参),可以完成BEV空间和图像空间的转化,后续被扩展至目标检测、时序等多个工作。
但是这里面BEVSegFormer,还是后面出来的BEVFormer,都需要显式构建这个dense的BEV空间(例如BEV grid的大小为100x100),然后在此基础上完成具体感知任务的输出。Tesla AI Day介绍的雏形也是类似的设计,也就是two-stage的设计,首先构建BEV feature map,然后计算相应的感知结果。我们知道在现实的三维空间,大量感知是sparse形式的,比如障碍物检测,视野范围内可能就几个目标;车道线也类似,视野范围内就几根车道线;这些数目远小于BEV的grid的个数(ex:5条车道线 < 100x100 BEV grid)。其实对于local map也是,local map的组成也是sparse的元素。
关于dense和sparse的输出总结,参考之前的总结:
图3: BEV + Transformer简单汇总那么有没有方法可以不显式构建BEV,one-stage的直接计算感知结果呢?DETR3D[10]带给了我们一些思路:
DETR3D首先引入类似deformable detr中reference point的概念,3D空间的一个障碍物query 产生一个reference point,然后利用相机参数投影到图像空间,完成cross attention的计算。那么这里面cross attention的计算是一个代表3D空间的query和图像空间中的一个点计算,计算复杂度远小于和KV中所有点计算attention (1 << HxW)。在障碍物检测中,不通过显式构建BEV,直接输出BEV视角下的sparse的3D障碍物,算是curveformer最初形态的一个motivation。
车道线检测其实和障碍物检测类似,都是在BEV视角下的感知输出,而且输出也是sparse的,能否把类似的机制借鉴到车道线检测里面来呢?应该怎么formulate这个过程呢?一个最简单粗暴的做法是,由BEV视角下的一个车道线query生成N个3D reference points,然后通过然后利用相机参数投影到图像空间,完成cross attention的计算。这种做法和其它transformer的方法类似,把query当作黑盒子,无法准确理解query和输出之间的关系,或者无法根据输出的特性,完成query的设计,同时也会加大模型的训练时间。
DAB-DETR [14]给出了对query的解析,针对目标检测任务,把query描述成(x,y,w,h),然后针对性的设计cross attention,可以完成对目标的位置(x,y)以及大小(w,h)的可解释性学习,加速transformer-based目标检测的训练,更重要的是,给出了query在transformer中的含义。
注:这种物理含义的query设计其实在Deformable detr中也有体现。
这一做法可以天然的借鉴到3d车道线检测而来,我们只需要把3d车道线query描述成点集即可。也就是在三维空间,车道线由N个ordered的3D点组成,称之为curve query。然后在cross-attention中根据N个3D点,设计curve attention,即可完成车道线的解析。
idea也简单,为了加速计算,根据3d车道线的特性设计了curve query (N个有序三维点),在cross-attention中使用curve attention,完成图像空间和BEV/3D空间的转化,同时也不需要构建dense的BEV,one-stage直接计算车道线的参数方程。
关于BEV+Transformer架构的第二个特性:Nx decoder机制;如果采取了具备物理含义的query设计,那么就可以利用这个N个decoder完成iterative的refinement。对于车道线检测一样适用,可以在多个decoder中逐渐逼近真值。相比CNN的decoder,transformer中通过query的设计,更能发挥decoder对输出的解析。
总结:BEV + Transformer技术架构,可以利用机制(1)cross attention 完成图像空间和BEV空间的转化(显式or非显式);更能利用机制(2)Nx decoder带来的iterative refinement得到更准确的感知结果。
那么是不是CNN的方式完成不了上面2个工作(1: 图像空间和BEV输出的转换;2: iterative refinement机制)?不是的,下面举2个例子。
1: 基于CNN的 图像空间和BEV空间的转化;
1.1 利用相机参数的BEV-CNN架构
图4: CNN vs Transformer 图像空间和BEV转换:利用相机参数图4的上图,就是CNN-based的利用相机参数完成图像空间和BEV空间的转换,代表性工作为OFT[15]。
1.2 不利用相机参数的BEV-CNN架构
图5: CNN vs Transformer 图像空间和BEV转换:不利用相机参数如图5的上图所示,CNN-based的不利用相机参数的方法,代表性工作为MonoLayout[16].
2: iterative refinement机制:
那么除了Transformer中的设计,CNN中是否有类似的设计,比如可以用到车道线检测中?
图6: CNN点集iterative refinement如图6所示,DeepSnake[17] 通过把instance segmentation描述为轮廓,且轮廓的定义为点集,通过Graph CNN的方式完成轮廓点的逐渐逼近真值(即iterative refinement)。点集?是不是很熟悉,把车道线定义为点集的检测,也可以利用类似的机制完成车道线检测的iterative refinement。
最后车道线的参数化输出:
在CNN中也有直接输出车道线参数曲线的工作。例如在[18], 图像中的车道线检测被描述为多项式曲线,CNN用来估计多项式参数的系数。Transformer的目标检测方法DETR出来之后,立即被扩展到了图像空间的车道线检测上面LSTR[19],以及后续的3d车道线检测[8],都是直接输出参数曲线。
最后的最后,从software2.0的角度,可不可以丢掉车道线检测?如果下游的planning为learning为主,那么local map的输出更为直接,这也就是局部地图是最近新的热点,各家自动驾驶公司都在争抢的,不依赖HDMAP的局部地图感知,提供更高阶的自动驾驶/辅助驾驶产品形态。
[1] github.com/TuSimple/tusimple-benchmark
[2] https://xingangpan.github.io/projects/CULane.html
[3] https://once-3dlanes.github.io/
[4] https://www.youtube.com/watch?v=y57wwucbXR8
[5] Y. Guo, et al. “Gen-lanenet: A generalized and scalable approach for 3d lane detection”, ECCV 2020
[6] L. Chen, et al. “Persformer: 3d lane detection via perspective transformer and the openlane benchmark”, ECCV 2022
[7] Y. Fan, et al. "Once-3dlanes: Building monocular 3d lane detection”, CVPR 2022
[8] R. Liu, et al. “Learning to Predict 3D Lane Shape and Camera Pose from a Single Image via Geometry Constraints”, AAAI 2022
[9] B. Pan, et al. “Cross-view Semantic Segmentation for Sensing Surroundings”, RAL 2020
[10] W. Yue, et al. "Detr3d: 3d object detection from multi-view images via 3d-to-2d queries”, PMLR, 2022
[11] X. Zhu, et al. “Deformable DETR: Deformable Transformers for End-to-End Object Detection”, ICLR 2021
[12] P. Lang, et al. “BEVSegFormer: Bird’s Eye View Semantic Segmentation From Arbitrary Camera Rigs”, WACV 2023
[13] Z. Li, et al. “BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers”, ECCV 2022
[14] S. Liu, et al. “DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR”, ICLR 2022
[15] Thomas Roddick et al. “Orthographic Feature Transform for Monocular 3D Object Detection”, BMVC 2019
[16] K. Mani, et al. “MonoLayout: Amodal Scene Layout from a single image”, WACV 2020
[17] S. Peng, et al. “Deep Snake for Real-Time Instance Segmentation”, CVPR 2020
[18] W. Gansbeke, et al. “End-to-end Lane Detection through Differentiable Least-Squares Fitting”, ICCVW 2019
[19] R. Liu, et al. “End-to-end Lane Shape Prediction with Transformers”, WACV 2021
往期回顾
3D车道线检测能否成为自动驾驶的核心?盘一盘近三年的SOTA论文!
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称