付阳阳,陶建军,王夏黎,李妮妮,袁绍欣
(1.长安大学 信息工程学院,陕西 西安 710064;2.绍兴市交通建设有限公司,浙江 绍兴 312000)
斑马线作为道路交通中重要的组成部分,其存在可以帮助行人安全通行。对于辅助驾驶系统中,行人的行走意图一直被人们所研究但未全面攻破。对于辅助驾驶来说,分析斑马线区域内的行人意图是一项必不可少的工作。人们也一直在研究检测斑马线更精准更全面的方法,利用现代科技对斑马线进行检测为辅助驾驶的预警系统提供了帮助,为车辆的无人驾驶提供了更加可靠且准确的数据,使得行人的安全系数得以提升。
斑马线的检测技术在不断发展,如Toldo[1]提出的灭点法,其实质即为聚类算法,是直线约束图像中的两个消失点,然后用RANSAC方法来进行满足约束条件的直线组拟合,该算法不仅计算量大,并且实用性差;再如双极系数法[2-4]是根据灰度的差异来获得我们所需要的区域,然后进行斑马线的检测,但是该算法主要利用人工能力,使得分割不够精确。深度学习方法逐渐发展起来,传统的神经网络斑马线检测是将原始图像进行灰度化、逆透视、二值化处理后利用边缘检测算法(如canny[5-6],sobel[5-7])提取垂直方向边缘信息后进行霍夫变换[8-9]来检测斑马线,该方法检测精度很低且适用性较差,受用面积比较狭小,对于存在缺损的斑马线不能检测;现有神经网络算法检测斑马线算法较多,较好的有语义分割[10-11]的算法,Long[12]等提出FCN,它在进行语义分割时感受野固定且其分割物体时细节容易丢失或着被平滑;Badrinarayanan等[13]提出SegNet,其采用了池化索引来保存图像的轮廓信息,降低了参数量,但是当对低分辨率的特征图进行池化时,会忽略邻近像素的信息;Ronneberger等[14]提出了U-Net[15]模型,它使用图像切块进行训练,但是其在卷积过程中没有加pad,导致网络最后的输出与输入大小不一样;Zhang等[16]提出PSPNet[17]模型,提出金字塔模块来聚合背景信息,但采用4种不同的金字塔池化模块,对细节的处理要求较高;到提出新DeepLabV3 ASPP模型,采用了Multigrid,提出了ASPP,加入了BN,但其不能捕捉图像大范围信息,图像层的特征整合只存在于 ASPP中。
针对上述提到的检测精度低、实时性差、检测不全面的问题,本研究提出了改进的SegNet模型,并将本研究模型与语义分割的U-Net模型、PSPNet模型、原始SegNet模型在斑马线检测进行对比试验,寻求检测斑马线最为精准的算法,经过对比试验得到对于检测斑马线精确度最好的模型,达到应用复杂场景中为车辆提供良好预警提示的目的。
SegNet是一种为了自动驾驶或者智能机器人的图像语义分割深度网络,SegNet最吸引人的特点是对于分辨率低的输入图像,它的解码器使用了上采样的方式,SegNet为了降低学习上采样的虚耗,将编码器获得的池化索引应用到上采样。SegNet使用了卷积操作,将特征图进行增多,使其变密集,供特征提取。这样操作可以使模型具有良好分割性能的背景下揭示了内存与精度的权衡。
SegNet模型主要针对于道路场景应用,在整体上运用了编码器-解码器(Encoder-Decoder)的结构。关于输入数据存在空间维度的增减问题,SegNet模型使用编码器来进行,而对于编码器造成的问题,解码器使用反卷积来解决,恢复数据的空间维度以及目标的细节。编码器与解码器之间会存在直接的信息关联,这样解码器可以实现对目标细节进行更好的恢复。
传统SegNet模型的网络结构如图1所示,Input为输入图像,Output为输出的分割图像,不同颜色代表不同的分类。SegNet是一个对称网络,由中间②即Pooling层与③即Upsampling层作为分割,左边是通过卷积来提取高维特征,并通过Pooling使图片变小,为Encoder,编码器网络由13个卷积层组成,对应于VGG16网络中用于对象分类的前13个卷积层。因此,对于初始化训练的权重,可以从训练用于大数据集分类的权重中获得。而且为了在编码器的输出处保留更高的分辨率特征映射,可以舍弃全连接层。这样SegNet模型中编码器的参数减少。编码器与解码器一一对应,解码器也有13层。右边是反卷积与Upsampling,通过反卷积重新获得图像分类以后的特征,填充缺失的内容,Upsampling作为Pooling的逆过程,使图像变大,为Decoder,最后一个卷积层会输出所有的类别,网络的最后通过Softmax函数,输出不同分类的最大值,最终完成图像像素级别的不同分类,得到每个像素属于斑马线的概率。Pooling Indices为Pooling前后的对应位置,会被模型在Encoder Networ时使用Pooling记录,Pooling后的Indices输出到对应的Upsampling。Convolutional Encoder-Decoder为Encoder每一层卷积对应Decoder的一层卷积,融合高分辨率信息。
图1 传统SegNet模型网络结构Fig.1 Network structure of traditional SegNet model
以提高检测斑马线的精确度与实时性为目的,将原始SegNet模型进行改进。首先将金字塔池化模块(SPP)融入,提高提取信息的全面性;然后进行结构改进,将对称结构改为编码不变,解码减少的不对称结构。
本试验将金字塔池化模块融入到原始SegNet模型中,将其放在最后一层卷积层后面,构造一种独特的全局特征提取模块,实现改进SegNet能够有效获得全局预警信息。
金字塔池化模块后会生成不同级别的特征图,它们最后会被展平且拼接起来,然后再将其送入到全连接层中进行分类,该设计的目的是消除CNN输入固定大小的图像这一缺点。
但是,传统线性协整模型仅反映因变量对自变量的平均响应,由于条件均值只是概率分布的一个特征,如果希望知道在更多的分布特征上因变量和自变量的长期均衡关系,上述方法则无法胜任。一个改进的办法是在不同的分位点上考察变量之间的关系。基于此,Xiao(2009)应用Koenker和Bassett(1978)的分位数回归方法,提出分位数协整模型(Quantile Cointegration Model)。记εt的τ分位数为Qε(τ),It={xt,Δxt-j}∀j,则对于式(5)中的条件分位数为:
如图2所示,金字塔池化模块融合了4种不同金字塔尺度的特征。①表示最粗粒度的级别是全局池化。对特征图采用4个不同尺度池内核进行池化,对于其他的级别是将图像进行划分,然后将不同级别包含位置信息的bin进行组合,池化后我们需要进行卷积,采用1×1,2×2,3×3和6×6这4种不同尺寸的卷积操作得到多个尺寸的特征图,并对这些尺寸的特征图再次选择1×1的卷积,降低通道数,然后将得到降低了通道数的特征图使用双线性插值机型上采样后得到与特征图相同的尺寸,最后将不同尺度金字塔池化并将上采样的特征斑马线图像与原来的斑马线特征图进行结合。图2中方框POOL表示采用1×1,2×2,3×3和6×6这4种不同尺寸的Pooling操作得到多个尺寸的特征图,并对这些尺寸的特征图再次进行“1×1的Conv”来减少通道数。然后采用双线性插值进行UPSAMPLE,即通过上采样来获得金字塔模块前相同尺寸的特征图,并在通道上进行拼接CONCAT。
图2 金字塔池化模块Fig.2 Pyramid pooling module
金字塔池化模块在卷积层的后面对每一张斑马线图片都进行了多方面的特征提取,有效地提取到斑马线的特征信息,而且SegNet模型经过与金字塔池化模块融合后,可以输入任意尺度的斑马线图像,可以实现从全局中提取出语境信息,提高了斑马线识别的精度。
为了减少网络模型的运行时间,提高斑马线检测的实时性,将模型对称的结构进行改进,改为编码不变,解码减少的不对称结构,这种结构极大地提升了运行速度。
主要是利用改进后的SegNet[18-19]来进行斑马线像素点位置的检测,得到斑马线检测图像。改进的SegNet结构依然是分为编码和解码两部分,主要将解码部分减少,编码部分不变,在解码部分利用1×1 的卷积核来减少网络参数,这样利用减少的网络时间来提高模型的运行速度,同时提高了检测斑马线的实时性。
在斑马线图像中存在大量的冗余信息,我们将斑马线图像进行压缩,来减少信息的冗余。我们利用模型的编码部分卷积层来获得各种不同的斑马线图像特征信息,将斑马线图像的感受野增大,来保证我们在进行斑马线检测时不会存在上下文的信息减少或者可能增多。细节的处理也是不可避免,对细节的处理到位,才能减少边缘信息的丢失,防止丢失情况的发生,我们对细节进行微调整,将下采样存储的索引信息完成上采样的特点应用到解码器的4个上卷积层,并且在其中加入 1 × 1的卷积核实现网络参数的减少。设计改进后的SegNet 算法架构如图3所示。图3中Input为输入图像。PPM为金字塔池化模块,是为了获取全局信息,从而达到减少斑马线细节信息丢失的目的。其中,Conv,Deconv,maxpool和RelU分别为卷积、反卷积、最大池化,激活函数,Softmax+Argmax获取到斑马线图像特征点位置。
图3 改进后的SegNet模型结构Fig.3 Improved SegNet model structure
3.1.1 数据集准备
本研究主要采集了1 150张斑马线[20]图像样本作为本研究数据集,主要来源于两部分,一部分是通过网络搜取到的网页图片,为了获得真实场景下的斑马线图像,另一部分通过人工实景采集斑马线区域图像,尽可能得到各种干扰情况下的斑马线图像。由于采集到的图像数量较少,因此采用图像翻转、添加高斯噪声、图像增强等方法扩充数据样本,使样本数据能够满足训练需求,使得训练后的模型能够满足不同情况下的斑马线检测需求。第1种水平翻转,改变图像,扩充样本;第2种在原始图像上添加高斯噪声,通过改变系数、方差和均值等使图像发生改变,扩充样本;第3种图像增强,改善图像视觉效果,扩充样本。将数据样本使用标注工具labelme标注后得到json文件,然后将json文件转换为用于斑马线检测训练的标签集。图像样本包含了不同方向不同场景下的拍摄,并且存有各种其他标线影响和各种不同的遮挡物遮挡及斑马线有污损等情况的干扰,将其随机划分出80%为训练集,20%为测试集。测试集图像为不同拍摄背景下的斑马线图像,符合测试要求。
3.1.2 试验环境
所有试验是采用PyCharm平台开发,使用基于Python语言的Tensorflow深度学习框架搭建SegNet,U-Net,PSPNet网络,实现各网络模型关于斑马线的检测。
试验中使用的服务器设备的相关配置如下:CPU为Intel(R)Core(TM)i7-8550U,显卡为NVIDIA GeForce GTX 1050 with Max-Q Design,CUDA版本为10.0,CUDNN版本为7.4.1,操作系统为Win10,数据处理为Python3.6和tensorflow1.14。
3.1.3 训练过程
训练参数设置epoch为50,批处理量设置为14,学习率的初始值设置为0.01,动量配置为0.9,权重衰减配置为0.000 55,在试验的Accuracy不在增加就停止训练。试验在迭代了40次后停止了训练,图4和图5为训练的Accuracy曲线和训练过程的loss曲线。图4中迭代次数为横坐标,Accuracy为纵坐标,图5中迭代次数为纵坐标,Loss值为横坐标。迭代35次后,训练集Accuracy收敛于98.6%,Loss值收敛于0.046,测试集Accuracy收敛于95.7%,Loss值收敛于0.205。
图4 Accuracy曲线Fig.4 Curves of accuracy
图5 Loss曲线Fig.5 Loss curves
3.2.1 评价指标
在试验的数据集上进行测试,本研究使用相同的数据集进行改进SegNet模型、原始SegNet模型、U-Net模型以及PSPNet模型等不同模型的训练,对于改进的SegNet模型实现了将斑马线的检测更加准确且清晰,且对于有遮挡情况的斑马线,本试验也得到了较好的试验结果,对斑马线的分割检测依然准确,不会因为个别遮挡情况而受到很大的检测干扰。
为了准确客观地分析试验结果,本研究使用召回率P(Precision)、准确率Re(Recall)、F1值3种评价标准来衡量模型的性能,其主要计算公式为:
(1)
(2)
(3)
式中,正确检测出的斑马线目标数用T(Truepositive)表示,错误检出的斑马线目标数用F(Falsepositive)表示,没有被正确检出的斑马线目标数用Fg(Falsenegative)表示。
当Score_threhold=0.5 时,其在斑马线数据集上性能对比结果如表1所示。改进SegNet模型在P,Re,F1值均更有优势。与其他模型对比,在准确率与召回率两项评价算法检测性能的指标当中,改进后的 SegNet 网络表现在准确率的性能上有很大的提高,在保证一定的有效检测数的同时,召回率的性能也有相应提升。因此,在F1 分数这项模型综合评价指标上,改进后的SegNet模型检测精度有了显著提升,并且斑马线检测时间也有所降低。试验数据表明,本算法比其他算法更具有优势,且综合评定结果更稳定。
表1 4种模型性能对比Tab.1 Comparison of performance of 4 models
3.2.2 检测结果分析
本研究为证明改进SegNet模型的检测效果,依次对改进SegNet模型、原始SegNet模型、U-Net模型以及PSPNet模型分别进行了试验,选取相同情况下的斑马线图片进行测试。可以得到改进后的SegNet模型检测效果明显准确率高于其他模型的检测效果,PSPNet模型的检测效果特别差,只检测出斑马线的一点区域,而且还错将停止线检测为斑马线;U-Net模型检测效果稍好,但存在检测不均的问题,可以大体检测出斑马线;原始SegNet模型基本可以将斑马线检测出来,但是也存在检测不到位不精准的问题,斑马线的边缘部分并没有检测出来;改进SegNet模型可以清晰地检测出斑马线区域并且可以精准检测边缘部分,检测精确度达到97.6%。由检测结果分析可知相较于原始SegNet模型,U-Net模型和PSPNet模型,改进后的SegNet模型斑马线检测效果最好。
从表2中,对比其他模型,可以看出改进后的SegNet模型测试运行时间最短,证明了本研究模型的运行速度最快,实时性得到提高。
表2 各模型测试平均时间Tab.2 Average test time of each model
本研究基于改进的SegNet模型进行斑马线检测,使其更适应于辅助驾驶系统中的预警场景,为无人车提供帮助。主要将SegNet模型的特征提取网络部分进行改进,融入金字塔池化模块,将模型对称的结构改为编码不变,解码减少的不对称结构,有效提高了检测准确率和实时性。在进行试验训练前对数据集进行了相应的处理,有效扩大了试验样本与多样,提升了训练的准确性。试验表明,改进后的SegNet 模型可以有效的对斑马线进行检测,并且检测精度有所提高,实时性有所提升,具有良好的鲁棒性,虽然存在检测不全面的问题,但是基本可以满足对于多数场景和复杂路况的斑马线检测需求。在以后对于斑马线检测的研究中,将会对模型进一步优化,并考虑其他改进方法,使其检测更加准确有效,使模型的实时性和准确性更高。