自动驾驶车道线检测相关问题

Link:

最近有一部分工作是 2D 车道线的检测,整体路线偏传统一点,期望纯视觉和无地图,总结下遇到的技术问题。

Benchmark 的失真

目前市面上是有很多开源车道线检测的数据集合的,而且对应的 benchmark 指标也看起来很美好。有些数据集都能到 9x% 的指标。

但是,这些 benchmark 其实已经有一定的失真,表现好的模型未必真的有可用性,事实上可以说 benchmark 里面大部分的算法已经 overfit 那些有一定年代的数据集了。当然,新的数据集还没来得及被后来人设计算法来过拟合。

比如,随便举几个例子:

  1. 一些 row-wise 的车道线方法,对于角度偏横向的车道线都是没有办法检测的,更别说 U 弯、小环岛这种。
  2. 有些模型设计,固定了车道线数目,这带来这些问题:当我们遇到路口时,下半部分的车道线需要 N 条,路口对面的车道线同样需要 M 条;对于少变多和多边少的场景,只能往这些固定车道线上套。
  3. 在空间上使用分类思路的模型,将原本是连续的空间关系离散化,造成在类别区间的边界位置检测结果抖动严重。更严重的是分类和业务逻辑绑定在一起,结果抖几个像素问题不大,业务逻辑抖起来,那只能看着车辆到处飞了。
  4. 很多算法加了强先验,以至于其可以使用的场景只能是高速。因为稍微复杂一点的场景就没办法满足先验。

这又回到了一个很基础的问题:面对一个非定义严格的问题,SOTA 真的就一定是适合的么?

在无脑迁移 SOTA 之前,首先还是要多看看问题的定义、数据特点。从宏大叙事的角度上,数据增多后,先验产生的效益是边际递减的。从工程的角度上,当然是需要掌握一个平衡和时机。

模型

目前换用的方法已经是非常传统的思路。随着数据的增多和训练技术的调整,在整体指标上并没有弱于之前采用的 SOTA 方法,在某些指标上甚至还更高(非公平对比,数据随时间有变化)。整个训练可以说基本没有太多 trick,很多人期望依靠某个神奇 trick 搞个大新闻的想法本身就比较不现实。大部分的模型在公开数据集上都是没有 “完全训练” 的,数据量的增加依然可以提升模型的表现。

模型本身的结构上,考虑到部署平台的限制,也依赖的是非常传统的算子。用一些新的算子或者目标平台低效的算子也确实可以在某些指标上有一点提升。但是带来的性能损失相比这点收益完全不成比例。模型容量和指标关系也是个 S 曲线,对于有算力目标的平台,现在流行的超大模型最多也只能放在离线辅助使用。

3D测距

车道线的测距传统思路用的比较多的就是地平面 IPM,也是个强先验的算法。影响因素:

  1. 相机内参:内参、畸变问题都比较依赖标定,不过基本都比较稳定。
  2. 相机外参:实际行驶过程中,相机外参是一直在变的。影响因素:车身运动趋势、车内载重分布、路面情况。所以相机的实际高度、角度和静态的标定结果都有误差。可以通过一些真实世界的先验做一些标定参数的动态调整,但是进入不满足先验的场景这些动态调整都没法用。
  3. 地面平行:这一假设99%的概率不满足,路面横向本身就有弧度,纵向就更不用说了。

外参这块,可以用激光或者 IMU 辅助调整。

地面这块,其实没什么能根本解决问题的,传统的滤波稳定只能针对历史,无法预测未来;车道线平行度的限制,高速场景用一用可以。利用模型来解决的话,就是预测地面高度,兜一圈下来都能预测地面高度了,直出 3D 关系算了。

而 3D 测距实际上就是目前视觉算法的瓶颈,能够做得好的话,激光反而会落下风。但是想解决其实依赖整个系统,车型设计、下游算法对误差的容忍度都跑不掉。

总结

在我自己看来:

  1. 传统思路的车道线检测,算法上、表达上、下游使用方法等方面很多内容没办法横向迁移到市区。
  2. 车道线传统测距的误差是不可避免的,尤其是纵向误差。
  3. 模型这块,很多强先验的模型虽然指标上好看,但是实用中反而更容易遇到问题,尤其是强先验放在图像空间里。