目前正在学习Struck SVM,拜服于作者的新颖思路,之后会时常查阅,所以把整篇paper翻译了一遍,以便理解与进步。

Struck: Structured Output Tracking with Kernels论文主页及代码下载地址:点击这里

代码所用序列下载地址:点击这里

Struck算法:基于结构化输出预测(Structured SVM)的自适应视觉目标跟踪框架

摘要

自适应的基于检测的跟踪方法在计算机视觉领域被广泛使用,常用于跟踪任意目标。当前传统的跟踪算法将跟踪问题处理成分类问题,通过在线学习技术来更新目标模型。不过,为了达到更新的目的,通常需要将一些预估计的目标位置看作是已知标签类别的训练样本,且目前尚不清楚执行这些中间步骤能多么好的效果。而且,这些分类样本(标签预测)也并不一定与最终跟踪的目标(准确估计目标的位置)相符。本文中,我们提出了一个基于结构化输出预测的自适应视觉目标跟踪框架。通过明确引入输出空间来达到跟踪效果,能够避免中间分类环节。我们使用了核结构输出的支持向量机(SVM),通过在线学习来提供自适应跟踪。为了保证实时性,我们还引入了一个阈值机制,防止在跟踪过程中出现支持向量的过增长。实验表明我们的算法优于那些可以在多种不同基准视频上进行跟踪的最先进的跟踪器。而且,实验表明我们可以很容易地把额外的特性和核引入到我们的算法框架中去,从而增加跟踪性能。作为进一步的贡献,实验表明,利用Struck算法优化的GPU可以在高帧速率下运行而不牺牲跟踪性能。

索引词:基于检测的跟踪;结构化输出SVM;阈值机制;基于GPU的跟踪

一、介绍

视觉目标跟踪是计算机视觉领域的核心问题之一,广泛应用包括于人机交互、检测和增强现实,当然,这些只是其中一部分。在计算机视觉那些旨在解决高层任务的其他领域,例如场景理解和动态识别,目标跟踪都是重要的组成部分。

在一些应用中,被跟踪的目标能够提前已知,这就可以结合先验知识设计跟踪器。但在一些其他情况下,我们希望能够跟踪任意目标,这些对象在运行时才指定。在这种情况下,跟踪器必须能够模拟这些动态对象的外观,并适应在跟踪过程中,由于物体运动、照明条件和遮挡引起的模型的变化。即使在目标的先验信息已知情况下,有一个灵活的框架来适应外观变化并在跟踪过程中吸收新信息仍然很有吸引力,在真实世界场景中,对成功跟踪而言,这种框架也必不可少。

当前特别流行的一种跟踪方法是基于检测的跟踪[1],它将跟踪问题看作是检测任务,并在很长时间内得以应用。这种算法受欢迎的原因一方面取决于目标检测最近取得的重大进步,许多想法可以直接转移到跟踪问题中。另一个关键因素是下面方法的发展,这种方法使用到的分类器允许经由网络训练,这提供了一个用于自适应跟踪的自然机制[2-4]

自适应的基于检测的跟踪方法仍然利用一个经由网络训练的分类器来区分目标对象及其周围背景。在跟踪过程中,这个分类器通常通过搜索前一帧周围局部区域内的最大分类得分来估计目标位置,常使用滑动窗口的方法。给出预计的目标位置后,传统算法会生成一系列被二进制标注的训练样本来在线更新分类器。因此,这些算法把跟踪器的适应阶段分离为两个不同的部分:(1)样本生成和标注;(2)分类器的更新。

在被广泛使用的同时,这种阶段分离也产生了很多问题。第一,有必要设计一个策略来生成和标注样本,但应该以怎样的一种条理化的方法去做还不明了。通常采用的方法依赖于预定义的规则,如利用样本与预计目标位置的距离来决定这个样本被标注成正样本还是负样本。第二,分类的目的是正确地预测样本的二进制标签,而追踪的目的是准确地评估目标的位置。因为这两个目的在学习过程中并不明确,所以关于最大分类置信度对应于目标的最佳估计位置的说法也就没有坚定的理由成立(相似观点是由Williams[5]等人提出的)。先进的自适应的基于检测的跟踪方法主要通过增强分类器的鲁棒性来提高跟踪性能,以减少产生的错误标签样本。这样的例子包括使用稳定的损失函数[6-7],半监督学习[8]或者多示例学习[3,10]

本文中,我们使用了一种不同的方法,将整体跟踪问题看作是结构化输出预测,在这过程中,其任务是直接预测两帧之间目标位置的变化。我们提出了一个新颖的、有条理的自适应的基于检测的跟踪框架,结合了学习和追踪,避免了特意更新(参见图1)。

图1:不同的自适应的基于检测的跟踪范例:给出当前的目标估测位置,传统方法(见右手边)会生成一系列样本,依靠学习器的类型,产生训练标签。我们的方法(见左手边)避免了这些环节,直接产生跟踪结果。

目前大多数基于检测的跟踪方法已经使用了基于boosting的在线分类器的变式[2–4]。在目标检测中,boosting已经被证明可以成功应用于一些特殊任务中,尤其,在很多脸部识别中运用了Viola和Jones的方法[11]。这种方法中,尤其是Haar-like的特性表现,几乎已经在基于检测的跟踪研究中成为标准。然而在目标检测最成功的研究中,则更倾向于使用SVM而非boosting,这是因为SVM具有良好的概括能力,在标注噪声方面有很好的鲁棒性,而且通过使用kernels[12-14]而在对象描述上具有灵活性。因为SVM的这种灵活性以及对结构化输出空间的自然概括,我们使用Tsochantaridis等人提出的[15]结构化输出SVM框架。而且,我们改进了Bordes等人提出的结构化输出SVM在线学习方法[16-17],让它适用于自适应的目标跟踪任务中。通过实验发现,我们的框架比先进的基于检测的跟踪方法更加优秀。

