跟踪算法
https://www.zhihu.com/question/26493945
输入初始化目标框,在下一帧中产生众多候选框(Motion Model),提取这些候选框的特征(Feature Extractor),然后对这些候选框评分(Observation Model),最后在这些评分中找一个得分最高的候选框作为预测的目标(Prediction A),或者对多个预测值进行融合(Ensemble)得到更优的预测目标。
分为短时(小于两分钟)、长时跟踪(长时间跟踪暂时没有好用可靠的)。
(1)运动模型:如何产生众多的候选样本。
生成候选样本的速度与质量直接决定了跟踪系统表现的优劣。常用的有两种方法:粒子滤波(Particle Filter)和滑动窗口(Sliding Window)
(2)特征提取:利用何种特征表示目标。
常用的特征被分为两种类型:手工设计的特征(Hand-crafted feature)和深度特征(Deep feature)。常用的手工设计的特征有灰度特征(Gray),方向梯度直方图(HOG),哈尔特征(Haar-like),尺度不变特征(SIFT)等。与人为设计的特征不同,深度特征是通过大量的训练样本学习出来的特征,它比手工设计的特征更具有鉴别性。因此,利用深度特征的跟踪方法通常很轻松就能获得一个不错的效果。
(3)观测模型:如何为众多候选样本进行评分。
观测模型可分为两类:生成式模型(Generative Model)和判别式模型(Discriminative Model)
生成式模型通常寻找与目标模板最相似的候选作为跟踪结果,这一过程可以视为模板匹配。常用的理论方法包括:子空间,稀疏表示,字典学习等。在当前帧对目标区域建模,下一帧寻找与模型最相似的区域就是预测位置,比较著名的有卡尔曼滤波,粒子滤波,mean-shift等。举个例子,从当前帧知道了目标区域80%是红色,20%是绿色,然后在下一帧,搜索算法就像无头苍蝇,到处去找最符合这个颜色比例的区域,推荐算法ASMS
去找最像的
而判别式模型通过训练一个分类器去区分目标与背景,选择置信度最高的候选样本作为预测结果。CV中的经典套路图像特征+机器学习,当前帧以目标区域为正样本,背景区域为负样本,机器学习方法训练分类器,下一帧用训练好的分类器找最优区域:判别式方法已经成为目标跟踪中的主流方法,因为有大量的机器学习方法可以利用。常用的理论方法包括:逻辑回归,岭回归,支持向量机,多示例学习,相关滤波等。
去区分主体和背景
(4)模型更新:如何更新观测模型使其适应目标的变化。
更新观测模型,以适应目标表观的变化,防止跟踪过程发生漂移。
(5)集成方法:如何融合多个决策获得一个更优的决策结果。
目标跟踪的算法大致可以分为以下四种:
1) 均值漂移算法,即meanshift算法,此方法可以通过较少的迭代次数快速找到与目标最相似的位置,效果也挺好的。但是其不能解决目标的遮挡问题并且不能适应运动目标的的形状和大小变化等。对其改进的算法有camshift算法,此方法可以适应运动目标的大小形状的改变,具有较好的跟踪效果,但当背景色和目标颜色接近时,容易使目标的区域变大,最终有可能导致目标跟踪丢失。
2) 基于Kalman滤波的目标跟踪,该方法是认为物体的运动模型服从高斯模型,来对目标的运动状态进行预测,然后通过与观察模型进行对比,根据误差来更新运动目标的状态,该算法的精度不是特高。
3) 基于粒子滤波的目标跟踪,每次通过当前的跟踪结果重采样粒子的分布,然后根据粒子的分布对粒子进行扩散,再通过扩散的结果来重新观察目标的状态,最后归一化更新目标的状态。此算法的特点是跟踪速度特别快,而且能解决目标的部分遮挡问题,在实际工程应用过程中越来越多的被使用。
从一定程度上,属于卡尔曼滤波的拓展。卡尔曼滤波是线性高斯模型,对于非线性非高斯模型,就采用蒙特卡洛方法
4) 基于对运动目标建模的方法。该方法需要提前通过先验知识知道所跟踪的目标对象是什么,比如车辆、行人、人脸等。通过对要跟踪的目标进行建模,然后再利用该模型来进行实际的跟踪。该方法必须提前知道要跟踪的目标对象是什么,然后再去跟踪指定的目标,这是它的局限性,因而其推广性相对比较差。
目标跟踪近几年发展迅速,融合了相关滤波(Correlation Filter)和卷积神经网络(CNN)的跟踪方法已经占据了目标跟踪的大半江山。
个人觉得实际使用的话还是相关滤波好用。
大量算法在OTB上的性能比较
GitHub - foolwood/benchmark_results: Visual Tracking Paper List
相关滤波的资源
GitHub - HEscop/TBCF: Tracking Benchmark for Correlation Filters
————————————————
问题:
遮挡(Occlusion)
解决部分遮挡通常有两种思路:(1)利用检测机制判断目标是否被遮挡,从而决定是否更新模板,保证模板对遮挡的鲁棒性。(2)把目标分成多个块,利用没有被遮挡的块进行有效的跟踪。
对于目标被完全遮挡的情况,当前也并没有有效的方法能够完全解决。
形变(Deformation)
目标表观的不断变化,通常导致跟踪发生漂移
常用的方法是更新目标的表观模型,使其适应表观的变化
背景杂斑(Background Clutter)
指得是要跟踪的目标周围有非常相似的目标对跟踪造成了干扰。
解决这类问题常用的手段是利用目标的运动信息,预测运动的大致轨迹,防止跟踪器跟踪到相似的其他目标上,或是利用目标周围的大量样本框对分类器进行更新训练,提高分类器对背景与目标的辨别能力。
尺度变换(Scale Variation)
通常的做法有:在运动模型产生候选样本的时候,生成大量尺度大小不一的候选框,或是在多个不同尺度目标上进行目标跟踪,产生多个预测结果,选择其中最优的作为最后的预测目标。
特征:
HOG 是梯度特征,CN 是颜色特征
电视上转播的火箭、导弹发射画面都是这种设备实时拍摄。这种设备的功能是:通过跟踪计算目标位置参数输入伺服系统,进而控制机械臂调整摄像头,实现全程跟拍。这属于跟踪为数不多的刚需应用之一,全套设备的性能取决于跟踪算法。主要技术点包括:特征设计和实时切换、模型更新、目标重定位等。
相关滤波
最经典的高速相关滤波类跟踪算法CSK, KCF/DCF, CN
KCF 跟踪算法
在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins, and Jorge Batista提出来的
如果没有kernel-trick,就简称基于DCF,如果加了kernel-trick,就简称基于KCF
kernel-trick(核技巧):在低维空间线性不可分,映射到高纬空间,线性可分的概率会增大,比如说,数据在一维空间线性可分的难度比二维空间线性可分的难度大,二维空间线性可分的难度比在三维空间线性可分的难度大,以此类推。
原理
KCF 可以分为:模型建立,在线匹配,模板更新三个部分。
KCF 算法全称为核相关滤波目标跟踪算法,是一种判剔式跟踪算法,它把跟踪的目标和背景看作一个二元分类问题,通过岭回归分类器将背景信息滤除,从而准确地把目标提取出来
采用循环矩阵,在每一帧的目标区域进行循环采样,产生了大量的复杂样本数据集,用于检测器的训练,提高算法的精度。
目标跟踪过程中缺少大量的负样本,通过循环矩阵可以增加负样本的数量,提高分类器训练的质量。将高斯核加入到岭回归中,能够将非线性的问题转换到高维的线性空间中,简化计算。在KCF 中,作者将目标跟踪问题的求解转化为一个分类问题 (图像中的目标和背景).。这个分类问题的求解应用了岭回归方法,所得到的分类器中包含了矩阵的逆运算, 其运算量复杂,严重影响跟踪系统的实时性。KCF 在分类器的计算中引入了循环矩阵,巧妙的规避了矩阵的逆运算,大大减少了分类器的运算量。
单特征:KCF 中使用的是HOG特征, 目标的表面纹理特征和轮廓形状能够很好地被 HOG 特征来描述.
VOT2014竞赛
前三名都是相关滤波CF类方法,核心都是KCF为基础扩展了多尺度检测
SAMF
GitHub - ihpdep/samf: samf code
浙大Yang Li的工作,基于KCF,特征是HOG+CN,多尺度方法是平移滤波器在多尺度缩放的图像块上进行目标检测,取响应最大的那个平移位置及所在尺度:
多特征跟踪与自适应尺度跟踪的融合
· Li Y, Zhu J. A scale adaptive kernel correlation filter tracker with feature integration [C]// ECCV, 2014.
DSST (Martin Danelljan)
Accurate scale estimation for visual tracking (liu.se)
只用了HOG特征,DCF用于平移位置检测,又专门训练类似MOSSE的相关滤波器检测尺度变化,开创了平移滤波+尺度滤波,之后转TPAMI做了一系列加速的版本fDSST,非常+非常+非常推荐:
· Danelljan M, Häger G, Khan F, et al. Accurate scale estimation for robust visual tracking [C]// BMVC, 2014.
· Danelljan M, Hager G, Khan F S, et al. Discriminative Scale Space Tracking [J]. IEEE TPAMI, 2017.
VOT2016
VOT2016 Challenge | Trackers (votchallenge.net)
基本都开源放在这里了
Staple
Staple tracker (ox.ac.uk)
把模板特征方法DSST(基于DCF)和统计特征方法DAT结合:
相关滤波模板类特征(HOG)对快速变形和快速运动效果不好,但对运动模糊光照变化等情况比较好;而颜色统计特征(颜色直方图)对变形不敏感,而且不属于相关滤波框架没有边界效应,快速运动当然也是没问题的,但对光照变化和背景相似颜色不好。综上,这两类方法可以互补,也就是说DSST和DAT可以互补结合:
DSST框架把跟踪划分为两个问题,即平移检测和尺度检测,DAT就加在平移检测部分,相关滤波有一个响应图,像素级前景概率也有一个响应图,两个响应图线性加权得到最终响应图,其他部分与DSST类似,平移滤波器、尺度滤波器和颜色概率模型都以固定学习率线性加权更新。
long-term和跟踪置信度
Long-term就是希望tracker能长期正确跟踪,
short-term tracker + detecter配合才能实现正确的长期跟踪。在发现跟踪出错的时候调用自带detecter重新检测并矫正tracker。
LCT(Chao Ma)
LCT加入检测机制,对遮挡和出视野等情况理论上较好
LCT在DSST一个平移相关滤波Rc和一个尺度相关滤波的基础上,又加入第三个负责检测目标置信度的相关滤波Rt,检测模块Online Detector是TLD中所用的随机蔟分类器(random fern),在代码中改为SVM。第三个置信度滤波类似MOSSE不加padding,而且特征也不加cosine窗,放在平移检测之后。
LMCF(MM Wang)
她的知乎专栏也有很多讲解
目标跟踪算法 - 知乎 (zhihu.com)
跟踪置信度: 跟踪算法需要能反映每一次跟踪结果的可靠程度,这一点非常重要,不然就可能造成跟丢了还不知道的情况。生成类(generative)方法有相似性度量函数,判别类(discriminative)方法有机器学习方法的分类概率。有两种指标可以反映相关滤波类方法的跟踪置信度:前面见过的最大响应值,和没见过的响应模式,或者综合反映这两点的指标。
高置信度更新,只有在跟踪置信度比较高的时候才更新跟踪模型,避免目标模型被污染,同时提升速度。第一个置信度指标是最大响应分数Fmax,就是最大响应值(Staple和LCT中都有提到)。 第二个置信度指标是平均峰值相关能量(average peak-to correlation energy, APCE),反应响应图的波动程度和检测目标的置信水平,这个(可能)是目前最好的指标,推荐
LSTM