Target Tracking-TLD分析

TLD简介

对于视频追踪来说,常用的方法有两种,一是使用追踪器根据物体在上一帧的位置预测它在下一帧的位置,但这样会积累误差,而且一旦物体在图像中消失,追踪器就会永久失效,即使物体再出现也无法完成追踪;另一种方法是使用检测器,对每一帧单独处理检测物体的位置,但这又需要提前对检测器离线训练,只能用来追踪事先已知的物体。

TLD是对视频中未知物体的长时间跟踪的算法。“未知物体”指的是任意的物体,在开始追踪之前不知道哪个物体是目标。“长时间跟踪”又意味着需要算法实时计算,在追踪中途物体可能会消失再出现,而且随着光照、背景的变化和由于偶尔的部分遮挡,物体在像素上体现出来的“外观”可能会发生很大的变化。从这几点要求看来,单独使用追踪器或检测器都无法胜任这样的工作。所以作者提出把追踪器和检测器结合使用,同时加入机器学习来提高结果的准确度。

 

TLD组成

正如TLD全称Tracking-Learning-Detection,TLD就是由这三个模块跟踪模块、学习模块、检测模块组成。

 

三个模块简介

这里先简单地对TLD中这三个模块做个介绍,更详细的内容会在之后介绍

  • 跟踪器Tracker

跟踪器就是用来分析跟踪的目标在视频的帧与帧之间的运动趋势,从而预测目标在下一帧中可能出现的位置。可以认为本质和传统的Tracker没什么两样,都是提前选定一个初始目标模型,作为预测的位置出的图像是否为跟踪目标的评判依据。

  • 检测器Detector

将视频中的每一帧视为独立的图像,从而对图像内的物体进行检测,是否有要跟踪的目标。可能在一幅图像中检测器会检测出多个可能的结果

  • 学习模型Learning Model

用来评估检测器的检测结果,更新用于训练检测器的训练样本集,从而实现对检测器的更新。

 

TLD跟踪过程以及三个模块在TLD中的相互关系

在一开始接触TLD的时候,对“学习模型以Tracker的跟踪结果作为基准,来评估Detector”的这一过程感到不解:倘若如此,Detecor似乎完全对跟踪过程没有起到什么实质性的作用。除了不停地在训练Detector,但是这个Detecor又对跟踪的过程没有起到帮助。所以接下来要好好介绍一下用TLD来实现目标跟踪的过程:

1.

Tracker和Detector在目标跟踪的系统中是并行运行的,但是最终的跟踪结果,是优先考虑Tracker的跟踪结果,只有在Tracker的跟踪结果不满足某一条件(这一条件,可以是某一种衡量Tracker预测位置处的图像和初始目标模型的相似度的参数与设定的阈值之间的关系,发生情景例如目标受到遮挡,跟丢...)时,并且Detecor的检测结果(可能有多个可能结果,选择其中表现最好的)满足某一条件,可以作为跟踪的结果时,Detector检测到的这一个区域则作为最终的跟踪结果。可以说,Detector是Tracker的备胎,Plan B。

在这里可能会有疑问:如果Detecor能及时在Tracker跟踪结果出来后得出检测结果,即Detector速度足够快,那为什么不直接使用Detecor的检测结果作为跟踪结果,直接使用Detector通过detect来实现跟踪,反而还要使用容易受到遮挡影响跟踪效果的Tracker来跟踪且以其跟踪结果作为优先选择对象呢?其实之所以不直接使用Detector对图像进行detect来进行跟踪的原因并不是因为Detect的时间长,而是要训练一个足够强大的Detector需要有足够的训练集以及有提前的一段时间来进行离线训练,而这就难以满足实时性跟踪的需求了,毕竟你需要在跟踪一个目标之前专门对这个视频进行一个Detecor的训练。这也就是TLD能在实时性目标跟踪上应用的原因,同时也可以看到,TLD在能满足实时性目标跟踪的需求的同时,还引入了Detector,能够提升跟踪的鲁棒性,解决遮挡等因素带来的问题。所以个人认为,TLD的优秀之处就在于,能在实时性跟踪的要求下,引入传统下无法实现实时跟踪的、更具有鲁棒性的Detector。