一个机构化的输出SVM框架已经预先被Blaschko和Lampert[12]应用在目标检测任务中。对比他们的研究,在我们的设置中,没有离线标注的数据可以有效地用于训练(除了第一帧,它被假定为标注了),相反,我们利用在线学习。不过,利用kernels的在线学习也遭受了特有的诟病,即,支持向量的数量随着训练数据数量的增加而增加。因此,为了保证实时操作,有必要控制支持向量的数量。目前,在固定阈值的情况下进行分类SVM的在线学习的方法已经被提出[18-19],这就意味着支持向量的数量可以被约束保持在指定的限制下。本文中,我们采用了类似的想法并引入了一个新颖的阈值方法,适用于在线结构化输出SVM框架。我们发现在不明显影响我们的系统跟踪性能的前提下,这个阈值机制的引入,在计算效率方面产生了很好的效果。

本文早期的版本发表见文献[20]。这里,我们在以下几个方面进行了改进:

1) 我们进行额外的实验来量化结构化学习的影响,以便与基准分类SVM进行对比(§4.2)。

2)我们展示了struck算法如何应用于GPU上,并演示了在不牺牲跟踪性能的情况下,如何实现高帧速率(§5)。

3) 我们论述了在怎样的基准下,struck算法实现了先进的性能(§6)。

本文的组织结构如下:

§2,简要回顾了相关的研究工作;

§3,介绍了struck跟踪算法;

§4,进行实验对比了struck跟踪算法算法和其他算法,评估了结构化学习和kernel相结合的性能效果;

§5,介绍了我们的struck算法如何应用于GPU上;

§6,论述了第三方跟踪基准;

§7,总结。

二、相关研究工作

因为跟踪问题的重要性,这些年来已经提出了很多不同方法来解决它。但是,对跟踪技术进行全面回顾已经超出了本文的范围,读者可以参考文献[21]进行调查,以及参考文献[22-23]找到一些可以在大型数据集上对比大量跟踪算法的基准(也可以参见§6)。这里,我们仅仅介绍目前典型的跟踪方法。

基于字典的跟踪方法主张目标模板字典,并旨在在一个使用了这些模板的结合的新的框架上表示候选目标区域。一个常见的想法是试着使用范数最小化表示候选[24-26]。从一帧到下一帧的预测通常使用粒子滤波,利用一个可以给候选分配更好的置信度,更易通过模板表示的传感器模型。例如,邢等人[26]提出了一种结合短期、中期和长期字典的方法来实现自适应性(短期字典将更快地适应新数据)和鲁棒性(长期字典将记忆更多对象最初的样子)之间的折中。王等人[25]描述了另一种基于字典的有趣方法,旨在学习模板,捕捉不同角度下的目标。

基于整体的跟踪方法结合了一组相互独立的弱分类器的结果来产生一个强分类器,以便能够在一个新帧上预测一个目标的边界框。例如,曹和薛[28]描述了一个自适应随机森林方法,主张进行候选决策树的采集,并挑选其中每一帧的一半来形成一个整体。(其他涉及到随机森林的技术可以参见文献[29-30]。)白等人[31]结合了在8×8上训练的弱分类器,在目标的边界框之内使用了从随时间更新的Dirichlet分布上采样的权重向量。王等人[32]展示了如何使用有条件的粒子滤波方法来结合不同的跟踪算法(包括struck算法),以期可以融合多种跟踪算法的良好效果。

基于分割的跟踪算法[33-35]实际上是在每一帧上分割(可能分割地很粗糙)正在被跟踪的目标,以期可以试图避免在目标分割时,跟踪算法无意将背景部分融合进来导致的漂移问题。例如,Duffner和Garcia[33]提出了PixelTrack,这种方法是利用基于像素的霍夫模型的同时,还利用一个概率分割模型,以便更好地处理被跟踪目标在帧之间产生的非刚性变形。

循环跟踪算法是目前一种有趣的跟踪算法类型,这种方法利用图像中相邻子窗口的循环结构来实现快速跟踪。之前这样的跟踪,例如CSK[36],通过利用递归核最小二乘算法(KRLS),在目标预计位置周围的所有子窗口上,快速评估被训练的分类器,并最大化响应。Danelljan等人[37]在此基础上通过引入颜色属性在色彩序列上实现了良好效果。

还有很多我们统计的跟踪算法并没有落入上述类型中。例如,Pernici和Del[38]提出了一个叫做ALIEN的基于最近邻分类器的跟踪算法,通过使用定向的而非轴对称的边界框进行跟踪,来很好地处理遮挡情况,这种方法一般用于长期跟踪问题。陆等人[39]提出了一种基于是非图的有趣的方法,能够达到用良好的跟踪性能换取速度的目的。最后,张和van der Maaten [40]提出了一种基于SVM的不错的多目标跟踪算法,也可以用于解决单目标,局部跟踪问题。

然而,在我们统计的跟踪算法中,有一些可以在测试的视频序列上取得比Struck算法更好的跟踪性能,所以仍存在权衡问题。就速度方面来说[31-32,39],目前的困难在于快速运动和依赖色彩特征。因此,我们相信,我们的能够达到高帧速率的,基于GPU的对Struck算法的执行,能够较好地适应快速运动情况,同样适用于灰度或者彩色序列,是一种先进的跟踪算法。

三、在线结构化输出跟踪算法

3.1基于检测的跟踪

在本节,我们对传统的自适应的基于检测的跟踪算法进行了概述,它试图通过学习一个分类器来从局部背景中区分出目标对象。

通常,这种跟踪算法主张在一个视频序列的一帧中f t∈ F,对包含目标对象的2D边界框的位置p∈ P进行估计,其中t = 1,……,T。给出一个边界框位置p,将会得到一个分类器,用来从边界框内的图像像素中进行特征提取。这个分类器被样本对训练,其中是一个二进制标签,并通过得到它的预测值,其中,代表分类置信函数。

在跟踪过程中,假设目标位置的变化可以通过在前一帧目标位置的周围局部区域内最大化来进行预知。使代表在时间时预估的边界框。跟踪算法的目的是估计一种转换(例如平移),以便目标的新位置可以近似通过表示。表示我们的搜索空间,它的形式取决于被跟踪目标运动的类型。对于大多数的基于检测的跟踪算法,存在这样一种2D转换:,其中是搜索半径。在这种情况下,的组成由得到。

