时间:2024-05-04
宋焕生,李 莹,杨 瑾,云 旭,张 韫,解 熠
1(长安大学 信息工程学院,西安 710064)
2(陕西省交通建设集团公司,西安 710064)
随着社会经济飞速发展,交通运输对我国经济和社会发展有着重要的促进作用.智能交通系统(Intelligent Transportation Systems,ITS)作为一个综合的交通监控管理系统,道路交通信息则是必不可少的前提和内容[1].因此,基于视频的交通信息获取成为智能交通系统的核心.高速公路作为当前道路的主要交通方式,基于当前大量的高速公路视频监控设备,通过对视频图像进行处理与分析,实现车辆目标的检测与跟踪,从而获取道路交通信息,自动地对高速公路场景进行监控监测,实现交通管理的智能化.但是,高精度的车辆目标检测与跟踪仍是智能交通系统的一个难点.
传统的目标检测算法包括:帧差法[2]、背景差分法[3]、光流法[4]等.但是,当目标运动缓慢时,帧差法易将运动目标当做背景图像造成目标检测失败;背景差分法是对背景进行建模得到前景的运动目标,受外界光照的变化,背景运动等因素的影响;光流法采用光流信息描述目标,Meye 等提出了基于轮廓的目标检测跟踪算法,实现了较好的检测跟踪效果,但该方法存在抗噪能力差,计算复杂,对硬件要求高等缺点.基于深度学习的目标检测算法与传统算法相比拥有更高的检测精度,其主要运用卷积神经网络CNN[5].目前基于深度学习的目标检测主流算法有,基于区域建议的检测算法Fast R-CNN[6]和基于回归的检测算法YOLO[7]、SSD[8].
针对目标跟踪,跟踪预测算法本质上是通过提取已检测目标的特征信息,在后续图像序列中搜索定位与目标模板相似的区域作为候选位置.目标特征的提取的一种方式是提取特征点,然后利用特征点进行目标匹配的重定位.常用的特征点提取方式有Harris[9]角点检测、SIFT[10]算子特征点检测,基于特征点的匹配能够适应目标的旋转和光照变化,但是特征点提取过多导致匹配困难,特征点过少又容易造成误检,而且特征点提取过程计算复杂,耗时严重.另一种方式是对目标整体描述,常用到的目标特征包括图像边缘、形状、纹理,颜色直方图统计特征等,通过融合多个特征增强目标特征的可靠性.对目标进行特征提取之后,采用相似性度量方式进行目标重定位,实现目标跟踪.基于特征的跟踪算法对运动目标的尺度、形变和亮度等变化不敏感,即使目标部分被遮挡,还能够根据部分特征信息完成跟踪任务.但是其对于图像模糊、噪声等较敏感,特征的提取效果也依赖于各种提取算子及其参数的设置.
因此本文采用基于深度学习的SSD 目标检测算法,通过数据集训练得到适应高速公路场景的模型,实现高精确度的车辆目标检测.在目标检测结果的基础上,本文提出了一种目标轨迹时序信息结合KCF[11]算法的车辆目标跟踪方法,实现车辆目标的持续跟踪,具有较好的应用价值.
目前,多目标跟踪有两种解决方案.方案一:对视频序列的每一帧进行运动目标检测,基于相邻帧间的检测结果完成运动目标轨迹连接,获取运动目标信息.方案二:在初始帧对目标进行检测得到有效描述,然后在后续图像序列中查找与已检测目标相匹配的目标区域,最终跟踪得到运动目标轨迹.
为了实现高速公路场景下的高精准检测和车辆持续跟踪,本文将上述两种方案相结合,提出了一种面向高速公路场景车辆目标检测及跟踪方法,实现了车辆目标的持续跟踪.高速公路场景下车辆目标的跟踪,分两大模块,一是目标车辆检测,二是目标跟踪.目标车辆检测采用基于深度学习的SSD (Single ShotMultiBox Detector)目标检测算法,目标的持续跟踪首先利用轨迹时序信息进行数据关联,然后结合KCF 算法校正断开轨迹.如图1是面向高速公路场景下的车辆目标跟踪过程的总体框架.
本文采用基于深度学习的SSD 目标检测算法,其网络结构如图2所示.其中使用VGG16[12]作为基础网络,该网络包括16 层,网络模型如图3所示,SSD 在VGG16 的基础上添加了特征提取层.具体的SDD 算法请参考文献[8]中刘伟等人的工作.
为了更适用高速公路场景下的车辆目标检测,本文将SSD 的检测类别由原来的20 种改为4 种,并参考国内标准的车型分类手册[13],将车辆目标分为三类:小车(Car)、客车(Bus)、卡车(Truck),如图4为车型类别的样本示例图.本文以杭金衢高速公路的监控视频作为样本,针对4 种不同场景下的视频每75 帧提取一帧作为本文的训练样本集,总计提取6288 张图片,并通过LamImage 工具对目标车辆进行位置标注,对类别用标签进行区分,得到6288 个标注文件.其标注工具如图5所示,生成的标签文件如图6所示.
本文的输入网络图像大小为512×512,训练迭代次数设置为12 000 次,根据本实验的GPU 的性能将BatchSize 设置为4,训练学习率LearningRate 设置为0.004×0.05,然后将制作好的数据集输入SSD 网络进行训练,其中网络训练过程的Loss 曲线图如7 所示,Loss 随着迭代次数的增加逐渐降低并趋于稳定,说明达到了训练的收敛要求,即得到适合高速公路场景的网络模型.
图1 车辆目标跟踪过程的总体框架
图2 SSD 网络结构
图3 VGG16 网络模型及每层的输出
图4 车型类别的样本示例
图5 LabelImg 图像标注工具
图6 LabImage 生成的标签文件
图7 网络训练过程的Loss 曲线
在检测结果的基础上,需要通过数据关联方式将同一目标车辆连接起来形成轨迹.高速公路场景下的高帧率(一般为25 FPS)监控视频,在相邻帧中同一个车辆目标具有明显的高重叠面积IOU (Intersection-Over-Union)[14].如图8是实际场景中连续帧间的目标位置.
图8 高帧率下目标高重叠面积图
本文提出了一个简单的IOU 跟踪器,计算当前帧的检测目标框与现有轨迹的IOU 匹配值Overlap(box1,box2).由于高速公路场景下车辆目标之间存在相互遮挡,帧间相互遮挡的目标IOU 匹配值只有在一定范围有效,本文将有效范围设置为[0.6,1].其中,IOU 匹配值的定义如式(1)所示.
其中,box1 和box2 是两个目标检测框,Area(box1),Area(box2)是其对应的图像面积大小.
在高速公路场景下,由于光照、遮挡、相机架设位置等因素的影响,即使是SSD 算法,也不能达到100%的检测精度,为了实现目标轨迹的持续跟踪,当目标检测丢失时,需要通过跟踪预测算法完成轨迹信息的校正,从而得到完整的轨迹信息.
本文利用KCF 跟踪算法对目标车辆进行位置预测,完成对目标轨迹的校正.KCF 跟踪算法是通过提取目标的HOG[15]特征在目标跟踪过程中训练一个目标检测器,利用目标检测器在下一帧图像中判别预测位置是否是目标,然后再用新检测结果更新目标检测器.具体的KCF 原理过程参考文献[12].KCF 目标跟踪的基本过程如下:
1)在第t帧中,在当前目标位置p附近进行采样,并且采用循环矩阵增加正负训练样本,利用脊回归训练目标检测器.
2)在第t+1 帧中,在前一帧位置p附近进行采样,用训练的目标分类器计算每一个采样对应的响应值.
3)响应最强的采样作为第t+1 帧的目标位置.
基于SSD 的车辆目标检测结果,一个车辆目标从首次检测到跟踪形成一条有效轨迹的过程中,目标车辆的状态转换过程如图9所示的目标跟踪模块.
1)目标激活:当一个目标首次被检测到,即该目标被激活.新目标的初始位置框boxi,t(i表示当前帧的检测序号,t表示当前处理的帧号)作为一条新轨迹形成的初始位置,新轨迹表示为traceI,t(I表示轨迹的唯一标识ID).与此同时,为该轨迹建立一个KCF 跟踪器trackerBoxI,t+1,目的是为了防止后续目标丢失时,对目标能够进行位置预测.
一个处于激活状态的目标可以经s1 转换成跟踪和经s7 转换到离开两种状态.实际过程中不可避免的会出现错误的目标检测结果,但是由于误检目标并不能持续地被检测跟踪,所以本文设定阈值,如果一个目标处于激活状态,连续5 帧被检测且匹配跟踪时,目标转换到跟踪状态,否则,该目标就被认为是错误的检测目标,状态转换为离开,与之对应的轨迹也被删除.
2)目标跟踪:在第t+1 帧检测得到boxi,t+1,轨迹traceI,t基于其时序信息与当前检测框计算得到匹配代价表.如果某条轨迹traceI,t与某目标框boxi,t满足式(1)的范围取值时,则表示两者匹配成功,目标经时转换到跟踪状态,得到更新轨迹traceI,t+1.如果轨迹未匹配到目标框,则该轨迹目标经s3 进入丢失状态.如果该目标未匹配到轨迹,则该目标是一个新的目标,经s0 进入目标激活状态.
3)目标丢失:理想情况下,一个目标不离开场景时会一直保持跟踪状态时,但是由于光照,遮挡等原因目标可能未被检测到,此时轨迹traceI,t找不到与之匹配到目标boxi,t+1,则该轨迹目标转换到丢失状态.当该目标再次被检测到时,目标可以从丢失状态经s4 过程重新回到跟踪状态.当目标处于丢失状态时,本文采用KCF 目标跟踪算法,在当前帧为轨迹目标预测新位置trackerBoxI,t+1,并将预测位置添加到轨迹中.
在本文中,当一个新目标被激活时,为该目标初始化一个跟踪器,在跟踪过程中训练一个目标检测器,并且通过不断地更新提高目标检测器的准确性,但是当目标运动过程中形态尺度发生变化时,检测器的更新过程会造成不断地错误累积,导致目标漂移,跟踪失败.为了适应目标的变化,每25 帧重新初始化一次模板,适应目标的变化.
4)目标离开:目标转换到离开状态的情况分三种:
① 目标离开运动场景时,目标既不会被检测到也不再进行KCF 的预测操作,目标将从跟踪状态先经s3 转到丢失状态,再经s5 转换到离开状态;
② 目标被激活但是不满足连续5 帧被检测跟踪,被认定为错误目标,目标从激活状态转换到离开状态;
③ 当一条轨迹目标连续40 帧一直处于丢失状态,即轨迹目标一致处于s6 的转换过程,则认为该目标离开.
图9 目标跟踪模块状态转换
步骤一:车辆目标检测.将视频帧序列送入训练好的SSD 网络模型进行目标检测.
步骤二:对目标轨迹进行跟踪,建立匹配代价表.
1)若检测目标与轨迹匹配成功,更新轨迹;
2)若跟踪态轨迹未匹配到检测目标,KCF 预测目标位置,更新轨迹;
3)若检测目标未匹配到轨迹,记为激活态轨迹;
4)激活态轨迹连续5 帧跟踪成功,确认更新为跟踪态轨迹;
5)若轨迹满足2.4 小节中目标离开的3 个条件之一,则删除轨迹.
步骤三:重复步骤一、二.对车辆目标进行持续跟踪.
本文实验所采用的视频是杭金衢高速(G60 国道)的不同时间和不同路段的监控视频.表1是本文实验的四种不同场景.
表1 四种不同实验场景
为了验证SSD 检测算法的精确度,本实验针对场景1 和场景2 将其与传统的背景建模检测算法相比较,得到表2.通过对比发现,背景建模检测算法的精度均低于90%,,而基于深度学习的SSD 检测算法相较于具有更高的精度,实验结果显示平均检测精度在95%左右.
表2 SSD 检测算法与传统的背景建模检测算法的精度分析
本实验将K C F 跟踪算法与传统卡尔曼滤波Kalman 跟踪算法进行比较,为了公平起见,我们针对同一场景同一时间段的车辆目标进行跟踪分析.如图10(a)和10(b)是两种跟踪算法的实验结果.
图10 (a)卡尔曼滤波Kalman 跟踪 (b)核相关滤波KCF 跟踪
从结果可以看出,虽然两种跟踪算法都能将目标位置锁定,但是Kalman 算法得到的跟踪框位置明显存在较大误差,而KCF 算法能够更加精确地锁定目标位置,同时也能从上图发现,即使存在部分遮挡的情况下,KCF 算法也可以实现跟踪.
以上本文单独针对目标检测和目标跟踪做了实验对比分析,为了验证本文算法的整体精度,针对场景1、2、3 本文通过对轨迹条数进行统计分析,并且将其与实际人工检测的数据进行对比,得到表3.本文利用简单的切面检测线方式进行统计计数,精度平均可以达到96.3%.其中小车(Car)类型的平均检测精度95.6%,卡车(Truck)类型的平均检测精度97.1%,客车(Bus)类型的平均检测精度95.9%.小车精度较低原因在于高速公路场景中,小车(Car)目标小,容易被遮挡,当小车目标是黑色时容易漏检.从整体的检测跟踪精度来分析,本文的方法满足实际高速公路场景的应用需求.
表3 轨迹计数精度分析
通过实验发现利用基于深度学习的SSD 目标检测算法,可以获得了高精度的目标检测结果.其次,采用检测与跟踪相结合的思想,利用轨迹时序信息进行车辆目标的数据关联,采用KCF 跟踪算法对丢失检测结果的轨迹进行校正,能够有效完成轨迹的持续跟踪.实验表明,该车辆目标跟踪方法具有较高精度,并且能够适应各种实际高速公路场景,接下来为了达到实时化的检测跟踪效果,需要针对深度学习检测方法进行优化使其速度更快,此外,可以通过已得到的轨迹信息完成交通参数的获取,交通事件的实时监测,对于智能交通领域具有广泛的应用前景.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!