不看代码粗略了解TLD
来源:互联网 发布:网络红包潮阅读答案 编辑:程序博客网 时间:2024/05/19 18:45
网上有好多TLD详解,大多都是对着作者给出的代码的详细分析。对于像我这样,不打算深入研究TLD的人,有点不太必要。看起来有点费劲。
如果想了解详细的TLD代码解析,请看这篇文章:http://blog.sina.com.cn/s/blog_6163bdeb0102eh7b.html 很全,很好。
想了解TLD算法大概的,请往下看。
虽说是粗略了解,但是一些基础知识还是必须的。
首先说说作者用到的PN学习方法:
PN学习(PN learning)是一种利用带标签的样本(一般用于分类器训练,以下均称之为训练样本)和不带标签的样本(一般用于分类器测试,以下均称之为测试样本)之间存在的结构性特征(见下面的解释)来逐步(学习)训练两类分类器并改善分类器分类性能的方法。
正约束(Positive constraint)和负约束(negative constraint)用来限制测试样本的标签赋值过程,而PN学习正是受正负约束所操控的。PN学习对分类器在测试样本上的分类结果进行评估,找到那些分类结果与约束条件相矛盾的样本,重新调整训练集,并进行重复迭代训练,直到某个条件满足,才停止分类器训练过程。在目标跟踪过程中,由于被跟踪目标的形状、姿态等容易发生变化,造成目标跟丢的情况时有发生,所以,在这种情况下,对被跟踪目标的在线学习和检测是个很好的策略。而PN学习正好可以在此处大显身手。
很多学习算法都假设测试样本是彼此独立的,然而,在计算机视觉的应用中,有些测试样本的标签却存在彼此依赖的关系。标签之间存在的这种依赖关系,我们称之为结构性的。例如,在目标检测过程中,我们的任务是对图片中目标可能存在的所有区域赋予标签,即:该区域属于前景或者背景,而这里的标签仅能是前景或背景两者之一。再比如,在利用视频序列进行目标跟踪过程中,紧邻被跟踪目标运动轨迹线的区域,可以认为是前景标签,而远离轨迹线的区域,可以认为是背景标签。而前面提到的正约束则表示所有可能的标签为正的模式,例如,此处的紧邻轨迹线的区域;负约束表示所有可能的标签为负的模式。
通过以上的分析,不难发现,PN学习可以定义为一下的过程:
(1)准备一个数量较少的训练样本集合和一个数量很大的测试样本集合(随着跟踪的进行,测试样本必然越来越多)。
(2)利用训练样本训练一个初始分类器。同时,利用训练样本对(先验)约束条件进行相应的调整。
(3)利用分类器对测试样本赋予标签,并找出分类器赋予的标签同约束条件相矛盾的那些样本;
(4)将上述相矛盾的样本重新赋予标签,将其加入训练样本,重新训练分类器;
反复迭代上述过程,直到满足某个约束条件。
然后再说说TLD
TLD(Tracking-Learning-Detection)是一个人在其攻读博士学位期间提出的一种新的单目标长时间(long
对于长时间跟踪而言,一个关键的问题是:当目标重新出现在相机视野中时,系统应该能重新检测到它,并开始重新跟踪。但是,长时间跟踪过程中,被跟踪目标将不可避免的发生形状变化、光照条件变化、尺度变化、遮挡等情况。传统的跟踪算法,前端需要跟检测模块相互配合,当检测到被跟踪目标之后,就开始进入跟踪模块,而此后,检测模块就不会介入到跟踪过程中。但这种方法有一个致命的缺陷:即,当被跟踪目标存在形状变化或遮挡时,跟踪就很容易失败;因此,对于长时间跟踪,或者被跟踪目标存在形状变化情况下的跟踪,很多人采用检测的方法来代替跟踪。该方法虽然在某些情况下可以改进跟踪效果,但它需要一个离线的学习过程。即:在检测之前,需要挑选大量的被跟踪目标的样本来进行学习和训练。这也就意味着,训练样本要涵盖被跟踪目标可能发生的各种形变和各种尺度、姿态变化和光照变化的情况。换言之,利用检测的方法来达到长时间跟踪的目的,对于训练样本的选择至关重要,否则,跟踪的鲁棒性就难以保证。
考虑到单纯的跟踪或者单纯的检测算法都无法在长时间跟踪过程中达到理想的效果,所以,TLD方法就考虑将两者予以结合,并加入一种改进的在线学习机制,从而使得整体的目标跟踪更加稳定、有效。
简单来说,TLD算法由三部分组成:跟踪模块、检测模块、学习模块;如下图所示
其运行机制为:检测模块和跟踪模块互补干涉的并行进行处理。首先,跟踪模块假设相邻视频帧之间物体的运动是有限的,且被跟踪目标是可见的,以此来估计目标的运动。如果目标在相机视野中消失,将造成跟踪失败。检测模块假设每一个视帧都是彼此独立的,并且根据以往检测和学习到的目标模型,对每一帧图片进行全图搜索以定位目标可能出现的区域。同其它目标检测方法一样,TLD中的检测模块也有可能出现错误,且错误无非是错误的负样例和错误的正样例这两种情况。而学习模块则根据跟踪模块的结果对检测模块的这两种错误进行评估,并根据评估结果生成训练样本对检测模块的目标模型进行更新,同时对跟踪模块的“关键特征点”进行更新,以此来避免以后出现类似的错误。TLD模块的详细;流程框图如下所示:
在详细介绍TLD的流程之前,有一些基本知识和基本概念需要予以澄清:
基本知识:
在任意时刻,被跟踪目标都可以用其状态属性来表示。该状态属性可以是一个表示目标所在位置、尺度大小的跟踪框,也可以是一个标识被跟踪目标是否可见的标记。两个跟踪框的空间域相似度是用重叠度(overlap)来度量,其计算方法是两个跟踪框的交集与两者并集的商。目标的形状采用图像片(image
通过以上两部分应该基本知道TLD是咋工作的了:
1、鼠标选择目标,得到正负训练样本(目标区域附近的为正样本,其他地方为负样本),训练分类器。
2、在下一帧中全屏搜素,每个搜索位置为测试样本,用三个级联的检测器(图像区方差、分类器集合、最近邻)匹配测试样本与目标的相似性,只有三个全匹配才认为是匹配,确定为正样本,不匹配的为负样本。
3、将新得到正负样本加入训练样本,更新分类器。
4、利用光流法跟踪目标。其实检测过程已经完成了跟踪,这里主要是增加目标遮挡和离开屏幕的情况。
当然,还有很多细节,比如目标模型的保持,模型的更新,三个检测器的计算公式、特征选择等,那就去研究作者的论文吧。
【致谢】http://blog.csdn.net/carson2005/article/details/7483027
【致谢】http://blog.sina.com.cn/s/blog_4a540be601016id6.html
- 不看代码粗略了解TLD
- 粗略了解图像搜索
- 粗略了解抽象工厂类
- HM代码粗略介绍
- HM代码粗略介绍
- HM代码粗略介绍
- HM代码粗略介绍
- TLD代码分析全过程
- TLD代码详尽注释
- TLD C++版代码
- C# asp.net MVC4 粗略了解
- 2014/03/04粗略了解数据结构
- h5粗略了解(含页面拖拽)
- Zookeeper 学习(粗略,仅供了解)
- 粗略看Hibernate的代码
- TLD 代码学习(一)
- vc版本的TLD代码
- 粗略统计eclipse中代码行数
- Codeforces 439C Devu and Partitioning of the Array
- qt 调用dll
- 一个基于src和ashx的无刷新下载文件和更新图片的方法
- 云计算
- C和指针 学习笔记-2.指针
- 不看代码粗略了解TLD
- FFmpeg音视频同步的问题
- 冒泡排序&选择排序(c 语言函数版)
- SQLServer恢复表级数据
- 打印数组中的重复元素
- qt 进程通信
- 一次改变世界的日食:广义相对论预言被证实95周年
- PowerDesigner使用教程
- 云计算的意思