在本节中,我们将深入研究不同的跟踪算法。目标不是对每个跟踪器有深入的理论理解,而是从实践的角度理解它们。
让我首先解释跟踪背后的一些一般原则。在跟踪中,我们的目标是在当前帧中找到一个对象,因为我们已经在所有(或几乎所有)之前的帧中成功跟踪了对象。
由于我们一直跟踪对象直到当前帧,我们知道它是如何移动的。换句话说,我们知道运动模型的参数。运动模型只是一种奇特的说法,即您知道对象在前一帧中的位置和速度(速度 + 运动方向)。如果您对对象一无所知,则可以根据当前运动模型预测新位置,并且您将非常接近对象的新位置。
但是我们拥有的信息不仅仅是物体的运动。我们知道对象在前面每一帧中的样子。换句话说,我们可以构建一个外观模型来编码对象的外观。该外观模型可用于在运动模型预测的位置的小邻域中进行搜索,从而更准确地预测对象的位置。
运动模型预测对象的大致位置。外观模型微调这个估计以提供基于外观的更准确的估计。
如果对象非常简单并且外观没有太大变化,我们可以使用一个简单的模板作为外观模型并寻找该模板。然而,现实生活并没有那么简单。物体的外观可能会发生巨大变化。为了解决这个问题,在许多现代跟踪器中,这个外观模型是一个以在线方式训练的分类器。不要惊慌!让我用更简单的术语来解释。
分类器的工作是将图像的矩形区域分类为对象或背景。分类器将图像块作为输入并返回 0 到 1 之间的分数,以指示图像块包含对象的概率。当绝对确定图像块是背景时得分为 0,当绝对确定图像块是对象时得分为 1。
在机器学习中,我们使用“在线”一词来指代在运行时即时训练的算法。一个离线分类可能需要成千上万的例子训练分类,而是一个在线的分类通常使用的例子非常少在运行时训练。
分类器通过提供正面(对象)和负面(背景)示例来训练。如果你想构建一个检测猫的分类器,你可以用数千张包含猫的图像和数千张不包含猫的图像来训练它。通过这种方式,分类器学会区分什么是猫,什么不是。您可以在此处了解有关图像分类的 更多信息。在构建在线分类器时,我们无法拥有数千个正类和负类的示例。
让我们看看不同的跟踪算法如何解决这个在线训练问题。
提升追踪器
该跟踪器基于 AdaBoost 的在线版本——基于 HAAR 级联的面部检测器内部使用的算法。该分类器需要在运行时使用对象的正面和负面示例进行训练。由用户(或其他对象检测算法)提供的初始边界框作为对象的正例,边界框外的许多图像块被视为背景。
给定一个新帧,分类器在前一个位置附近的每个像素上运行,并记录分类器的分数。对象的新位置是得分最大的位置。所以现在我们有一个更多的分类器正面例子。随着更多帧的进入,分类器会使用这些额外的数据进行更新。
优点:没有。该算法已有十年历史并且运行良好,但我找不到使用它的充分理由,尤其是当其他基于类似原理的高级跟踪器(MIL、KCF)可用时。
缺点:跟踪性能一般。它不能可靠地知道跟踪何时失败。
军用追踪器
该跟踪器在思想上类似于上述 BOOSTING 跟踪器。最大的区别在于,它不是仅将对象的当前位置视为正例,而是在当前位置周围的小邻域中查找以生成多个潜在的正例。您可能认为这是一个坏主意,因为在大多数这些“正面”示例中,对象并未居中。
这就是多实例学习 (MIL) 的用武之地。在 MIL 中,您不指定正负示例,而是指定正负“包”。正包中的图像集合并不都是正例。相反,正面包中只有一张图片需要是正面示例!
在我们的例子中,一个正包包含以对象当前位置为中心的补丁,以及它周围的一个小邻域的补丁。即使被跟踪对象的当前位置不准确,当来自当前位置邻域的样本被放入正包时,这个包很可能包含至少一个对象很好地居中的图像。MIL 项目页面为喜欢深入挖掘 MIL 跟踪器内部工作原理的人提供了更多信息。
优点:性能相当不错。它不像 BOOSTING 跟踪器那样漂移,并且在部分遮挡的情况下可以正常工作。如果您使用的是 OpenCV 3.0,这可能是您可用的最佳跟踪器。但如果您使用的是更高版本,请考虑 KCF。
缺点:无法可靠地报告跟踪失败。无法从完全遮挡中恢复。
KCF追踪器
KFC 代表Kernelized Correlation Filters。这个跟踪器建立在前两个跟踪器中提出的想法之上。该跟踪器利用了 MIL 跟踪器中使用的多个正样本具有较大重叠区域的事实。这种重叠的数据导致了一些很好的数学特性,该跟踪器利用这些特性使跟踪速度更快,同时更准确。
优点:准确性和速度都比 MIL 好,并且它报告跟踪失败比 BOOSTING 和 MIL 更好。如果您使用的是 OpenCV 3.1 及更高版本,我建议在大多数应用程序中使用它。
缺点:无法从完全遮挡中恢复。
顶级域名追踪器
TLD 代表跟踪、学习和检测。顾名思义,这个跟踪器将长期跟踪任务分解为三个部分——(短期)跟踪、学习和检测。在作者的论文中,“跟踪器逐帧跟踪对象。检测器定位到目前为止观察到的所有外观,并在必要时纠正跟踪器。
学习估计检测器的错误并更新它以避免将来出现这些错误。” 这个跟踪器的输出往往会有点跳跃。例如,如果您正在跟踪一位行人并且场景中还有其他行人,则此跟踪器有时会临时跟踪与您打算跟踪的行人不同的行人。从积极的一面来看,该轨迹似乎可以在更大的尺度、运动和遮挡范围内跟踪对象。如果您有一个对象隐藏在另一个对象后面的视频序列,则此跟踪器可能是一个不错的选择。
优点:在多帧遮挡下效果最佳。此外,最好跟踪规模变化。
缺点:很多误报使它几乎无法使用。
媒体流量追踪器
在内部,该跟踪器在时间上向前和向后两个方向跟踪对象,并测量这两个轨迹之间的差异。最小化这种前向后向错误使他们能够可靠地检测跟踪失败并在视频序列中选择可靠的轨迹。
在我的测试中,我发现当运动可预测且较小时,此跟踪器效果最佳。与其他跟踪器即使在跟踪明显失败时仍继续运行不同,该跟踪器知道跟踪何时失败。
优点:出色的跟踪失败报告。当运动可预测且没有遮挡时效果很好。
缺点:在大运动下失败。
GOTURN 追踪器
在跟踪器类的所有跟踪算法中,这是唯一一种基于卷积神经网络 (CNN) 的算法。从 OpenCV 文档中,我们知道它“对视点变化、光照变化和变形具有鲁棒性”。但它不能很好地处理遮挡。
注意:GOTURN 是基于 CNN 的跟踪器,使用 Caffe 模型进行跟踪。在来自Caffe模型和原型文本文件必须存在于其中的代码存在的目录。这些文件也可以从opencv_extra 存储库下载,连接并在使用前提取。
更新: GOTURN 对象跟踪算法已移植到 OpenCV。我们在这里有一篇关于它的实现的单独帖子。
MOSSE 追踪器
最小输出平方误差总和 (MOSSE) 使用自适应相关性进行对象跟踪,当使用单帧初始化时,该相关性会产生稳定的相关性滤波器。MOSSE 跟踪器对光照、比例、姿势和非刚性变形的变化具有鲁棒性。它还根据峰旁瓣比检测遮挡,这使跟踪器能够在对象重新出现时暂停并从停止的位置继续。MOSSE 跟踪器还以更高的 fps(450 fps 甚至更高)运行。更重要的是,它也很容易实现,与其他复杂的跟踪器一样准确,而且速度更快。但是,在性能方面,它落后于基于深度学习的跟踪器。
CSRT追踪器
在具有通道和空间可靠性的判别相关滤波器 (DCF-CSR) 中,我们使用空间可靠性图将滤波器支持调整到帧中选定区域的一部分进行跟踪。这确保了所选区域的放大和定位以及对非矩形区域或对象的改进跟踪。它仅使用 2 个标准功能(HoGs 和 Colornames)。它还以相对较低的 fps (25 fps) 运行,但为对象跟踪提供了更高的精度。
参考:来源
博尔姆,大卫 S.;贝弗里奇,J. 罗斯;德雷珀,布鲁斯 A.;吕,伊曼。使用自适应相关过滤器的视觉对象跟踪。在CVPR,2010 年。
其他来源