APP下载

基于运动轨迹特征学习的行驶区域自扩充算法

2021-01-18黄林泉蒋良卫

现代计算机 2020年32期
关键词:端点车道轨迹

黄林泉,蒋良卫

(南华大学计算机学院,衡阳 421000)

0 引言

近年来随着我国经济迅速发展,各地城市化进程加快,机动车数量不断增加,据公安部统计,截至2019年上半年全国机动车保有量达3.4亿辆,新登记汽车1242万辆,新领证驾驶人1408万人。全国66个城市汽车保有量超过100万辆,其中北京、成都等11个城市超过300万辆。如此巨大数目的机动车涌入街道使得城市交通不堪重负,交通事故、交通拥堵、环境污染以及能源浪费等问题日益严重,与此同时,机动车违章行为也变得屡见不鲜。如何实施高效的交通管控治理俨然成为一大难题。而在如今大数据时代,随着深度学习技术的不断革新与突破,如目标检测、图像分类、图像分隔等技术被广泛应用于医学领域、军事领域以及工业领域,因此在交通领域中融入深度学习技术进行智能交通管控将会是解决上述问题的一把利刃。

本文研究的是智能交通应用中的一项核心基础任务-车道行驶区域分隔,对车道行驶区域进行有效的分隔可以很好地帮助统计各车道的车流量信息以及逆向行驶、违规越线等违章行为的判断。本文提出了一种行驶区域自动扩充的算法,首先使用目标跟踪技术获取机动车运动轨迹,然后对其进行过滤拟合,结合轨迹端点与区域顶点之间的位置关系对各车道行驶区域进行扩充,并且可以通过学习各车道运动轨迹的特征,以确定其合法行驶方向。

1 相关技术

1.1 目标跟踪

为了获取机动车目标的运动轨迹信息,需要对机动车目标跟踪定位。本文使用了Nicolai Wojke等人提出的基于检测的多目标跟踪算法Deepsort[2]负责机动车目标的跟踪任务。Deepsort算法在Sort算法的基础上进行改进,解决了Sort算法在相机运动情况下运动信息关联失效的问题。其引入了重识别网络提取目标的外形特征向量,同时考虑目标的运动信息和外形特征进行关联匹配。两大核心算法是卡尔曼滤波和匈牙利算法。通过标准卡尔曼(Kalman)滤波器对目标运动状态进行预测。使用匈牙利算法进行关联匹配,运动关联程度用目标检测框与跟踪器预测框之间的马氏距离来描述:

其中dj表示第j个检测框的位置,yi表示跟踪器对目标i的预测位置。Si表示目标i的检测位置与预测位置之间的协方差矩阵,即以检测位置与预测位置之间标准差的形式来考虑状态测量的不确定性。接着使用重识别网络提取目标128维的特征向量作为外观信息,缓存每一帧成功匹配的结果作为特征向量集,对于每一个检测框,将其特征向量与所有跟踪器的特征向量集计算最小余弦距离:

其中rj表示第j个目标检测框的特征向量,Ri表示第i个跟踪器的特征向量集。最后使用两种关联方式的线性加权值作为最终匹配度量,λ为权重系数,如公式(3)。

1.2 目标检测

前面提到了本文所使用的目标跟踪算法是基于检测的,因此目标检测结果的好坏将直接影响到跟踪算法的性能。目前的目标检测算法主要分为两大方向,分别是以高精度著称的两阶段方法和以高效率著称的单阶段方法。代表算法分别是Faster R-CNN[3-4]系列算法以及SSD[5]、YOLO[6-8]系列算法。本文为了在保证高准确率的同时尽量提高算法效率,使用Alexey Boch⁃kovskiy等人提出的单阶段算法YOLOv4[9],YOLOv4算法在YOLOv3的基础上从特征提取、特征融合、损失函数以及激活函数等方面进行了全方面的优化。使用了ResNeXt网络结合CSPNet中的梯度分流阶段机制提高卷积网络的学习能力,引入了SPP Net和PA Net进行特征融合丰富特征图的表达能力,损失函数方面,使用了CIoU替代原来的均方差损失函数,提高目标定位的精度。在开源数据集COCO和VOC上进行验证,在准确率和效率之间达到最优的权衡,算法结构如图1所示。

2 算法实现

通过目标检测与跟踪算法获取机动车的运动轨迹之后,需要进一步通过离心点判断和拐角距离判断过滤路边不规则行驶车辆的干扰轨迹,然后对于直行车辆轨迹进行优化拟合得到轨迹线段,根据轨迹方向判断其所处车道后结合轨迹端点和区域顶点的位置关系进行区域扩充,具体流程如图2所示。

图1 YOLOv4算法结构

图2 算法流程图

2.1 轨迹预处理

通过目标跟踪算法记录机动车的预测框中心点位置得到运动轨迹之后,由于交通场景复杂,通常会检测到一些非目标区域内的机动车以及一些曲线行驶的机动车,如图3所示,绿色点为目标轨迹点。

图3 干扰轨迹示例