精确地讲,通过下面公式估计目标位置相对于前一帧的变化。

      (1)

且跟踪位置被更新为

在估计出新的目标位置之后,将从当前帧中产生一组训练样本。我们把这个过程分为两个阶段:采样阶段和标注阶段。采样阶段产生一组(n个)不同转换,由此产生一组训练样本。在这个过程之后,根据分类类型,标注阶段为这些训练样本标注标签。最后,通过利用这些训练样本和标签进行分类器的更新。

这种跟踪算法产生了有很多问题。第一,假设(1)中提供能够对目标位置进行精确估计的分类置信函数,由于分类器的训练仅仅利用了二进制样本,而没有涉及到转换信息,因此并没有明确地纳入学习算法。第二,用来训练分类器的样本都具有相同的权重,这就意味着一个与跟踪器边界框明显重叠的负样本和少部分重叠的负样本被相同对待。这方面的含义是,跟踪过程中的不准确会导致产生标注错误的样本,这可能会降低分类器的准确度,反过来又进一步导致跟踪的不准确。第三,通常基于直觉和启发进行标注,而不是有一个高耦合的分类器。标注阶段产生的错误以它们自身标注噪声的形式表现出来,目前许多的先进算法试图通过使用稳定的损失函数、半监督学习或者多示例学习来缓解这一问题。我们认为,所有这些技术,尽管通过增加分类器的鲁棒性来对噪声标注进行调整,但并没有解决实质问题,这是由于把标注阶段从学习阶段中分离了出来。我们提出的算法并没有依赖于标注,而是试图在一个清晰的框架内通过将学习过程和跟踪过程相连、避免进行人为二进制标注这个环节来克服所有这些问题。样本选择完全由学习器本身控制,样本之间的关系如它们之间的相对相似度也在学习过程中被考虑。

总结来看,在这一节中,我们描述了传统的标注阶段执行过程,这有助于进一步了解我们的算法。传统的标注阶段使用一个相似转换函数来确定位于处的样本的标签。这个函数可以表示为,给出一个参考位置和两个转换,确定结果样本如何相似。例如,重叠函数被定义为:

用来表示两个边界框之间的重叠程度。另一个这样的函数的例子是基于两个转换之间的距离:

表示恒等(或空)转换,即。给定一个相似变换函数,标注阶段决定了一个通过转换得到的样本的标签,这个标签通过应用一个标注函数产生。最常见的,这个标注函数可以被定义为:

其中,分别是上下阈值。二进制分类器通常忽略未标记的样本[2],而基于半监督学习的分类器在更新阶段使用它们[8-9]。在基于多示例学习的方法中[3, 10],标注阶段把所有正样本采集起来,并给这个bag分配一个正标签。即使不是全部,大多数自适应的基于检测的跟踪算法都使用一个可以用类似方式表达的标注器。然而,目前尚不清楚在一个在线学习框架中,标注参数(如,在上一例子中的阈值)如何被估计。此外,这些启发式方法往往容易产生噪声,而且目前尚不清楚为什么这样一个函数在实际中适用于跟踪问题。在随后的章节中,我们将引入我们的基于结构化输出方法的算法,这种算法能从根本上解决这些问题,可以被认为是一个这些启发式方法的归纳。

3.2结构化输出SVM

相较于之前的算法是学习一个分类器,我们的算法提出学习一个预测函数,来直接估计帧之间目标的变化。因此,我们的输出空间是所有转换的空间而不是二进制标签±1。在我们的方法中,一个被标注的样本是一对坐标,其中,是想要目标进行的转换。我们在一个结构化输出SVM中框架下学习,这里引入了一个判别函数,可以根据下面公式进行预测:

注意(1)和(4)之间的相似性:我们仍执行一个最大化步骤来预测目标的转换,但是现在的判别函数明确包含了标签,这意味着它可以被纳入学习算法中。在我们的框架中,我们提供被标注单一的样本用于更新分类器,而不是使用跟踪器位置来为训练一个分类器产生二进制样本。

这个判别函数用于计算坐标对之间的匹配度,并给那些匹配的坐标对一个高分。通过限制为一个线性函数,其中是一个联合核映射(稍后定义),使它可以在一个大面积的框架中的一组样本中,通过最小化下面的凸目标函数来获得学习。

其中,。这个优化的目的是为了通过一个由损失函数∆确定的边界,确保训练样本的值大于的值()。这个损失函数应该满足时,,并随着的越来越不同而增加。损失函数在我们的算法中起到关键作用,因为它使我们解决了之前提到的所有样本被相同对待的问题。这可以利用3.1节引入的相似转换函数来实现。例如,根据Blaschko和Lampert提出的[12],我们选择在边界框重叠处,依据下面的损失函数。

其中,是一个重叠函数(2)。

3.3 在线最优化

为了在一个在线设置中优化(5),我们使用Bordes等[16-17]提出方法。使用标准的拉格朗日对偶技术,(5)可转化为它的等价对偶形式:

并且,判别函数被描述为:

在分类器SVM的情况下,这种对偶表示的一个好处是,因为连接的核映射只发生在标量乘积内,所以它可以根据一个适当的联合核映射函数,被隐式地定义。我们在跟踪过程中使用的核函数将在3.5节探讨。根据下面公式确定(7)中的参数[16]

这个对偶可以被大大简化成:

其中,。这也把判别函数简化成:

这种形式我们指的是那些时的坐标对作为支持向量,而那些包含在至少一个支持向量中的作为支持模式。注意,对于一个给定的支持模式,只有在支持向量为时,存在,而在其他支持向量时(其中),存在。我们分别称其为正支持向量和负支持向量。

Bordes等人[16-17]提出的优化算法的核心步骤是序列最小优化环节(Sequential minimal optimization, SMO),可以单调提高(10)中的一对系数。由于的约束,这两个系数必须相反调整,导致中的一个一维最大化,这个可以通过下面公式中(算法1)被解决。

