1、视觉跟踪基础

1.1 基础认识

在计算机视觉领域中,基于视频的目标跟踪(也称为视觉跟踪)一直都是一个重要课题和研究热点. 视觉跟踪通过在连续的视频图像序列中估计跟踪目标的位置、形状或所占区域,确定目标的运动速度、方向及轨迹等运动信息,实现对运动目标行为的分析和理解,以便完成更高级的任务。

输入初始化目标框,在下一帧中产生众多候选框(Motion Model),提取这些候选框的特征(Feature Extractor),然后对这些候选框评分(Observation Model),最后在这些评分中找一个得分最高的候选框作为预测的目标(Prediction A),或者对多个预测值进行融合(Ensemble)得到更优的预测目标。

根据如上的框架,我们可以把目标跟踪划分为5项主要的研究内容. (1)运动模型:如何产生众多的候选样本。(2)特征提取:利用何种特征表示目标。(3)观测模型:如何为众多候选样本进行评分。(4)模型更新:如何更新观测模型使其适应目标的变化。(5)集成方法:如何融合多个决策获得一个更优的决策结果。下面分别简要介绍这5项研究内容。

运动模型(Motion Model):生成候选样本的速度与质量直接决定了跟踪系统表现的优劣。常用的有两种方法:粒子滤波(Particle Filter)和滑动窗口(Sliding Window)。粒子滤波是一种序贯贝叶斯推断方法,通过递归的方式推断目标的隐含状态。而滑动窗口是一种穷举搜索方法,它列出目标附近的所有可能的样本作为候选样本。

特征提取(Feature Extractor): 鉴别性的特征表示是目标跟踪的关键之一。常用的特征被分为两种类型:手工设计的特征(Hand-crafted feature)和深度特征(Deep feature)。常用的手工设计的特征有灰度特征(Gray),方向梯度直方图(HOG),哈尔特征(Haar-like),尺度不变特征(SIFT)等。与人为设计的特征不同,深度特征是通过大量的训练样本学习出来的特征,它比手工设计的特征更具有鉴别性。因此,利用深度特征的跟踪方法通常很轻松就能获得一个不错的效果。

观测模型(Observation Model):大多数的跟踪方法主要集中在这一块的设计上。根据不同的思路,观测模型可分为两类:生成式模型(Generative Model)和判别式模型(Discriminative Model). 生成式模型通常寻找与目标模板最相似的候选作为跟踪结果,这一过程可以视为模板匹配。常用的理论方法包括:子空间,稀疏表示,字典学习等。而判别式模型通过训练一个分类器去区分目标与背景,选择置信度最高的候选样本作为预测结果。判别式方法已经成为目标跟踪中的主流方法,因为有大量的机器学习方法可以利用。常用的理论方法包括:逻辑回归,岭回归,支持向量机,多示例学习,相关滤波等。(tips:生成和判别模型的理解在这一部分的补充中说明)

模型更新(Model Update): 模型更新主要是更新观测模型,以适应目标表观的变化,防止跟踪过程发生漂移。模型更新没有一个统一的标准,通常认为目标的表观连续变化,所以常常会每一帧都更新一次模型。但也有人认为目标过去的表观对跟踪很重要,连续更新可能会丢失过去的表观信息,引入过多的噪音,因此利用长短期更新相结合的方式来解决这一问题。

集成方法(Ensemble Method): 集成方法有利于提高模型的预测精度,也常常被视为一种提高跟踪准确率的有效手段。可以把集成方法笼统的划分为两类:在多个预测结果中选一个最好的,或是利用所有的预测加权平均。

在线视觉跟踪的基本框架图如下,摘自卢湖川老师的文章。

在线视觉跟踪的基本框架图

1.2 跟踪问题面临的挑战

单目标跟踪(Single Object Tracking,SOT)主要是针对复杂的外观模型或运动模式,解决具有挑战性的尺度变化,旋转,光照变化,遮挡等。多目标跟踪(Multiple Object Tracking,MOT)还多了两个任务:确定目标的数量(会随时间变化);维持目标ID。

需要考虑的MOT中存在的问题有:1)频繁遮挡;2)轨迹初始化与终止;3)相似的外观;4)多目标间的相互影响。

1.3 补充

1.3.1 生成模型与判别模型

判别方法:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括k近邻,感知级,决策树,支持向量机等。

生成方法:由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类,就像上面说的那样。注意了哦,这里是先求出P(X,Y)才得到P(Y|X)的,然后这个过程还得先求出P(X)。P(X)就是你的训练数据的概率分布。哎,刚才说了,需要你的数据样本非常多的时候,你得到的P(X)才能很好的描述你数据真正的分布。例如你投硬币,你试了100次,得到正面的次数和你的试验次数的比可能是3/10,然后你直觉告诉你,可能不对,然后你再试了500次,哎,这次正面的次数和你的试验次数的比可能就变成4/10,这时候你半信半疑,不相信上帝还有一个手,所以你再试200000次,这时候正面的次数和你的试验次数的比(就可以当成是正面的概率了)就变成5/10了。这时候,你就觉得很靠谱了,觉得自己就是那个上帝了。呵呵,真啰嗦,还差点离题了。