这些目标的轨迹信息不但对行驶区域的扩充没有任何作用,还会使得区域顶点漂移产生较大误差,所以首先需要对该类目标产生的非近似直线轨迹进行过滤。本文使用了离心点个数、平均离心距离和平均拐点后偏移角度三种方法对轨迹是否为曲线进行判断。首先使用轨迹起点和终点拟合一条线段,离心点个数即为轨迹点距拟合线段距离大于阈值(默认为40像素)点的个数,大于轨迹点个数30%的即判断为曲线;平均离心距离即为各轨迹点到拟合线段距离的平均值,大于平均阈值(默认为60像素)则判断为曲线;平均拐点后距离需要首先找到轨迹最大拐点,然后计算起点到拐点的线段与拐点到其后轨迹点线段夹角的平均值,大于45°即判定为曲线,计算过程如公式4所示。

其中i表示轨迹中拐点的下标,N表示轨迹点总数,表示点p0和pi组成的向量,则表示pj和pi之间y方向的增量,则为x方向的增量。abs(t)表示对t取绝对值,min(a,b)表示取a和b的最小值。判断示例如图4所示。

图4 轨迹分类示例

为了尽量降低干扰轨迹给算法带来误差的可能性,在任一方法判断轨迹为曲线时均对其进行丢弃,这样做提高了直行轨迹的门槛可能对部分直行轨迹产生误判,但是在最大程度上避免了干扰轨迹.在相同的10个场景下进行实验对比,以完成所有10个场景区域扩充所需平均轨迹数、平均扩充时间和最终的平均IoU作为指标进行评测,结果如表1所示,发现对部分直行轨迹的丢失对最终结果并无明显影响。

2.2 扩充条件判断

在实际交通中,道路主要按行驶方向最多分为两个车道,因此本文中首先生成两个假设区域A和B,初始状态全部为空,以运动方向作为轨迹归属判断的标准,然后对于第一条符合要求的直行轨迹,将其划分到区域A中,即确定区域A所归属的车道,并且取其运动方向作为区域初步行驶方向。对于后续轨迹,分别在假设区域A和B中使用随机采样的方法选择最多10条轨迹计算平均角度,若平均角度小于90°说明与当前区域轨迹集为相同运动方向,属于当前假设区域,若平均角度大于等于90°,说明为相反运动方向,应归属于另一假设区域。当任一假设区域轨迹数为2时,则由两条线段可确定一个区域,需要尝试进行区域初始化。但是为了避免两条轨迹相似度过高,即起点与终点距离较近导致初始化形成的区域近似为三角形或线段,因此需要两轨迹起点距离和终点距离均大于初始化距离阈值(默认为30像素),若满足条件,则利用两轨迹端点对假设区域进行初始化,生成梯形区域。否则视当前轨迹为无用轨迹,进行抛弃,等待下一条轨迹信息尝试初始化,如图5所示。

图5 假设区域初始化

生成假设区域之后,对于后续轨迹信息,首先判断其所属区域,然后根据轨迹端点与假设区域顶点之间的位置关系判断其是否能够扩充区域,具体分为以下几步:

(1)判断轨迹端点与假设区域的包含关系

首先需要通过面积和判别法判断轨迹端点是否处于假设区域内部,面积和判别法通过依次连接端点P与多边形任意两顶点组成一个三角形,然后计算所有这样的三角形面积和记为端点面积S。然后在多边形顶点中选定一点V,同样依次连接其与其他两顶点组成一个三角形,计算面积和记为多边形面积T,若S等于T则端点位于多边形内部,若S大于T则端点位于多边形外部,其过程可用图6表示。

图6 面积和判别法示例

对于落在假设区域内部的端点,无论从何种角度其都无法对假设区域进行扩充,应当直接抛弃。而对于假设区域外部的端点,则可以至少从一个维度(车道方向或车道范围)对假设区域进行扩充,具体扩充方案则需要进一步判断。

(2)判断轨迹端点与假设区域最近方向边的位置关系

对于落在假设区域外部的端点P,需要判断其与所属假设区域最近方向边的位置关系,最近方向边意为假设区域距离端点最近并且沿机动车行驶方向的边,它们代表了各车道的长,如图6中第三幅图,P1的最近方向边即为V24。本文首先通过公式5将端点p映射到最近方向边Vij上得到点p',然后通过公式6判断端点p'是否在线段Vij上。

其中ρ(vi,vj)表示两顶点vi和vj之间的欧式距离。如果端点落在最近方向边之外,说明其可以沿行驶方向对最近方向边进行扩充,否则该端点在行驶方向维度上对假设区域扩充无贡献,如图7所示。

图7 方向边扩充条件示例

可以看到在图7第二幅图中,端点p的映射点p'没有落在线段Vij上,因此可以沿Vij向量方向将顶点vi移动至点p',对假设区域进行扩充。

(3)判断轨迹端点与假设区域最近范围边的位置关系

