看了一寒假的目标跟踪,一直想将自己学习到的内容整理归纳一下,迟迟没动笔(其实是打字,但说迟迟没打字比较难听哈哈)。如今快要开学了,决定还是积累一下。
本文主要是把目标跟踪中的一些相关要点做一个总结,并且按具体问题对一些主流的或者我阅读过觉得有价值的算法做一个简单概述。近年来各类方法层出不穷,且码字不易,无法涵盖所有的方法。此外,由于包含自己的转述和理解可能会存在错误。在今后的学习过程中会一直保持本文的更新,因此这将是一篇LTS的文章哈哈。
注:本文重点关注单目标跟踪。
References:
参考文献:
[1]统计学习方法(第2版)
[2]Understanding and Diagnosing Visual Tracking Systems
[3]Survey of Visual Object Tracking Algorithms Based on Deep Learning
[4]Handcrafted and Deep Trackers: Recent Visual Object Tracking Approaches and Trends
[5]Review of visual object tracking technology
[6]A Review of Visual Trackers and Analysis of its Application to Mobile Robot
[7]Deep Learning for Visual Tracking: A Comprehensive Survey
[8]Video Object Segmentation and Tracking: A Survey
[9]Object Tracking Benchmark
[10]The Visual Object Tracking VOT2013 challenge results
[11]The Visual Object Tracking VOT2014 challenge results
[12]The Visual Object Tracking VOT2015 challenge results
[13]The Visual Object Tracking VOT2016 challenge results
[14]The Visual Object Tracking VOT2017 challenge results
[15]The sixth Visual Object Tracking VOT2018 challenge results
[16]The Seventh Visual Object Tracking VOT2019 Challenge Results
注:参考文献重新整理中,待补全…
简介与要求
目标跟踪是利用一个视频或图像序列的上下文信息,对目标的外观和运动信息进行建模,从而对目标运动状态进行预测并标定目标位置的一种技术。一般是在第一帧给出一个框,框中的物体就是我们需要在后续帧中用算法进行跟踪的对象。就目前的单目标跟踪而言,一般有如下要求:
monocular:我们的视频或者图片序列是仅从一个摄像头中获得的,也就是不考虑比如在城市道路场景中跨摄像头对目标跟踪的复杂应用。
model-free:没有任何先验,也就是在获取第一帧的框之前我们并不知道会框出什么物体,也不需要在之前对初始框中的物体进行建模。
single-target:只追踪第一帧框出的那一个物体,也就是除了那个物体之外所有的物体都是back ground。
casual/real-time:目标跟踪是一个在线过程,也就是不能提前获取未来的框对目标进行跟踪。
short-term:没有重检测,也就是目标跟丢了就丢了。
long-term:可以在跟丢之后重检测,这类算法一般除了跟踪之外还需要有检测的功能。
下面是目标跟踪流程的伪代码表示(不一定普适,比如有些算法不在线更新,但符合基本的过程)。
问题及挑战
通俗来讲,目标跟踪的最终目标就是要又快又准。“快”主要表现在计算量小和所需的存储空间小,“准”就是预测出的bounding box要尽可能地接近ground truth。除了上面两个基本需求(也可以说是为了更好地达到这两个基本需求),近年来的算法主要针对目标跟踪中的一些挑战进行突破,从而更好地解决某些问题之后达到更好的整体效果。
总的来说,目标跟踪的主要问题有如下这些:遮挡(occlusion)、背景干扰(background clutter)、光照变化(illumination changes)、尺度变化(scale variation)、低分辨率(low resolution)、快速移动(fast motion)、超出画面(out of view)、运动模糊(motion blur)、形变(deformation)、旋转(rotation)等。
OTB数据集依据各种问题对其中的序列进行了一个划分,这对之后针对性的研究提供了重要的参考。
生成式与判别式
利用特征判断候选样本是否为跟踪目标,可将目标跟踪的模型分为生成式模型和判别式模型,本小节就介绍一下什么是生成式模型和判别式模型。
机器学习
我们首先看看在机器学习中生成式模型和判别式模型定义的一般区分。
一般而言,机器学习的任务就是学习一个模型,应用这一个模型,对给定的输入预测相应的输出。输出的一般形式可以是决策函数,也可以是条件概率分布。
对于生成式模型,我们需要通过数据学习输入X与输出Y之间的生成关系(比如联合概率分布),也就是认为X和Y都是随机变量。典型的生成式模型有朴素贝叶斯模型、隐马尔可夫模型(HMM)、高斯混合模型(GMM)等。
对于判别式模型,我们只需要直接学习决策函数或者条件概率分布,只关心对给定的输入X我们需要输出怎么样的Y,也就是不考虑X是否是随机变量。典型的判别式模型包括k近邻、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机(SVM)、提升方法和条件随机场等。此外神经网络也属于判别式模型。
相较而言,生成式模型体现了更多的信息,不过这还是因条件而异的,不同情况不同任务两种方法各有优缺点。
目标跟踪
在目标跟踪领域,生成式模型通过提取目标特征来构建表观模型,然后在图像中搜索与模型最匹配的区域作为跟踪结果。不论采用全局特征还是局部特征,生成式模型的本质是在目标表示的高维空间中,找到与目标模型最相邻的候选目标作为当前估计。此类方法的缺陷在于只关注目标信息,而忽略了背景信息。
与生成式模型不同的是,判别式模型同时考虑了目标和背景信息。它将跟踪问题看做二分类或者回归问题,其目的是寻找一个判别函数,将目标从背景中分离出来,从而实现对目标的跟踪。
一般来说,在目标跟踪领域,判别式充分利用了目标前景和背景信息,能更加有效地区分出目标,比单单运用目标区域特征进行模板匹配的生成式模型在复杂环境中的鲁棒性更强。
算法导图
首先是参考文献[6]中的一个树状导图。
下图是中科院博士王强(github名为foolwood…呃不得不说这名字取得真谦虚)在github上上总结的Benchmark Results中的一个思维导图,同一个链接下还包括了各项成果的paper及code,值得收藏一下。
补充:这里再推荐一个在github上维护的Tracking Benchmark for Correlation Filters,按每篇论文针对或者解决的问题来分类,比较清楚,可以收藏一下。但这个仓库似乎在2017年后就没有更新了,可能是深度学习的进入或者说相关滤波系列和深度学习融合使得独立的相关滤波算法不那么突出了。
下图是浙大硕士王蒙蒙极市平台做分享的时候所用的一张思维导图,归纳得也比较清晰。
注:后两张导图中都把历年benchmark的冠军工作作了标注。
对比几张思维导图可以发现,他们都把主流算法分成了相关滤波、深度学习两个分支(或者说是基于handcrafted特征的算法和基于CNN提取特征的算法,其实近年已有所融合),此外还有一些基于强化学习、结构化SVM的模型。其实,目标跟踪算得上是计算机视觉领域中深度学习涉足较晚的一个方向,其主要原因是目标跟踪相关数据集的标注花费较大。此外,相关滤波的速度优势,也就是实时性是十分引人注目的,但在应付当前目标跟踪中的各种挑战、问题时,相关滤波的鲁棒性还是落后于深度学习方法的。
在下一节,我将结合上面几张导图,对历年尤其是近几年的算法做一个简单的整理,以方便日后的学习与研究。
各类算法的梳理与简述
本节按年份顺序对各个算法进行一个简单地梳理,其中各个算法的年份以论文发表的年份或者参加benchmark的年份为依据,可能会存在1年的区别,但影响不大。其中各年的各个算法根据算法的效果和影响大致上呈递减排序。对2013以后的算法,我拷贝了VOT challenge的结果排名,以供参照。
注意:如果你对计算机视觉或者说目标跟踪方面的一些基础方法、概念和经典算法已经有些了解,可以跳过本条建议。
考虑到在后文频繁地插入链接不太好,我就在此先推荐一下我博客的几个标签目标跟踪、计算机视觉、深度学习、机器学习以及线性代数,其中的文章包含了一部分接下来要提到的概念和算法,可以事先浏览一下。当你在阅读时对相关概念、方法感到迷惑或者想进一步了解,博客内置的搜索功能或许能够为你提供帮助。
1981
LK Tracker
LK Tracker应该是最早的目标跟踪工作,它使用了光流的概念,如下图所示,不同颜色表示光流不同的方向,颜色的深浅表示运动的速度。
LK Tracker假定目标灰度在短时间内保持不变,同时目标邻域内的速度向量场变化缓慢。由于光流方程包含坐标x,y和时间t共三个未知数,其中时间变化dt已知而坐标变化dx和dy未知,一个方程两个未知数无法求解,因此作者假定相邻的点它们的光流具有空间一致性,即实际场景中邻近的点投影到图像上也是邻近点,且邻近点速度一致,这样就可以求解方程组了。下图是求解之后的光流向量,其中绿色箭头的方向表示运动方向,线段长度表示运动速度的大小。
光流的计算非常简单也非常快,而且由于提出得很早,各种库都有实现好的轮子可以轻松调用,但是它的鲁棒性不好,基本上只能对平移且外观不变的物体进行跟踪。
1994
KLT
KLT是一种生成式方法,也是使用了光流特征。在此基础上,作者使用了匹配角点的方法,也就是寻找边角处、纹理处等易辨识的地方计算光流来进行追踪。
1998
Condensation
Condensation(Conditional density propagation)条件密度传播使用了原始的外观作为主要特征来描述目标,采用了粒子滤波,这是一种非参数化滤波方法,属于生成式模型。它定义了一个粒子样本集,该样本集描述了每个粒子的坐标、运动速度、高和宽、尺度变化等状态;此外,通过一个状态转移矩阵和噪声定义系统状态方程。基于蒙特卡洛方法,粒子滤波将贝叶斯滤波方法中的积分运算转化为粒子采样求样本均值问题,通过对状态空间的粒子的随机采样来近似求解后验概率。
2002
Mean Shift
Mean Shift采用均值漂移作为搜索策略,这是一种无参概率估计方法,该方法利用图像特征直方图构造空间平滑的概率密度函数,通过沿着概率密度函数的梯度方向迭代,搜索函数局部最大值。在当时成为了常用的视觉跟踪系统的目标搜索方法,简单易实现,但鲁棒性较低。
2003
Feature Selection
Feature Selection利用线性判别分析自适应地选择对当前背景和目标最具鉴别性的颜色特征,从而分离出目标。
2006
Boosting
Boosting结合Haar特征和在线Boosting算法对目标进行跟踪。Boosting算法的基本思路就是首先均匀地初始化训练集中各个样本的权重,然后初始化N个弱分类器,通过训练集进行训练。第一次训练时,对第一个弱分类器,通过它在训练集上的错误率确定它的权重,同时更新训练集的样本权重(增加分类错误的样本的权重),然后,用新的训练集训练第二个弱分类器,计算它的权重并更新训练集的权重。如此迭代,将得到的分类器与它们的权重相乘,累加起来便得到一个强分类器。
上面所述是针对离线训练的,当在线训练(比如跟踪)时,为了满足实时性,就必须减少样本数量。Boosting的做法是对每一帧采集的样本仅使用一次便丢弃,然后进入下一帧采用新的样本。
以上就是在线Boosting算法的简单理解,具体而言,Boosting这里选择的弱分类器其实是Haar特征。由于Haar特征其实是一组特征,于是就需要Boosting算法根据每种Haar特征的响应来从Haar特征池中选出一个子集用于构造强分类器。
2008
IVT
IVT渐进地学习一个低维的子空间表示来自适应目标物体的变化,它将以前检测到的目标乘以遗忘因子作为样本在线更新特征空间的基而无需大量的标注样本。
2010
MOSSE
MOSSE(Minimum Output Sum of Squared Error)使用相关滤波来做目标跟踪(不是第一个,但可以看作前期的一个代表),其速度能够达到600多帧每秒,但是效果一般,这主要是因为它只使用了简单的raw pixel特征。
相比之前的算法,MOSSE能够形成更加明确的峰值,减少了漂移;此外,MOSSE可以在线更新,同时还采用了PSR来检测遮挡或者跟丢的情况,从而决定是否需要停止更新。
值得一提的是,MOSSE在做相关操作之前,对每张图都进行了减去平均值的处理,这有利于淡化背景对相关操作的影响。另外假如发生光照变化的话,减去均值也有利于减小这种变化的影响。此外要注意,输出的特征应乘以汉宁窗(一种余弦窗),用于确定搜索区域(也就是不为0的区域),且有利于突出中心的特征。
TLD
TLD(Tracking Learning Detection)主要针对long-term tracking,在跟踪的同时全局检测。它由三部分组成:跟踪模块、检测模块、学习模块。
跟踪模块观察帧与帧之间的目标的动向。作者采用了光流来跟踪,此外还提出了一种判断跟踪失效的算法,由于光流跟踪时选取的若干特征点,当其中某一个特征点的位移与所有特征点位移的中值之差过大时,也就是某个特征点离跟踪模块认为的目标中心位置很远时,就认为跟踪失效。作者还通过相似度和错误匹配度来对特征点进行筛选。
检测模块把每张图看成独立的,然后对单张图片进行目标检测定位。作者使用了方差检测器、随机森林和最近邻分类器来对目标做检测。
学习模块对根据跟踪模块的结果对检测模块的错误进行评估,当置信度较低时,重新组织正负样本对随机深林的后验概率和最近邻分类器的在线模板进行更新,从而避免以后出现类似错误。
TLD与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被跟踪过程中发生的形变、部分遮挡等问题。同时,通过一种改进的在线学习机制不断更新跟踪模块的“显著特征点”和检测模块的目标模型及相关参数,从而使得跟踪能够自适应,效果较之前更加稳定、可靠。
2011
FoT
FoT(Flock of Trackers)首先在目标上抓取多个interesting point并分别放入多个cell中,之后的跟踪就是检测并补偿每个cell中interesting point的偏动量,使其回到中间。如果interesting point超出cell,则让它重新恢复到cell的中点。
此外,FoT还提出了两种简单有效的failure预测方法:neighbourhood consistency predictor(Nh)和Markov predictor(Mp)。Nh的基本思想是认为正确的跟踪情况下每个local tracker给出的位移应当与它相邻的tracker相一致,而Mp主要是针对时域一致性,认为前几帧表现较好的local tracker在当前帧也会有较好的表现。FoT基于这些failure预测方法来控制模型的更新。
Struck
Struck的主要贡献是引入了结构化SVM。考虑到传统的跟踪算法将跟踪问题转化为一个分类问题,并通过在线学习技术更新目标模型。然而,为了达到更新的目的,通常需要将一些预估计的目标位置作为已知类别的训练样本,这些分类样本并不一定与实际目标一致,因此难以实现最佳的分类效果。
结合上述考虑,Struck利用了结构化SVM直接输出跟踪结果,避免了中间分类环节,这使得在当时效果有明显的提升。同时,为了保证实时性,Struck还引入了阈值机制,防止跟踪过程中支持向量的过增长。
L1 Tracker
L1 Tracker是第一个将稀疏编码引入目标跟踪问题中的算法。它把跟踪看做一个稀疏近似问题,主要是用第一帧和最近几帧得到的图像(特征)作为字典,通过求解L1范数最小化问题,实现对目标的跟踪。
MIL
MIL采用了多示例学习的方法而不是传统的监督学习(即由原本单独标记的示例变成一组示例,当且仅当所有的示例都判定为负才认为是负,只要有一个示例判定为正则整组都判定为正),对于不精准的tracker和错误标注的训练样本有鲁棒性的提升。
2012
CSK
CSK也称为核相关滤波算法,作者针对MOSSE做出了一些改进,作者认为循环移位能模拟当前正样本的所有的转换版本(除边界以外),因此采用循环移位进行密集采样,并通过核函数将低维线性空间映射到高维空间,提高了相关滤波器的鲁棒性。这里循环移位后的样本匹配可以理解为如果某个候选区域与某一个移位样本的相关操作响应较高,那么就可以理解为物体的移动和该样本移位的方式一致,从而对下一帧目标位置进行定位。
随后的工作主要从特征选择、尺度估计、正则化等方面对该算法进行改进和提高。关于循环移位和线性、非线性的核函数计算,我在之前的文章中做了一些分析,感兴趣的话可以看看。
DF
DF发现之前在图像中寻找目标的梯度下降方法首先会模糊图像来平滑目标方程,这就会严重损害目标的位置信息。因此作者提出了对每一个像素点设置多个通道,在每个通道进行卷积,这种方法同样也能平滑目标方程但不会严重损害目标的位置信息。其实这就是之后的CNN能做到的,在当时应该也算是一种创新。
CT
CT(Compressive Tracking)是一种基于压缩感知的高效跟踪算法。和一般的判别式模型架构一样,CT首先利用符合压缩感知RIP条件的随机感知矩阵对图像特征进行降维,使得到的低维信号可以完全保持高维信号的特性并可以完全重建,然后在降维后的特征上,在感知空间下采用朴素贝叶斯分类器进行分类。另外,CT在每一帧通过在线学习更新分类器,在线学习的样本来自通过相同的稀疏感知矩阵提取的前景目标和背景的特征。
ORIA
ORIA假设前一帧是完美的,于是把跟踪问题视作将下一帧图像与上一帧进行对齐,也就是一串连续的凸优化问题。
2013
下面是VOT2013的排名结果,其中Experiment 1是在所有序列上使用ground truth初始化的实验结果,Experiment 2使用含噪声(10%的尺寸扰动)的ground truth,Experiment 3使用灰度图像。
PLT
PLT通过一个固定大小的、基于二值特征向量的线性分类器对每一张图像做分类,得分最高即为目标。作者利用一个稀疏的在线结构化SVM来选出一个小的判别特征集合。在训练SVM时,考虑到在bounding box内的像素不一定都属于物体,作者使用了一种基于概率的掩模来分配权重,然后计算初始的结构化SVM,去除分值最小的特征。由于特征向量的二值性,该线性分类器可以作为查找表用于快速检测。
EDF
EDF是DF的加强版,在DF的基础上探索了每一个通道之间的联系。
LGT
LGT针对模型何时更新与更新哪些部分的问题,考虑到目标模型的整体更新会损失部分有用信息和固定的分块不利于应对目标的变化,借鉴了之前将目标有结构地分块且动态删减的思想,提出了一种由patch组成的集合构成的、用于精确定位的local layer和颜色、移位、形状三个特性组成的、用于指导增加patch的global layer。
对于新输入的一帧图像,LGT的处理流程如下:
- 首先使用卡尔曼滤波器结合近似匀速模型来确定目标的位置。接下来几步是对位置进行微调。
- 对于每一个patch,作者用一个统一的仿射变换和一个独立的微小扰动在5维空间(位置2维+尺度2维+旋转1维)定义其对于初始patch的变换。这里的$\widehat{x}$指的是初始patch。作者把$A_{t}^{G}$和$\Delta _{t}$中的参数看作正态分布的。先使用交叉熵方法反复迭代寻找最优解,当协方差矩阵的行列式小于0.1(各分量相关性很强)时停止迭代,随后把仿射变换矩阵的参数(也就是学到的正态分布的均值和方差)固定并用于所有的patch。接下来对每一个patch,用同样的交叉熵方法迭代,得到每一个patch的微小扰动的均值和方差。
- 结合visual consistency和drift from majority两种估计,更新每一个patch在当前帧的权重,并与前一帧的权重加权求和来确定最终的权重。这里的权重决定了每一个patch在最终所有patch混合决策时的重要性。
- 利用上面的patch重新计算之前卡尔曼滤波器的结果,确定目标的位置。
- 接着进行local layer中patch的删减与增补。对于权重小于阈值的patch作删去处理;对距离很近的两个patch进行合并,合并后产生的patch的所有参数设为合并前两个patch参数的平均。使用剩下的patch更新global layer,然后用更新后的global layer决定是否以及如何增加新的patch。为了防止突然过度增加patch,作者对增加的样本数施加上限限制,并利用加权的方式平滑调整样本容量。
- 进入下一帧。
LGT++
LGT++是LGT的改进版。在LGT的基础上,LGT++增加了memory、failure detection和用粒子滤波代替卡尔曼滤波的recovery机制。此外对尺度变化和背景干扰也做出了改进。
DLT
DLT是最早的基于深度学习的算法(当时AlexNet刚刚被提出),它采用了堆叠去噪自编码器网络,把跟踪视为一个分类问题,直接利用80 Million Tiny Images数据集上的预训练模型提取深度特征,这种强行task转换的训练方法存在缺陷,但在当时是个进步。
STC
STC(Spatio-Temporal Context)通过贝叶斯框架目标时间、空间的上下文信息来建模,利用得到的关系结合生物视觉系统中的注意力特性来生成confidence map来预测目标位置。由于上下文信息建模和之后的预测都采用了快速傅里叶变换,因此算法的速度很快。
文章主要举了两个例子来说明空间信息的重要性。当目标物体被部分或者完全遮挡时,周围的信息能帮助定位被遮挡的目标(假设摄像头不移动),也就是说可以利用空间的距离信息;此外,如果目标内部的两个部分比较相似(比如人的一对眼睛),就比较容易发生偏移,而如果这时恰好这两个部分的距离信息相似(距离目标中心长度相同),那就需要引入相对位置也就是方向信息来判断。
此外,考虑到生物视觉系统中的注意力特性,作者增加了一项权重函数来构成先验,该函数根据距离目标位置的远近来定义。
作者还对confidence map的参数进行了讨论,认为置信度在空间上的分布不能太平滑(增加位置模糊不确定性),也不能太尖锐(导致过拟合)。
作者认为目标的形态与近几帧有较强的关联,由此设计了时域信息模型。文中提到的时域滤波器可被证明是低通的,也就是可以滤去一定的噪声。此外,STC还设计了尺度更新方法,最终下一帧的尺度是前n帧估计尺度的均值。
LT-FLO
LT-FLO主要针对的是缺少纹理特征的目标,使用边界点来代替在目标上采集点来做跟踪。此外作者还提出了一种基于边界梯度稳定性的failure检测机制。
GSDT
GSDT提出了一种采集正负样本进行图嵌入的判别式模型。作者使用了基于图结构的分类器而不是生成一个子空间。此外GSDT还设计了一种新的图结构来区分类内的不同和样本的内在结构。
SCTT
SCTT使用了treelets降维方法,由于仅选取较高置信度的样本,相对于PCA只需要更少的样本且对噪声有更好的鲁棒性。
CCMS
CCMS(Color Correspondences Mean-Shift)用之前提到的Mean Shift方法对目标候选与目标模型、目标候选与背景模型在每种颜色(也就是直方图中每个bin)中计算相似性,反复迭代,直到收敛或者达到最大迭代次数为止,如此来进行运动估计。
Matrioska
Matrioska基于特征点提取的方法(ORB、FREAK、BRISK、SURF等),考虑到目标物体的外观变化和有利于增强模型表现力的负样本提取,使用了增枝和剪枝的方式来对目标模型进行更新。
AIF
AIF(adaptive integrated feature)提出了一种评估特征稳定性的方法,并根据不同特征的稳定性动态地分配权重。
HT
HT借鉴霍夫森林,也就是霍夫变换结合随机森林,相比一般的随机森林增加了位移信息。HT将目标分割成多个图像块,这些图像块含有它们各自偏离目标中心的向量$d$,对每个图像块提取特征描述子,这样就构成了正样本,即$y=1$;在图像的其他区域也提取同样尺寸的图像块,也提取特征描述子构成负样本,即$y=0$,注意负样本的偏移向量$d=0$。由此训练生成树,再由树构成森林。
在跟踪时,将每个图像块输入训练好的森林里,最终会落到森林的每棵树的一个叶节点上,这就得到了该图像块相对目标中心的偏移向量$d$以及概率$p$,随后将每棵树上的结果加权平均,得到了该图像块的结果。最后将所有的目标分割出的图像块的结果组合起来,得到目标预测结果。
HT的一个好处就是可以调整bounding box的长宽比,此外作者认为这对非刚性或者铰接的目标也有很大好处。
STMT
STMT把目标跟踪分成镜头运动估计和目标运动估计两个阶段,先估计摄像头的运动并进行对齐,然后再定位下一帧的目标位置。
ASAM
ASAM(Adaptive Sparse Appearance Model)用一个样本集来表示目标的各种变化,并且基于判别式和生成式的稀疏表示,使用了第一帧、后续帧两阶段的在线跟踪算法。
2014
下面是VOT2014的排名结果,这里的A表示accuracy,R表示robustness。
DSST
DSST主要考虑了尺度缩放的问题。它将目标跟踪看成位置变化和尺度变化两个独立问题,提出了一个高、宽、尺度数三维的滤波器,使用先计算平移位置再聚集尺度的“两步”法,即训练了两个滤波器,首先训练位置平移相关滤波器以检测目标中心平移,然后训练尺度相关滤波器来检测目标的尺度变化。
CN
CN(Color Naming)考虑到在遇到光照变化、形变、部分遮挡、背景干扰等问题时,颜色特征相比灰度特征能提供更丰富的信息以取得更好的效果,引入了颜色特征来扩展CSK,它将目标RGB(红绿蓝)三维空间的颜色特征映射为黑、蓝、棕、灰、绿、橙、粉、紫、红、白和黄11维空间的颜色特征的多通道颜色特征,后又降维至2维以保证实时性。Color Naming较RGB三原色特征更符合人类的感觉,对目标的表征能力更强,而且具有一定的光学不变性。
SAMF
SAMF也考虑了尺度问题,思路比较简单,采用k个尺度去采样,由于核相关操作的点乘需要固定尺度的输入,因此对采集到的样本作双线性插值成为固定尺度,然后再做相关操作。在特征方面,SAMF发现HOG和Color Naming有互补作用,考虑到和相关操作仅包含点乘和向量范数的计算使得多通道很容易被引入,因此使用了HOG和Color Naming多通道特征。
KCF
KCF跟CSK是同一个团队提出的,它跟CSK的区别是就是作者对循环性质进行了完整的理论推导,引入HOG特征并提供了一种把多通道特征融合进相关滤波框架的方法,对CSK作了进一步的完善,是一个具有里程碑意义的工作。算法的详解和一些数学理论可以看看我之前的文章。
DCF
DCF与KCF出自同一篇paper,不同的是KCF使用的是高斯核,DCF使用的是线性核。
注意:这里的DCF(Dual Correlation Filter)和之后一些文章中提到的DCF(Discriminative Correlation Filter)是两个不同的概念,请注意,别搞错了。
FCT
FCT(Fast Compressive Tracking)和CT一样,也是使用了压缩感知,主打速度。相比之前,FCT提出了一种由粗到精的搜索策略,而不是穷尽搜索。首先在一个较大的搜索半径内选择一个较大的搜索步长,得到一个粗糙的位置,然后以该位置为中心,在一个较小的搜索范围内,以一个较小的搜索步长进行搜索,最后得到跟踪目标的位置,这样就能在不降低最终精度的前提下加速寻找过程。由于可证明CT特征具有尺度不变特性,FCT在采集候选区域时增加了尺度因子,即在同一位置采集三个尺度的候选区域,从而得到当前帧的尺度。此外,作者采用了每5帧更新一次尺度的策略。
CMT
CMT用成对的特征点之间角度的变化来判断目标的旋转情况,此外还用特征点投票的方式来确定目标的位置。为了避免尺度变化引起的投票不准,也就是从特征点出发指向目标位置的投票向量越过了目标中心或者没达到目标中心,作者用欧氏空间和原图像空间之间各对特征点之间距离的比值来进行修正。基于投票出的目标位置的聚类,作者还给出了一种一致性的判别方法,将聚集最多数特征点的投票位置视为一致性聚类,并将投票至其他位置的特征点视为错误从而移除。
2015
下面是VOT2015的排名结果。
SO-DLT
SO-DLT针对DLT的缺陷进行改进,使得CNN更加适用于目标跟踪。由于目标跟踪的目的是将物体从背景中分离出来而不是全图识别,DLT的训练方法和标签化输出就不是很合适了。
但是,由于当时跟踪方向标注数据的匮乏,作者还是不得不使用ImageNet图像检测数据集来进行预训练,事实证明这是有效的,因为目标检测和目标跟踪两个不同的task中存在一样的共性信息。不同于标签化的单个数值输出,SO-DLT输出的是一个50x50的像素级的概率图。
由于上述训练方法训练的是CNN从非物体中提取出物体的能力,因此在实际跟踪接收到第一帧时,还需根据目标对网络进行微调,否则会跟踪出视频或者图像序列中所有的无论是目标与否的物体。
类似DSST,SO-DLT采用的是先预测目标中心位置,然后再从小到大确定尺度的策略,如若扩展到预设的最大尺度来检测的概率图依旧达不到要求,则认为已经跟丢目标。
此外,为了提升鲁棒性,作者采用了两个CNN网络共同决策而以不同方式更新的策略。两个网络分别针对的是short-term和long-term。针对short-term的网络在负样本的概率图响应和超过一定阈值时进行更新,为的是防止负样本与目标响应近似而导致漂移;针对long-term的网络在当前帧预测结果的置信度达到一定水平以上时才进行更新,因为此时可认为框出的目标较为可信。
每次更新时需要采集正负样本,SO-DLT对正负样本的提取方法比较简单,在目标位置及周围形成一个类似九宫格的区域,在中间格用四种尺度提取正样本,对周围的8格采集负样本。
MDNet
MDNet设计了一个轻量级的小型网络学习卷积特征表示目标。作者提出了一个多域的网络框架,将一个视频序列视为一个域,其中共享的部分用来学习目标的特征表达,独立的全连接层则用于学习针对特定视频序列的softmax分类。
在离线训练时,针对每个视频序列构建一个新的检测分支进行训练,而特征提取网络是共享的。这样特征提取网络可以学习到通用性更强的与域无关的特征。
在跟踪时,保留并固定特征提取网络,针对跟踪序列构建一个新的分支检测部分,用第1帧样本在线训练检测部分之后再利用跟踪结果生成正负样本来微调检测分支。
此外,MDNet在训练时还采用了难例挖掘技术,随着训练的进行增大样本的分类难度。
SRDCF
SRDCF主要考虑到若仅使用单纯的相关滤波,可能会存在边界效应,也就是相关滤波采用循环移位采样导致当目标移位到边缘时会被分割开,此时得到的样本中就没有完整的目标图像从而失去效果。
于是,作者采用了大的采样区域,用两倍区域进行循环移位,这就保证了无论如何移位,获得的样本中都能有一个完整的目标存在。
然而,由于上述移位方式会导致背景信息被夹在横向以及纵向的两个样本之间而出现在图片的中间区域,这会导致模型判别力的退化。因此作者在移位之前先在滤波器系数上加入权重约束(类似于惩罚项):越靠近边缘权重越大,越靠近中心权重越小。这就使得滤波器系数主要集中在中心区域,从而让背景信息的影响没有那么明显。尽管作者采用了埃尔米特矩阵的共轭对称性来提升计算量,但是由于SRDCF破坏了原本闭式解的结构使得优化问题只能通过迭代求解,因此速度比较缓慢。
DeepSRDCF
DeepSRDCF在SRDCF的基础上,将handcrafted的特征换为CNN的特征,关注点也在解决边界效应。作者使用DCF作为网络的最后一层,也就是对之前卷积网络输出的每一个通道的CNN特征都训练一个滤波器用于分类。作者还对不同的特征进行了实验,说明了CNN特征在解决跟踪的问题采取底层的特征效果会比较好(DeepSRDCF仅用了PCA降维处理的第一层),说明了跟踪问题并不需要太高的语义信息。
HCF
HCF的主要贡献是把相关滤波中的HOG特征换成了深度特征,它使用的是VGG的3、4、5三个层来提取特征,针对每层CNN训练一个过滤器,并且按照从深到浅的顺序使用相关滤波,然后利用深层得到的结果来引导浅层从而减少搜索空间。
FCNT
FCNT较早地利用CNN网络底层和顶层不同的表达效果来做跟踪。不同于以往的工作把CNN看成一个黑盒而不关注不同层的表现,FCNT关注了不同层的功能,即发现:顶层的CNN layer编码了更多的关于语义特征的信息并且可以作为类别检测器;而底层的CNN layer关注了更多局部特征,这有助于将目标从目标中分离出来。这个发现在之后的许多工作中也得到了应用和体现。如下图所示,这里的a图表示的是ground truth,b图表示的是使用VGG的conv4-3,也就是第10层产生的热力图,c图是通过conv5-3也就是第13层产生的热力图。
可以看到,较低维的CNN layer(conv4-3)能够更精准地表示目标的细粒度信息,而较高维的CNN layer(conv5-3)热力图显示较模糊,但对同类别的人也做出了响应。这就是说,顶层缺少类内特征区分,对类间识别比较好,更适合作语义分割;底层则反之,能够更好地表达目标的类内特征和位置信息。
基于不同层(顶层和底层)之间提取特征的不同,作者提出了一种新的tracking方法,利用两种特征相互补充辅助,来处理剧烈的外观变化(顶层特征发挥的作用)和区分目标本身(底层特征发挥的作用)。由于feature map本身是有内在结构的,有很多的feature map对目标的表达其实并没有起到作用,因此作者设计了一种方法来自动选择高维CNN(GNet)或者低维CNN(SNet)上的feature map,同时忽略另一个feature map和噪声。在线跟踪时,两个网络一起跟踪,采用不同的更新策略,并在不同的情况下选择不同的网络输出来进行预测。
顺便提一下,为了简化学习任务,降低模型复杂度,作者采用了稀疏表示的方法。
关于FCNT的一些相关概念和具体按步骤的细节实现,可以参考一下我之前写的文章。
LCT
LCT主要针对的是long-term tracking的问题。作者配置了一个detector,用于跟丢之后快速重检测。LCT用了两个滤波器,一个是用于平移估算的$R_{c}$,使用padding并施加汉宁窗(一种余弦窗),结合了FHOG和一些其他的特征;另一个是用于尺度估计的$R_{t}$,不使用padding和汉宁窗,使用HOG特征,此外$R_{t}$还用于检测置信度,用来决定是否更新模型和是否重检测。
CCT
CCT借鉴KCF中kernel trick的特性和DSST中将定位和尺度估计两步分离的思想,对DSST只利用本来的特征空间表征目标的不足进行改进,在核特征空间对目标进行表征并用尺度因子扩展KCF的核相关滤波器,也就是为了保证计算效率和连贯性,利用尺度因子将每一帧目标尺度都统一为初始帧的目标尺度,然后使用核相关滤波器进行位置估计。然后,通过和DSST一样的方式再进行尺度估计。
为了应对漂移的问题,CCT使用了一个在线CUR滤波器。CUR矩阵分解可以近似的表示原矩阵A,其中C是A的列而R是A的行,两者通过一种固定的方式从A中随机采样形成,这既保证了A的内在结构,可以反映A的低秩属性,也可以看作一种映射,即将过去的目标表征矩阵投影到一个可被证明具有误差上界的子空间。此外,作者还引入了一个基于失败检测的自适应学习率调整方法。
CFLB
CFLB讨论了循环移位带来的边界效应的问题,提出了在目标外围扩大尺寸来进行循环移位的方法,使得有效样本的比例大大提高。具体来说,就是给原来的循环移位样本左乘一个列数远大于行数的掩模矩阵。此外,由于扩大尺寸后部分参数要在空间域而不是频域计算会导致效率降低,作者利用了增广拉格朗日方法(即在拉格朗日方法的基础上添加了二次惩罚项,从而使得转换后的问题能够更容易求解,不至于因为条件数变大不好求)来解决这个问题。
KCFDP
KCFDP借鉴了目标检测中detection proposal的思想(主要用于减少计算和提高质量),来解决之前DCF系列算法中的尺度和长宽比变化的问题。对每一帧,KCFDP首先用KCF对上一帧输入(准确的说是之前每一帧的加权累积)作操作,得到当前帧的位置和响应分数$v$;随后利用EdgeBoxes(一种detection proposal方法)在KCF预测的位置周围搜寻proposal,选取其中的前200个,并排除其中与之前KCF得出的预测目标IoU大于0.9(认为结果一样,无需考虑)或者小于0.6(认为误判,不是目标);最后,在剩余的proposal中,选择得分最高的proposal,与之前的响应分数$v$作比较:若小于$v$,则把KCF的结果作为预测结果且不更新尺度和长宽比(KCF算法本身具有该功能);若大于$v$,则把该proposal作为预测结果,并利用该proposal的尺度和长宽比来更新目标的参数。
HCFT
HCFT构造了一种阶梯式的深层至浅层由粗到细的定位方法,结合深层网络的语义信息和浅层网络的高分辨率位置信息,其网络结构如下(和FPN很像)。
为了保持分辨率相同,作者对池化后的深层输出再进行双线性插值以复原原来的分辨率。假设$l$层最大响应处的坐标为$(\widehat{m},\widehat{n})$,HCFT通过以下式子来确定$l-1$层目标的位置。
第二行的约束是为了浅层细粒度的位置需保持在深层粗粒度的位置附近,这样便完成了由粗到细的定位方法。
此外,在训练过程中需要采集正负样本,由于正负样本边界难以区分的模糊性和二值(也就是0,1标注)的正负样本的绝对性导致一点微小的正负样本区别就会导致drift。为此,作者将训练样本的标注回归到高斯方程的平滑标签。
MUSTer
MUSTer模拟了人脑的记忆过程,类似于LSTM那样分成short-term和long-term两种memory,使用了相关滤波(short-term)和特征点检测(short-term+long-term),最后根据两种记忆形式的提供的输出来决策和进行滤波器的更新。
人脑的记忆分为感官、短时记忆、长时记忆三个阶段,MUSTer的设计基本采用了这样的三个step,如下图所示。
MUSTer的结构比较“纵横交错”,下面我对一些比较重要的部分做一个概述。
短时记忆和长时记忆都由特征点的集合构成。特征点数据集包括目标和背景两种样本,其中背景主要是用于遮挡的判断,即当位于bounding box中的背景特征点与目标特征点的比例超过一定值时,认为此时发生了遮挡。
对于特征点的匹配,作者采用了最近邻方法,在欧几里得空间根据余弦相似度(也就是两个向量余弦夹角的大小,角度越小,余弦值越大,相似度越高)来计算匹配置信度。为了判别离群值(outlier),还需计算第二近邻的相似度,如果第一近邻的相似度比上第二近邻的比值小于某个阈值,就说明该处特征点比较集中应该不是离群值。
长时记忆模块通过RANSAC估计的一个版本——MLESAC(引入似然度)来决定目标的状态,从而与相关滤波的输出结合。
短时记忆在每一帧都进行更新,若根据前面所说的方法判定为遮挡,则清空短时记忆;若此时并没有判定为遮挡,则用RANSAC估计输出的内围值(inlier)来替换之前的短时记忆。此外,为了避免多余的特征点出现,作者用网格划分目标template并根据相对位置分配ID,若出现重复的ID,则认为两者中之前的特征点是多余的。
长时记忆只在判断跟踪成功和无遮挡时进行更新。作者认为匹配失败的特征点能够表示目标发生变化的重要信息,因此长时记忆更新是针对匹配失败的点进行的,将匹配失败且位于bounding box外面的点移入背景数据集,而将匹配失败且位于bounding box内部的点移入目标数据集。模拟人脑,长时记忆采用的是一种对数形式下降的遗忘曲线。
RPAC
RPAC将相关滤波器应用于分块跟踪,并且借鉴了粒子滤波中的贝叶斯估计的思想,在提升鲁棒性的同时保证了速度。
作者对每一区块(part)都使用一个独立的相关滤波器,使用了PSR(体现置信度)和时域顺滑程度(用于判断遮挡等情况)两者结合来分配每一区块的权重,同时仅当这个权重大于阈值时才更新对应的滤波器以达到自适应更新的效果。这里每一个区块的输出都是一个confidence map,最后需要根据权重和相对位置组成一个大的confidence map用于接下来的预测。
为了防止部分区块漂移的问题出现,作者采用了贝叶斯估计框架,即选择使得状态(一组仿射运动参数)先验值最大的候选区域作为结果,考虑到多个confidence map之间重叠的部分直接求和会出现叠加的较大值而影响概率估计,作者根据每一个区块的最大响应值和尺寸来施加余弦窗,从而抑制多张图中较小值的叠加改变某些区块位置上的响应分布。
此外,对于偏离较远的区块,RPAC采用自动丢弃并利用其他区块重新生成的方法。得益于分块的方式,使得tracker对尺度变化也有适应性。
RPT
RPT把目标物体看作一系列具有相似运动轨迹的patch的集合。作者基于粒子滤波的框架,用patch的两个属性来定义每个patch的可靠性:可追踪性和目标附着性。可追踪性直接用KCF输出的响应图取PSR来定义;目标附着性根据每个patch在近k帧的运动轨迹来定义,具体来说,就是认为正样本与其他正样本的运动轨迹是一致的且远离负样本,同时负样本与正样本的运动轨迹有很大的差别。其公式定义如下,其中$y_{t}$是正样本或者负样本的$\pm 1$标签(正负样本用bounding box来分割)。
由于粒子滤波是用函数(这里是可靠性函数)对后验概率分布做近似,由于无法达到理想状态(即完全一致),因此为了避免噪声的累积,粒子滤波类算法需要重采样来不断补入正确的信息。RPT采用的是不断补入新样本的方法而不是全部重采样替换的方法,作者在两种情形下采样新的样本:当正样本或者负样本其中一者的比例过高时,采集新样本来平衡;当跟踪置信度(这里定义为PSR)较低时,采集新样本,这种情况往往出现在遇到缺乏纹理的目标物体时。此外,作者对离目标过远的patch进行舍弃,具体就是划定一个比bounding box更大的矩形框,对超出这个矩形框的patch做舍弃。
可以说,作者把patch分成三类。第一类是positive patch,也就是在目标上的;第二类是贴着目标周围一圈的negative patch,这对下一帧区分物体和背景很有帮助;第三类就是离目标很远的negative patch,这些patch的作用就比较弱,因此舍弃。
2016
下面是VOT2016的排名结果。
DLSSVM
DLSSVM延续之前的Struck,利用结构化SVM,在优化的阶段做了一些改进进行提速。其实结构化SVM分类器非常强大,但是因为它求解优化的过程比较复杂以及使用稠密采样(粒子滤波或者滑窗采样)比较耗时,使得结构化SVM的速度成为一个瓶颈,因此不如一些使用相关滤波的SOTA的算法。
C-COT
C-COT(连续空间域卷积操作)发现单一分辨率的输出结果存在扰动,因此作者想到利用CNN中的浅层表观信息和深层语义信息相结合。然而之前的DCF系列算法仅能使用单一分辨率的特征图,这就无法使用预训练CNN中不同分辨率的不同层,这是限制其效果的重要因素。因此,作者提出一种连续周期的插值运算符以利用不同空间分辨率的响应,在频域进行插值得到连续空间分辨率的响应图,最后通过迭代求解最佳位置和尺度(用0.96,0.98,1.00,1.02,1.04五种缩放倍率去搜索)。
和名称一样,C-COT最重要的贡献是它把图像$N_{d}$个像素点的离散分布变成了周期为$T$的连续空间响应图。由于本文的理论功底很深,我之前并没有看懂,后来经学长的指点才有所感悟。事实上,这里的插值运算符做的并不是插值的事,而是用一种近似的方式将离散信号重构为连续信号。虽然会导致计算量剧增,但这是一个很重大的突破。
文中还提出了一种使得各个分辨率通道的特征自然融合至相同分辨率的方法,这里相同分辨率可理解为最后的各个响应图在空间上拥有相同的样本点数。作者首先对各个不同分辨率的通道进行插值,然后使用对应的滤波器在连续的空间域内卷积,最后将响应求和得到最终的置信度方程。
C-COT使用的是类似SRDCF的框架,也引入了空间正则项,当远离目标中心是施加较大的惩罚,这使得能够通过控制滤波器的大小来学习任意大小的图像区域。C-COT在每一帧也会采集一个训练样本,根据过去帧数的远近来设置每个采集样本的重要性权重(每次都做归一化),并且设置了最大的样本容量,当超出容量时删去重要性权值最小的样本。不同于SRDCF使用Gauss-Seidel迭代法,C-COT使用Conjugate Gradient方法来提高效率。
得益于浅层特征的高分辨率,C-COT能够达到sub-pixel的精度,也就是仅次于像素级别的精确度。位置细化的过程就是上面所说的用共轭梯度法迭代的过程,在C-COT的代码中有一个迭代次数设置,被设置为1,即就使用一步迭代优化后的位置。换句话说,在当前长时跟踪算法本身误差之下,更精细的位置意义不大。
SRDCFdecon
SRDCFdecon针对在线跟踪时采集的样本中有一部分质量不佳的问题,不同于之前把采样和样本的选择作为一个独立的模块,作者提出了一种将样本权重统一到模型参数中的损失函数。
不同于之前“加入训练集or舍弃”这样二选一的样本选取方式,SRDCFdecon使得样本的重要性权重连续,同时在跟踪的过程中能够完成权重的重新分配和先验的动态变化。这里的先验其实可以看作对权重的一种约束,使权重在近几帧逐渐增大。作者用一种比较巧妙的方式来控制先验的影响力,具体来说,对权重的正则项为$\frac{1}{\mu }\sum_{k=1}^{t}\frac{\alpha _{k}^{2}}{\rho _{k}}$,当$\mu$趋向于无穷时,损失函数求解得到仅有当前帧的权重$\alpha$趋向于1,相当于丢弃了之前的样本,仅接收并保存当前帧的新样本;当$\mu$趋向于零时,$\alpha$将趋向于先验$\rho$。
Staple
Staple提出了一种互补的方式。考虑到HOG特征对形变和运动模糊比较敏感,但是对颜色变化能够达到很好的跟踪效果,color特征对颜色比较敏感,但是对形变和运动模糊能够有很好的跟踪效果,因此作者认为若能将两者互补就能够解决跟踪过程当中遇到的一些主要问题。于是,Staple使用HOG-KCF与color-KCF结合算法对目标进行跟踪,速度很快,效果也很好。
SINT
SINT运用匹配学习的思想,最早地把孪生网络(Siamese Network)应用于目标跟踪。它通过孪生网络直接学习目标模板和候选目标的匹配函数,并且在online tracking的过程中只用初始帧的目标作为模板来实现跟踪。
TCNN
TCNN使用一个树形的结构来处理CNN特征。作者利用可靠性来分配预测目标的权重,采用的更新策略是每10帧删除最前的节点,同时创建一个新的CNN节点,选择能够使新节点的可靠性最高的节点作为其父节点。这样一直保持一个active set,里面是10个最新更新的CNN模型,用这个active set来做跟踪。TCNN效果较之前有一定提升,但是速度比较慢,而且比较消耗存储空间。
SKCF
SKCF把之前KCF中用于确定搜索区域的余弦窗换成了高斯窗,这么做有两点主要的好处。
首先,当搜索区域固定时,余弦窗的带宽就是固定的了,而高斯窗则可以通过调整方差来改变中间响应比较高的区域的宽度。可以这么理解,我们从二维的余弦函数和高斯函数来看,假设搜索区域的宽度是$\pi $,那么距离边缘$\frac{\pi }{6}$的位置一定是中间最大值下降一半的位置,而高斯函数的形状则还受方差控制。这一特性使得高斯窗在搜索区域确定时能够更好地适应目标尺寸,此外论文中还提到了这种方法能方便减轻计算量。
此外,高斯分布的傅里叶变换依旧是高斯分布。这种特性可以抑制频谱泄露的问题。简单来说,频谱泄露就是信号从时域转化到频域后,除了原本应该出现的谱线,其旁边还会漏出一些小的频谱,从而造成干扰。因此,抑制频谱泄露能够保持前景与背景在频域内的区分度。
SKCF还改进了之前一些基于特征点的算法的不足。由于之前的一些算法在最终决策时用矩形框来划定有效的特征点,并分配相同的权重做出决策。作者认为这样相当于间接的认为目标是矩形的,而大多数目标的几何结构往往不是矩形。于是SKCF对各个特征点采用从中心到周围逐渐减少权重分配的方式,能更好地适应目标的几何结构。
SKCF还是用了英特尔CCS(复数共轭对称)文件格式,无论是用在SKCF还是KCF上,计算速度相比原来的KCF都提升了将近一倍,或许是共轭对称减少了一半计算量。
MRF
MRF提出了一种基于马尔科夫随机场的模型,挖掘各个patch和目标之间的联系(弹性能量)并判断每个patch的遮挡情况。作者发现当响应值较低时并不能认为该patch被遮挡了,也有可能是目标外观变化等情况。此外作者还发现当发生遮挡时,会出现较大的响应值分散分布的现象。于是当patch中响应值高于$\eta s_{max}^{k}$的像素个数占比高于阈值时(这里的$\eta$是一个小于1的因子),就认为该patch被遮挡。
对于尺度变化,作者发现当尺度变小时patch之间的重叠会变多,因此通过计算初始帧的patch距离和当前帧的patch距离之比来确定尺度缩放的比例。
不同于之前的马尔科夫随机场模型,作者在文中还给出了一种高效的置信度传播方法。
GOTURN
GOTURN提出了一种类似孪生网络的框架,将裁剪过的前一帧和当前帧分别通过在ImageNet上预训练的backbone提取特征,然后用三层全连接层进行特征比较并进行回归。其中前一帧的图像在裁剪时将其置于裁剪后图像的中心,并在周围做一定的扩充以吸收更多上下文信息。当前帧裁剪区域也就是搜索区域由上一帧的位置来确定。
GOTURN最突出的贡献就是把基于深度神经网络的速度第一次达到了100FPS。作者通过在视频和静态图像上进行离线训练,在跟踪时不更新来达到这种效果。由于训练集的缺乏,作者冻结之前在ImageNet上预训练的CNN权重,在离线训练时仅更新FC层。考虑到实际跟踪时的特点,作者还设计一种平滑的运动模型。作者发现目标相邻两帧中心点的坐标关于尺度的增量呈均值为0的拉普拉斯分布(类似高斯分布,只不过中间是尖的),也就是说一般物体逐帧的运动是较小的。因此,作者对训练数据做增广处理,使得随机裁剪得到的样本能服从拉普拉斯分布。由于训练方式和网络设计,使得GOTURN仅对目标敏感而不是对类敏感(比如行人检测能检测各种行人而不能检测车)。
SiamFC
SiamFC使用孪生网络来解决数据稀少和实时性要求对深度学习在目标跟踪中的限制。作者以第一帧的BBox的中心为中心裁剪出一块图像,并将其缩放至127x127作为template,并保持不变。在后续帧中,search image也用类似的方法得到。分别将template和search image通过5层不带padding且不在线更新的AlexNet,然后用互相关层做相关操作得到输出的score map。响应最大值和中心的偏差表示位移。此外作者用一个小批量的不同尺度的图像去前向传播来实现多尺度判断。
由于对于search image来说,表示通过CNN的卷积方程是全卷积的,因此可以使用比template大的search image,也就是可以在它上面的各个子窗口进行计算。
基于卷积的平移等变性,我们可以通过score map得到目标的位置,即当目标平移了$n$时,相应的就会在score map上平移$\frac{n}{stride}$。之所以仅使用5层而不是更深的网络,是因为SiamFC没有使用padding来使得网络能够更深。之所以不使用padding,是因为一旦加入了padding,会使得图像边缘像素的响应值在平移的同时会发生改变,这就不利于最后的定位了。具体来讲,就是当目标处于画面中央时,padding进来的是context;而当目标处于画面边缘时,padding进来的就是0了,这种信息的不同会影响定位和目标的判断。
2017
下面是VOT2017在隐藏数据集上的排名结果。
ECO
ECO(高效卷积算子)主要是为了解决C-COT速度慢的问题。从参数降维、样本分组和更新策略三个角度对其改进,在不影响算法精确度的同时,将算法速度提高了一个数量级。
为了减少模型参数,考虑到在C-COT中许多滤波器的能量(可理解为贡献)小得几乎可以忽略,因此ECO使用了一个较小的滤波器子集,且原来的滤波器都可以用这个子集中的滤波器线性组合表示(即乘上一个行数为高维数、列数为低维数的矩阵)。子集的选取方法就是简单的选取能量高于某一阈值的滤波器,其效果类似于PCA。作者提出了一个因子化的卷积算子来学习这个子集,用PCA初始化,然后仅在第一帧有监督地优化这个降维矩阵,在之后的帧中直接使用,相比C-COT模型参数量大大降低,同时也减轻了计算和存储的负担。
为了减少样本数量,作者提出了一个紧凑的样本空间生成模型,采用高斯混合模型(GMM,可理解为当有多个聚类时用多个不同的高斯模型来表示更好)来合并相似样本。当GMM的聚类(component)数量超过阈值时,如果有权重低于阈值的component,则丢弃之;否则,就合并最近的两个component。如此就可以建立更具代表性和多样性的样本集,既保持样本之间的差异性,也减少了存储的样本数量。
此外,作者还提出了一种稀疏的更新策略,即每隔N帧(实验发现5帧左右最好)才更新一次参数。由于样本集是每帧更新的,这种稀疏更新策略并不会错过间隔期的样本变化信息。此外,这种方法的另一个好处就是把原本的用逐帧单独样本进行更新,变成了用连续几帧所采集的样本所构成的batch来进行批处理的更新,这样就减小了在某帧遮挡、突变时过拟合的可能性。由此,稀疏更新策略不但提高了算法速度,而且提高了算法的稳定性。
CREST
CREST提出了将DCF构建成一层卷积神经网络,并且引入了残差学习来应对目标外观变化带来的模型退化。
考虑到之前的DCF系列没有发挥端到端训练的优势和空间卷积与相关滤波中循环输入点乘的相似性,作者用一层卷积神经网络来代替DCF的作用,这不仅使得模型能够通过反向传播训练,同时因为没有使用循环移位,避免了边界效应。
由于上述一层网络难以达成在多种情况下网络输出和ground truth的一致(模型复杂度较低易受干扰),而若使用多层网络很可能会导致模型退化(我理解为过拟合导致的),作者引入空间残差和时间残差。设我们希望最佳的输出为$H(x)$,而上述单层网络的输出是$F_{B}(x)$,为了补足某些时候(尤其是复杂情况下)单层网络的输出与希望最佳的输出之间的差距,引入残差项$F_{R}(x)=H(x)-F_{B}(x)$。在训练时,$F_{B}(x)$和$F_{R}(x)$中的参数一起训练,使得遇到特殊情况(遮挡、运动模糊等)时,$F_{R}(x)$能够补足纠正$F_{B}(x)$不稳定的响应结果。
空间残差和单层网络都是利用当前帧作为输入,考虑到空间残差有时候也会失效,作者又引入了把初始帧作为输入的时间残差,最终表达式如下:
注意:论文中第一项为$F_{R}(X_{t})$,可能有误,为此我作了修改。
另外,CREST采用当前帧最大响应尺度和上一帧尺度加权求和的方法来决定当前帧的最终预测尺度,从而使尺度能够平滑地变化。
LMCF
LMCF借鉴了KCF的循环特征图、Struck的结构化SVM,使用相关滤波在频域加速计算,从而解决了之前结构化SVM系列算法(Struck、DLSSVM)的速度问题。
在前向追踪时,LMCF考虑到画面中相似物体的干扰,提出了一种多峰值的目标跟踪算法(Multimodal Target Tracking),即对高于某一阈值的响应峰值做二次检测,把response map和一个用于筛选的二值矩阵作点乘,相当于把不是峰值的位置滤为0。对于通过筛选的峰值,以每个峰值为中心提取patch并用之前的方法再计算一遍峰值,取此时最大的峰值作为结果。
在模型更新时,LMCF提出了一种高置信度的更新策略(High-confidence Update),由于LMCF主要关注的是实时性,所以希望在算法简单的情况下能够减少失误。在传统的方法中,一般是当最大响应的峰值高于某一个阈值时(认为没跟丢目标),就对模型进行更新;否则若没有响应值超过峰值,就不对模型进行更新。而该工作的实验发现,当目标被遮挡时,响应图会震荡得非常厉害(存在多个较大的峰值),但同时最大响应的峰值仍旧会很高,这就会指导模型进行错误的更新并导致最后跟丢目标。于是作者提出了一个APCE值,定义如下。
只有当最大响应的峰值比较明确,即远超response map中的其他的响应时,APCE值才会比较大。因此LMCF仅当最大峰值和APCE超过阈值时才允许对模型进行参数和尺度模型的更新。
DeepLMCF
同LMCF,不同之处是使用了CNN特征。
MCPF
MCPF结合多任务相关滤波器(MCF)和粒子滤波器,这里的多任务相关滤波器指的是利用了多种特征滤波器之间的相关性。作者对K种特征,定义了参数$z_{k}$去选择具有判别力的训练样本。作者发现,各个特征中的$z_{k}$往往会选择具有相同循环移位的样本,因此不同的$z_{k}$应该具有相似性和一致性。为此,作者在损失函数中增加了矩阵Z的混和范数。
考虑到粒子滤波通过密集采样来覆盖状态空间中的所有状态,这会大大增加计算量,而且并不能保证很好地包括目标物体在一些情况下的状态。因此作者利用MCF对每个采样的粒子进行引导,使其更接近目标的状态分布。这样就可以在提升效果的同时每次采集较少的粒子,从而提高计算效率。另一方面,粒子滤波的密集采样能够在目标尺度发生变化时覆盖状态空间,这就解决了单一相关滤波器的尺度问题。
算法的流程分为四步:
首先,使用转移模型生成粒子并且重采样。
然后,使用MCF对粒子进行微调,使其转移到比较合适的位置。
接着,利用响应更新MCF的参数。
最后,通过求样本均值问题来决定目标的状态,也就是位置等参数。
可见,这里相关滤波仅起到指导的作用,最后的决策由粒子滤波器做出。
顺便一提,MCPF使用了Accelerated Proximal Gradient来解决这里不可微分的凸优化问题(含有范数)。
CFNet
CFNet结合相关滤波的高效性和CNN的判别力,考虑到端到端训练的优势,从理论对相关滤波在CNN中的应用进行了推导,并将相关滤波改写成可微分的神经网络层,将特征提取网络整合到一起以实现端到端优化,从而训练与相关滤波器相匹配的卷积特征。
CFNet采用孪生网络的架构,训练样本(这里指用来匹配的模板)和测试样本(搜索的图像区域)通过一个相同的网络,然后只将训练样本做相关滤波操作,形成一个对变化有鲁棒性的模板。为了抑制边界效应,作者施加了余弦窗并在之后又对训练样本进行了裁剪。
在对比实验中作者发现仅使用一层卷积层时CFNet相比Baseline+CF效果提升最显著,对此作者的解释是可以把相关滤波层理解为测试时的先验知识编码,当获得足够的数据和容量时(增加CNN层数时),这个先验知识就会变得冗余甚至是过度限制。
2018
下面是VOT2018 short-term的排名结果。
STRCF
STRCF(时空正则相关滤波器)主要针对SRDCF的速度做出改进,同时在精度上也有很好的提高。作者发现SRDCF速度很慢的两个原因是:每次对多张图片进行训练打破了循环矩阵的结构,从而无法发挥循环矩阵的计算优势;巨大的线性方程组和Gauss-Seidel迭代法没有闭式解,效率较低。对此,STRCF提出了引入时间正则和ADMM算法。
受online Passive-Aggressive learning的启发,STRCF在SRDCF空间正则的基础上引入了时间正则。我们可以对比两者的回归求解公式具体来看一下。
SRDCF:
STRCF:
这里的$w$表示空间正则化矩阵,越靠近边缘值越大;$f$表示相关滤波器,$f_{t-1}$表示的是$t-1$帧时的滤波器。
忽略每项之前的常数系数,我们可以看到两式的第二项是一样的,也就是STRCF保留了SRDCF的空间正则来抑制边界效应;在第一项中,STRCF没有对过去的每一帧进行求和来训练,这就减小了计算量;同时STRCF加入了第三项时间正则,使得新得到的滤波器与之前的滤波器之间的变化尽可能小,相当于保留了之前的信息。
这么做有两点好处:首先,STRCF可以看作SRDCF的一个合理近似,能很好地发挥后者同样的作用;此外,由于时间正则的引入,使得STRCF不易于在当前帧上过拟合,在遇到遮挡或者超出画面等问题时,STRCF能很好地保持与之前滤波器的相似度从而降低了跟踪器完全跟丢到另一个物体上去的可能,这一定程度上提高了STRCF的精度。
此外,ADMM算法的引入使得最优化求解问题有了闭式解,这比Gauss-Seidel迭代法用稀疏矩阵求解要快得多。得益于SRDCF的凸性,ADMM也能收敛到全局最优点。
UPDT
UPDT区别对待深度特征和浅层特征,主要考虑的是缺少数据和深层卷积在增加语义的同时降低分辨率这两个问题。作者分析了数据增强(flip,rotation,shift,blur,dropout)和鲁棒性训练(也就是tracker应对各种复杂场景和恢复的能力,可以通过扩大正样本的采样范围来训练)对deep feature和shallow feature分别的影响,发现deep feature能通过数据增强来提升效果,同时deep feature主打的是鲁棒性而不是精度;相反,shallow feature经数据增强后反而降低了效果,但同时它能够很好地保证精度。因此,作者得出了深度模型和浅层模型应该独立训练,最后再融合的方案。
作者在文中还定义了Prediction Quality Measure,考虑了精度和鲁棒性,精度用响应分数的锋利程度(sharpness)来体现,鲁棒性则用响应值的幅度来表示,幅度越高表明tracker越确信跟踪的目标,也就是鲁棒性越高。关于具体公式的推导和分析,以及Prediction Quality Measure在预测过程中的具体使用可以看一看原文。
ACT
ACT使用了强化学习,构建了由Actor和Critic组成的学习框架。离线训练时,通过Critic指导Actor进行强化学习;在线跟踪时,使用Actor来定位,Critic进行验证使得tracker更加鲁棒。不同于之前的搜索方案(随机采样或者通过一系列分离的action来定位),ACT希望的是搜索一步到位。这步最优的action也就是离线强化学习所关注的行动,而强化学习的状态由输入到网络中bounding box中框出的图片定义,奖励值根据IoU来定义。
在训练的过程中,由于action space比较大,因此要获得一个正奖励比较困难(随机采取action的话IoU恰好高于阈值的可能性较小)。因此作者利用了第一帧的信息来初始化Actor以适应新的环境。同样的,由于巨大的action space,原本DDPG方法中的噪声引入就不适合跟踪任务了,因此在训练前期,Actor采取的行动以某种概率被一种专家决策所替代。随着训练的进行,Actor越来越强大,这时就逐渐减弱专家决策的指导作用。
在跟踪的初始帧,作者首先在第一帧提供的ground truth周围采集多个样本。然后使用Actor对这些样本作action,根据得分对Actor进行一次微调;对Critic,根据打分和ground truth也进行一次初始化训练。
在之后的跟踪过程中,若Critic的给分大于0,则采用Actor的输出一步到位地预测下一帧的目标;否则,再使用Critic在上一帧周围采集的样本中选出最优作为目标,完成重定向。此外,可以认为Actor在离线训练时已经比较稳定了,因此在跟踪过程中只对Critic进行更新,且仅在Critic给分小于0(认为Critic没能很好地适应目标的变化)时,取前十帧的样本来更新Critic。
DRT
DRT引入了可靠性的概念,考虑到空间正则、掩模等抑制边界效应的方法都不能抑制bounding box内部的背景信息,同时这些方法会导致滤波器的权重倾向于集中在某些较小的区域(主要是中央的关键区域,我理解为边缘区域被抑制掉了,因此学习时自然不会去分配权重),作者认为这是不利于目标跟踪的(容易个别不可靠的区域被误导)。为此,作者提出了DRT,它主要是将滤波器分成了一个base filter和一个reliability term的element-wise product:
这里的base filter用于区分目标和背景;reliability term用于决定每片区域的reliability,由目标区域每一个patch的reliability值加权求和决定:
这里的$p$是对每一个patch的掩模,用于确定每个patch做相关操作的区域;$\beta$有上下界的限定,目的就是为了降低feature map中响应不平衡的影响,防止由于响应的集中而导致仅有一小块区域被关注。
需要最小化的目标方程包括三项:分类误差、局部一致性约束和滤波器参数$h$的二范数。分类误差就是与ground truth之间的损失函数,计算时需考虑可靠性;局部一致性约束用于减小循环样本中的每一个片段的响应差距,该项不受$\beta$即可靠性的影响,也就是说base filter在训练时依旧要保持对每个局部区域同样的关注度,使得base filter能独立于可靠性进行训练,这就避免了前面提到的滤波器在训练时边缘区域被抑制所造成权重集中的后果;滤波器参数$h$的二范数用于保证模型的简单程度,防止模型退化(可以理解为过拟合)。
由于只有当base filter的参数$h$和reliability的权重$\beta$有一项已知时,目标方程的最小化问题才是凸优化问题,因此作者采用了$h$、$\beta$交替训练的方法。
作者还使用权重逐帧退化的方式设计了一种简单的利用多帧信息的目标方程。借鉴ECO,DRT也采用了间隔几帧更新一次的稀疏更新方法和基于高斯混合模型的样本分组策略。类似DSST,DRT采用了先确定位置再计算多个尺度的响应的“两步”尺度估计方法。
MCCT
MCCT使用了多特征集成学习,在跟踪时对每一帧分别选用最合适的特征来做出决策。为了应对不同的场景,MCCT选择了low,middle,high三个层级的特征,并通过排列组合得出7种expert。尽管有些特征的鲁棒性明显差于三类特征的组合,但是它们提供的多样性对集成学习是至关重要的。
为了评估每个expert在每一帧的好坏以决定具体选用哪一个,作者提出了Expert Pair-Evaluation和Expert Self-Evaluation。
Expert Pair-Evaluation分为两项:在第一项中,作者认为一个expert的好坏可以通过它与其他expert的整体一致性来体现,于是首先计算了每个expert相对于其他6个expert在当前帧预测结果的一致性(通过重叠率来衡量)之和;此外,作者认为一个好的expert还必须是temporal stable的,因此他又计算了每个expert相对于其他6个expert在前几帧内预测趋势的一致性,这就可以防止因为在当前帧碰巧预测一致而导致之前一项的分值很好的情况,也保证了expert的可信度。最后两项结合得到Expert Pair-Evaluation。
在Expert Self-Evaluation中,作者认为路径的顺滑程度一定程度上能够体现每个expert的可靠程度。
最后将Expert Pair-Evaluation和Expert Self-Evaluation加权求和选出每帧最好的expert做出决策。
MCCT提出了一种peak-to-sidelobe ratio和鲁棒性的置信度分数来进行模型更新:
其中,$P_{mean}^{t}$是每个expert响应图peak-to-sidelobe ratio的平均,$R_{mean}^{t}$亦然。当$R_{mean}^{t}$比较低时,认为采集到了不可靠的样本(比如遮挡问题等)。为此,作者的模型更新策略是,当置信度分数$S^{t}$大于之前置信度均值时,采用正常学习率,否则,根据置信度算出一个较小的学习率以在一定程度上维持模型。
为了提升速度,每个expert之间共享了样本和RoI,最后MCCT的速度为7.8FPS,MCCT-H(没采用深度特征)的速度为44.8FPS。(作为参考,ECO的速度为15FPS)
LSART
LSART分析了深度特征中的空间信息,提出了两种互补的回归方式来使得跟踪更加鲁棒。
作者首先对比了CNN-based和KRR-based(核岭回归)两类tracker,认为它们各有利弊且是互补的。由于KRR的循环采样,目标的结构特征会被打破,对形变和遮挡问题效果不好,而CNN则能够很好地提取位置信息;相反,CNN庞大的参数量使得它容易过拟合,而KRR-based tracker就不会出现这样的问题。因此,若将两者结合(将热力图加权求和),就可以让KRR关注全局而让CNN关注较小、较精确的目标,进而达到更好的效果。
对于KRR,作者引入cross-patch similarity,将参数看作训练样本的加权求和,将响应项拆分成三个模块,这就方便把原本的迭代求解的方式分成三步在神经网络中来求解了。
对于CNN,考虑到形变和遮挡等问题会使得目标的一部分比其他区域更加重要,不同于以往在feature map上做文章,作者对卷积层的滤波器施加掩模,使得各个滤波器关注于不同的区域,在跟踪的过程中,这些掩模不做变化。此外,作者还提出了距离变换池化层用于评判输入feature map的可靠性。另外,作者设计了一种two-stream的训练网络,将空间正则的卷积层和距离变换池化层分开训练以防止过拟合,能够比较好的处理旋转问题。
SiamRPN
SiamRPN利用了Faster RCNN中的RPN,解决了之前深度学习跟踪算法没有domain specific(可理解为类间不区分)以及还需额外的尺度检测与在线微调的问题。RPN回归网络的引入,一方面提高了精度,另一方面回归过程代替多尺度检测,使得速度有所提升。
在在线跟踪时,SiamRPN将跟踪看作one-shot检测的问题,也就是用第一帧目标样本的信息来预测RPN网络中的参数,从而实现domain specific且不需要在线更新。作者把template分支和detection分支卷积视作类别信息在RPN网络上的embedding。
DaSiamRPN
DaSiamRPN在之前的孪生网络系列的基础上增加了distractor-aware,这里的distractor指的是在判别式方法中,不同于无语义信息易判别的背景,而存在一定的语义并对前景分割存在干扰的背景。这其中的一大原因是之前的训练集仅从同一个视频序列的不同帧中采样,造成了non-semantic的背景样本具有较大的比重而semantic的背景样本较少,这就弱化了模型准确判别前景的能力。此外,之前的孪生网络系列还存在不能在线更新和不进行全局搜索这两个问题。
首先,作者提出了三类样本选取方法来弥补传统采样的不足。考虑到视频数据集中类别缺乏和标注的难度,作者引入了ImageNet和COCO图像检测两个数据集,并把样本分成三类对tracker进行训练。
对于正样本对,其作用是提升tracker的泛化能力和回归精度;对于来自同一类别的样本对,其作用是让tracker更注重细粒度的表达方式,提升判别能力;对于来自不同类别的样本对,其作用是让tracker在遮挡、超出视野等情况下拥有更好的鲁棒性。
值得一提,作者发现motion pattern能很好地被浅层网络建模,因此在数据增强时还引入了运动模糊。
DaSiamRPN通过上述方法对数据做了增强,可是在跟踪特定目标时,还是很难将一般模型转化为特定视频域所用。考虑到上下文信息和时域信息可以提供特定目标的信息以增加tracker的判别能力,作者提出了一个distractor-aware module。具体来说,在上一帧中选择出的proposal中,通过非极大抑制处理,剩下的proposal中最大的就是目标,剩下的就是会产生误导的distractor;在当前帧,为了抑制这些distractor的干扰,可以减去这些distractor之前响应的加权和,减去之后还是最大的proposal就是我们要找的目标,其基本思想如下公式所示:
这里的$\alpha$是控制distractor影响大小的权重系数,作者又对上式进行调整,通过引入学习率使得该分类器在线可学习,这就无需利用反向传播更新网络参数,而通过微调一个分类器弥补了传统基于孪生网络的tracker不能在线更新的缺点。
此外,当认为目标跟丢时,DaSiamRPN会匀速扩大搜索范围,并且通过高效的bounding box回归来代替图像金字塔,这就通过一个简单的方法在应对长时跟踪目标消失问题时较之前基于孪生网络的tracker取得了一个进步。
Meta-Tracker
Meta-Tracker将元学习运用在了目标模型的初始化上。作者认为结合深度特征和在线学习的模型有两大困难,一是训练的样本不容易获得,二是大多数SOTA的tracker在训练阶段都需要花费大量的时间在初始化上面。
针对上面的难题,作者提出了一种在未来的帧上训练目标模型的思路,采用了基于预测梯度的策略学习方法获得普适性的初始化模型,使得跟踪模型自适应于后续帧特征的最佳梯度方向,从而在接收到第一帧时仅需一步迭代就能使参数快速收敛到合适的位置。这样做有三点好处,一是能使模型更加关注对后续的帧更有价值的特征,二是避免了在当前帧上过拟合,三是能够使初始化更快速。总而言之,就是能保证精度和鲁棒性。
考虑到上述方法在长序列或者目标在帧与帧之间变化不大时表现不佳(会偏离目标),这是因为Meta-Tracker一步到位的思想使得学习率会偏大。因此作者仅在模型初始化时采用学习到的学习率,在之后的跟踪过程中仍旧沿用原来版本的方式进行更新。这里原来的版本指的是CREST和MDNet,作者在这两个tracker的基础上改进出了MetaCREST和MetaSDNet。具体的改进和处理可以看一看我之前写过关于Meta-Tracker的文章。
DorT
DorT(Detect or Track)把跟踪看作一个连续决策的过程,它结合目标检测和目标跟踪两个领域内SOTA的结果,在孪生网络输出的结果上再添加一个小型的CNN网络作为scheduler来判断在下一帧是作检测还是作跟踪。
LADCF
LADCF针对DCF系列的边界效应和模型退化(后者主要是单帧独立学习和模型更新速率固定导致)的问题,提出了一种空间域特征选择和时间域约束结合的方法,并且使其能在低维流形中有效表示。
补充:流形学习的观点认为,我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。
掩模策略应用于目标跟踪时,仅将目标区域的参数激活。LADCF也运用了这个思想,对滤波器中的参数$\theta$作降维处理$\theta _{\phi }=diag(\phi )\theta$,这里$\phi$中的元素要么是0、要么是1,即不激活或者激活。不同于PCA和LLE,这种方法在降维的同时也保持了空间特性,不仅能加速求解,也能除去大部分干扰,使滤波器关注于目标部分从而可以使用更大的搜索域。
最后的目标函数如下:
可以看到,这里还包括与历史模型的正则项,减轻了滤波器退化。作者让$\lambda _{1}< < \lambda _{2}$,也就是让时间域上的一致性更加重要于特征的稀疏选取。
FlowTrack
不同于之前先把光流算好,FlowTrack是第一个把光流信息进行端到端训练的,这无疑提高了光流使用的精度。作者注意到之前的算法大都采用RGB特征也就是外观特征,且缺少对运动特征和帧与帧之间联系的利用,这就导致在部分遮挡和形变等情况下效果会变差。不同于把之前的几帧保留下来等时域方法,作者希望能把前几帧的特征直接补充到当前帧上融合成一个,而具备方向和速度信息的光流就成了一种比较合适的方法。为此,作者将光流引入孪生网络框架,使得仅使用外观特征的一些不足得到弥补。
作者的思想很巧妙,我以遮挡问题为例简述一下。作者的想法是当当前帧的目标有部分被遮挡时,我们可以根据光流的运动信息,把前几帧的特征映射过来对齐,通过插值补全当前帧的特征,简单来说可以理解为把当前帧缺的那块给补全。为了有效地选择补过来的特征,作者使用了空间注意力和时间注意力两种机制结合。空间注意力分别计算前几帧补过来的特征与当前帧的特征的相似度,根据相似度大小来分配特征在各个空间位置上的权重。但是由于最近的一帧总是与当前帧的特征最为相似,它的权重肯定是最大的,考虑到假如最近一帧由于遮挡等原因等导致特征质量下降而不适合分配最大的权重,因此还需要时间注意力来重新校准权重。具体来说,时间注意力作用在空间注意力的输出上,对于一般情况下的目标基本不会改变空间注意力的输出,而对遮挡等情况下的帧就会减小其在空间注意力中分配到的权重。
VITAL
VITAL针对正样本高度重叠无法捕获目标丰富的特征变化和正负样本不平衡的问题,采用对抗学习的思想,分别设计了生成网络和代价敏感损失来解决这两个问题。
这里的生成网络输出为一个作用于目标特征的掩模。通过对抗学习,该生成网络可以产生能保留目标特征中较为鲁棒的部分。其目的是对仅在个别帧判别力强的特征进行削弱,防止判别器过拟合于某个样本。个人理解,这里的判别力强的特征并不是指的能够很好地区分目标和背景的特征,而是指仅在某些帧出现比较独特,而在大多数情况下不存在于目标上的特征。
考虑到很容易被分类正确的负样本在训练过程中也会产生损失,然而我们并不希望网络关注这些损失,因为关注他们反而会使得网络性能变差。因此,为了避免很多负样本主导损失函数,作者采用高阶敏感损失,减小简单负样本的权重,这不但提升了精度,也加速了网络的收敛。
SA-Siam
SA-Siam考虑到语义信息和外观信息的互补关系,构建了两个并行的孪生网络。在外观网络(作者使用的是SiamFC)具有判别力的基础上,结合语义网络(作者使用了AlexNet的第4和第5层作为backbone)更泛化、更鲁棒的语义信息,使得tracker的效果更好。
外观网络的输入为目标和搜索区域,其框架跟SiamFC基本一致,这里就不细说了。
不同于外观网络,语义网络的输入为目标及其背景和搜索区域(两者一样大),作者直接使用了AlexNet提取高层的语义信息并不进行训练,因为假如训练了的话就跟外观网络接近了,而集成学习的思想就是被集成的各个模型之间的关联性应比较弱,这也是文中多次强调的。在提取高维语义信息之后,为了使得得到的语义特征更适合于跟踪任务,作者使用了1x1的卷积层作了一次特征的fusion。此外,考虑到对不同的追踪目标各个通道的重要性是不同的,作者还设计了一个通道注意力模块,具体而言,就是对每一个通道,先做最大池化变成3x3的网格,然后再通过一个多层感知机来决定每个通道的每个格子的重要性。由于通道注意力的选择也受目标周围背景的影响,因此最大池化的结果仅中间的格子是目标区域,周围的8个格子代表目标周围的背景信息。再次强调,在训练过程中,语义网络冻结语义特征提取的AlexNet,仅训练特征fusion和通道注意力模块。
根据上文的解释,同样的,为了保持语义网络和外观网络的弱关联性和互补性,两支网络独立训练,仅在测试时加权得到最后的相似度图作为预测依据。
2019
下面是VOT2019 short-term的排名结果。
GFS-DCF
GFS-DCF考虑到深度网络的高维通道存在许多冗余的信息,因此作者在时域和空间域之外,还考虑了通道维度的影响,在目标函数中使用了三个正则项。
注:建议结合上图来看接下来的分析。
对于空间域,作者将每个通道(也就是每个feature map)的对应点相连接,用范数约束,可以理解为提取那些在绝大多数特征图中都是最重要的特征的位置。
从通道角度,作者又把每一个通道作为一项来做约束,可以理解为提取那些特征比较重要的通道。
对于时域,作者使用了low-rank约束,这里的rank指的是矩阵的秩而不是排名,low-rank主要用于图像对齐(alignment),在文中的目标是最小化$rank(W_{t})-rank(W_{t-1})$,这里的$W_{t}$表示从1到t每个滤波器向量化后形成的矩阵。下面是作者最后修改后的正则项:
注:上述三项在实际目标函数中还要加上权重。
作者发现,空间正则对使用handcrafted特征的模型效果显著,而对使用CNN的模型(文中是ResNet)效果提升不大;相反,通道正则对使用handcrafted特征的模型效果不明显,而对使用CNN的模型效果显著。作者在文中解释认为由于深层CNN特征表示的语义信息丰富而缺少细粒度的信息,因此相比保留更多空间结构handcrafted特征,对深层CNN特征使用空间正则比较难以判别哪些位置的特征反应了目标位置的信息。此外,由于在训练过程中一些通道的权重下降到很小,也就是说模型本身就不怎么关注这些通道,因此使用通道正则在这里取得了比较明显的效果。
D3S
D3S考虑到BBox对目标的粗糙表示会影响性能以及视频分割任务中对背景干扰和长时视频不鲁棒的问题,提出了一种视频跟踪、视频分割互补的框架。
如上图所示,作者构造了用于分割的GIM和用于定位的GEM两个模块。
GIM使用初始帧的目标像素点构造目标的特征向量,使用初始帧目标周围的像素点构造背景的特征向量。在之后的图像中,每个像素点的目标相似度,定义为该点和每个目标的特征向量做相似度计算之后,最大的K个目标相似度的均值;同理,每个像素点的背景相似度,定义为该点和每个背景的特征向量做相似度计算之后,最大的K个背景相似度的均值。最后将目标相似度图和背景相似度图作softmax得到分割结果。该模块没考虑位置信息,用分割使得在应对剧烈形变的目标时能够取得较好的效果。
然而,GIM的分割结果对相似的物体或者背景的干扰并不鲁棒,因此我们希望能有鲁棒的位置信息来提升判别力。GEM就是直接使用一个DCF来找到最大响应值的位置,也就是目标的中心位置,然后以该中心为圆心,向周围每个像素点根据半径由大到小分配置信度。最后仅把GIM中得到的且由GEM分配的置信度高于阈值的目标像素点作为分割结果。
由于通过backbone的encode导致此时的输出分辨率较低,因此还需要作上采样。具体来讲,就是每次把输入扩大到两倍分辨率,通过两次卷积,然后加上backbone中对应分辨率的层。
由于预训练的backbone特征缺少精细的划分,因此作者在初始帧先进行降维的训练。具体来讲,就是首先将预训练网络通过1x1的卷积来降维,再通过一层3x3的卷积,从而达到调整网络参数使得分支划分得到最佳的目的。
由于输出是二值掩模,因此作者还对使用BBox的目标跟踪问题作了变换处理。首先,在初始帧,除了进行降维和DCF的训练,作者还先把BBox内部的像素点视为目标点,把BBox外4倍区域的像素点视为背景点,用D3S在第一帧上迭代(文中说只迭代1次就可以了)以产生比BBox更细致的分割,将最后分割出的目标点和其周围的背景点用于构造特征向量,在之后的跟踪过程中保持不变并用于GIM模块。此外,在输出时,作者先用椭圆去近似掩模,然后根据长轴和短轴来确定BBox。由于椭圆的确定遗漏的背景信息(仅考虑怎么把mask包进来)从而导致BBox偏大,因此作者提出了一种考虑背景信息的方法,对长轴进行微调来确定最终的BBox。
GlobalTrack
GlobalTrack关注的是long-term tracking的问题。我们知道,在目标跟踪问题中,为了更好的利用前一帧甚至前几帧的信息,往往会对模型做很多假设,包括目标的运动、位置变化、尺度变化(假设平滑变化等等),而这些假设并不能很好地处理所有的情况(比如位置或尺度突变、目标消失、短时跟踪失败等),由此产生了模型的累计误差。而在长时跟踪问题中,这样的累计误差往往会使得后期的目标跟踪结果差很多。
基于上述考虑,GlobalTrack根据长时跟踪的特点,把跟踪看作在每一帧作全局检测的问题,设计了一种没有运动模型、没有在线学习、没有位置估计、没有尺度平滑的无累积误差的baseline,其基本框架如下图所示。
受Faster RCNN启发,GlobalTrack也是基于two-stage的框架。其下面的一条和Faster RCNN基本一致,由于Faster RCNN是目标检测类算法,其目的是在图像中框出所有物体并分类。而目标跟踪仅需要目标,因此作者用添加了上面一条query-specific的引导。为了简单起见,作者把query的RoI看成kxk的方型特征,在第一个feature modulation中,作者把RoI特征卷积成1x1的卷积核,然后再和通过backbone的搜索图像特征做卷积相关操作,得到query-specific的候选框;在第二个feature modulation,作者把RoI特征与每个候选框作哈达玛积(也就是简单地将两个尺寸相同的矩阵的对应位置作乘积),由此来改进标签置信度和BBox的预测。
在训练时,作者取多对图像对,其中每一对图像都共同含有M个相同的实例,作者用每对图像来相互预测每对各自的M个实例,使总的损失达到最小以进行训练。
在测试时,作者简单地把第一帧作为query,之后的每一帧都视为独立的全局检测,直接取得分最高的BBox作为结果,如此就不存在依赖相邻帧带来的累计误差了,因此作者认为视频长度越长,GlobalTrack的表现就越突出。
SPSTracker
SPSTracker针对目标周围噪声引起的响应(sub-peak)导致模型漂移,以及由多尺度样本加权得到的特征图响应最大值和目标真正的几何中心不一致的问题,提出了BRT和PRP两个模块。作者使用的是ATOM的框架,两个模块在框架中的使用方式如下图所示。
这里的BRT其实就是简单的将远离目标中心的点置为0,其目的是减小响应图的方差,使得响应图尽可能地呈现单峰响应的形状,此外也起到了抑制边界效应的效果。PRP其实就是作者新设计的一个池化层,该池化层把每一像素点的值设为该像素点所在列所有像素点中的最大值和所在行所有像素点的最大值之和,从而使响应值能更加靠近目标的几何中心,从而能够更好地使用多尺度样本。作者对搜索区域使用BRT,然后将通过分类器的置信度图通过一个PRP构造的残差模块,从而达到抑制sub-peak的目的。
SiamRCNN
SiamRCNN发现重检测很容易受到干扰物的影响从而产生模型漂移,从难例挖掘和运动轨迹动态规划两个角度入手,设计了一个利用第一帧和前一帧为模板的孪生网络检测结构,在短时跟踪评价上能与之前SOTA的算法持平,在长时跟踪评价上有非常显著的进步。注意,这里的追踪轨迹不仅追踪目标,同时也追踪所有的distractor。
SiamRCNN可以说综合了许多前人的成果。为了收集更多难例,作者在不同的视频上根据嵌入网络上的距离来获得更多负样本。接下来,我结合上面的网络结构图来简述一下我对该算法的理解。
首先,作者使用RPN网络获得了类别无关的proposal,然后和第一帧结合,通过一个与Faster RCNN前半段相似的Re-Detection Head。接着,通过3个级联的RCNN获得回归后的bounding box(这里借鉴了Cascade RCNN,其认为高质量的proposal能够产生更好的结果,3级RCNN的IoU阈值设定逐级升高)。随后,作者将此时获得的bounding box与前一帧所有的检测结果两两组合(也就是即检测目标也检测干扰物),再次输入到之前相同的重检测结构中。最后对得到的所有结果进行跟踪轨迹动态规划。
在轨迹动态规划模块,作者计算轨迹与检测结果的相似度,用不具有不确定性的检测结果去延续之前的若干条轨迹。这里的不确定性定义为:对这条跟踪轨迹,有其他的检测结果和本结果具有相当的相似度;对检测结果,有其他的跟踪轨迹和本轨迹具有相当的相似度。对于不确定的检测结果,作者让它们开启新的轨迹。对于没有确定检测结果的轨迹则暂时中断,其中也包括含有初始帧的轨迹,当它中断时可认为目标消失了。
研究趋势
以下是我对近几年来目标跟踪领域各种算法主流的研究趋势和发展方向的一个浅析,个人思考,多多指教。
注:其实近几年还出现了一些其他的关注方向,由于不是主流、目前关注较少、本人学识不够等原因,在此不做列举。
信息提取
深度特征
早期的目标跟踪算法主要在handcrafted特征方面进行探索和改进,以2012年AlexNet问世为节点,深度特征开始被引入目标跟踪领域。
我们知道,在现实场景中,物体是在三维的运动场中移动的。而视频或图像序列都是二维的信息,这其实是一些难题的根本原因之一。一个比较极端的例子就是理发店门前经常会出现的旋转柱,如果单纯地从二维角度来看,柱子是向上运动的,可在实际的运动场中柱子是横向运动的,观测和实际的运动方向是完全垂直的。
因此,为了能够更好地跟踪目标,我们需要提取尽可能好的特征,此外最好能从视频或图像序列中学到更多丰富的信息(尤其是含语义的)。值得注意的一点是,在港科大王乃岩博士2015年所做的ablation experiments中(详见参考文献[2]),发现特征提取是影响tracker效果最重要的因素。
考虑到精度是保证目标跟踪鲁棒性的重要因素,不同于一些其他的计算机视觉任务,目标跟踪领域的深度算法比较强调结合与充分利用浅层网络的高分辨率信息。
时域和空间域结合
可以说,在目标跟踪的相关算法中,空间正则指的就是抑制边界效应。由于CNN能够在学习的过程中能够产生对样本中各个区域有区分的关注度,因此可以不考虑边界效应。对边界效应的处理主要是在相关滤波类等需要循环移位的算法中出现。
事实上,目标跟踪这一个任务本身就在利用时域信息,因为预测下一帧肯定需要上一帧的信息,然而仅仅利用上一帧的信息往往是不够的,充分的利用时域信息在正则或者辅助记忆方面都可以取得一定的效果。
学习方式
结合语义分割的多任务学习
由于bounding box粗糙的对目标的标注表示使得有不少冗余的背景信息进入template,此外bounding box对平面内旋转等场景不鲁棒,这些都会导致模型的退化。早期也有许多算法考虑到了分割,但主要是对目标进行分块(part-based)而不是语义分割。由于跟踪的目标是有具体形状的且是一起运动的,同时判别式方法正是要分离除目标以外的物体,因此近年来有不少算法结合语义分割,通过多任务学习来进一步提高tracker的效果。具体来说,就是引入掩模(mask)来识别预测物体,最后在转化成bounding box作为结果。
元学习
实际上,目标跟踪这一个任务本身的特性就决定了它与元学习的思想有共通之处。元学习主要针对的是两个问题:在少样本学习的情况下对样本的利用效率比较低;当进行一个新的任务时对之前学到的经验的可移植性差,我觉得这里的新任务可以指从分类到跟踪这样类别之间的转换,也可以指在不同的视频序列上训练和测试这样“域”之间的转换。
当深度特征兴起之后,目标跟踪中的许多算法都选择迁移目标分类任务中的一些预训练模型来提取特征,这种迁移学习其实就包含了元学习的思想。MDNet将每个视频看做一个域,在测试时新建一个域但同时保留了之前训练时在其他域上学到的经验,既能够更快更好地在新的视频序列上学习也避免了过拟合。孪生网络实际上也是元学习领域一种比较常用的结构,它学习了如何去学习输入之间的相似度。
其他关注点
样本采集
样本采集主要包括样本的数量、样本的有效性、正负样本和难易样本的平衡性。
防止过拟合
每帧获取的少量信息和目标的意外变化导致信息的丢失,使得过拟合问题成为目标跟踪任务中一个比较重要的关注点,下面是一些比较常见的方法:
- 冻结一些层的参数(设置学习率为0),仅更新一部分层的权重。
- 采用coarse-to-fine的网络框架,用语义信息来避免过拟合。
- 通过在目标方程中添加正则项来限制模型的稀疏度,也即参数量。
- 采用two-stream的模型结构,短时更新和长时更新相结合。
- 采用稀疏更新的方式(隔几帧更新一次),相当于将利用单帧信息的更新变成了批处理的形式。
- 每次更新采用最近几帧的信息而不是只用目前帧的信息,其原理类似上一条。
- 利用初始帧或者质量比较好的几帧存储的样本来进行时域正则。
- 对不同的情况采用不同的更新或者初始化的策略。
- 使用dropout来防止过拟合。
- 使用基于patch的跟踪算法。
- 使用掩模去除不可靠的信息。