举例来说:

假如你的任务是识别一个语音属于哪种语言。例如对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。那么你可以有两种方法达到这个目的:

1)学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你哄,你就可以知道他说的是什么语音,你就可以骂他是「米国人还是小日本了」。(呵呵,切勿将政治掺杂在技术里面)

2)不去学习每一种语言,你只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。

那么第一种方法就是生成方法,第二种方法是判别方法。

对于跟踪演算法来说,跟踪演算法一般来说可以分为两类:基于外观模型的生成模型或者基于外观模型的判别模型。

生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。

判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。

3.1.2 online与offline的区别

online和offline的插图理解

Online跟踪:在online跟踪中,图像序列是一步步处理的因此该跟踪方式也称序列跟踪。如上图上层所示,a,b,c三个圈表示三个不同的目标,绿色箭头表示过去的观测目标,其结果由目标的位置和ID表示。

Offline跟踪:Offline跟踪利用一组帧来处理数据。如上图下层所示,来自所有帧的观测目标需要提前获取,然后经分析计算组成最后的输出。注意到由于计算复杂度和内存限制,不总是一次性处理所有帧,而是考虑将数据分成几个短一点的视频,对于每组分层或顺序处理得到结果。

2、基本演算法

视觉目标跟踪方法根据观测模型是生成式模型或判别式模型可以被分为生成式方法(Generative Method)和判别式方法(Discriminative Method)。前几年最火的生成式跟踪方法大概是稀疏编码(Sparse Coding)了, 而近来判别式跟踪方法逐渐占据了主流地位,以相关滤波(Correlation Filter)和深度学习(Deep Learning)为代表的判别式方法也取得了令人满意的效果。下面我们分别简要概括这几种方法的大体思想和其中的一些具体的跟踪方法。

无论是传统的跟踪演算法还是结合深度学习的跟踪演算法,都可以分为生成式和判别式演算法,这里不罗列了,只对opencv3.4.5以上版本的opencv计算机视觉库中提供的Tracker方法进行简单的应用说明,这里边都是在线训练的Tracker.

因为我们一直跟踪这个对象直到当前帧,所以我们知道它是如何移动的。换句话说,我们知道运动模型的参数。运动模型只是一种奇特的方式,它表示你知道物体在前一帧中的位置和速度(速度+运动方向)。如果你对物体一无所知,你可以根据当前的运动模型预测新的位置,而且你会非常接近物体的新位置。但是我们有更多关于物体运动的信息。我们知道对象在前几帧中的样子。换句话说,我们可以构建一个外观模型,对对象的外观进行编码。该外观模型可以在运动模型预测位置的小邻域内进行搜索,从而更准确地预测目标的位置。运动模型可以预测物体的大致位置。外观模型对这种估计进行微调,以提供基于外观的更准确的估计。

我们来看看opencv提供的不同的追踪演算法是如何解决在线训练的问题的。

(1)BOOSTING Tracker:这个跟踪器是基于在线版本的AdaBoost——基于HAAR级联的人脸检测器内部使用的演算法。该分类器需要在运行时使用对象的正反样本进行训练。以用户提供的初始bounding box (或其他对象检测演算法提供的)作为对象的正样本,bounding box外的许多图像补丁作为背景。给定一个新的帧,在前一个位置邻域的每个像素上运行分类器,记录分类器的score。对象的新位置是score最大的位置。现在对于分类器我们多了一个正样本。随著更多的帧进入,分类器将使用这些额外的数据进行更新。

优点:没有。这个演算法已经有10年的历史了,工作正常,但是我找不到一个很好的理由去使用它,尤其是当其他基于类似原理的高级跟踪器(MIL, KCF)可用时。

缺点:跟踪性能一般。它不能可靠地知道跟踪何时失败。

(2)MIL Tracker:这个跟踪器在思想上与上面描述的BOOSTING跟踪器相似。最大的区别是,它不会只考虑对象的当前位置作为一个正样本,而是在当前位置附近的一个小邻域中寻找,以生成几个潜在的正样本。你可能会认为这是一个坏主意,因为在大多数「正样本」的例子中,对象不是居中的。

这就是多实例学习(MIL)的用得上的地方。在MIL中,你没有指定正样本和负样本,而是指定正面和负面的「包」。在正样本包中的图像集合并不都是正样本。相反,只有一个图像在positive bag需要是一个正样本!在我们的例子中,一个positive bag包含以对象当前位置为中心的patches,以及它周围一个小邻域的patches。即使被跟踪对象的当前位置不准确,当来自当前位置附近的样本被放入positive bag时,这个包很可能包含至少一个对象居中的图像。MIL project page为那些希望深入了解MIL跟踪器内部工作原理的人提供了更多信息。