在线学习算法剩下的部分都是围绕如何选择可以通过SMO步骤得到优化的三元组。对于给定的,利用高梯度来定义可行的的搜索方向,其中,与(10)中的梯度有关的一个单一系数由下面公式指定。

这里,我们考虑到了三个不同的更新步骤,它们可以很自然地映射到一个跟踪框架上。

•新过程PROCESSNEW

处理一个新样本。因为最初所有的都为0,只有当时,。负支持向量可以根据得到。在跟踪过程中,这对应于添加真实的标签作为一个正支持向量,根据学习器的当前状态,考虑损失函数,寻找最重要的样本成为负支持向量。但是要注意,这一步没必要增加新的支持向量,因为SMO环节可能不需要调整,使其远离0。

•旧过程PROCESSOLD

在已经存在的支持模式中,处理一个随机选取的支持模式。正支持向量为,但是一个可行的搜索方向仍满足,这意味着这个最大化仅仅是从引用这个支持模式的支持向量中选择。同新过程中一样,负支持向量。在跟踪过程中,这对应于回访我们保留的一些支持向量,潜在地添加另一个样本作为一个负支持向量,同时,调整相关系数。此外,这个新样本也被选择用于考虑当前学习器的状态和损失函数。

•优化REPROCESS

处理一个已经存在的随机选取的支持模式,但仅仅修改支持向量的参数。正支持向量的选择同旧过程中一样,负支持向量,其中

在这些情况中,新过程和旧过程都能添加一个新的支持向量,使学习器在跟踪过程中具有样本选择的能力和发现重要背景要素的能力。这个选择包含遍历支持向量来最小化梯度,这可能是一个相对复杂耗时的操作。事实上,我们发现,在2D转换的情况下,在一个极坐标网格中从中取样就已经足够,而不用考虑每一个像素偏移。这个优化情况仅仅考虑到了已有的支持向量,因此是一个不太耗时的操作。

根据Bordes等人[17]提出的,我们安排了以下更新步骤。一个REPROCESS步骤被定义作为一个单独的被OPTIMIZE步骤紧随的PROCESSOLD步骤。给出一个新的训练样本,我们call一个被REPROCESS步骤紧随的单独的PROCESSNEW步骤。事实上,我们使用典型的

在跟踪过程中,我们保留一组支持向量。对每一个,我们存储系数和梯度,它们都可以在SMO步骤中递增地更新。如果SMO步骤致使一个变为0,则相对应的支持向量也将从中移除。

3.4结合预算

到目前为止所描述的方法中暴露出来的一个问题是支持向量的数量没有限制,通常会随着时间的推移而增加。评估需要评估和每个支持向量之间的标量乘积(或核函数),这意味着计算和存储成本将随着支持向量的数目呈线性增长。此外,由于(12)包括评估,所以PROCESSNEW和PROCESSOLD更新环节都将变得比支持向量增加的数目更加重要。这个问题在跟踪过程中显得尤为重要,因为原则上无限数目的训练样本将被提供。

最近,许多方法已经被提出用于在一个固定阈值下进行分类SVM的在线学习[18-19],这意味着支持向量的数目不能超出指定的限制。如果在需要添加一个新的支持向量时,支持向量的数目已经达到阈值,则就需要移除一个合适的支持向量,并潜在地调整仍存在的支持向量的系数以弥补移除的损失。

现在我们提出一个方法来将阈值纳入3.3节提出的算法中。和王等人的文献[19]类似,我们通过计算,选择移除一个导致权重向量变化最小的支持向量。不过,正如优化过程中使用的SMO步骤一样,我们也必须确保仍然满足的约束。因为在每个支持模式中,只存在一个正支持向量,所以在阈值维护过程中,仅仅考虑负支持向量的移除就已足够。在一个支持模式只有两个支持向量的情况下,这将导致它们两者都会被移除。移除负支持向量将导致权重向量按照下面公式来改变:

即:

每次超出预算,我们就移除最小的支持向量。我们在实验小节中将展示这一操作并不会对跟踪性能造成影响,而且设置适当的预算规模还将提高跟踪的效率。我们称这个算法为Struck,并在算法2中展示了整个跟踪过程。Struck中的关于未优化的C++的执行也是公开的。

3.5 核函数和图像特征

一个结构化输出SVM框架的使用给图像如何表示方面提供了极大的灵活性。事实上,我们选择使用一个约束核,它使用相对的边界框位置从一帧,允许一个标准的图像核应用于下面这样的对之间:

核的使用简单明确地使不同的图像特征与我们的方法结合起来,并且在我们的实验中,我们想到了很多例子。我们也调查了为了把不同的图像特征结合在一起,可以使用多核。

四、实验

4.1基于检测的跟踪算法的基准

我们的第一组实验旨在比较我们提出的方法与已有的基于检测的跟踪算法的结果。这些算法多数基于boosting或者随机森林,并使用了简单的Haar-like特征作为它们的图像描述。为了公平对比各类算法,我们在评估时使用类似的特征,避免学习框架的影响。但请注意,这些特征专门设计用来适用于boosting的特征选择能力,这已被Viola和Jones[11]最先引入。尽管如此,我们发现利用我们的框架取得的结果,明显优于现有的最先进的结果。

我们用6种不同类型的Haar-like特征,安排在一个4×4的网格的两个尺度上的一个网格上,这样就有了192个特征,每个特征被正规化为范围(−1,1)内的一个值。使用网格而不是随机位置,在一定程度上,限制了跟踪算法中的随机因素,由于学习器本身有一个随机元素,这在一定程度上弥补了我们没有进行特征选择的事实。但请注意,我们使用的特征的数目少于我们比较的系统,它们使用了至少250个特征。我们把特征连接反映到特征向量中,并应用一个高斯核,其中,和,这对所有序列来说都是固定的。就像我们比较的系统一样,我们跟踪2D变换。在跟踪过程中,我们使用一个搜索半径的像素,但当更新分类器时我们采用一个更大的半径以确保稳定。正如3.3节提到的,我们发现在进行在线学习时,仔细地搜索并不必要,在一个极坐标网格中从中取样就已足够(我们使用半径为5,角为16,并给出81个位置)。