2.

在Tracker正常跟踪时,Detector是受到监督的一方。此时学习模型起到作用,利用P-N约束条件(P-N Constraint),以Tracker的跟踪结果作为基准,来衡量Detector的检测结果的好坏,并且更新这些训练样本的标签(P-将检测为反例实为正例的标签更新为正例的标签,N-将检测为正例实为反例的标签更新为反例的标签),同时将Tracker跟踪过程中(例如跟踪轨迹上的、远离跟踪轨迹的)一些图像块(Patch)做上标记,作为样本加入训练样本集中提供给Detector的训练,再通过对Detector的训练使Detector得到更新。

也就是说,Tracker正常工作时,学习模型就从Tracker的工作过程对训练Detector的训练集进行更新,从而更新Detector,使其更为强大。TLD的精彩之处就在这里,并不像传统的仅仅使用Detector的detect来实现跟踪的算法,在Detector进行detect之前需要提供一段时间用于训练,而是在这段时间内用传统的Tracker先进行跟踪,在Tracker跟踪的过程中去训练这个Detector,所以从某种角度来说,这个Tracker有一点给Detector训练起到时间上的缓冲的作用。

3.

当Tracker预测到的区域不够理想时,不满足1.中描述的需要的条件时,需要去判断Detector detect到的区域是否满足要求,如果满足,则选择最优的那个区域作为最终跟踪的结果,同时,重新初始化Tracker。所谓对Tracker的初始化,就是重新设定Tracker的搜索窗,以及初始目标对象。将Tracker 的搜索窗和初始目标对象都设置为当前帧中,Detector detect到的最优的区域以及区域所对应的图像。在下一帧中,重新启动Tracker,循环进行1. 2. 3.的过程。直到Tracker和Detector都没能得到最终的目标区域,则表示跟踪失败,跟踪结束。

以上就是TLD的跟踪流程以及三个模块在TLD中的相互关系。

 

 

TLD算法具体实现

  • Tracker:中值光流法。Zdenek Kalal给出了一种依据FB误差绘制误差图(Error Map)筛选最佳追踪点的方法,但并不适用于实时追踪任务,就不详细介绍了。这里只介绍在TLD中确定追踪点的方法。首先在上一帧t的物体包围框里均匀地产生一些点,然后用Lucas-Kanade追踪器正向追踪这些点到t+1帧,再反向追踪到t帧,计算FB误差,筛选出FB误差最小的一半点作为最佳追踪点。最后根据这些点的坐标变化和距离的变化计算t+1帧包围框的位置和大小(平移的尺度取中值,缩放的尺度取中值。取中值的光流法,估计这也是名称Median-Flow的由来吧)。
  • Detector:采用级联分类器。三级分别是
  1. 图像元方差分类器(Patch Variance Classifier)。计算图像元像素灰度值的方差,把方差小于原始图像元方差一半的样本标记为负。论文提到在这一步可以排除掉一半以上的样本。
  2. 集成分类器(Ensemble Classifier)。实际上是一个随机蕨分类器(Random Ferns Classifier),类似于随机森林(Random Forest),区别在于随机森林的树中每层节点判断准则不同,而随机蕨的“蕨”中每层只有一种判断准则。可以使用多个随机蕨分类器,将它们集成,这样能提高输出结果的准确性。
  3. 最近邻分类器(Nearest Neighbor Classifier)。计算新样本的相对相似度,如大于0.6,则认为是正样本。
  • Learning Model:P-N约束条件(P-N Constraint)

 

参考博文

流程图:https://www.cnblogs.com/universe42/p/4498061.html

TLD简介以及TLD算法具体实现:http://johnhany.net/2014/05/tld-the-theory/

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值