一种简洁粗暴的车道线检测实现

原文链接:知乎

最近在做一个纯视觉的2D车道线检测项目,前前后后尝试了不少方法,最终探索出了一种简洁粗暴且非常有效的车道线检测实现。

近几年基于深度学习的2D车道线检测的主要方法

1.多分类语义分割 + 后处理:
优点:直接分割出每条车道线的像素,不用聚类,推理速度快。
缺点:理论上能同时处理的最大车道线数量固定(一般上限是4条或者5条)。除此之外,车辆变道时模型输出的分类像素会相互干扰以至于难以区分每条线的实例(别问我是怎么知道的…)。
这类方法的代表有:SCNNSAD等。

2.实例分割 + 后处理:
优点:理论上可以检测任意数量的车道线。
缺点:由于需要聚类,推理速度慢。
代表:LaneNet等。

想了解更多方法的朋友,可以移步以下专栏,大佬们总结得非常到位:
基于摄像头的车道线检测方法一览
CV札记

简洁粗暴的2D车道线检测实现方法

考虑到项目要求较高的实时性,且只需要检测与行驶道路相邻两条道路上的车道线。所以,我最终的实现方法为:4分类语义分割+后处理+车道线拟合基于4分类语义分割的车道线检测的原理如下图:
SCNN 图a为训练时的网络结构,左侧为典型的分割分支,右侧为每一条车道线存在与否概率分支;图b为推理时的网络结构
SCNN 图a为训练时的网络结构,左侧为典型的分割分支,右侧为每一条车道线存在与否概率分支;图b为推理时的网络结构
语义分割网络采用的是:ERFNet
数据集采用的是SCNN中的:CULane(更多数据集请参考:amusi/awesome-lane-detection

最终视频效果

遮挡:

车道线检测-遮挡

夜晚:

车道线检测-夜晚

变道:

车道线检测-变道

跨区域(日本):

车道线检测-跨区域(日本)

更多

如果需要对检测到的车道线进行分类(虚线,实线),可以参考这篇论文:Lane Detection and Classification using Cascaded CNNs