为了评估跟踪性能,我们使用Saffari等人[4]提出的Pascal VOC重叠准则,并记录每个预计的和真实的序列之间的平均重叠情况。因为我们的学习算法存在随机性,所以我们也根据不同的随机种子,重复了每个序列5次,并记录了中间的结果。

表1显示了在不同预算规模下,由我们的跟踪框架产生的结果,以及现有的先进的算法已经公开发表的结果[2–4,42,43],示例框架如图2所示。从这些结果中可以看到,Struck算法几乎在每个序列上都以相当大的优势优于当前最先进的算法。这些结果也表明,该预算机制没有明显影响跟踪结果。即使在预算低至的情况下,我们的算法在8个序列上也有4个序列优于最先进的算法。

在图3中我们展示了在跟踪结束时支持向量集的一些例子。可以观察到一个有趣的特性是,正支持向量(用绿框标注)提供了目标对象在跟踪过程中外观变化的一个简单总结。换句话说,我们的跟踪器能够识别不同时间目标对象的不同外观。另外,很明显,我们的算法自动选择了比正支持向量更多的负支持向量。这主要是因为与具有较高多样性的背景相比,前景表达地更加简洁。从这些图片中我们也可以看出,我们使用的预算机制保留整个跟踪序列的支持向量,并且不放弃旧的外观信息。我们相信这会使我们的跟踪器有更好的效果,因为它有助于防止跟踪过程中,在旧信息丢弃时,将会产生的漂移。

表1:基准序列上的的比选择了比正支持向量更多的负支持向量。这主要是因为前景表达地比边界框平均重叠率。前四列对应于我们的方法,其中不同的预算规模用不同的下标表示。表现最好的方法用粗体显示。我们也用下划线标出在最小预算规模(B = 20)下,优于先进方法的情况。最后一行为我们的方法中的一个未优化的C++的执行给出了每秒帧的平均数目。

图2:从基准跟踪序列提取的帧的例子,显示了Struck算法相比于MILTrack算法[3],OMCLP算法[4]和OAB算法[2]的结果。这些结果的视频可以在http://www.samhare.net/research中找到。

图3:在跟踪过程结束时,(为便于说明而选择)的情况下,支持向量集的图像显示。每个小块展示了,正支持向量和负支持向量分别有绿色和红色的边框。注意正支持向量捕获了跟踪过程中,目标对象外观的变化。

4.2结构化学习的效果

为了研究在我们的结果中,结构化学习的重要性,我们下一步针对基准分类SVM进行了一组实验。为此,我们修改了我们的跟踪框架,让学习器不再使用结构化样本,而是使用一组二进制样本进行训练。每一帧根据当前的跟踪状态生成一个正样本,运用4.1节中的方法从中采样产生负样本,选取那些在跟踪状态中重叠率小于0.5的样本 (如,根据标注函数(3)得到)。所有其他因素保持不变,这意味着这两种方法都使用了和4.1节中相同的图像特征并且都使用了一个预算规模

图4:比较我们的结构化SVM框架跟踪结果和一个基准分类SVM的跟踪结果的精确点。这些点显示了真实目标边界框和跟踪到的目标边界框之间的重叠的帧所占的百分比大于某一阈值。

图4显示了这两种跟踪算法在4.1节中每个基准测试序列上的精度点。这些点显示了真实目标边界框和跟踪到的目标边界框之间的重叠的帧所占的百分比大于某一阈值,它提供了一个比先前节中用到的平均重叠更精细的跟踪性能的评价角度。和之前一样,我们在这个序列上运行每个追踪器5次并对于一个给定的重叠阈值计算精确度的中值来产生图中的这些点。

从这些结果中我们可以看出,结构化SVM的总体精度曲线优于或者与那些分类SVM的总体精度曲线相当,这证明我们使用的结构化学习框架能够在精度上优于传统的基于分类的算法。这些优势更加明显地表现在更具挑战性的序列如coke,david和tiger2上,而分类SVM在这些序列上并不能表现的很好。

不过,在许多情况下,我们看到这两种跟踪算法的性能十分相似。这表明大部分在4.1节观察到的效果可以归因于我们对于kernelisedSVM而非boosting-based分类器的使用。尽管如此,我们仍可以观察到结构化学习能够带来额外效果,而且重要的是,它消除了引入一个二进制标注策略的需求,提供了一个更坚固的综合方法来在跟踪环境中进行学习。

4.3结合kernels

我们提出的这个框架的一个优点是它通过修改用来评估块的相似性的核函数,直接使用不同的图像特征。另外,不同的特征可以通过求多个核的平均被结合起来:。这种方法可以被认为是多核学习(MKL)的一种基本形式,而且事实上,fullMKL(在这种算法中,不同核的相对权重从训练数据集中学习得到)并没有对这种简单的方法作出巨大改进。

除了4.1节使用到的Haar-like特征和高斯核,我们还考虑到了以下几个特征:

•通过把一个块扩展成16×16像素并选取了灰度值(在[0,1]范围内)来获得像素特征。这给了一个256维的,和一个高斯核(其中,)结合起来的特征向量。

•通过从一个4层的空间金字塔连接16bin强度直方图获得直方图特征。在每一层,这个块被分割成的胞体,这导致形成一个480维的特征向量。这与一个intersectionkernel结合起来:

表2:结合kernels。A:与高斯核(σ= 0.2)结合的Haar特征;B:与高斯核(σ=0.1)结合的Raw特征;C:与intersectionkernel结合的直方图特征。当多核改善了单核的最佳性能时,用粗体表示,而下划线显示了单核内的最佳性能。最后一行显示了每一列的平均值。

表2显示了在同一基准视频上的跟踪结果,其中,其他所有参数与4.1节中指定的相同。可以看出,单独特征的行为有所互补。在许多情况下,结合多核似乎可以改善结果。不过,显而易见,这些性能的提升对于一些序列来说并不重要。这可能是因为我们的核结合策略已经被其他研究者证明,如文献[2]。特征选择在在线跟踪中扮演着关键角色。因此,进一步对fullMKL调查可能导致结果进一步地改善。

五、基于GPU 的跟踪算法

