Multi_Lanes_Detection

本项目基于LaneATT,做出了一些改进,具体见下文

2D车道线识别相关技术

1. 车道线表示

  • 输出类型:掩码/点集/矢量线条
  • 实例化:每个车道线是否形成实例
  • 分类:是否对车道线进行了分类(单白、双黄等)
  • 提前定义的参数:是否只能检测固定数量的车道线
  • 车道标记:是否对车道上的行车标记也做了检测

2. 目前方法

  • 传统方法-边缘检测滤波等方式分割出车道线区域,然后结合霍夫变换、RANSAC等算法进行车道线检测

    • 基于霍夫变换的车道线检测;

    • 基于LSD直线的车道线检测;

    • 基于俯视图变换的车道线检测;

    • 基于拟合的车道线检测;

    • 基于平行透视灭点的车道线检测;

  • 基于语义分割

    • 二值语义分割主要采用CNN方法并引入一些方式提高语义分割精度,在线的拟合阶段可以采用学习到的转换矩阵先将分割结果转换为鸟瞰图视角,然后,采用均匀取点+最小二乘法拟合,拟合方程可选三次方程(Lanenet)
  • 基于点的表示方法,车道线用固定数量的点表示

    • raw表示方法-将图像每行分成若干个grid,对每行grids进行分类选中存在车道线的grid(Ultra Fast Lane Detection)
    • 类似目标检测的anchor,生成lane anchor, 直接回归点与anchor做匹配(lLineCNN,LaneATT)
  • 利用多项式进行建模(Polynet)

3. 相关数据集

  • tusimple: 共72k张图片,位于高速路,天气晴朗,车道线清晰,特点是车道线以点来标注;图片大小:1280x720
  • culane :共98k张图片,包含拥挤,黑夜,无线,暗影等八种难以检测的情况,最多标记4条车道线;图片大小:1640x590 ;
  • 百度ApolloScape :140k张图片,特点是车道线以掩码的形式标注,包含2/3维28个类别;图片大小:3384x2710
  • CurveLanes:华为弯道检测数据集 135k张图片, 采用三次样条曲线手动标注所有车道线,包括很多较为复杂的场景,如S路、Y车道,还有夜间和多车道的场景。分为训练集10万张,验证集2万张,测试级3万张;图片大小:2650x1440
  • LLAMAS
  • 自定义数据集(ehl_wx无锡车联网公交车载2D): 40W张图片,位于市区、郊区等,天气有变化,白天居多,车道线复杂,车道线以点标注,图片大小:1920*1080

4. 技术改进及实现

  • LaneATT多类别车道线识别实现,代码重构,支持多类别参数化输入

  • LaneATT分布式训练DDP实现(提速明显)

  • LaneATT模型转torchscript及相关推理代码实现

  • LaneATT模型转ONNX及相关推理代码实现

  • LaneATT tensorrt(python) 推理

  • LaneATT C++ 推理(libtorch, tensorrt)

  • LaneATT 结构改进优化提点

  • 针对Culane和Tusimple公开数据集进行车道线类别标注及简易标注工具开发实现,相关数据集已开源

  • 根据实际场景自定义车道线数据集

  • Ultra Fast Lane Detection ONNX 及推理代码实现