最近阅读了ECCV2020一篇车道线检测的论文, 看完了源代码, 写下这篇博客, 希望能对其他学习的同学有所帮助。
车道线检测有很久远的历史, 在之前的工作中主要有以下两个流派:
比较有代表性的工作可点击下面的链接查看
对于任何一个流派, 在目前的自动驾驶车道线检测中, 都需要面临两个问题:
computational cost
自动驾驶的车辆上往往有多个摄像头, 如果同时对每个车辆的摄像头进行道路线进行识别的话, 需要耗费大量的计算资源, 因此需要计算复杂度更低的车道线检测方法。
no-visual-clue
在很多道路上, 由于车辆拥堵, 车道线被车挡住了, 需要通过车的位置和环境的语义信息去猜测。 在这种情况下, 没有视觉信息(车道的颜色, 形状)去引导车道线的识别, 造成了很大的困难。 下面这张图就是很好的例子。
为了解决以上两个问题, 作者提出了基于row achor的网络, 让网络在不同的行中选择属于车道线的列, 减少了传统语义分割pixel level prediction的复杂度, 同时使用global feature来增加网络的感受野, 提升在有车辆遮挡关系下的网络推理能力。
论文的贡献有以下几点:
论文里首先定义了一些符号, 如下图所示
作者首先把图像降采样到800x288, 然后定义了row anchor, 也就是作者从图片里里事先选好的一些行。
比如在tumsimple这个数据集里, 作者选了这些行, 作为车道线可能的起始行。
在这些符号里P代表的是某一行, 某一列里采样的像素属于某一条车道的概率
比如下图里的 Pij是一个向量, 向量的长度是w+1, 代表了第j行(row anchor)里的每个grid属于第i条车道的概率
我们可以发现向量的长度是w+1而不是w, 因为有可能这一行里所有的grid都不属于第i条车道, 这个时候需要多出一个grid来代表不存在, 此时向量前w个grid都是0, 第w+1个元素为1
根据以上的描述, 作者对于车道线检测的优化目标是如下的classification loss, 其中LCE代表的是交叉熵损失函数
作者认为这样对问题的表述能解决两个问题:
- Fast speed
传统的语义分割的预测目标维度为HxWx(C + 1), 但是作者的方法的维度是Cxhx(w + 1)
h比H小恨到, w比W小很多,总体计算复杂度是传统分割的1%
- No visual-clue
作者用resnet提取了全局特征, 全连接层使用了全局特征, 因此作者这样的方法能使用环境信息来对车道线的位置进行推断。
总体来看, loss分为三部分
其中structural loss分为similarity loss和shape loss两部分
其中similarity loss如下, 作者希望相邻的两个row anchor的预测概率接近
shape loss的推导如下
首先是第j行, 第i个车道的位置, 选择预测概率最大的作为预测值
但是由于argmax不可导, 作者换了一种表示方式
对location求二阶差分得到下面的loss
最后, 网络的总体结构如下图
蓝线上的网络做语义分割, 得到segmentation loss, 下面的网络进行预测, 得到structural loss和classication loss
作者分别在CULane和Tusimple上实验
对于tusimple, 准确度的定义如下
Cclip指的是预测正确的道路点数, Sclip是所有的道路点数。
对于CULane用F1-measure来度量, 因为CULane的每条车道都是一条30pixel的线, 因此TP代表的是IoU>0.5的预测, FP代表的是IoU<0.5的预测, TN代表的是没有这条车道且预测没有这条车道, FN代表的是有这条车道但是被预测为没有这条车道
Tusimple结果如下
CULane结果如下
TODO:
288x800
Adam
cosine decay
ECCV2020 Ultra Fast Structure-aware Deep Lane Detection论文解读
原文:https://www.cnblogs.com/ziyuzhu-edward/p/13639494.html