为了调查优化了的Struck算法执行的速度潜力,我们实现了一个基于CUDA的版本并称其为ThunderStruck。与最初的Struck算法一样,ThunderStruck的代码是对外公开的。在这一节中,我们将描述这个优化的一些细节,并将它的速度和性能与原始版本相比较。

图5:Struck算法用到的Haar特征的不同类型。框内的数字代表计算特征时使用到的权重(未归一化)。注意,没有哪个特征需要4个以上的框。

5.1 特征计算

计算特性之前,我们将当前帧和任意被推断的可以在CPU上被最好计算的图像转换(例如,一幅用于计算Haar特征的积分图像)经过CPU作为CUDA特征。为了计算原始特性,我们使用一个在原始Struck算法中可以更好地适用于GPU的体系结构的变体方法。这里我们没有把一个块扩展成16×16像素并且从结果中密集抽样,而是从一个非校正块中的16×16的均匀网格中取样:这使我们不改变GPU中的块大小,然而却能产生相同的结果。我们在一个单独的CUDA线程上计算每个原始特征,并且并行计算所有块的特征。

为了计算Haar特征,我们观察到,在原始Struck算法中用到的每个Haar特征(见4.1节)可以被看成至多4个在当前帧上的像素的boxs的加权组合(参见图5)。每个box的总和可以通过使用原始图像帧[11]被有效地计算。因此我们并不需要通过使每个CUDA线程计算单独特征来分支在GPU上的特征类型,也不需要给没必要的特征类型分配零权重来计算所有的Haar特征。

5.2 SVM表现

一个Struck-styleSVM维护两个独立的数据集:计算与支持相关的块用到的特征(之前见过的一些帧),当前的支持向量集中的块,连同它们相应的系数和梯度值的一个记录。由于GPU代码更容易在使用固定大小的数组时优化,而且我们已经看出,可以使用一个不降低跟踪性能的有限预算的支持向量(具体来说可以是100),所以,为ThunderStruck算法中的SVM数据,我们选择使用一个固定大小的表示 (参见图6)。我们使用一个单独的大型的基于GPU的数组来存储支持模式中每个块的所有特征。我们使用一个较小的的索引数组来指定当前的支持向量:这个数组中的每个元素使用一个块或者-1来表明一个支持向量的缺失。相应的系数和梯度值存储在类似大小的数组中,使得支持向量值储存在中,梯度值储存在中。因为CPU和GPU中都需要这三个支持向量数组,所以我们在这两个地方存储它们的镜像副本来减少在CPU-GPU总线上传输的记忆成本,(注意,涉及到的存储成本低是由于数组规模小)。

支持向量的添加和删除可以通过一个简单的维持一组使用过的ID和自由的ID集的ID分配程序来实现。这些ID被编入数组svIndices, betas和gradients中。为了添加一个支持向量,我们分配一个新的ID并使用数组中相应的元素;为了释放一个支持向量,我们释放ID,使它回到自由集中,并设置svIndices中相应的元素为-1。

图6:ThunderStruck中SVM的表示。

5.3 SVM评估

为了评估ThunderStruck算法中SVM,我们实现了线性和高斯核。线性核产生的跟踪性能比高斯核差(特别是,它们不能够很好地应对被跟踪对象姿态的变化),但是线性核提高了大约三倍CPU上的运行速度,很适合GPU的体系结构。我们分别单独考虑每种核类型的实现。

线性核。一个使用了线性核的kernelisedSVM可以在一组样本上被有效地评估。首先,计算SVM的权重向量,然后计算每一个样本的权重向量的一个简单的点积。为了达到这个目的,我们可以在一个特定的例子上重写我们对判别函数的估计:

为了使用CUDA有效计算,我们使用一个包含的线程数目等于我们的特征向量的大小的线程块(参见图7)。然后每个线程计算中的一个元素,例如,线程计算:

因为所有的线程都在同一个线程块,我们可以在计算开始时,将指数和支持向量的系数加载进共享内存中:这极大地减少了耗时的从全部内存中读取的读取次数,因为这样的话,需要执行每个线程(如,对于100个支持向量来说,每个线程进行102次而非300次全局读取)。还要注意,我们进行的所有的全局读取都是合并连续的(也就是说,线程访问连续的全局内存中的位置):这很重要,因为从连续的位置中读取使读取被分成更少的处理数目,提高了性能。

图7:为了使用CUDA有效计算针对线性核的SVM的权重向量,我们使用一个单一的线程块并计算每个线程上的的单个元素。在计算开始时,将指数和支持向量的系数加载进共享内存中,以便它们能够被所有线程快速访问。这个计算被结构化以便从全局内存中的所有读取都是合并连续的(线程访问连续的全局内存中的位置)。彩色框代表数据存储的位置(青色=全局内存,绿色=共享内存)。

在计算之后,可以在一组样本上,通过计算之间的点积和每个样本的特征来评估SVM。在我们的实现过程中的每个线程块评估单个样本的SVM(参见图8)。各个线程乘以SVM的权重向量中相对应的元素和样本的特征向量,并将结果存储在共享内存中。然后,点积的结果利用来计算。

图8:为了利用CUDA有效评估使用了线性核的SVM,我们为每个样本使用一个线性块并计算样本特征和SVM的权重向量之间的点积。通过紧随共享内存上的之后,使用逐点的乘法,计算每个点积。彩色框代表数据存储的位置(青色=全局内存,绿色=共享内存)。不同的彩色箭头区分不同的线程块。

高斯核。由于计算SVM的权重向量以知道特征映射为前提,所以我们无法应用刚刚我们在使用非线性核时使用的方法。我们必须根据SVM的支持向量直接评估SVM。对于高斯核,我们的判别函数是这样的形式:

为了编码实现,我们保留让每个线程块评估单个样本的方法,并在多次传递中进行,每个线程块计算单个支持向量对样本结果的贡献。在每次传递中,例如,计算线程,即,处的之差的平方。这些结果在每次传递结束时利用一个求和,这个和用来计算传递的支持向量所作出的贡献。

5.4预算维护

