Tracking————TLD跟踪
文章目录
TLD
- TLD的matlab版本是作者的原始版本,而C++版本跟踪效果很差,非常差,粗略估计可能是因为c版本中生成正样本训练数据没有把图像patch进行仿射变换,而是直接输入了200个一模一样的正样本。
- TLD中分为4大模块,检测模块,跟踪模块,综合模块和学习模块。检测模块利用训练的分类器得到检测结果,而跟踪模块则是利用传统的LK光流法进行跟踪 ,综合模块根据检测器和跟踪器的结果进行分析,学习模块实时迭代训练分类器。事实上,目前主流的跟踪算法几乎是相当于TLD中的检测器模块,通过学习分类器得到目标的生成模型或是判别模型来获取跟踪结果。
- 综合模块中以跟踪器为准,对检测得到的若干个结果进行聚类,判断距离跟踪结果较远的类别中和上一帧跟踪结果的相似度,如果更大并且这样的类别只有一个,就以这个类为准重新初始化进行跟踪;否则对跟踪结果周围的检测器的结果进行累加求平均获得当前帧的结果。
学习模块主要是利用PN进行学习。以跟踪结果为主,对检测器判断出的跟踪结果如果是负样本,则把这个负样本变成正样本加入到学习中去;对检测器的结果距离稍远的就加入到负样本中进行学习。(不过在c版本程序中没有看到PN学习,只是简单地在当前帧结果附近选择正负样本进行训练,同时如果当前帧的分类结果是负样本的话就不训练)
在2013年的一篇综述Online Object Tracking: A Benchmark中,作者比对了Struck、TLD、OAB、CT等方法。综合对比来看,struck或者是压缩跟踪这类算法可以很好地提取出目标的本质特征,并进行快速的跟踪和迭代,在前几帧不需要提供大量的训练数据。TLD事实上更类似一个工程算法,在跟踪前几帧需要提供很稳定的特征,目标不能有快速的大幅度变化,否则很容易跟丢,当前几帧平稳训练好之后,训练器的分类性能才能得到提高。