最近在做一个纯视觉的2D车道线检测项目,前前后后尝试了不少方法,最终探索出了一种简洁粗暴且非常有效的车道线检测实现。
近几年基于深度学习的2D车道线检测的主要方法
- 多分类语义分割 + 后处理:
优点:直接分割出每条车道线的像素,不用聚类,推理速度快。
缺点:理论上能同时处理的最大车道线数量固定(一般上限是4条或者5条)。除此之外,车辆变道时模型输出的分类像素会相互干扰以至于难以区分每条线的实例(别问我是怎么知道的...)。
这类方法的代表有:SCNN、SAD等。
Spatial As Deep: Spatial CNN for Traffic Scene Understandingarxiv.org Learning Lightweight Lane Detection CNNs by Self Attention Distillationarxiv.org2.实例分割 + 后处理:
优点:理论上可以检测任意数量的车道线。
缺点:由于需要聚类,推理速度慢。
代表:LaneNet等。
Towards End-to-End Lane Detection: an Instance Segmentation Approacharxiv.org想了解更多方法的朋友,可以移步以下专栏,大佬们总结得非常到位:
黄浴:基于摄像头的车道线检测方法一览zhuanlan.zhihu.com简洁粗暴的2D车道线检测实现方法
考虑到项目要求较高的实时性,且只需要检测与行驶道路相邻两条道路上的车道线。
所以,我最终的实现方法为:4分类语义分割+后处理+车道线拟合
基于4分类语义分割的车道线检测的原理如下图:
语义分割网络采用的是ERFNet:
ERFNetieeexplore.ieee.org数据集采用的是SCNN中的CULane(更多数据集请参考:amusi/awesome-lane-detection):
CULane数据集xingangpan.github.io最终视频效果
遮挡:
夜晚:
变道:
更多
如果需要对检测到的车道线进行分类(虚线,实线),可以参考这篇论文:
Lane Detection and Classification using Cascaded CNNsarxiv.org