作为我们使用的固定大小的SVM表示的结果,我们为ThunderStruck维护支持向量预算的方式需要与传统Struck算法中的略有不同。特别是,而非在预算超出时移除一个支持向量,这里,当我们需要增加一个新支持向量时,需要数组中没有可用空间时先移除一个支持向量。我们发现,这是一个等价的方案,对结果的影响微乎其微;不过,尽管如此,通过在数组结尾增加额外的空间并在增加一个支持向量之后维持预算来实现原始方案的一个版本也是有可能的。

5.5 CPU上的多线程

这并不代表跟踪速度本身的改进,值得观察的是,我们能够通过在一个CPU线程上运行跟踪算法同时在另一个CPU线程上呈现输出结果,进一步获得ThunderStruck系统总体上速度的提高。这使跟踪算法能够在当前帧仍在呈现的同时处理下一帧,这是对原始Struck算法的明显改善。

5.6与Struck的对比

我们也比较了原始Struck算法的最佳性能版本与ThunderStruck的相当版本—(Haar特征,的高斯核,100个支持向量的预算)。为了执行这个实验,我们在与4.1节用的相同的序列上运行算法,并计算了跟踪性能(像以前一样,计算边界框平均重叠率)和速度(每秒的帧数)。运行ThunderStruck算法所使用的机器必须配置超线程四核英特尔i7-2600CPU,3.4GHz和一个NVIDIAGTX 680 GPU。结果如表3所示,在表3中也展示了ThunderStruck算法的另一个版本—的结果(原始特征,线性核,100个支持向量的预算)。但的跟踪性能略低于,实际上由于其使用了一个线性核,所以其运行速度得到了显著提升。

正如预期的那样,结果表明,有类似的跟踪性能(它们的差异取决于方法的随机性和ThunderStruck使用的不同的预算策略),但明显更快,以每秒平均超过50帧的速度运行。更快,以平均每秒78帧的速度运行。值得注意的是,更高的平均帧速率(针对的每秒57.8帧和针对的每秒112.2帧)可以在呈现被抑制时(如当有目的地而不是直接输出的情况下运行跟踪算法)被获得。

表3:基于跟踪性能和速度比较ThunderStruck(TS)和原始的Struck算法。下标表示Struck的支持向量预算和ThunderStruck的特征/核结合(见正文)。表现最好的方法以粗体显示。ThunderStruck算法在一个配置超线程四核英特尔i7-2600CPU,3.4GHz和一个NVIDIA GTX 680 GPU的机器上,在Ubuntu系统下运行。

六、第三方评测

因为Struck算法的原始版本已经被发表[20],庞、凌[22]和吴等人[23]已经发表了与其他先进跟踪算法进行比较的第三方基准。在本节中,我们将简单总结一下他们的一些重要发现。

6.1庞和李的提出(2013)

庞和李为了进行单目标跟踪算法跟踪性能之间的清楚比对,提出了一个方法,即通过集合其他参考文献得到的结果进行比对。他们的主要思想是利用作者进行的第三方算法之间的两两对比,同时,在前者并不太可能反映无意识的主观偏见的基础上,忽略作者自己的算法。他们从现有文献的45篇参考文献中,提取15个当前跟踪算法的成对结果(包括Struck算法)。这些跟踪算法使用了包括MILTrack[3],MTT[46]和ColorPF [47]在内的技术。

通过使用各种聚合算法(rank聚集,一种类似于网页排名的算法,Elo’srating和 Glicko’s rating)将结果单独汇总来产生针对跟踪算法的四种不同的完整排名。但排名在细节上有所不同,他们普遍一致地评估了最好和最差的跟踪算法。特别是,Struck跟踪算法在他们研究的算法中,都是排名最高的。

需要注意的是,这个研究明确排除了那些用到少于10个对比结果或者仅仅进行单一比较的文献中提到的跟踪算法:这显然排除了当前一些尚未有足够时间进行全面评估的跟踪算法。尽管如此,令人欣慰的是,使用了相当数量的各种各样不同排名方式,Struck算法一直比其他跟踪算法表现好。

6.2 吴等人的提出(2013)

吴等人进行了大规模的评价,在50个完全标注的序列上,对比了29个跟踪算法(包括SCM[48],TLD[49]和ASLA[50])。他们的主要思想是在时间和空间上都扰乱跟踪算法的初始化来提高评估的鲁棒性,并在已经被标注的序列上评估跟踪器来强调跟踪过程的变化,例如,在快速运动、闭塞或角度、照明的变化的序列上评估跟踪算法。使用各种不同的测试评估跟踪算法,在每种情况下使用位置误差(被预测的边界框在实际的边界框固定的像素阈值之内的帧,这样的帧的比例)作为精确测量,使用重叠(被预测的边界框通过一个固定的阈值重叠实际边界框的帧,这样的帧的比例)作为成功测量。这些测量计算了每种情况下一定范围的阈值。在精确度方面,使用一个20像素的固定位置误差阈值,在成功率方面,使用曲线下的面积的方法(AUC),对这些跟踪算法进行排名。

我们进行了不同类型的测试来比较跟踪算法的性能:(a)一次通过的评估(OPE),从每个序列的第一帧中,利用真实边界框初始化跟踪算法,(b)时间鲁棒性评估(TRE),在序列的另一个开始帧上初始化跟踪算法,(c)空间鲁棒性评估(SRE),转移或角度变化第一帧的真实边界框。所有三种类型的整体性能测试针对每个跟踪算法在所有可用的序列上进行;也进行了进一步测试来比较局限于特定类型的序列上时,跟踪算法的性能,例如,那些有大量的明显快速运动或闭塞的序列。

