融合YOLO检测的多目标跟踪算法*
2020-05-04李星辰柳晓鸣成晓男
李星辰,柳晓鸣,成晓男
(大连海事大学信息科学技术学院,辽宁 大连 116026)
1 引言
在很多应用图像处理和计算机视觉的场景中,运动目标跟踪MOT(Moving Object Tracking)是非常重要的环节,尤其是在未知多变的背景下,目标容易出现遮挡、形变等问题,使得目标跟踪更具挑战性。按照跟踪目标的数量来分,目标跟踪可以划分为单目标跟踪和多目标跟踪2大类,从目前的国内外发展现状来看,单目标跟踪技术已经趋于成熟,而多目标跟踪仍然处于不断发展的阶段,在机器视觉和图像处理等领域备受关注,例如智能监控、交通监控、内河船舶监控和车辆的无人驾驶等。
在单目标跟踪中,我们往往会手动选定初始框,然后在后续帧对初始框内的目标进行位置预测,然而多目标跟踪过程中,必然会出现目标的消失和产生,手动选定初始框存在很大的局限性,所以在多目标跟踪领域,大多数研究人员使用的策略是基于检测的多目标跟踪(tracking-by-detection)。基于检测的多目标跟踪算法将检测和跟踪过程紧密结合,通过检测器来检测和识别出目标,将这些信息传递给跟踪器,即通过跟踪器来跟踪多目标的同时,不断通过与检测器进行信息交流来完善跟踪,提升整个跟踪过程的鲁棒性。例如,Milan等人[1]基于tracking-by-detection策略提出了连续能量函数最小化方法,从运动的整体性出发,提出了一个整体的、比较贴合运动特征的能量函数,然后通过对该能量函数进行寻优得到较好的跟踪结果。在处理遮挡问题时取得了较好的效果。Song等人[2]基于tracking by detection策略提出了一种在线多目标跟踪算法,采用了高斯混合概率假设密度GM-PHD(Gaussian Mixture Probability Hypothesis Density)来处理错误的检测,并且针对对跟踪过程中出现的遮挡或者不完整检测而导致的跟踪碎片现象,设计了一个分层跟踪框架,可以将分段、ID交换过的轨迹连接起来。该方法在处理遮挡情况和碎片现象时取得了不错的效果。
近些年,深度学习不仅在检测和识别领域取得了不错的效果,也被越来越多地应用到了基于检测的多目标跟踪中,因其离线训练与在线检测相结合的特殊设计方案,即先利用支持向量机等分类器离线训练大量图像和视频,并且在跟踪的过程开始后,随着目标特征信息的变化,利用在线检测的结果去更新分类器,从而可以很好地适应目标的特征外观变化,更加准确地检测目标而被广泛采用。例如,Leal-Taixé等人[3]基于tracking-by-detection策略并结合深度学习,提出了一种在行人跟踪背景下处理数据关联任务的新方法,引入了一种two-stage学习方案去匹配“检测对”。首先, 对 Siamese 卷积神经网络 (CNN) 进行了训练, 以学习描述2个输入图像块之间的局部时空结构、聚合像素值和光流信息。其次,通过梯度提升分类器(gradient boost), 将从比较的输入图像块的位置和大小中导出的1组上下文特征与 CNN 输出相结合, 生成最终的匹配概率。经验证该方法在多人跟踪中符合最先进标准。
考虑到深度学习在目标检测和识别过程中的优异表现,以及tracking-by-detection策略在解决遮挡等问题时的效果,本文采用了tracking-by-detection策略,以深度学习模型检测和识别目标,从而获取更加准确的检测结果来进行多目标跟踪。目前主流的目标检测算法又可以分为以R-CNN[4]、Faster R-CNN[5 - 8]等为代表的two-stage检测算法和以SSD(Single Shot multibox Detector)[9]、YOLO[10 - 12]等为代表的one-stage检测算法。2类检测算法的主要区别在于是否分成2个阶段进行检测,前者由检测和分类2个阶段组成,后者则将2个阶段融合到1个阶段进行。目标检测算法的主要性能指标是检测的准确度和速度,第1类算法在准确度上有优势,但是处理速度过慢,而第2类算法将图像的检测速度提升到了40 fps以上,虽然准确度比第1类算法要略差一些,但是目前YOLO已经发展到YOLO v3,准确度上有了很大提升,同时提升了弱小目标的检测性能,并且使用GPU加速,保证了较好的实时性,所以本文选择YOLO v3作为检测算法。
目前国内的学者大多都是利用YOLO、R-CNN等深度学习检测算法和CamShift(Continuously Adaptive Mean-Shift)、KCF(Kernel Correlation Filter) 等跟踪算法相结合来进行目标跟踪。例如,韩鹏等人[13]提出了将 YOLO 和 CamShift 算法相结合的目标跟踪算法。用 YOLO 算法确定出目标,根据目标的位置信息使用 CamShift 算法对后续的视频帧进行处理,在解决目标遮挡问题时取得了不错的跟踪效果。王春艳等人[14]沿用tracking-by-detection策略,在检测环节采用 YOLO v3检测目标,在跟踪环节使用卡尔曼滤波算法预测目标运动轨迹,在数据关联环节使用匈牙利算法对候选目标进行匹配关联,在应对目标跟踪的常见问题时取得了不错的效果。在总结多篇国内外文献出现的问题和解决方案以后,本文选择沿用经典的tracking-by-detection策略,以YOLO v3作为检测算法,提出了一种多目标视频跟踪算法。
多目标跟踪过程容易受到复杂多变的环境、目标遮挡、背景以及目标之间相似性等因素的影响,出现跟踪失败、误判和漏判等问题。当前多目标跟踪的难点主要包括:遮挡问题、背景复杂度问题和数据关联[15]问题。
针对目标跟踪过程中可能遇到的遮挡和数据关联等问题,本文提出了一种融合YOLO检测的多目标跟踪算法,通过YOLO v3目标检测器确定目标物体的跟踪框,根据框出的目标区域,采用卡尔曼滤波算法[16]进行跟踪预测;提出了轨迹异常修正算法,针对遮挡引起的轨迹和跟踪异常进行纠正;并提出了一种紧邻最优算法来解决因目标遮挡而引起的目标身份互换问题。
2 多目标跟踪算法整体框架
多目标跟踪算法整体框架如图 1 所示,主要分为2个模块:检测器和跟踪器。检测器主要是结合YOLO v3进行目标的检测和识别,首先对视频序列的图像进行预处理;然后经过全卷积神经网络获得卷积特征图,利用检测网络对输入的特征图进行分析和过滤;最终通过置信度计算和多尺度预测部分得到最优目标的边框,并且利用分类器对目标进行分类,得到该类目标的最优目标的边框的中心点坐标。跟踪器就是结合检测器的输出结果进行数据关联和跟踪,将得到的该类目标的最优目标中心点坐标输入到卡尔曼滤波器,进行下一时刻中心点的预测,即轨迹预测;对检测器输出的物体边界框进行帧间数据关联,从而确定目标的编号,利用物体的中心点测量值和该时刻的中心点估计值,得到目标的真实状态最优估计值。如果因遮挡原因导致数据关联失败,利用紧邻最优跟踪算法进行数据关联,对该时刻新出现的目标和因遮挡而消失的目标进行关联。如果因部分遮挡而导致轨迹异常波动,则利用轨迹异常修正算法修正目标框体和轨迹。
Figure 1 Framework of the multi-target tracking algorithm图1 多目标跟踪算法整体框架
3 YOLO v3目标检测器
利用YOLO v3目标检测算法,首先将输入到检测器的图像按照一定的尺度标准划分为相同大小的P×P个网格,其中每个网格又可以划分为K个候选区域,如图 2中多尺度预测部分所示,图中每个大的黑色矩形框代表1个网格。于是得到了每个候选区域中存在当前目标的置信度,表达式如式(1)所示:
(1)
其中,Target代表目标的种类,Cond(Target)表示在网格中是否存在该种类的目标:
(2)
(3)
Figure 2 Object detection process图2 物体检测过程
假设1个网格相对于图像左上角的偏移量是cx和cy,边框的宽度和高度分别为pw和ph,根据式(4)~式(8)就可以得到目标的真实框信息。
bx=σ(tx)+cx
(4)
by=σ(ty)+cy
(5)
bw=pwetw
(6)
bh=pheth
(7)
(8)
其中,tx,ty是预测的坐标偏移值,tw,th是尺度缩放,bx,by,bw,bh分别用来表示目标的框体坐标和大小,σ(t)是Logistic回归函数。
当前时刻T,所有检测器检测到的结果表达式为:
其中,下标4j表示矩阵为1个4*j矩阵,j∈{0,1,2,…,M},M为T时刻检测到的目标总个数。
4 跟踪器
4.1 轨迹预测
将检测器输出的目标的中心点输入到卡尔曼滤波器,对T+1时刻的中心点进行预测,即轨迹预测。卡尔曼滤波的步骤一般包括预测和测量更新部分,假设T时刻来自检测器的目标j的测量结果为X(T)j={bx,by,vx,vy}T,其中vx,vy分别为目标在x方向和y方向的速度分量,j∈{0,1,2,…,M}。将该时刻的测量结果输入到式(9)和式(10)所示的卡尔曼滤波器的预测部分时,可得到T+1时刻目标j的坐标估计值X(T+1/T)′j={b′x,b′y}T。
预测部分:
X′=FX+U
(9)
P′=FPFT+Q
(10)
更新部分:
Y=Z-HX′
(11)
S=HP′HT+R
(12)
X=X′+KY
(13)
P=(I-KH)P′
(14)
其中,卡尔曼增益K=P′HTS-1,F为状态转移矩阵,P为状态协方差矩阵,Q为过程噪声,R为测量噪声矩阵,H为测量矩阵,I是单位矩阵。X′是后验状态估计值,U是过程噪声矩阵,P′是后验协方差估计值,Z是测量值(观测值),即滤波的输入,Y是实际观测和预测观测的残差,S是滤波增益矩阵。
4.2 数据关联
数据关联将检测器的结果与跟踪的结果互相联系,在多目标跟踪中尤为重要。本文所提算法的数据关联步骤如下所示:
(15)
a 如果IOUMax大于阈值,可能发生了目标移动过快,当前帧的目标j对应的目标就是上一帧编号为k的目标,此时更新目标的框体信息和轨迹信息,并且更新最优估计值和状态协方差矩阵。
b 如果IOUMax小于阈值,则可能发生了遮挡,或者没有检测出目标,此时保持目标框高度和宽度不变,更新中心点坐标为卡尔曼滤波器预测的中心点,即更新当前帧中目标k的目标框,更新轨迹。此时认为目标k消失,当消失时间超过一定阈值时,认定目标k彻底消失,清除目标k的所有信息。
(2)利用紧邻跟踪算法解决目标遮挡时的目标序号互换问题。当新目标k出现时,先判断其周围是否有紧邻的目标消失了。如果是,令k继承消失的紧邻目标中最近的目标gm的目标框信息;否则目标k为新目标。
(3)利用轨迹异常修正算法对发生部分遮挡时目标框体异常变化的目标进行框体修正,同时对轨迹伴随的轨迹异常进行修正。
(4)在目标跟踪的过程中,除了遮挡问题以外,时常还会出现目标形态发生变化(如行走姿态、跳跃、下蹲的人体、旋转与放缩物体)的情况。此类情况发生时,目标前后帧框体的位置坐标并不会发生明显的变化,是一个渐变的过程。运用本文的紧邻跟踪算法,在发生形态变化时,根据式(15)获取T-1时刻和T时刻的目标框的交并比IOU;然后进行第①步操作中的阈值比对,并且获取当前T时刻为目标j的概率Pj,如果Pj低于阈值,调高交并比与目标概率的权重占比,即选取与上一时刻目标准确位置距离最近,且概率相对较高的目标为目标j,从而在目标形态发生变化时仍然可以进行准确的目标跟踪。
对每一帧重复步骤(1)~(4)直至视频终止,即跟踪结束。
4.3 紧邻最优跟踪算法
在多目标跟踪的过程中,若出现严重遮挡,可能会发生目标交换现象,针对这一问题,本文提出了紧邻最优跟踪算法。发生遮挡时,目标之间会有前后之分,判断的依据主要是检测结果的置信度,置信度高的目标在前,置信度低的或者出现消失情况的目标在后。紧邻最优跟踪算法的具体过程如下所示:
(16)
其中,A1和A2分别表示目标f和j的权重,A1+A2=1,且两者取值关系满足:
(2)当djf≤d,记录并保存目标j的所有紧邻目标的序号fi∈{1,2,…,M},fi≠j,其中下标i用来区别不同的紧邻目标,并且继续进行第(3)步;当djf>d时,认定目标j周围不存在紧邻目标,此时如果目标j周围出现新的目标时,认定目标为首次出现,记录并存档,此时跳过第(3)步,等待进行T+1时刻的判断。
(3)当目标j周围出现新目标k时,先确定其紧邻目标gi是否消失。
①如果出现了多个消失的目标g0,g1,…,计算得到离新目标k距离最近的目标gm,此时认定新目标k就是消失的目标gm,修改新目标k的序号为gm,并且继承gm的目标信息;
②如果没有消失的目标,那么认定k为新目标。
由于紧邻跟踪算法存在距离约束和权重比对,即在T-1时刻和T时刻时发生形态变化的目标之间的距离最近,所以当目标发生遮挡和形变时能较为准确地跟踪。
4.4 轨迹异常修正算法
当出现部分遮挡的时候,利用紧邻最优跟踪算法仍能检测出目标,但此时只能取到目标未被遮挡的部分。如图3所示,行人从开始被遮挡到结束被遮挡的过程中,白色曲线所代表的轨迹发生了较大的波动。针对这种情况,本文提出了一种新的修正轨迹的算法,避免因为部分遮挡使跟踪轨迹产生偏差。该算法利用跟踪过程中目标框体不会骤然变化的特性来修正框体和轨迹。
Figure 3 Pedestrian tracking results图3 行人跟踪结果
轨迹异常修正算法具体过程如下所示:
(17)
(18)
5 实验与分析
本文实验硬件环境为配置Intel Core i5-7300 CPU,3.60 GHz主频,16 GB内存的笔记本,算法开发基于Darknet深度学习框架,CUDA库,跟踪可视化基于OpenCV实现,在GTX1060 6G以及Windows 10系统支持下,使用C语言集成实现整个跟踪系统。
5.1 算法测试
利用MOT Challenge官网上的测试视频来测试本文的跟踪算法,图4~图9展示了部分测试结果。
Figure 4 Video sequence tracking results图4 视频序列跟踪结果
Figure 5 Trajectory abnormal repair results图5 轨迹异常修复结果
Figure 6 Coordinate comparison of the abnormal trajectory correction trajectory and the real trajectory图6 异常轨迹修正轨迹和真实轨迹的坐标对比图
Figure 7 Comparison of target changes in y direction图7 目标在y方向上变化对比图
Figure 8 Deviations comparison between the target trajectory and the real trajectory in the y direction图8 目标轨迹和真实轨迹在y方向上的偏差对比图
从图4a和图5中的Walker1可以看出,当黑色箭头指向的行人被白色卡车遮挡时,目标的边框大小得到了修正,并且解决了轨迹异常的问题。从Walker1和TUD-Stadtmitte中可以看出,黑色箭头指向的目标,在跟踪过程中的轨迹和跟踪结果较为准确。在MOT-02中,在第439帧中,黑色箭头指向的目标被白色箭头指向的目标遮挡,此时仍然能被正确地检测和跟踪。 从图6~图8中可以看出,修正后的轨迹更加接近真实的轨迹。
如图9所示,在目标发生奔跑、跳跃、旋转、下蹲等形态变化时,运用本文的跟踪算法,大多数情况下都可以准确地识别出目标的位置,显示目标的轨迹,准确地进行目标跟踪。
实验表明,本文算法能够修正遮挡过程中目标框的大小和位置,修正目标轨迹,在一定程度上解决了跟踪存在的目标遮挡问题,具有一定的参考价值和实用价值。
5.2 实验对比
本节将本文所提算法与其他2种算法进行了对比实验,评价指标及定义如表1所示,其中箭头↓代表指标越小跟踪效果越好,箭头↑代表指标越大跟踪效果越好。对比结果如表2所示,本文算法在AvgRank,MT,ML,FN等几项指标上都表现较好,在FP,MOTA,IDSw等几项指标上的表现相对较差,但是也具有一定的可比性。
Table 1 Tracking evaluation indicators and definitions表1 跟踪评价指标及定义
Table 2 Comparison results with other methods表2 与其他方法的对比结果
6 结束语
本文利用高性能的检测器检测同一类的多个目标,重点研究了同一目标的前后帧之间的帧间关系以及目标跟踪过程中的遮挡问题,在一定程度上解决了遮挡对轨迹和目标识别的准确性产生的干扰,具有较高的实时性,在船舶和道路交通监管领域有一定的应用价值。但是,目前的研究仍是在同一类目标中进行的,接下来的研究将重点突破不同类的多目标跟踪问题,并且引用特征信息对现有帧间关系做出改进。