亮点
1.提出了一个基于卷积神经网络进行车道线检测的新方法,区别于逐像素分割方法,该方法预测输入图像中每行的车道线位置。
2.该方法计算量小,能很好地满足自动驾驶场景对算法的速度要求;使用全局感受野,也能很好地处理复杂场景。
3.在训练网络时根据车道线的物理结构,加入了结构损失(structual loss),很好地利用了车道线的先验信息。
内容
在输入图像中每隔若干像素画水平线,将输入图像划分成若干个“细长条”,每个“细长条”称为1个row anchor。再将每个row anchor在垂直方向切割,形成若干个“块”,每个“块”称为1个cell。如下图所示:
此外,还需要在每个row anchor最后面“人为地”增加1个cell,这个cell表示该row anchor中没有车道线。希望能设计一个网络,达到如下功能:网络能够输出每个row anchor中含有车道线的cell的位置,当某个row anchor中没有车道线时,网络输出该row anchor中“人为增加”的cell的位置。
为了利用车道线物理结构的特性作为网络输出结果的约束,在上述方法的基础上,作者又构造了2个损失函数。
因为车道线是光滑的,所以相邻row anchor中车道线所在的cell的位置不会有突变。这意味着,相邻两个row anchor的cell类别概率分布应该是相似的,因此定义相似性损失函数如下:
使用相似性损失函数约束网络的输出结果,使得相邻两个row anchor的cell类别概率分布不会有突变。
此外,车道线一般是直线;由于视角的原因,弯曲的车道线在图像上大部分也近似直线。最小化相邻row anchor预测出车道线位置的二阶差分,能够约束网络预测结果,使得车道线不要“太弯”。
在车道线存在的情况下,使用如下公式能得到车道线所在的cell的位置
作者在实现过程中,使用了一些比较工程化的方法,下面加以阐述。首先,作者又增加了1个辅助的分割分支,有助于提取特征。整体算法流程如下图所示:
分割分支只在训练时使用,推理时不使用。分割分支使用交叉熵损失函数。最终的损失函数是分类损失函数、结构化损失函数和分割损失函数的加权和,表示如下:
其次,作者在实现过程中使用了数据增强的方法以减轻过拟合现象。使用了旋转、垂直和水平移位的方法,为了保持车道线的结构,在数据增强得到的图片上对车道线进行了延长,如下图所示
作者使用了ResNet-18和ResNet-34作为网络的backbone,在TuSimple和CULane这2个数据集上验证了上述方法。在这2个数据集上实现时一些参数设置如下:
在2个数据集上的性能如下所示:
其中使用ResNet-18作为backbone的版本在CULane数据集上能跑到322.5FPS,是一个非常闪光的结果!
本文仅做学术分享,如有侵权,请联系删文。