廖家才,曹立波,夏家豪,张 晓,吴 强
(湖南大学,汽车车身先进设计制造国家重点实验室,长沙 410082)
自动驾驶车辆的前方多目标检测、跟踪、姿态估计将为车辆自主驾驶的路径规划、决策控制提供准确环境信息。由于道路车辆周围目标多、类别多、运动方向不确定、环境复杂,自动驾驶场景下的多目标检测和长时间轨迹跟踪仍然存在很大挑战。多目标跟踪过程中检测、跟踪匹配准确率不高,前方目标运动状态估计不准确,协同多种信息对目标检测、跟踪时,运动信息无法有效地传递给跟踪目标,跟踪算法对目标尺寸适应性较差。
随着深度卷积神经网络的迅速发展,使用深度神经网络实现目标检测、协同检测、跟踪信息,能够实现多目标轨迹信息获取。使用YOLO[1]系列神经网络模型实现多目标检测、分类具有良好的实时性,核相关滤波(KCF)[2]跟踪算法能够从被跟踪目标中提取特征训练检测器,具有良好的跟踪实时性和稳定性。Wojke等[3]结合卷积神经网络和Kalman算法提出了一种在线的实时目标检测跟踪网络deep-SORT,使用级联匹配方法检测和跟踪目标的位置。文献[4]中采用YOLOv2检测目标,使用重合度(intersection over union)作为目标的匹配系数。袁大龙等[5]提出了协同运动状态估计的多目标跟踪算法,使用MS-CNN[6]算法检测目标,构建了目标跟踪、检测关联矩阵。Yu等[7]基于Faster R-CNN进行目标检测,使用ImageNet对VGG-16进行预训练,使用迁移学习构建卷积神经网络提取目标的外观特征,并将这些特征用于线上和线下的跟踪,线下跟踪时使用特征、运动、平稳性3个相关特性进行跟踪目标。KCF是一种基于检测的跟踪算法[5,8],能够不断提取正负样本训练跟踪目标的HOG特征检测器,使用检测器在周围邻域内搜索跟踪目标最佳响应位置,并引入核函数来改善分类器的性能,同时利用傅里叶变换降低计算量。针对KCF跟踪尺度不变的问题,Wu等[8]采用了基于检测位置和大小关联的自适应方法进行尺度调整,谭舒昆等[9]使用高斯尺度空间的方法进行尺度自适应调整。
卡尔曼滤波器[3-5,7]将系统的状态与目标的状态结合起来,对符合高斯噪声分布的线性运动目标,从序列数据中准确预测目标位置。deep-SORT使用恒速运动模型作为卡尔曼滤波跟踪器的处理模型。使用运动关联系数、形状关联系数构建关联矩阵,使用匈牙利算法(KM)进行最佳匹配能够将检测信息、运动信息加入到匹配规则中[5,7]。在检测、跟踪的基础上,基于概率数据关联算法(PDT)解决多目标跟踪(MHT)交叉的干扰问题,获得目标的运动轨迹[10],增强车辆的持续环境感知能力。使用表观特征与轨迹动态相结合的方法[11]能够弥补表观特征区分较差的情形。
在多类别、多目标的跟踪过程中仅以重合度、特征、运动信息进行匹配无法消除多目标交叉运动时的错误匹配情况。卡尔曼滤波器针对符合高斯噪声分布的线性系统具有很好的预测能力,但道路的不平及其他环境影响造成本车和前方目标的速度变化是随机的,导致基于视觉获得的前方被跟踪目标无法满足一定精度要求。道路目标在跟踪过程中,所有相邻帧之间的运动都使用恒定速模型处理[3,12],没有考虑到环境对目标运动状态造成的随机噪声,被跟踪目标的位置容易发生随机偏离和抖动。以检测尺度作为KCF跟踪样本尺寸,没有考虑到跟踪目标的空间位置信息和系统状态的变化,导致KCF跟踪器对匹配失败的目标进行持续跟踪时,对目标的尺度变化适应性较差。
针对以上问题,本文中从车载应用场景出发,首先,改进了协同KCF和运动模型的跟踪算法,获得目标的轨迹位置信息,为目标姿态估计、行为分析提供有效信息。然后,详细描述了目标跟踪、目标匹配、运动模型的优化方法。最后,提出了基于分段线性恒定速处理模型的卡尔曼滤波运动姿态估计方法,增加并优化了目标的匹配准则,将目标运动信息加入到目标KCF的跟踪目标尺度中,改变KCF的尺度不变性。
图1 多目标检测和跟踪算法框图
本文中多目标检测和跟踪算法框图如图1所示。协同KCF跟踪和运动状态的轨迹跟踪算法按照以下3步实现。
(1)目标检测、匹配 使用YOLOv2检测目标,构建目标的检测信息容器,检测信息与跟踪信息互相验证匹配,结合多个目标匹配准则,在重合度、运动信息、特征信息关联基础上,增加了目标属性和跟踪时序内的跟踪状态。
(2)目标跟踪、运动状态估计、获取目标轨迹分解目标运动的状态,设置在一定跟踪帧数内使用恒定速运动模型表示目标的变速运动状态,超过设置跟踪帧数后,使用当前目标位置更新目标的运动状态到新的恒定速模型中,在此基础上使用卡尔曼滤波器对目标进行二维矢量运动姿态估计,使用分段的线性恒定速运动逼近目标非线性运动。
(3)信息融合、调整目标尺度 融合KCF特征信息和卡尔曼预测的运动信息,使用获得的目标运动矢量信息调整KCF跟踪器中目标的尺度和位置,提升KCF对多尺度目标的轨迹跟踪性能。
要获得目标的连续轨迹,首先要实现目标的连续检测和跟踪。辅助驾驶和自动驾驶场景下的多目标检测任务主要实现对车辆四周目标的实时检测和跟踪,增强车辆的环境感知和决策能力。在车载应用场景中,车载控制器计算能力有限,一般浅层卷积网络目标检测的速度快,但准确率低;深层卷积神经网络准确率高,但实时性差。车载场景下检测目标的种类主要为人、各种车辆和交通标志,因此实时性成为车载道路目标检测和跟踪的重要性能指标。
YOLOv2使用darknet19作为基础模型,将输入图像的尺寸从448×448缩减到416×416,在每个卷积层使用了批量归一化,YOLOv2只有卷积层和池化层,可以进行动态调整输入图像的尺寸。特征图的输出是一个奇数,中心栅格专门实现预测中心落在图像中心附近的物体,不需要使用图像中心附近的4个栅格去预测目标。同时对图像进行了32倍的降采样,获得的最终输出特征图尺寸是13×13。YOLOv2使用通过K-means在训练集中学得的anchor box预测坐标,同时还对条件类别概率预测机制和空间位置做了解耦,不再由栅格预测条件类别概率,而由Bounding Box预测。
YOLOv2的网络层设计方法使得其在检测速度和精度上达到了很好的平衡,可以实现交通标志等目标的识别[13-14]。本文中使用YOLOv2进行跟踪目标的初始位置提取,使用训练COCO数据保存的权重对目标进行预测。
核相关滤波(KCF)是一种基于检测的跟踪方法[2],在跟踪过程中训练一个目标检测器,使用目标检测器去预测目标位置,目标检测器训练时选取目标区域作为正样本,目标周围区域作为负样本,越靠近目标区域为正样本的可能性越大,通过特征提取,获得一个在线的针对每个跟踪目标的实时分类器。使用分类器再检测跟踪目标,重新确定目标位置。使用样本训练得到的分类器采集了目标样本的HOG[15]特征,使得跟踪算法对目标的捕捉特征从颜色特征扩展到轮廓特征,提升了跟踪的稳定性。
训练样本为xi,回归目标为yi,回归函数为
式中w为列向量权重系数。
使用最小二乘法求解训练权重系数的函数表达式为
式中λ为回归参数,用于控制过拟合。
最小化函数的闭合形式为
式中:X为循环位移得到的信号集合矩阵;y的每一个元素都是一个回归目标;I为单位矩阵。
X矩阵的每一行代表一个信号在一个周期内的信号向量集。
在傅里叶域中的简化计算公式为
式中XH表示复共轭转置矩阵。
为获得充分的样本来训练目标检测器,使用循环位移矩阵作用于目标样本。循环矩阵P为
为能够在长时间跟踪中自适应更新初始矩阵,本文中对改进KCF的循环矩阵使用条件,在运动模型预测方向上优先使用环矩阵寻找目标最新位置。在傅里叶域中计算时,将循环矩阵对角化,加快计算速度,使用离散傅里叶(DFT)矩阵进行对角化。
式中:g为DFT的生成向量;F为DFT常数矩阵。使用傅氏对角化带回回归方程,使用点积运算代替矩阵运算,提高计算速度。非线性回归对输入的优化质量高,使用脊回归方法将输入的线性问题映射到一个非线性特征空间中,非线性函数为
式中:αi为训练样本Xi对应的系数;κ为核函数;z为候选样本。脊回归导致非线性回归函数f(z)会随着样本数量的增加而变得复杂,KCF使用快速的核回归计算最优解,提升计算效率。训练得到f(z)计算候选区域内每个位置的函数值,得到最佳响应位置。
检测目标与跟踪目标的状态转换如图2所示。图中,Cd为检测目标容器集合,Cs为经过跟踪算法后的目标容器集合。检测目标为跟踪算法提供跟踪样本,跟踪得到的目标集与下一帧检测目标集进行匹配,获得新的跟踪目标集。
图2 目标检测、跟踪匹配流程
对目标检测、跟踪时,需要根据类别属性、坐标位置等信息进行记录、匹配,结合运动信息时,需要考虑车辆的运动状态。为每个检测目标、跟踪目标设置一个容器c,在容器中放置检测、跟踪相关的参数,并在跟踪的过程中不断更新其中的参数。第i个目标容器为
式中:ClassID为目标的类属性,主要有乘用车、货车、摩托车、人、自行车;Num为同类计数值,用于区分同一类别不同目标;Cof为检测目标的置信度值;[x,y,w,h]为目标框坐标;TKaut为记录目标的持续跟踪帧数;UPaut为记录目标在跟踪期间进行检测匹配的次数;UPf为目标最近一次检测匹配成功的帧数;Km为基于运动模型实现的卡尔曼跟踪参数。
运动模型的参数为
式中(xp,yp)和(vpx,vpy)分别为跟踪目标位置预测值和x,y方向的矢量速度预测值。
YOLOv2检测目标和跟踪目标匹配后,更新被跟踪目标的特征状态值,基于运动模型的卡尔曼滤波跟踪算法更新跟踪目标的运动模型参数值。
n为跟踪目标个数,跟踪目标容器集合Cs为
目标匹配实现原有跟踪目标与现有检测目标的关联,实现检测目标与跟踪目标的信息持续传递。检测目标与跟踪目标的匹配主要包括以下几种情况。
(1)目标检测丢失、位置偏离 当跟踪目标持续一定时间内出现匹配失败,此时跟踪目标丢失,跟踪位置偏离了真实位置,须删除这些跟踪丢失、位置偏离的目标。
(2)出现新目标 检测到新的目标,须在跟踪容器中添加新目标。
(3)更新原有目标的状态 原有跟踪目标集合中的目标在新一帧中的检测信息须传递到跟踪容器中。
(4)跟踪目标在当前帧没有被检测到 此时跟踪目标出现检测丢失,须保留跟踪目标位置,并结合运动状态进行预测位置信息。
针对以上4种情况,本文中使用以下匹配准则。
(1)IOU系数
IOU值为两个目标位置区域面积的交集与并集的比值,IOUij为t时刻第i个跟踪目标和第j个检测目标重合度系数。
式中:Cdt为t时刻的检测集,包含所有检测目标的容器;Cst为t时刻的跟踪集;Area{…}为所指向矩形的面积。
匹配目标存在包含关系时,IOU值为
(2)关联系数
跟踪目标与检测目标的运动关联系数为
跟踪目标与检测目标的形状关联系数为
式中:ω1,ω2分别为运动和形状的关联系数;带下标的x,y,w,h分别为第i个跟踪目标和第j个检测目标的坐标位置及长、宽尺寸。
构建的关联矩阵为
使用KM算法得到关联矩阵的最优解。
(3)类属性(ClassID)、累计跟踪帧数(TKaut)、状态更新次数(UPaut)、状态更新帧(UPf)
类属性可根据目标类别,排除一些候选的匹配目标,提升匹配速度。对于丢失和偏离目标,使用两个与跟踪时间和帧数有关的差值进行判断。
目标加入检测容器开始,TKaut在每次匹配过程中加1,检测目标与跟踪目标匹配成功时,UPaut加1。UPf记录的是目标最新一次更新状态时的跟踪帧数。diff2为目标自上一次检测匹配成功后,持续的检测丢失帧数。
目标每次都被检测并与跟踪目标匹配成功时:
目标在持续跟踪过程中出现检测丢失时:
目标匹配时,为提高检测跟踪速度,首先用属性和IOU系数匹配,IOU值如果大于0.8,属性相同,则匹配成功,不再计算关联系数;反之匹配失败。将匹配成功的目标加入到新跟踪器中,对跟踪器剩余目标和检测候选目标使用关联系数diff1和diff2进行再次匹配,关联系数的计算参数取ω1=1,ω2=2,ω3=ω4=0.5[5]。检测容器中未被匹配成功的目标都是新出现的目标,跟踪容器中剩余未被匹配成功的目标分为两类:仅当前帧检测丢失和跟踪丢失超过一定帧数。
判断持续跟踪丢失的条件为
判断当前帧检测丢失的条件为
目标持续跟踪过程中,检测目标会出现间断性的检测丢失,TH1表示一个跟踪目标被允许连续检测失败的最大帧数,在本文中实验设置为10;TH2为以当前帧为参考,一个目标最多允许被跟踪丢失的帧数,本文中设置为20。
对前方目标在二维图像上的成像进行矢量跟踪时,目标的运动姿态不断变化,为能够准确地估计目标位置,需要在卡尔曼滤波器中引入运动模型。目标的加速度、偏航角度和角速度都无法从图像中获取,无法使用恒定转率和速度模型(CTRV)、恒定加速度模型(CA)等高级运动模型[12]对卡尔曼滤波跟踪器进行优化。将两帧间隔时间非常小的目标运动作为恒定速运动[3,10],在每一帧更新目标状态时,受到环境的噪声影响比较大,对目标的状态估计不准确,多目标跟踪时,每一时刻重复迭代计算每个目标的状态向量和跟踪器的预测矩阵,降低了系统的跟踪效率。
每一帧计算跟踪目标的卡尔曼增益时,测量噪声反映的是计算前后帧时间内的平均系统噪声,相邻帧的噪声估计相互独立,连续轨迹中包含噪声较多,目标的预测位置发生抖动。为降低目标的噪声估计偏差,提高KCF的目标跟踪能力。将目标的持续变速运动分解成相连的分段恒定速运动,并将目标的运动姿态加入到KCF的跟踪模型中,使用多帧相邻时间段内目标平均位移矢量和平均速度矢量来更新目标的状态向量,使用目标相邻节点的预测位置,计算恒定速条件下目标的运动估计参数,并将该参数作为当前分段内的运动参数,分段内不再使用卡尔曼滤波器计算目标的状态方程,直到本次分段结束,在下一时刻分段节点帧再次更新目标状态。图像目标的矢量速度可以通过每秒显示帧数(fpsk)、图像帧间运动像素位移计算获得。在道路目标跟踪过程中,基于恒定速卡尔曼滤波预测、更新、分段过程如下。
(1)恒定速运动模型
恒定速目标k时刻状态向量为
式中:(px,py)和(vx,vy)分别为目标的像素坐标位置和矢量速度分量。
(2)预测
恒定速运动模型为
式中:ψ为系统的处理噪声;A为预测矩阵。
测量误差的计算公式为
式中:Pk为k时刻测量误差矩阵;Qk为处理噪声的协方差。
在使用卡尔曼滤波跟踪目标的过程中,由式(24)可得恒定速的运动模型:
在一定时间段内的运动认为是恒定速运动,而目标实际的真实运动并非恒定速。假设模型包含的处理噪声ψ是目标的加速运动引起的,此时,处理模型为
处理模型的前后状态值的线性关系为
处理噪声ψ是随机带入的,本质是一个高斯分布:ψ∽N(0,Q),处理噪声Q为位移和速度矢量的协方差矩阵。
对道路运动的行人、车辆目标,根据先验知识[12],速度的方差近似取:
(3)更新
对目标的状态预测完后,修正卡尔曼增益和预测误差,为下一次预测做好准备。目标速度是根据像素位移直接计算得到的矢量,测量矩阵为
测量噪声方差为
卡尔曼增益计算公式为
k时刻,被跟踪目标的测量值为zk,使用测量值更新估计值:
更新测量误差:
测量位置直接使用目标检测获得,k时刻目标检测位置为
(4)分段线性运动
目标的分速度可根据间隔N帧匹配目标中心位置在x和y方向的以像素为单位的移动分量DISix,DISiy和N帧内平均帧率f psk计算得到,获得连续目标位置信息后,使用间隔N帧匹配目标的检测位置信息计算矢量速度,并用该速度矢量作为后续N帧内目标的运动速度,k时刻的目标矢量速度计算表达式为
因此,k时刻测量得到的目标容器中每个跟踪目标的测量状态为
每个目标使用运动模型预测状态值用来更新与之关联目标容器中的Km参数,下一次预测时再调用。每隔5帧记录的轨迹跟踪连续帧检测结果如图3所示。
图3 多目标连续轨迹跟踪结果
图4 为每个目标位置中心的轨迹记录线。
图4 目标跟踪轨迹
帧数N值和目标更新状态及跟踪实时性有关,间隔N帧取一次匹配点检测坐标,计算N帧内的矢量速度均值,更新目标的速度和中心位置。初始化所有目标矢量速度为20 pix/ms,为了确保目标被判断为丢失删除之前能够更新状态,N≤TH1,N为10时,对图4中的ClassID为car_1和truck_0的目标的使用分段恒定速线性运动模型卡尔曼滤波跟踪结果如图5和图6所示。
图5 car_1分段线性运动模型跟踪轨迹与原轨迹对比分析
图6 truck_0分段线性运动模型跟踪轨迹与原轨迹对比分析
从图5和图6中可以看出,N值取10时,基于运动模型的目标跟踪能够预测出目标的运动趋势。N取不同值时,对car_1的分段轨迹预测见图7。
由图7可知,N值越大,在分段区间内的运动细节将被丢失越多,目标运动状态获取相应滞后N帧,但对目标的非线性运动仍有很好的响应,能够满足连续跟踪过程中对目标姿态估计的要求。为消除噪声的同时保留运动细节,N取值越靠近2越好。
N取不同值时,卡尔曼滤波器对单个目标进行检测、跟踪消耗的平均时间如图8所示。分段时间内,不再进行基于运动模型的目标运动姿态估算,减少了卡尔曼滤波运动状态估算和目标检测次数,提高了平均每帧的目标跟踪速度。N为1,不对目标使用分段线性恒定速模型处理,将目标前后两帧时间段内的运动状态作为恒定速模型处理。相比于N大于2的分段线性恒定速模型,不使用分段运动模型处理的单个目标的卡尔曼滤波跟踪时间约增加了7倍。
图7 car_1不同N值下分段线性运动模型轨迹跟踪与原轨迹对比
图8 不同N值下单个目标的卡尔曼滤波跟踪时间
N取不同值,多目标的检测、跟踪时间如图9所示。随着跟踪目标个数的增多,平均每帧检测、跟踪消耗的时间增加,N为1时,不使用分段线性模型,检测、跟踪消耗的时间比使用分段线性运动模型(N≥2)估算运动状态的时间多。
为获得实时目标状态信息,提高多目标的跟踪速度,同时消除环境噪声影响,在本文中测试实验中N取4,多目标的轨迹跟踪速度平均提升1.5倍。
道路目标的运动信息与目标图像尺寸相关,目标在图像平面内的成像满足透视成像原理。目标远离观测点时,观测尺度变小;靠近观测点时,观测尺度变大。目标的运动方向和目标的尺度、位置有关。
KCF跟踪器的初始化矩阵在跟踪目标的位置确定后不再发生变化,导致KCF目标对目标的尺度变化适应能力比较差。前方的跟踪目标运动时存在相对的旋转、平移,尺度不断发生变化,当目标检测失败时,持续使用上一次检测目标框去跟踪目标,不能适应目标的运动变化。
为关联目标运动信息与检测信息,消除KCF跟踪的尺度不变性,提升多目标的匹配准确率。本文中在目标匹配时,结合目标属性,使用关联检测目标位置和跟踪目标位置,提升了目标匹配准确率,在目标跟踪时,使用分段线性恒定速运动模型预测获得目标的位置、尺度信息,在每个分段的节点修正相关滤波跟踪的目标信息,将运动信息传递到图像的特征位置信息中,目标跟踪特征的尺度变化融合了基于KCF提取的HOG特征[15]检测方法和图像目标的运动分量。
KCF算法根据目标样本框的位置首先在周围预测区域内搜索目标的最佳响应位置。预测区域是以目标框为中心,长宽是目标框的2.5倍。
如图10所示,图点为基于运动模型的卡尔曼滤波跟踪位置,A1为KCF的跟踪目标框,P1为KCF在跟踪时的预测区域,是检测目标A1的2.5倍,箭头为目标的运动方向。融合运动信息的跟踪算法中,A2是根据目标运动信息调整后的KCF的跟踪目标框,预测区域P2变为A2的2.5倍,跟踪目标框和预测区域的中心都转移到基于运动模型的卡尔曼滤波目标跟踪位置。
图10 结合运动模型对KCF跟踪的改进示意图
改进的KCF算法对目标的预测中心位置、跟踪的尺寸进行了调整。在对目标跟踪之前,使用基于运动模型获得的中心位置替换检测目标位置中心。
使用运动模型获得的矢量速度计算目标运动增量,使用增量调整跟踪目标的尺寸。
为验证本文中算法对车辆前方多目标的轨迹持续跟踪性能,采集了晴天和雨天在城市、高速道路工况视频35段,每段68 s。实验时,N取4,评价指标为丢跟率fd、错跟率fc、检测率fe和有效跟踪率f,每种评价指标的定义为
将不同场景按照天气和场景分类,跟踪统计结果如表1所示。
高速道路条件下,目标的运动速度快,加速度大,跟踪目标更容易丢失,受天气影响,目标的跟踪效率下降。平均的跟踪效率为92.5%,目标平均检测率为71.33%,平均丢帧率为5.27%,平均错帧率为2.24%。
表1 目标轨迹跟踪结果
本文中基于YOLOv2多类目标检测,协同KCF和运动信息的道路多目标跟踪算法,实现了多目标轨迹跟踪。提出了分段的线性恒定速运动模型,消除了噪声,减少了卡尔曼滤波运动估算次数,在分段帧数为4时,多目标的跟踪速度相比一般恒定速运动模型,目标的平均检测、跟踪速度提高1.5倍,将目标的运动状态融合到特征跟踪框的调整之中,并将目标累计的跟踪状态加入到匹配规则中。实验表明,本文中算法在两种天气情况下对城市和高速道路对目标轨迹的平均跟踪效率为92.5%,为后续结合其他传感器实现车辆的姿态估计和路径规划提供了有效信息。
本文中跟踪算法效果依赖于检测算法,YOLOv2目标检测算法对小目标的检测准确率较低,检测距离受到目标遮挡限制,基于视觉的目标检测、跟踪方法受限于摄像头的工作条件,在阴雨天检测精度降低,无法适用于夜晚场景。使用分段线性恒定速模型获得目标轨迹变得平滑,但也导致目标轨迹获取有一定滞后性,视觉目标的分类检测、跟踪优势在于直接获取目标分类结果,结合雷达和车联网通信技术才能获取更多车辆信息,进一步提升自动驾驶系统的环境感知能力,解决当前基于视觉的多目标轨迹跟踪缺陷,这也是当前智能交通运输系统研究的难点。