优点:性能相当好。它不像BOOSTING漂移那么大,而且在部分遮挡的情况下,它能做合理的工作。如果您正在使用OpenCV 3.0,这可能是您可以使用的最好的跟踪器。但是如果您使用更高的版本,请考虑KCF。

缺点:追踪失败并不可靠。无法从完全遮挡中恢复。

(3)KCF Tracker:KCF是kernefied Correlation Filters的缩写。此跟踪器基于前两个跟踪器中提出的思想。该跟踪器利用了MIL跟踪器中使用的多个正样本具有较大重叠区域这一事实。这些重叠的数据导致了一些很好的数学特性,这些特性被这个跟踪器利用,使跟踪速度更快,同时也更准确。

优点:准确性和速度都比MIL好,而且它比提振和MIL更有效地追踪失败,如果你使用的是OpenCV 3.1和以上,我建议用这个来做大部分的应用。

缺点:不能从完全遮挡中恢复。OpenCV 3.0中没有实现。

(4)TLD Tracker :TLD代表跟踪、学习和检测。顾名思义,这个追踪分解长期跟踪任务分为三部分——(短期)跟踪、学习、和检测。从作者的论文,「跟踪器跟踪对象从一帧到另一帧。检测器定位到目前为止观察到的所有外观,并在必要时纠正跟踪器。学习估计检测器的错误,并对其进行更新,以避免以后出现这些错误。「这个跟踪器的输出往往有点跳跃。例如,如果您正在跟踪一个行人,并且场景中有其他行人,那么这个跟踪器有时可以临时跟踪与您打算跟踪的行人不同的行人。在积极的一面,这个轨迹似乎在更大的范围内跟踪一个物体,运动和遮挡。如果你有一个视频序列,其中对象隐藏在另一个对象后面,这个跟踪器可能是一个不错的选择。

优点:在多帧的遮挡下效果最好。此外,跟踪规模变化最好。

缺点:大量的假阳性使它几乎无法使用。

(5)MEDIANFLOW Tracker:在内部,该跟踪器在时间上同时在向前和向后两个方向跟踪对象,并测量这两个轨迹之间的差异。最小化这种向前向后的误差可以使他们可靠地检测跟踪失败,并在视频序列中选择可靠的轨迹。在我的测试中,我发现当运动是可预测的并且很小的时候,这种跟踪器工作得最好。与其他跟踪器不同的是,即使在跟踪时,跟踪器也会一直运行。

优点:出色的报告跟踪失败。当运动是可预测的并且没有遮挡时,这种方法非常有效。

缺点:在大动作下失败。

(6)GOTURN tracker:在跟踪器类中的所有跟踪演算法中,这是唯一一个基于卷积神经网路(CNN)的演算法。从OpenCV文档中,我们知道它是「对视点变化、光照变化和变形的健壮性」。但它不能很好地处理遮挡。GOTURN是一个基于CNN的跟踪器,使用caffe模型进行跟踪。Caffe模型和原型文本文件必须出现在代码所在的目录中。这些文件也可以从opencv_extra存储库下载,在使用前连接并提取。GOTURN目标跟踪演算法已经移植到OpenCV。

(7)MOSSE tracker:最小平方误差输出和(MOSSE)使用自适应相关的目标跟踪,产生稳定的相关滤波器时,初始化使用一帧。MOSSE跟踪器对于光线、比例、姿态和非刚性变形的变化是鲁棒的。它还根据峰值旁瓣比检测遮挡,这使得跟踪器能够在对象重新出现时暂停并恢复到它停止的位置。MOSSE跟踪器也运行在更高的fps (450 fps甚至更多)。此外,它也非常容易实现,与其他复杂的跟踪器一样准确,而且速度快得多。但是,在性能方面,它落后于基于深度学习的跟踪器。

(8)CSRT tracker:在带通道和空间可靠性的判别相关滤波器(DCF-CSR)中,我们使用空间可靠性图将滤波器支持调整到从帧中选择区域的部分进行跟踪。这确保了选定区域的放大和定位,并改进了对非矩形区域或对象的跟踪。它只使用两个标准特性(生猪和颜色名称)。它的fps也相对较低(25 fps),但对目标跟踪具有较高的精度。

3、未来的方向

结合深度学习的跟踪演算法,影响深度神经网路效果的两个主要因素是网路结构和训练数据,近几年,无监督或弱监督方法受到人们的广泛关注。也有一些演算法开始尝试将强化学习应用到目标跟踪领域。对抗网路可以生成迷惑机器的负样本,增强分类器判别能力。这些无监督和弱监督的方法可有效解决目标跟踪领域样本不足的问题。

参考

【1】blog.csdn.net/shujian_t

【2】blog.csdn.net/zouxy09/a

【3】blog.csdn.net/yuhq3/art

【4】blog.csdn.net/weixin_36


推荐阅读:
相关文章