ECCV2020 Ultra Fast Structure-aware Deep Lane Detection论文解读
论文解读Ultra Fast Structure-aware Deep Lane Detection
最近阅读了ECCV2020一篇车道线检测的论文, 看完了源代码, 写下这篇博客, 希望能对其他学习的同学有所帮助。
1. Intro
车道线检测有很久远的历史, 在之前的工作中主要有以下两个流派:
比较有代表性的工作可点击下面的链接查看
- 传统图像处理的方法
- 深度学习图像分割的方法
- Towards end to end lane detection: and instance segmentation approach
- spatial cnn for traffic scene understanding
- Learning Lightweight Lane Detection CNNs by Self Attention Distillation
- VPGnet
- LaneNet
- Learning to Cluster for Proposal-Free Instance Segmentation
- Deep Neural Network for Structural Prediction and Lane Detection in Traffic Scene
- FastDraw
对于任何一个流派, 在目前的自动驾驶车道线检测中, 都需要面临两个问题:
-
computational cost
自动驾驶的车辆上往往有多个摄像头, 如果同时对每个车辆的摄像头进行道路线进行识别的话, 需要耗费大量的计算资源, 因此需要计算复杂度更低的车道线检测方法。
-
no-visual-clue
在很多道路上, 由于车辆拥堵, 车道线被车挡住了, 需要通过车的位置和环境的语义信息去猜测。 在这种情况下, 没有视觉信息(车道的颜色, 形状)去引导车道线的识别, 造成了很大的困难。 下面这张图就是很好的例子。
为了解决以上两个问题, 作者提出了基于row achor的网络, 让网络在不同的行中选择属于车道线的列, 减少了传统语义分割pixel level prediction的复杂度, 同时使用global feature来增加网络的感受野, 提升在有车辆遮挡关系下的网络推理能力。
论文的贡献有以下几点:
- 提出了很有效的办法来解决fast speed和no visual cue的问题 Global Feature, Row Anchor
- 提出了结构化损失函数structural loss来对道路的形状进行约束 Structural Loss
- 在CULane数据集上取得了SOTA, 可达到300fps的识别速度。
2. Method
2.1 符号定义
论文里首先定义了一些符号, 如下图所示
作者首先把图像降采样到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提取了全局特征, 全连接层使用了全局特征, 因此作者这样的方法能使用环境信息来对车道线的位置进行推断。
2.2 损失函数
总体来看, loss分为三部分
- 上文所述的classification cross entropy loss
- structural loss
- segmentation loss
其中structural loss分为similarity loss和shape loss两部分
其中similarity loss如下, 作者希望相邻的两个row anchor的预测概率接近
shape loss的推导如下
首先是第j行, 第i个车道的位置, 选择预测概率最大的作为预测值
但是由于argmax不可导, 作者换了一种表示方式
对location求二阶差分得到下面的loss
3.3 总体结构
最后, 网络的总体结构如下图
蓝线上的网络做语义分割, 得到segmentation loss, 下面的网络进行预测, 得到structural loss和classication loss
3. Experiments
作者分别在CULane和Tusimple上实验
对于tusimple, 准确度的定义如下
Cclip指的是预测正确的道路点数, Sclip是所有的道路点数。
对于CULane用F1-measure来度量, 因为CULane的每条车道都是一条30pixel的线, 因此TP代表的是IoU>0.5的预测, FP代表的是IoU<0.5的预测, TN代表的是没有这条车道且预测没有这条车道, FN代表的是有这条车道但是被预测为没有这条车道
Tusimple结果如下
CULane结果如下
4. 代码研读
TODO:
288x800
Adam
cosine decay