徐哲钧,张 暐,郭 昊,张 洋,李 庆,董 雪
上海交通大学 中英国际低碳学院,上海 200240
随着自动驾驶和辅助驾驶技术的迅速发展,对动态交通元素的精准感知成为发展车辆主动安全技术的重要前提。而车道线检测作为实现动态交通元素感知的重要环节也越来越受到研究者的关注。随着深度学习技术的发展,基于视觉的车道线识别技术在近年来也取得了长足的进展,而深度神经网络作为机器视觉的主流技术方案,已广泛应用于车道线检测中[1-3]。但是目前大多数基于深度学习的车道线检测方案的应用场景仍局限于白天晴朗天气下,对于雾天、雨天等较为复杂的气象与光照场景下的研究仍然较少。本文的研究目标集中于提高雾天这一复杂场景下的车道线识别准确率。
在复杂的天气条件下,车道线检测工作较晴朗天气而言将更具有挑战性。一方面,当天气条件不理想时,摄像头所拍摄的图像清晰度和对比度下降,并出现色彩失真和图像细节特征丢失等问题,导致车道线更加难以识别,这将为特征提取工作带来很大的困难,从而影响车道线检测的准确率。另一方面,对于由数据驱动的深度学习而言,训练样本的数量和环境的多样性直接影响了训练模型对车道线的检测性能。因此,欲提高复杂天气状况下的车道线识别精度,需要大幅度增加相应场景下的训练样本数量。
当前常用的开源自动驾驶车道线带标签数据集,例如TuSimple[4]、Cityscapes[5]、KITTI[6]数据集等,大多都是以晴天场景下的高速道路车道线图片为主,缺乏复杂场景下的车道线图片。目前对复杂场景下的车道线标注最具有权威性和挑战性的开源车道线数据集当属CULane数据集[7],它包含了9种复杂场景下的车道线,具有场景众多、数据规模庞大等特点,也是目前学术界及工业界最常用的动驾驶车道线数据集之一,为训练和测试深度学习模型在复杂场景下的车道线识别率提供了重要的数据支撑。
虽然CULane数据集中已经包含了非常多的复杂场景,但在该数据集中,并没有包含雾天场景下的车道线图片,这也导致了使用CULane数据集经过神经网络训练得到的车道线检测模型对于雾天场景下的车道线检测准确率比较低。而现有的雾天车道线图像数据集,以较为常用的FRIDA[8]和FRIDA2[9]数据集为例,其分别只包含了90和330张雾天道路图片,数据规模难以支持神经网络训练过程中对样本数量的需求。因此,缺乏雾天等复杂场景下的车道线数据集这一问题严重限制了深度学习训练的模型在复杂场景下的车道线识别准确率。为了解决复杂场景下车道线数据集缺乏的问题,一种可行的方法是利用现有的开源车道线数据集中的晴天图像人工生成复杂场景下的图像,以此来主动扩大复杂场景下的车道线数据量,以支持更高精度的模型训练,提高复杂场景下的车道线识别准确率。通过人工合成图像来扩充现有数据集的方法已经在雨天[10]和夜间[11]等场景下有了若干应用。同时,在合成雾天图像方面,前人也有了一些研究[12]。
长期以来,研究者们尝试通过建模分析雾天图像中清晰度和对比度下降的原因。1924年,Koschmieder[13]首次提出“大气散射光(airlight)”的概念;1977年,McCartney[14]进一步指出,大气中的悬浮粒子(包括水滴、尘埃和气溶胶等)对光的吸收和散射造成了目标光在目标和相机之间传输过程中的衰减和背景光(大气散射光)的产生,进而导致雾天图片对比度和饱和度的下降;在1999年,Nayar和Narasimhan[15]建立了雾天成像的数学模型,明确阐释了雾天图像的成像过程,即为大气散射模型。该模型认为,在强散射介质下(例如雾天场景),引起相机成像结果降质的主要原因有两个:一是目标反射光受大气中悬浮粒子的吸收和散射作用,造成目标反射光能量的衰减,这导致探测系统的成像结果亮度降低,对比度下降;二是太阳光等环境光受大气中散射介质的散射作用形成大气散射光,通常这部分散射光的强度大于目标光,因而造成相机成像结果模糊不清。
但是,采用以上模型对雾天图像进行重建要求原始数据集直接提供图片的深度信息,或者由便于采用立体几何算法提取深度信息的双目相机采集图片。然而目前大多数车道线数据集并没有提供所需的深度信息,包括当前使用最广泛的CULane数据集(图1)。因此,需要借助图像的深度估计方法来进行图片深度信息的提取。
图1 CULane数据集Fig.1 CULane dataset
根据输入图像数量的不同,图像的深度估计方法可分为多幅图像深度估计方法与单幅图像深度估计方法。基于多幅图像的深度估计方法包括多视立体几何(multi view system,MVS)算法[16-17]、运动中恢复结构算法[18](structure from motion,SFM)与从阴影中恢复形状(shape from shading,SFS)算法[19]等。但以上算法都是需要提供相同场景的多幅不同角度图像,从中进行对应点的匹配和三维重建,因此对同一场景的图像数量提出了要求,普适性不足。
从单幅图像中估计深度的方法是计算机视觉领域近年来热门的研究课题。基于RGB图像与深度图之间存在着某种映射关系这一基本假设,由数据驱动的深度学习方法逐渐应用于单目深度估计问题中,以卷积神经网络(convolutional neural network,CNN)为代表的深度学习技术在单目深度估计中取得了重要进展,逐渐成为图像深度估计的主要方法。
通过使用带有深度标注的图像,Eigen等人[20]首次将深度神经网络用于单幅图像深度估计任务,用有监督学习法训练了一个基于CNN的深度估计模型。他们提出使用两个尺度的神经网络对单张图片的深度进行估计:粗尺度网络预测图片的全局深度,细尺度网络优化局部细节。
然而采集大量含高精度深度信息的多样性图像数据是极具挑战性的,且有监督学习无法适应变化的环境。有监督学习方法要求每幅RGB图像都有其对应的深度标签,而深度标签采集通常需要深度相机或激光雷达,前者范围受限,后者成本昂贵。此外,采集的原始深度标签通常是一些稀疏的点,不能与原图很好地匹配。因此不用深度标签的无监督或自监督深度估计方法是近年的研究趋势。其中比较突出的一种方法就是Godard等人[21]提出的Monodepth2网络。
本研究提出了一种雾天车道线检测的数据集扩充方法,以原始CULane数据集为基础,该方法利用Monodepth2方法提取出晴天车道线图片中的深度信息,然后根据大气散射模型进行雾天图像生成。随后,利用生成的雾天图像对CULane数据集进行扩充和整理,人为地增加数据集中的雾天图片数量,以提高其对复杂场景,特别是雾天场景中的车道线检测性能。本研究中将以CULane数据集为基础扩充得到的新数据集命名为FoggyCULane数据集,并使用近年来车道线检测性能较为突出的SCNN网络进行训练,通过对比CULane和FoggyCULane训练的网络对不同复杂场景,尤其是雾天场景下的车道线检测准确率,来验证这一方法的可行性和有效性。
相机成像时接收到的光源主要来自两个部分,一是目标反射光经传输介质衰减后到达探测系统的光,二是来自背景光源(本研究中为太阳光照)经粒子散射形成的大气光。通过此物理模型建立得到雾天成像的数学方程为:
式中,I(x)为坐标J(x)处观测到的图像;J(x)为真实的清晰图像;A为大气亮度,通常假设为定值;t(x)为透射率,描述到达观测者处的光透射雾的能力:
式中,l(x)为从场景到观测者的距离;β为衰减系数,β越大表示雾越浓。
可以看到,图像降质和信息丢失是随着深度增加而增加的。因此,为了从J(x)获取I(x),关键在于获得t(x)公式中l(x)的值,即为了通过晴天车道线图片生成逼真的雾天车道线图片,需要提取晴天车道线图片的深度信息。目前的车道线数据集大多并未提供车道线场景的深度信息,并且通过有源传感器(LiDAR、结构光等)获取深度信息的方法存在着成本高昂、噪声较大、范围受限、通用性差等问题,因此通过常规单目图像进行深度信息提取对车道线检测领域有着极其重要的意义。
如前文所述,自监督学习有望替代有监督学习已经成为训练模型进行单眼深度估计的有希望的替代有效方法。
因此本文中采用Godard等人[21]提出的Monodepth2方法对CULane数据集中的晴天图像进行深度提取,以此来生成所需的雾天图像。
Monodepth2网络是一种自监督学习深度估计方法,使用深度估计和姿态估计网络的组合,来预测单帧图像中每个像素点的深度信息。基于对图像外观损失和分辨率的处理,Monodepth2网络在单目图像或者双目图像作为输入数据进行模型训练时都能够取得出色的深度估计效果。
为了解决从单幅图像中进行深度估计的不适定性,即每一个像素点都对应着大量有可能的深度值,Monodepth2网络借鉴了多视图立体系统MVS等方法的处理思路。由于自监督学习的深度估计方法使用图像重建的方法作为训练时的监督,根据光度一致性(photoconsistency)假设,同一空间的点在不同视角的投影中也应当具有相同的光度,因此自监督学习的图像重建工作重点在于恢复空间中具有光度一致性的点。通过在深度图中进行强制平滑操作,以及基于光度一致性使用全局优化方法求解图像每个像素的深度,Monodepth2网络能够有效解决深度估计的不适定性问题。但同时,由于缺乏对应场景的真实深度比例标尺,Monodepth2网络模型输出的深度信息是场景的相对深度[21]。
Monodepth2网络的架构中包含了两个网络,其中标准全卷积U-Net网络用于对单目图像进行深度信息的估计,而另一个单独的姿态网络用于对运动的图像之间进行姿态的预测。
Monodepth2的损失函数L定义为:
式中,It、It′为不同视角下的图片;It′→t为两者的相对姿态;Dt为预测的深度;K为内联函数,方便起见假设所有视角的K都相同;pe为光度重建误差(photometric reconstruction error),系数α=0.85;为平均归一化反演深度;Lp为像素光度损失;Ls为像素平滑度;L为最终的训练损失函数。
本研究中,使用了Monodepth2在KITTI数据集上训练的1 024×320预训练模型,对所选取的晴天车道线图像进行深度估计。
Monodepth2所得到的深度信息是相对深度,而非场景的绝对深度。考虑到本研究的目标是生成浓度随距离变化的雾天图像,因此并不需要得到真实而具体的深度信息,所需要的只是深度的变化趋势,或者说深度的相对变化,因此相对深度已经能满足本研究的需求。
由此,需要对方程(3)进行归一化处理,以适应相对深度的使用。
将Monodepth2提取得到的深度矩阵进行归一化,得到范围为[0,1]的深度矩阵l′(x),然后使用公式(8)获得新的透射值t′(x):
由此,得到了新的t′(x),将其带入前述的大气扩散模型方程(1)中,即可求解出雾天图像I(x)。CULane数据集的晴天图像原图,采用本研究的方法获取的单目深度图以及雾天车道线图片如图2所示。可见所生成的雾天图片在视觉效果上较为接近真实的雾天图片。
CULane数据集整体文件结构如表1所示,由包含88 880张图片的训练集、9 675张图片的验证集和34 680张图片的测试集组成。其中,测试集又进一步细分为9个子类别,包含了Normal正常、Crowded拥挤、Night夜晚、No line无线条、Shadow阴影、Arrow箭头、Dazzle light眩光、Curve曲线和Crossroad十字路口这9种复杂场景下的车道线图片,测试集各部分的组成如图3所示。
CULane数据集主要关注的是当前车道及相邻的至多4条车道线,这也是驾驶过程中最为关注的车道线,减小了检测复杂度,并降低了无关车道线对驾驶决策的影响。对于每张图片,都使用3次样条曲线标注车道线,并将车道线延伸至图像底端,其标签以坐标点集的形式记录车道线。对于车辆遮挡或看不到车道线的情况,数据集也仍然根据语义信息对车道线进行标注。
通过前述的雾天图片生成方法,本研究对CULane数据集的训练集、验证集、测试集分别进行了扩充。考虑到实际环境中雾天浓度的多样性和复杂性,为了能够更加真实地模拟雾天场景,使数据集适应多种浓度场景下的需求,本研究合理设置了雾浓度梯度,对公式(3)中的β值分别进行了β=2,3,4三种取值,从而生成雾浓度依次递增的3种雾天场景图片,雾天效果如图4所示。
图4 三种不同浓度的雾天场景效果展示Fig.4 Three different concentrations of fog
同时,由于本研究是使用CULane数据集中原本已经标注好车道线标签的图片进行雾天图片生成,因此所生成的雾天图片与原图拥有完全相同的车道线标签,因此,新生成的雾天图片可以直接复制原图的车道线标签文件。
由此,本研究数据集具体扩充方法如下:
(1)对训练集中所包含的driver_182_30frame文件夹下的所有图片进行β=2的雾天图片生成,一共生成了16 532张雾天图片,并将原图的车道线标签文件一起按照原文件夹的结构进行整理,放置于driver_182_30frame_beta2文件夹中;同理,也依次进行β=3和β=4的雾天图片生成,分别整理到driver_182_30frame_beta3、driver_182_30frame_beta4文件夹中;然后,按照雾浓度β值,将3种雾浓度的新建立文件夹和图片路径分别加入list文件夹中对应β值的训练集数据索引文件train_beta2_gt.txt、train_beta3_gt.txt和train_beta4_gt.txt之中,并相应地添加生成的雾天图片与原图在laneseg_label_w16文件夹中的标注之间的关联。
(2)对验证集中所包含的driver_23_30frame文件夹中的图片,同样进行β=2的雾天图片生成,并按照原文件夹的结构进行整理,一共生成了9 675张雾天图片,与车道线标签文件一起放置于driver_23_30frame_beta2文件夹;同理,也依次进行β=3和β=4的雾天图片生成,分别整理到driver_23_30frame_beta3和driver_23_30frame_beta4文件夹中;然后,按照雾浓度β值,将3种雾浓度的新建立文件夹和图片路径分别加入list文件夹中对应β值的训练集数据索引文件val_beta2_gt.txt、val_beta3_gt.txt和val_beta4_gt.txt之中,并相应地添加生成的雾天图片与原图在laneseg_label_w16文件夹中的标注之间的关联。
(3)对于测试集,本研究取其normal子类中的所有图片进行β=2,3,4的雾天图片生成,按照其原文件夹的结构,分别放置于driver_37_30frame_beta2、driver_100_30frame_beta2、driver_193_90frame_beta2和driver_37_30frame_beta3、driver_100_30frame_beta3、driver_193_90frame_beta3和driver_37_30frame_beta4、driver_100_30frame_beta4、driver_193_90frame_beta4文件夹中,每一种雾浓度各生成9 610张雾天图片,一共生成28 830张雾天图片;接下来,将这些雾天图片按照各自的雾浓度,在list文件夹中建立新的测试集雾天场景子类索引,分别命名为foggy_beta2、foggy_beta3和foggy_beta4,并将新建立的文件夹和图片路径加入list文件夹中的测试集数据索引文件之中。
由此,建立了一个扩充的包含3种不同雾浓度的雾天图像的新车道线数据集,将其命名为FoggyCULane数据集。经过扩增后的FoggyCULane数据集整体文件结构如表2所示。相较于原始的CULane数据集,FoggyCU-Lane在训练集、验证集和测试集中都增加了雾天图像,训练集、验证集和测试集也分别扩增为138 476张、38 700张和63 510张车道线图片;并且测试集也新增了Foggy_beta2、Foggy_beta3和Foggy_beta4这三种不同浓度的雾天测试场景,总共扩增为12种不同的场景。
表2 FoggyCULane整体文件结构Table 2 Overall file structure of FoggyCULane dataset
原始CULane数据集与FoggyCULane数据集的测试集构成和图片数量的对比如表3所示。
表3 CULane与FoggyCULane的测试集对比Table 3 Comparison between testing sets of CULane and FoggyCULane
在具体使用FoggyCULane数据集时,本研究采取的方法是:将雾天车道线的训练集与验证集按照3种雾浓度进行分别提取,并与原始CULane的训练集与验证集进行两两组合,由此可以得到3种包含单一雾浓度的FoggyCULane数据集,方便起见称呼它们为FoggyCULane_beta2、FoggyCULane_beta3和FoggyCULane_beta4;同时,也可以利用所有生成的雾天图片得到包含以上3种雾浓度的FoggyCULane数据集,方便起见称呼它为FoggyCULane_mix。因此,根据数据集导入方法的不同,事实上建立起了4种雾天车道线数据集,本文中如未特殊强调统一称呼为FoggyCULane数据集。
SCNN(spatial CNN)是由Pan等人[7]创造性地提出的空间卷积神经网络,该网络能更有效地学习图像中的空间关系,以像素级目标来训练网络,输出车道线的概率图,再通过另一个网络判断是否存在至多4条车道线。在当前主流的车道线检测网络架构中,SCNN是车道线检测准确率最高的网络之一。
不同于CNN的逐层叠加,SCNN是将特征图按上下左右四种不同方向的行或列作为切片,依次应用卷积运算,并将当前切片的输出相加到下一切片作为新的一片,直至处理完所有切片,从而形成的一个深层神经网络。相较于通常的CNN,SCNN更加充分地利用到了图片像素之间的空间关系。
如上所述,SCNN网络的前向计算公式为:
式中,Xi,j,k为输入的三维张量X中的元素,分别表示通道、行和列的索引;Ki,j,k为当前切片内通道j中的元素与末端切片内通道i中的元素之间的权重,k为这两个元素的列数之差。
SCNN的网络架构如图5所示,其基于LargeFOV网络进行搭建,包含了两部分网络,分别进行车道线概率图的预测(左)和车道线是否存在的预测(右)。图中,“Conv”“HConv”和“FC”分别指的是卷积层convolution layer、带洞卷积层atrous convolution layer以及全连接层fully connected layer。从图中可以看到,在顶部的隐藏层(“fc6”层)之后,紧随着的就是上述四种空间方向的卷积运算层(“fc7”层)。因此,SCNN的损失函数也由两部分组成,即预测车道线概率图的空间交叉熵(spatial cross entropy loss)和预测车道线是否存在的交叉熵(cross entropy loss)。
图5 SCNN的网络架构Fig.5 Network structure of SCNN
本文使用SCNN网络在原始CULane数据集、3种不同雾天浓度以及混合所有雾天浓度的FoggyCULane数据集上分别进行训练,以FoggyCULane扩充后的测试集为标准进行测试评估,以此来比较新建立的FoggyCULane数据集对复杂场景,特别是雾天场景下车道线检测准确率的提升效果。
本文中深度学习网络的训练环境为CentOS 7.4,Pytorch和CUDA;算力为8块NVIDIA GeForce GTX 2080Ti GPU显卡。本文中SCNN的训练使用标准的随机梯度(stochastic gradient descent,SGD)训练模型,批量大小(batch size)设置为64,基础学习率为0.01,动量(momentum)为0.9,重量衰减(weight decay)为0.000 1,最大epoch数与最大迭代次数分别设置为30和8 000。图像在输入SCNN训练之前,会在预处理环节调整为800×288像素大小,以减轻训练的负担。本研究针对3种不同的雾天浓度、12种不同的复杂场景下的车道线检测效果进行了评估。
为了能够量化评估车道线检测结果,本文参照了文献[7]中的方法,将真实车道线标注与预测车道线标注均视为宽度为30像素的线条状区域,并计算两者之间的交并比(intersection over union,IoU)。本文中,设置IoU的阈值为0.5,当预测车道线与真实车道线之间的IoU不小于0.5时,即可将本次车道线预测视为真实正例(true positive,TP),反之则视为虚假正例(false positive,FP);相应的,也可以定义真实负例(true negative,TN)和虚假负例(false negative,FN)。
如前文所述,FoggyCULane的扩充测试集中,共有12种不同的复杂场景,分别为正常、拥挤、夜晚、无线条、阴影、箭头、眩光、曲线、十字路口和新增加的3种浓度的雾天场景。
其中,Crossroad场景由于未标注真实车道线,仅采用FP值进行评价;对于其余11种复杂场景,评估的标准采用F1-measure,计算公式为:
表4展示了SCNN网络在不同数据集上的5轮训练结果,包括12种不同场景。表4中,第一列所示为12种不同的复杂测试场景,其中最后3行是新增加的3种浓度依次递增的雾天场景;而每一列分别代表5轮使用了不同数据集的神经网络训练,包括了原始CULane数据集、β值分别为2、3、4的3种雾天浓度FoggyCULane数据集以及混合了3种雾天浓度的FoggyCULane数据集;表格中的值(除了Crossroad行)代表每种场景下的F1-measure值,单位为%,而Crossroad行为FP值。
表4 SCNN在不同数据集上训练的评估结果Table 4 Evaluation results of SCNN trained on different datasets
如表4所示,在12种不同场景下,由FoggyCULane训练的模型基本都得到了比由原始CULane训练的模型更好的车道线检测效果,其中,在3种雾天场景下,特别是浓度最高的Foggy_beta4下,车道线检测效果的差异尤为明显。
在3种雾天场景下,随着雾的浓度即β值的增加,由原始CULane数据集训练的模型的车道线识别率由74.65%降低至11.09%,而由FoggyCULane数据集训练的模型则始终能保持在60%以上,其中,由混合了3种浓度雾天图像的FoggyCULane数据集所训练的模型取得了86.65%到70.41%的雾天车道线检测效果。
分析雾天车道线检测效果得到提升的原因:
(1)相比于原始CULane数据集,FoggyCULane数据集的训练集和验证集中增加了大量的雾天车道线图像,使得车道线检测网络在训练中能够充分接触到雾天车道线特征,并对其进行提取和学习。
(2)所增加的雾天图像是根据雾天成像的大气散射模型人工合成的,其中包含了足够的具有较高置信度的雾天信息和特征。此外,雾天车道线图像的数量也能够满足车道线检测网络训练提取特征的需要。
以上两点原因,使得由FoggyCULane数据集训练所得到的车道线检测模型在雾天场景下的识别精度远高于原始CULane数据集。
因此,本研究通过人工生成雾天图片扩充数据集的方法,不但能够极大地提高神经网络训练对雾天场景下车道线的检测准确率,同时也不会对其他复杂场景下的车道线检测造成负面影响,这证明了本文方法的有效性。
图6 SCNN训练模型对雾天车道线识别效果图Fig.6 Foggy lane detection results of models trained by SCNN
而在4种FoggyCULane数据集结果的横向对比中,可以观察到,在非雾天场景下的车道线识别率各有优势,彼此之间有一些差别但也相差不大。本文主要关注的是雾天场景下的车道线检测识别率,SCNN训练模型对雾天车道线识别效果如图6所示。其中,红色为真实的车道线标记,绿色为预测的车道线。
对4种FoggyCULane数据集结果之间的对比分析如下:
(1)混合雾天浓度的数据集比3种单一雾天浓度的数据集的识别效果更好。分析其原因,一方面是因为混合雾天浓度数据集中雾天图像的数量更多,神经网络训练时能更多地接触雾天场景,因此对雾天车道线更加敏感;另一方面,混合雾天浓度数据集包含了3种浓度的雾天图片,使得模型训练时对雾天特征的提取和学习更加完善。
(2)3种单一雾天浓度的数据集中,可以发现,对每一种浓度的雾天测试场景,车道线识别率最高的都是其对应雾天浓度值的雾天车道线数据集。这取决于训练集中的雾天特征,反映了训练集中雾天图片的雾天浓度对深度学习训练结果雾天车道线检测适应性的影响,训练结果更加适合用于检测与训练集中图片的雾天浓度相近的雾天场景。
本文以CULane数据集为基础,将该数据集中的晴天图片人工合成雾天图片,共生成了107 451张带标签的雾天车道线图像,以此将原始CULane数据集规模扩充了1.8倍,从而建立了包含3种不同浓度雾天场景的新车道线数据集FoggyCULane,解决了深度学习车道线检测研究领域中雾天数据集不足的问题。
本文研究结果表明,人工生成复杂场景图片来扩充数据集的方法能显著提高对复杂场景车道线的识别能力,在不同的薄雾、中间状态,以及浓雾(对应衰减系数β分别为2,3,4)情况下,FoggyCULane数据集可将SCNN网络的雾天识别精度从74.65%、51.41%和11.09%分别提升至86.65%、81.53%和70.41%。因此该方法的有效性得到充分证明,并且在雾浓度越高的状况下提升效果越显著;同时,对数据集的扩充也并不会对其他复杂场景的识别率带来负面影响。
本文所提出的方法能够有效提高雾天场景的车道线检测识别率,适用于相较于高速公路更为复杂的城市道路场景;同时,将本文方法进行推广,还能够发展适用于例如夜间、雨天等其他不同类型的复杂场景的目标识别方法。