在上述(2)中判断的是端点是否能在行驶方向维度上对假设区域进行扩充,除此之外,还需要判断端点是否能在车道范围维度上对假设区域扩充,最近范围边指的是假设区域距离端点最近并且由同为轨迹起点或轨迹终点的顶点组成的边,它们代表了各车道的宽度,如图6中的端点P1的最近范围边为V34。同样使用(2)中所提到的方法判断端点p是否落在最近范围边上,如果落在最近范围边外,说明其可以在车道范围维度上对假设区域进行扩充,否则对区域扩充无贡献。

结合上述判断,我们可以对端点是否能扩充假设区域的情况作出总结。当端点落在假设区域内部时,无法扩充区域;当端点落在其最近方向边以及最近范围边以外时,可同时在方向维度和范围维度上对假设区域进行扩充;当端点仅落在其最近方向边(最近范围边)以外时,可沿方向边(范围边)对假设区域进行扩充;如图8所示。

图8 区域扩充示例

2.3 区域确定

当某个假设区域内连续10条有效轨迹均无法对其进行扩充时,认为该假设区域已经基本覆盖所有的行车轨迹,与实际车道区域基本一致,扩充已完成。在所有假设区域均扩充完成后则进入区域确定阶段。

在区域确定阶段,需要完成车位扩充以及合法行驶方向的确定。由于通过目标跟踪算法获取的是机动车目标中心点组成的轨迹信息,所有的区域初始化以及扩充都是在中心点的基础上得来的,这将使得最终生成的行驶区域方向边均内缩了近半个车位宽度。因此本文在记录轨迹点中心坐标的同时还记录了各轨迹点的车身半宽,接着取前2个轨迹点车身半宽均值作为起点范围扩充距离ds,末位2个轨迹点的车身半宽均值作为终点范围扩充距离de在双车道情况下,为了避免左右车道邻近边扩充后出现相交的情况,需要保证邻近边扩充后距离小于0.1倍车道宽。然后根据邻近边得到两车道虚拟中线ls作为车道划分线。从各假设区域中随机采样20条轨迹信息,通过公式4与公式7分别计算其与ls的夹角和位置。

其中(x1,y1,x2,y2)分别表示划分线段ls的两个顶点坐标表示第i条轨迹向量的中点坐标。Di小于0表示第i条轨迹向量位于划分线段左侧,大于0表示位于右侧。然后结合投票机制得出假设区域位于划分线段哪一侧,如图9所示。

图9 区域确定示例图

3 实验分析

3.1 评测指标

针对本文算法,其性能主要体现在扩充行驶区域与实际车道区域之间的重叠程度以及完成区域扩充所需时间两个方面。因此,本文使用IoU与扩充时间分别作为评测算法精度和效率的指标。而IoU一般用来评测两规则矩形区域的重叠程度,本文假设区域主要呈现梯形等不规则四边形,因此使用了Python中的Polygon模块计算两不规则四边形的相交面积,然后通过公式8计算IoU值。

其中intersection(area1,area2)用来计算area1和area2的相交面积。

3.2 实验结果

本实验在Ubuntu18.04、Python3.7环境下进行测试,使用GPU加速工具CUDA 10.1。CPU为Intel Core i7 7700k@4.2GHz,GPU 为 NVDIA GTX 1080Ti@11 GB,内存为16 GB。测试数据集包含30个不同场景不同角度不同车道数的视频,结果如表1所示。

表1 分类方法实验结果

图10 扩充效果示例图

通过表1可以看到,仅使用单类方法对非直行轨迹进行过滤时,区域扩充完成是最快的,但是可能学习了部分干扰轨迹的特征,导致假设区域顶点漂移,最终生成的区域IoU值极低。在使用了二类方法进行过滤后,区域IoU值明显升高,而扩充时间仅小幅度提升。三类方法同时使用时,IoU值达到最高,同时完成扩充所需时间也最长,但是依旧处于可接受范围之内。部分最终测试扩充效果如图10所示。

其中红色线段表示虚拟划分线,图10第一幅图为一般情况;第二幅图为额外车道干扰情况,左侧和右侧均有多车道,并且左上方存在转弯车道;第三幅图为单车道情况;第四幅图为倾斜分布单车道情况;可以看到算法在各场景下均具有较好的区域扩充结果且划分线段位置准确。

4 结语

本文提出了一种在直行道路场景下各车道行驶区域划分及行驶方向确定的算法,结合目标检测与跟踪技术实现过程自动化,并且结合多种轨迹过滤方法来提高区域划分的准确度。算法具备较高的鲁棒性,在单车道、多车道等多种场景下进行划分扩充准确。车道行驶区域的划分可有效的促进智能交通的发展,但目前该算法扩充时间取决于道路车流量,不确定性较高,后续希望可以从该角度进行改进以提高算法效率。

猜你喜欢

端点车道轨迹
智慧收费机器人在高速公路车道上的应用
解析几何中的轨迹方程的常用求法
基于OpenCV的直道车道线识别技术研究
北斗+手机实现车道级导航应用
例谈求解“端点取等”不等式恒成立问题的方法
轨迹
轨迹
不等式求解过程中端点的确定
电筒的灯光是线段