鲁维佳,刘泽帅,潘玉恒,李国燕,李慧洁,丛 佳
(1.天津城建大学计算机信息与工程学院,天津 300384; 2.中国铁塔股份有限公司天津市分公司,天津 300011)
车道线检测是自动驾驶系统中车道辅助保持系统(LKS)和车道偏离预警系统(LDWS)的关键技术,高效实时的车道线识别可以提升自动驾驶汽车的行驶安全性[1-2]。近年来,深度卷积神经网络以其优越的图像特征提取性能被广泛应用于车道线检测中[3]。文献[4]提出一种稳健的车道线检测方法,以VGG16[5]为卷积神经网络,加入编码器和解码器结构。该方法在车道检测速度和精度之间取得了很好的平衡。针对车道弯道处识别精度问题,文献[6]提出一种基于多摄像机融合,集成消失点估计和特定的特征拟合策略的车道检测方法,但该方法对相机参数依赖较高。文献[7]提出的SegNet网络能够同时检测出建筑物、行人、车道线,实例分割性能优异,但实时性较差。文献[8]提出了一种用于车道边界识别的端到端系统,完成了车道线的实例分割和分类,满足了实时性要求。文献[9]采用多帧连续图像作为输入,并提出结合CNN和RNN的混合神经网络,在复杂环境中具有很好的稳健性。文献[10]利用文献[11]的思路来实现对任意数量车道线的检测,训练了一种视角转换的H-Net网络,解决了车道线变化和视角波动的问题,但该方法Cluster耗时严重。文献[12]提出一个可以检测任意车道数的PINet网络,并提出后处理算法消除杂点,该方法误检率低,而且计算开销较小。文献[13]提出一种车道敏感架构搜索框架CurveLane-NAS,可以自动捕获长距离相干和精确的短距离曲线信息,该方法在复杂环境中有着不错的性能。文献[14]提出一种基于GLNet的车道线检测算法,该算法在LaneNet基础上加入生成对抗网络,使用H-Net[15]网络训练的视觉转换矩阵优化并拟合输出车道线,适用于多种场景。文献[16]提出的LaneATT根据车道线的细长特征将具有细长形状的锚点用于特征池化步骤,提升了模型性能。然而,对于曲线车道或复杂拓扑结构的车道,锚点无法很好地描述车道线的形状。
综上所述,当前车道线检测算法取得了良好的进展,但还存在一些不足之处,如对计算机硬件要求高、计算量大、实时性差、对弯道识别效果不佳等。本文针对以上问题提出基于深度学习的车道线检测算法,以期在多变行车环境下对弯道的检测,具有更高的准确度和稳健性。
车道线由远及近是连续的,形状先验性较强;由左向右,线与线之间空间依赖性较强。基于RESA的思想[17],以车道特性作为出发点,利用空间信息建立特征融合模块。为避免梯度消失问题,采用ResNet-50网络[18]作为主体框架,结构见表1,残差结构中的跳跃连接有利于信息在网络的各层间流动。Resa-CC算法整体模型由编码器、自注意力机制、循环特征融合模块、解码器组成。总体结构如图1所示。
图1 算法总体结构
表1 ResNet-50网络结构
Resa-CC算法以ResNet作为特征提取器。原始输入图像通过编码器后特征缩小到 1/8。初步特征将在此阶段提取,并将自注意力模块加入解码器中,模块如图2所示。
图2 编码器模块
解码器由双边上采样块组成。每个块上采样两次,最后将 1/8 的特征图恢复到原始大小。双边上采样解码器由粗粒度分支和细粒度分支组成,如图3所示。
图3 双边上采样解码器
粗粒度分支:从最后一层快速输出粗略向上采样的特征。首先1×1卷积减少通道数;然后乘以输入特征图的2倍,进行BN操作,双线性插值对输入特征图进行上采样;最后,执行ReLU操作。
细粒度分支:微调来自粗粒度分支的信息丢失。步幅为2的转置卷积对特征图进行上采样,同时将通道数减少2倍。Non-bottleneck块由具有BN和ReLU的4个3×1和1×3卷积组成,可保持特征图的形状并以分解的方式有效地提取信息。在上采样操作之后,堆叠2个Non-bottleneck。
编码器中加入 CBAM[19]注意力机制,如图4所示。该模块可以自适应地对不同通道和空间位置的特征进行加权,提高模型对重要特征的关注度,主要包括两部分:通道注意力和空间注意力。通过这两部分的结合,CBAM模块可以在保留重要特征的同时,通过学习通道和空间位置之间的相关性,抑制无关特征,从而提高模型的泛化能力和性能。
图4 CBAM自注意力机制
以车道的形状先验性和空间依赖性作为出发点,设计一个模型,可以融合这两方面的空间信息,并增强原始特征。该模块中,将特征图进行切片,如图5所示, (a)与(b)分别为特征上下传播和左右传播。每次迭代中,切片特征图将在4个方向上反复移动,并垂直和水平传递信息。最后,该模块经过K次迭代,以确保每个位置都可以接收整个特征图中的信息。步长不同时水平信息传递和垂直信息传递如图6所示。
图5 特征图切片
图6 特征传递
该模块在4个方向上重复应用特征移位操作,使每个位置都能感知并聚合同一特征图中的所有空间信息。该模块的进一步计算定义为
(1)
(2)
(3)
(4)
式(1)-式(4)中,Z为信息传递的实时结果;X为第k次迭代时特征图的值,带有下标的X为更新后的元素;c、i、j分别表示通道、行、列;L为式(1)和式(2)中的W和H;f为ReLU的非线性激活函数;sk为第k次迭代中的步长,式(1)和式(2)分别为垂直和水平方向的信息传递公式;F为一组一维卷积,尺寸为输入通道数×输出通道数×卷积核的宽度:Nin×Nout×w。
以从右向左的信息传递为例,当k=0次时,s1=1,每列中的Xi可以接收Xi+1移位特征。由于反复移位,Xw-1也可以接收X0移位特征。当k=1次迭代时,s2=2,每列中的Xi可以接收Xi+2移位特征。以X0为例,X0可以在第二次迭代中接收X2信息,考虑X0在上一次迭代中从X1接收了信息,X2从X3接收到信息,现在X0仅在两次迭代中总共从X0、X1、X2和X3接收了信息。下一次迭代类似于上述过程。在所有K次迭代之后,每个Xi可以在整个特征图中聚集信息。
在像素级别上,相邻行上的车道点互相靠近。因此,将相邻三行车道点的像素坐标进行二次曲线拟合,预测下一行车道点的位置。在图7中,通过A、B、C的坐标,拟合一条二次曲线。由于行方向是平均划分的,因此可以确定D点的列坐标。通过求解二次曲线的曲率,可以得出D点的行坐标,从而确定下一行车道线点的位置坐标。
图7 车道弯道结构
Resa-CC算法利用二次多项式函数建立曲线车道线的约束条件,进而设计出损失函数,以提高弯道检测的准确率。由于直线是二次多项式函数的一种特殊形式,可视为二次多项式函数的一种特例,因此本文所提出的算法不会影响直线车道线的检测。
以图7为基础,建立坐标系,垂直方向为x轴,水平方向为y轴,假设曲线车道线可以表示为一个二次多项式函数
y=ax2+bx+c
(5)
显然有
d2y/dx2≡2a
(6)
即车道线的二阶导数为常数,即在任一点处的二阶导数相等,图7车道线上连续A、B、C、D,横轴间隔为1,即有
(7)
将导数以差商形式近似可得
(yB-yC)-(yC-yD)=(yA-yB)-(yB-yC)
(8)
式(8)极小化函数为
(9)
第i条车道线在第j行的位置坐标的期望为
(10)
将式(9)代入式(10)可得弯道约束损失函数
(11)
试验环境为64位Windows 10,Intel(R) Core(TM) i7-7700 CPU @ 3.60 GHz,GPU为8 GB显存的NVIDIA GeForce GTX 1080,使用Python 3.8开发,采用训练神经网络Pytorch-1.9.0,torchvision-0.2.0,OpenCV-python-4.5.1.48等完成。模型中EPOCHS为100,LEARNING_RATE为0.000 5,BATCH_SIZE为6。
采用TuSimple数据集,该数据集包含不同交通状况、不同时间段的车道线数据。其中训练集3626张,测试集2782张。为验证本文算法在弯道场景下的有效性,对测试集的图像进行人工选取,选取483张弯道场景的图像作为弯道测试集。
为评判模型性能,采用视觉领域常用评估标准:准确率Acc,误检率FP、漏检率FN。公式分别为
(12)
(13)
(14)
式中,Cclip为正确预测的车道点的数量;Sclip为每个剪辑中地面真相的总数;Tfp为检测错误的车道线数量;Nt为全部检测到的车道线数量;Tfn为检测错误的真实车道线的数量;NT为全部真实的车道线数量;FPS为单位时间内机器处理图片的数量。
进行消融试验以验证循环特征聚合模块和自注意力机制的有效性。将本文Resa-CC算法与其他方法进行对比,如ResNet-18、ResNet-34。Resa-18和Resa-50为分别以ResNet-18和ResNet-50为基础的循环特征融合模型。结果见表2,加入循环特征融合模块后的Resa-18,准确率提升3.41%,FP和FN分别下降5.31%和5.48%;对比Resa-50,加入注意力机制的Resa-CC准确度提升1.1%,FP和FN分别下降0.82%和0.11%。结果表明,注意力机制和循环特征融合模块的加入,能更有效地捕捉到车道的结构特征,从而提升了弯道识别的性能。
表2 消融试验
为更好地说明算法的性能,对比行车过程中弯道处的识别结果,4个不同弯道场景及曲率的识别效果如图8所示,本文Resa-CC算法与SGRNeXt算法检测效果对比如图9所示。
图8 弯道检测效果
图9 检测效果对比
由图8可以看出,算法均准确地识别出了弯道车道线,证明了本文算法弯道检测的准确率和稳定性。
由图9可以看出,未加入弯道结构损失的SGRNeXt算法中,车道弯道处出现末端上扬的情况;相同场景下,加入弯道结构损失的Resa-CC弯道的识别性能有明显提升,在弯道处更加准确地识别出了弯道车道线。
本文算法的准确率(Acc)与训练回合数(Epoch)之间的关系如图10所示。算法的准确度随着Epoch的增加而提高,不同算法的准确度在不同的Epoch值上达到饱和状态。当Epoch再增加,算法的准确度出现下降。因此,Epoch设置过大会对机器性能造成浪费,本文的Epoch设置为100,在合理范围之内。
图10 Acc折线图
表3为本文提出的Resa-CC模型分别与LaneNet[10]、UFLD[20]和SGRNeXt的对比试验结果。在弯道识别中,Resa-CC算法的准确率c可达96.8%, FP远低于其他算法。这得益于循环特征融合模块和自注意力机制,算法更加关注图像的特征,有助于实现车道线检测的更高精度。相比LaneNet,准确度提升3.6%,FP和FN分别下降4.79%和0.44%,FPS与Runtime均满足行车实时性检测要求。综合各指标,本文Resa-CC检测模型为最优,在弯道路段行驶中准确检测到车道线的位置,具有更强的稳健性和准确性。
表3 对比试验
针对道路转弯处曲率过大而导致弯道识别精度下降的问题,本文提出了一种基于循环特征融合的弯道增强算法。该算法主要关注车道本身结构信息,通过在模型中加入编解码结构和自注意力机制,增强车道结构信息特征,循环特征融合模块能更全面全方位地将车道线特征融合起来,且没有特征信息的损失。弯道结构损失函数通过将车道线建模为二次项函数,能有效地提高车道弯道检测的性能,算法准确率达96.83%,对比UFLD算法,准确率提升1.7%,FP和FN分别下降17.26%和2.61%,FPS为35.68,符合自动驾驶汽车中对实时性检测的要求。