刘 源,姚文明
(华北计算技术研究所系统七部,北京 100083)
目标追踪是一个非常有前景的,但同时也是非常有难度的计算机视觉问题。目标追踪之所以受到广泛的关注,是因为它在自动驾驶[1-2]、交通流量监测[3]、监视和安全[4]、机器人技术[5]、医疗诊断系统[6]、行为识别等场景广泛应用[7]。
目标追踪算法主要分为2大类:第一类是基于相关性滤波的目标追踪算法,例如,KCF[8]、LCT[9];第二类是基于非相关性滤波的目标追踪算法,例如,CNT[10]。
本文目标追踪的研究思路略有不同,主要采用目标检测与特征提取相结合的方法。第一步,利用目标检测算法识别出当前帧中所有的候选目标;第二步,利用特征提取选出所有候选目标中的被追踪的目标。通过对应权重公式的设计以及2类算法有机结合实现对弱目标鲁棒性追踪。弱目标主要体现在被追踪目标几乎被完全遮挡时仍能稳定地作为追踪目标;鲁棒性主要体现在摄像机转动时场景变化剧烈的条件下,仍能对目标进行稳定的跟踪;当追踪目标被完全遮挡后,再次出现在视野中时,算法能继续追踪。本文追踪算法的思路虽然很简单,但是它实现了传统图像算法与机器学习相结合,并且在多数测试集上比更为复杂的追踪算法表现更好。
本文算法步骤:首先,利用YOLO算法识别出当前帧图像待搜索区域中的所有目标作为候选追踪目标。然后,利用SIFT算法,在所有候选目标中找出被追踪的目标。其中,为了满足实时性要求,本文在YOLO算法和SIFT算法的支撑下,以实时性为核心设计了追踪算法的整体架构。
YOLO[11](You Only Look Once)是Joseph等人[11]设计的一个最先进的实时对象检测系统,在Titan X上,它以40~90 fps的速度处理图像,VOC 2007的mAP为78.6%,COCO上的mAP为48.1%。
YOLO采用卷积网络来提取特征,然后使用全连接层来得到预测值。网络结构参考GooLeNet模型,包含24个卷积层和2个全连接层,如图1所示。对于卷积层,主要使用1×1卷积来做channel reduction,然后紧跟3×3卷积。对于卷积层和全连接层,用Leaky ReLU激活函数,最后一层却采用线性激活函数。
图1 网络模型
图2 整个系统
整体设计:YOLO算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如图2所示:首先将输入图片resize到448×448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。
SIFT[12-13](Scale-Invariant Feature Transform)是在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量作为特征。SIFT是一个很好的图像匹配算法,同时能处理亮度、平移、旋转、尺度的变化,利用特征点来提取特征描述符,最后在特征描述符之间寻找匹配。具体分为4步:
1)尺度空间极值检测:搜索所有尺度上的图像位置。
2)关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。
3)方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。
4)关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。将这些梯度转化为合理的表示。
算法的设计本着简单、精巧、有效的原则,以追求实用性为第一目标,这也是本算法能够成功被工程化的原因。
追踪算法的流程如图3:
1)初始化被追踪目标在第一帧图像中的大小、位置信息。
2)根据初始化信息计算出被追踪目标的SIFT特征点信息,并把这些特征点信息保存到算法模板库中。
3)开始处理下一帧,如果上一帧追踪到了目标,则对上一帧目标出现的附近区域执行YOLO算法,选出所有的候选目标。如果上一帧中没有追踪到目标,则对目标最后一次出现的附近区域执行YOLO算法,选出所有的候选目标。
4)对所有的候选目标做第一次筛选,根据极限速度V计算出目标的最大运动半径,然后删除半径外的候选目标。
5)当候选目标大于0个时,结合权重公式选出所有候选目标中的被追踪目标。当候选目标数量为0时,认定目标被完全遮挡,输出相关信息并且不更新模板,当前帧扫描结束。
图3 流程图
6)通过权重公式来判断目标是否被部分遮挡,如果被部分遮挡,不更新模板库,否则把特征点信息、大小信息更新到模板库中。
7)如果存在下一帧,继续执行步骤3,否则算法结束。
在某些特定的场合下,要求只追踪某一特定种类目标。这时就可以构建自己的YOLO模型。首先,自己构建这一特定种类目标的VOC数据集。然后,利用标记工具标记原始图像的目标区域。最后,训练这些被标记的样本。这时,目标追踪算法就可以支持追踪特定种类的目标了。
追踪算法需要在YOLO算法选出候选目标后,通过权重公式以很大的概率选择出被追踪的目标。权重公式如式(1)所示:
(1)
式中,w为求得的权重值,其值越小,此候选目标为被追踪目标的概率越大。i为第i个“特征点对”,di为第i个“SIFT特征点对”的相似程度值。权重公式之所以被设计得如此简单,主要考虑以下2个方面:1)本着简单、有效、实用、易于工程化的原则来设计权重函数;2)YOLO搜索出的汽车边框是非常紧致的,在利用SIFT算法提取追踪目标的特征点时,干扰区域的特征点几乎是提取不到的,这样被提取的特征点都是被追踪目标本身的特征点。因此,这种简单的权重公式就变得非常有效。
u1=sizep/sizec
(2)
u2=sizec/sizep
(3)
其中,公式(2)的u1为第一个权重值,公式(3)的u2为第二个权重值。假设当前帧为第0帧。sizep为第-5帧中被追踪目标的大小,sizec为第0帧中被追踪目标的大小。当u1<0.5或u2<0.5时,算法认为被追踪目标存在部分遮挡,模板不更新。权重公式之所以这样设计主要考虑以下3个方面:1)算法以25 fps及以上速度处理图像时,追踪目标的遮挡是一个逐渐的过程,连续的2帧追踪目标的大小相差不大,所以第0帧和第-5帧比较才有意义;2)理论上,追踪目标在间隔4帧的图像上,追踪目标的大小不会发生较大变化,如果发生较大变化,说明被追踪目标存在遮挡;3)追踪目标可能越来越远,也可能越来越近,故u1<0.5和u2<0.5满足任意一个条件就可以认为目标存在遮挡。
在实现模板更新算法时,系统中只保留一个被追踪目标模板,通过合理的设计,算法不需要保存n个模板,然后投票选出被追踪目标的传统方式实现,从而大大降低了追踪算法的时间复杂度。模板更新具体策略为:如果被追踪目标被部分遮挡或完全遮挡,模板不更新,否则更新模板。由于以合理地判断追踪目标是否被遮挡的权重公式为基础,这样的模板更新策略经过实验验证非常有效。
首先,通过调整YOLO的thresh(当该参数值设置得较小时,概率很小的目标也会被识别出来)参数,使得被遮挡的追踪目标也能被识别到候选目标中,SIFT算法就能在这些候选目标中找到被追踪目标,从而解决追踪目标被局部遮挡的问题。
2种情况下,算法认为被追踪目标被完全遮挡,第一种,YOLO算法在搜索区域没有找出候选目标时,追踪算法认为追踪目标被完全遮挡;第二种,在从候选目标选择出追踪目标的过程中,计算的选择权重值过大,认为追踪目标被完全遮挡。
本文作这样一个假设,被追踪目标被桥梁等完全遮挡后,目标有很大的概率从它消失的附近区域再次出现。所以,追踪目标被完全遮挡后,本文的处理方法是:追踪算法会使用YOLO一直扫描被追踪目标最后一次出现的附近区域,一旦附近区域出现候选目标,并且与算法内的模板库成功匹配,即认为找到了追踪目标。之后,算法按流程图继续追踪。
核心硬件要求为Titan X GPU。在该硬件的配合下,能够达到实时以至少25 fps的速度处理图像。
3.2.1 实时性比较
在同一测试集下,本文算法与CamShift(Continuously Adaptive MeanSHIFT)和KCF(Kernel Correlation Filter)时间性能比较如图4所示,纵坐标为时间,单位为ms,横坐标为第几帧图像。其中较粗的实线为本文算法,虚线为CamShift算法,较细的实线为KCF算法。
由图4可以看出,本文算法每帧的执行时间在20~30 ms,平均执行时间24 ms左右。部分帧执行时间较长,可能是候选目标比较多、进行SIFT特征点提取和匹配的时候时间复杂度增加。尽管如此,本文追踪算法在以Titan X GPU为核心硬件的基础上,能够达到至少25 fps的速度处理图像。KCF的时间性能基本与本文算法一致,而CamShift的耗时明显是最低的。
3.2.2 精度比较
把本文的追踪算法与KCF和CamShift进行精度比较。
KCF和CamShift都是已经被OpenCV实现的、被业界认可的成熟算法。KCF是判别式跟踪方法,主要是使用给出的样本去训练一个判别分类器,判断跟踪到的是目标还是周围的背景信息。使用轮转矩阵对样本进行采集,使用快速傅里叶变换对算法进行加速计算。CamShift基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。
由图5可以看出,在摄像头不旋转且追踪目标无遮挡的情况下,本文的算法、KCF和CamShift均能持续稳定地跟踪到目标,其中,白色方框为本文的追踪算法,黑色方框为KCF追踪算法,椭圆形框为CamShift追踪算法。但是从图5中可以看出,本文的追踪算法在大多数情况下的框是最紧致的。
图5 本文算法和KCF、CamShift在摄像头无旋转且目标无遮挡情况下实验结果
由图6可以看出,当被追踪目标存在遮挡时,在目标被遮挡之前本文算法、KCF和CamShift都能正常追踪。一旦追踪目标绝大部分被遮挡,只有本文算法能够精确地找到被追踪目标暴露出来的部分。完全遮挡后,当目标再次出现在视野中时,KCF和CamShift均无法继续正确追踪。而本文提出的算法仍能继续正确追踪。
由图7可以看出,当摄像头存在剧烈旋转、场景变化较快时,CamShift已经不能准确追踪目标。本文算法和KCF均能比较稳定地追踪到目标。但是,从图7中可以看出,本文算法的效果还是优于KCF的,框选出的被追踪目标更加紧致完整。
图6 本文算法和KCF、CamShift在目标存在遮挡情况下实验结果
图7 本文算法和KCF、CamShift在摄像头旋转情况下实验结果
从实验结果可以看出,本文设计了一个合理的算法架构之后,目标检测与特征提取相结合的目标追踪算法取得了良好的效果。虽然本文算法在3个算法中时间性能不是最优的,但算法能满足实时性的要求。在追踪目标被遮挡、摄像头旋转等问题上,本文算法的精度均优于KCF和CamShift。除此之外,本文算法还是优秀的传统图像处理算法与机器学习算法相结合的典型。
目标追踪是一个非常有前景的,但同时也是非常有难度的计算机视觉问题。目标追踪仍存在很多需要探索的潜在的东西,还面临着无数困难的挑战,像复杂的光照变化、低分辨率目标、目标变形、目标再识别、快速运动的目标、模糊的目标、噪声干扰等等。面对诸多的挑战,还需要我们每一个从业者继续努力。