所有整体性能测试上,Struck是顶尖的跟踪算法。其中,它在OPE测试中排名第二,与第一差距很小。针对TRE和SRE整体成功测试,它在小的重叠阈值上的表现优于其他跟踪算法,但由于没有处理规模变化,在大的阈值上的表现并不那么好。针对TRE和SRE整体精确测试,在20像素阈值时,它的表现明显优于其他跟踪算法。针对SRE快速运动测试,密集采样跟踪算法表现最好,Struck算法是这类方法中表现最好的。同时,在SRE遮挡和角度变化的测试上,Struck算法也表现出色,在除了SRE对角度变化的成功测试的所有测试排名第一,在SRE对角度变化的成功测试中,它以微弱的劣势稍劣于ASLA跟踪算法。在以多种不同的角度初始化跟踪算法的SRE测试中,Struck算法依然表现出色,在8次测试中,有6次都位于第一或者第二,这是令人高兴的,因为这些实现的测试仅仅在一个单一角度下进行采样。

七、总结

在本文中,我们扩展了Struck算法,我们的自适应的基于检测的跟踪框架[20],针对GPU,列举了对于Struck算法来说,可以在不牺牲跟踪性能的情况下实现高帧速率。Struck算法基于结构化输出预测,我们已经进行了额外的实验来量化结构化学习的影响,并与一个基准分类SVM进行比较。

与之前基于分类的方法不同,我们的算法不依赖于启发式步骤来产生用于更新分类器的被标注的二进制样本,这种方法通常是跟踪过程中错误的根源。我们的方法使用一个在线结构化输出SVM学习框架,很容易地将图像特征和核合并。从学习的角度来看,我们利用了SVM理论well-studied large-margin的优点,这给噪声的概括和鲁棒性方面带来好处(在输入和输出空间上)。为了防止支持向量数量的无限增长,实现实时性能,我们为在线结构化输出SVM引入了一个预算维护。实验表明,对比其他先进的跟踪算法,我们的算法性能更加优越。我们还讨论了当前的第三方基准,Struck算法在这个基准上实现了先进性能。

Struck: Structured Output Tracking with Kernels相关推荐

  1. Learning to Adapt Structured Output Space for Semantic Segmentation

    参考  Learning to Adapt Structured Output Space for Semantic Segmentation - 云+社区 - 腾讯云 目录 摘要: 1.简介 2.相 ...

  2. 运动目标跟踪(九)--Struck跟踪原理

    <Struck:Structured Output Tracking with Kernels>是 Sam Hare, Amir Saffari, Philip H. S. Torr等人于 ...

  3. Online Object Tracking : A Benchmark

    本文转载于:roamer_nuptgczx的博文,链接:http://blog.csdn.net/roamer_nuptgczx/article/details/51379191 个人感觉这篇文章翻译 ...

  4. 【计算机视觉】跟踪算法及相关主页

    推荐一个博客:https://github.com/pbypby,主页上有: Popular repositories kcf_tracker2 c demo for kernelized corre ...

  5. matlab求kcf算法响应图_Kernelized Correlation Filters(KCF)算法

    目前在online visual tracking这个领域,已经涌现出很多的跟踪算法,比较知名如TLD,Struck,OAB,CT等等.但是能做到非常快速而且效果还不错的相对就较少了,好多算法都是刚刚 ...

  6. Siamese Network (应用篇5) :孪生网络用于跟踪 CVPR2016

    参看论文:Tao R, Gavves E, Smeulders A W, et al. Siamese Instance Search for Tracking[J]. computer vision ...

  7. 目标跟踪经典算法汇总(持续更新...)

    如题,虽然这个问题是经典目标跟踪算法,但事实上,可能我们并不需要那些曾经辉煌但已被拍在沙滩上的tracker(目标跟踪算法),而是那些即将成为经典的,或者就目前来说最好用.速度和性能都看的过去trac ...

  8. 2017目标跟踪算法综述

    转自  https://www.zhihu.com/question/26493945 作者:YaqiLYU 链接:https://www.zhihu.com/question/26493945/an ...

  9. 2016年之前目标跟踪算法总结

    作者:YaqiLYU 链接:https://www.zhihu.com/question/26493945/answer/156025576 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...

  10. 2018目标跟踪算法综述

    转自  https://www.zhihu.com/question/26493945 作者:YaqiLYU 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 相信很多来这里的人和 ...

最新文章

  1. Markov Decision Processes
  2. 微信支付在巴黎发布“智慧生活零时差”全球战略
  3. Java Web项目运行流程
  4. 热模块替换html,热模块替换启用,但不能正常工作http:// localhost:3000/__ webpack_hmr...
  5. Bug面前程序员的30种反应,戳中你了没
  6. java多线程交替打印_java实现多线程交替打印
  7. 【网络拥塞管理和避免(队列调度算法FIFO/SP/RR/WRR/DRR/MDRR/WDRR/WFQ)】
  8. 硬件基础知识---(17)如何设计一个三极管放大电路
  9. Vue 脚手架结合 SpringBoot 构建前后端分离入门项目(实现增删改查)
  10. 从零开始学 iOS 开发的15条建议
  11. java捕获异常和抛出异常_Java捕获多个异常,重新抛出异常
  12. 可局部放大图片的例子,局部放大图片,javascript局部放大图片
  13. 键盘视频鼠标(KVM)切换器基础知识
  14. ws协议绑定服务器域名,Websocket直接域名连接
  15. big类型和double类型
  16. 小米android tv,小米TV应用商店 第三方应用交互建议
  17. html怎么设置变灰,html 背景变灰
  18. COGS2259 异化多肽
  19. 超微服务器主板bios装系统,超微主板phoenixbios设置方法
  20. python 实现多核 CPU 并行计算

热门文章

  1. php中exec的用法,php exec用法详解
  2. 《SteamVR2.2.0传送机制(Teleport)=快速入门大结局》(Yanlz+Unity+XR+SteamVR+Interaction+Teleport+Valve+立钻哥哥++ok++)
  3. 遮羞布被撕,业界反思5G的冒进,运营商重视挖掘现有5G网络的潜力
  4. 室内可见光定位matlab代码,visible-led-communication 这里给出了几个可见光通信的MATLAB程序...
  5. 小白也会用的情人节表白神器
  6. python之控制台版本(电影)增删改查
  7. TomExam开源在线考试系统
  8. 数据可视化之美-动态图绘制(以Python为工具)
  9. WPF学习系列 游戏-选张图片做成9宫格拼图
  10. 高等数学笔记-乐经良老师-第六章-微分方程