TLD(Tracking-Learning-Detection)一种目标跟踪算法

TLD(Tracking-Learning-Detection)一种目标跟踪算法原文:http://blog.csdn.net/mysniper11/article/details/8726649视频介绍网址:http://www.cvchina.info/2011/04/05


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  原文:http://blog.csdn.net/mysniper11/article/details/8726649

  视频介绍网址:http://www.cvchina.info/2011/04/05/tracking-learning-detection/

  TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek Kalal在其攻读博士学位期间提出的一种新的单目标长时间(long term tracking)跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被跟踪过程中发生的形变、部分遮挡等问题。同时,通过一种改进的在线学习机制不断更新跟踪模块的“显著特征点”和检测模块的目标模型及相关参数,从而使得跟踪效果更加稳定、鲁棒、可靠。

  对于长时间跟踪而言,一个关键的问题是:当目标重新出现在相机视野中时,系统应该能重新检测到它,并开始重新跟踪。但是,长时间跟踪过程中,被跟踪目标将不可避免的发生形状变化、光照条件变化、尺度变化、遮挡等情况。传统的跟踪算法,前端需要跟检测模块相互配合,当检测到被跟踪目标之后,就开始进入跟踪模块,而此后,检测模块就不会介入到跟踪过程中。但这种方法有一个致命的缺陷:即,当被跟踪目标存在形状变化或遮挡时,跟踪就很容易失败;因此,对于长时间跟踪,或者被跟踪目标存在形状变化情况下的跟踪,很多人采用检测的方法来代替跟踪。该方法虽然在某些情况下可以改进跟踪效果,但它需要一个离线的学习过程。即:在检测之前,需要挑选大量的被跟踪目标的样本来进行学习和训练。这也就意味着,训练样本要涵盖被跟踪目标可能发生的各种形变和各种尺度、姿态变化和光照变化的情况。换言之,利用检测的方法来达到长时间跟踪的目的,对于训练样本的选择至关重要,否则,跟踪的鲁棒性就难以保证。

推荐大家多多访问国外作者的主页:http://info.ee.surrey.ac.uk/Personal/Z.Kalal/

在作者网站上有相关源代码的下载以及他的一些有用的论文的下载:

TLD(Tracking-Learning-Detection)一种目标跟踪算法

原作者的源代码为Matlab以及C混合编程的,已经有人将C++版本的源代码分享:http://gnebehay.github.com/OpenTLD/

Github上的源代码也可以使用:https://github.com/arthurv/OpenTLD

CSDN上比较有用的博客有:

 

(1)《庖丁解牛TLD》系列:

http://blog.csdn.net/yang_xian521/article/details/7091587

(2)《再谈PN学习》:

http://blog.csdn.net/carson2005/article/details/7647519

(3)《比微软kinect更强的视频跟踪算法–TLD跟踪算法介绍》

http://blog.csdn.net/carson2005/article/details/7647500

(4)《TLD视觉跟踪技术解析》

http://www.asmag.com.cn/number/n-50168.shtml

(5)《TLD(Tracking-Learning-Detection)学习与源码理解之(一)》

http://blog.csdn.net/zouxy09/article/details/7893011

 

希望这些资料对希望学习TLD算法的人有帮助。

 

来自:http://blog.csdn.net/windtalkersm/article/details/8018980

 

TLD是一种算法的简称,原作者把它叫做Tracking-Learning-Detection。搞视觉的人看到这个名字都会吓一跳,很ambitious的计划。是09年的工作,不算太久,不过也不太新。网上关于这个的资源其实很多,很大程度和作者开放源代码有关。

 

 

 

学习过程中碰到的第一个问题就是资源太多—当然是相对这个领域而言,一般能找到一个忠实再现算法的源码就已经很好了。所以把找到的list一下,虽然有点浪费时间,希望可以对其他人有所帮助。具体的细节就不多说了,有很多很棒的分析也列在下面,比如zouxy09写的源码注释,实在不能再详细了。如果硬要找茬,那就是大段的文字让人头晕,也没怎么排版。我倒想画几个简单的图补充一下,不知有什么好点的画图程序推荐(latex, or GNUPlot?没用过)

 

源代码资源:

 

1. 原作者 Zdenek Kalal

 

作者主页: http://info.ee.surrey.ac.uk/Personal/Z.Kalal/

 

源代码页: https://github.com/zk00006/OpenTLD

 

编程语言:Matlab + C

 

2. Alan Torres版

 

源代码页:https://github.com/alantrrs/OpenTLD

 

实现语言:C++

 

3. arthurv版

 

源代码页:https://github.com/arthurv/OpenTLD

 

实现语言:C++

 

注:和上面的没有发现任何区别

 

4. jmfs版

 

源代码页:https://github.com/jmfs/OpenTLD

 

实现语言:C++

 

注:和上面两个没有区别,只不过加入了VS2010工程文件,理论上可以直接在Windows下编译通过。不过opencv检测不到作者的webcam(!!!),所以他用了另一个VideoInput类来handle摄像头输入。

 

 

 

This is an adaptation of arthurv's fork of OpenTLD (https://github.com/arthurv/OpenTLD) 
to be immeadiately runnable in Visual Studio 2010.

 

5. Georg Nebehay版 (终于有个不一样的了。。。。)

 

源代码页:http://gnebehay.github.com/OpenTLD/

 

注1:这个的好处是提供可执行文件下载(Ubuntu 10.04和Windows)。BUT, as you would expect,基本上到了你的机器上都跑不了。还是自己老老实实build吧。

 

注2:这个版本需要安装Qt。不过好像作者关掉了Qt的选项(相关代码还在),所以可以编译,但无法显示结果

 

注3:CSDN下载上有个“openTLD Qt 版“,就是这个版本。不过加了VS的工程文件—在我的机器上还是不能PnP, don’t bother

 

http://download.csdn.net/download/muzi198783/4111915

 

 

6. Paul Nader版(又一个Qt 版!)

 

QOpenTLD: http://qopentld.sourceforge.net/

 

源代码页: http://sourceforge.net/projects/qopentld/

 

注1:需要OpenCV和Qt。 原系统要求Qt 4.3.7OpenCV 2.2。

 

注2:Windows和Linux下都提供了编译工程或makefile。估计也是唯一一个移植到Android平台下的TLD!

 

7. Ben Pryke版(又一个student project!)

 

源代码页:https://github.com/Ninjakannon/BPTLD

 

注:依然是Matlab+C/C++的混合实现。亮点是有很详细的Documentation(8页),介绍了算法的理解和实现细节。可以帮助理解原算法

 

想说的话:

 

1. 分享:前段时间把 TLD::init(…)看完了,本想一鼓作气,其他的事太多只好放下。不过我对detection和tracking比较熟,init中已经把learning作了一遍,看懂了剩下的就容易了。现在重新捡起,无意中发现了zouxy09的注释,省了太多力气,半天就看完了。很多细节不用自己去抠— 我们常抱怨这资源那文档太少,羡慕老外能力强,动作快,和他们愿意分享关系太大。经常看到一些不错的文章收藏起来,过几天去看居然删了!

 

可以理解可能是开公司要保密,但如果害怕别人知道了自己的思路就做不下去,那还是不要在这个领域做了。算法只是思想,谁也垄断不了。算法也一定是不断更新的, 抱着一个算法不放也存活不了几年。原作者也基于这个技术开公司了,也没见他们基于这个限制别人使用。SIFT,SURF都patent了也没听说赚了大钱,kinect告诉你算法也实现不了。要保密的是实现细节

 

2. 比较: 终于看完了实现,总的感觉这个算法还是更象工程应用(engineering)而不是理论突破(也不能要求太多了是不是)。感觉这么结合后并不一定会比单个的跟踪(tracking)或检测(detection-by-classification)模块作的更好,毕竟还是没有解决外观(appearence)和尺度(scale)变化这两个根本难题。 不过这种框架反而应该在实际中非常实用,因为———-可调的参数太多了!

 

TLD相信很多人都试过了,实时性很多人都在抱怨,而且拿到自己的视频上总要调些参数效果才好。

 

比较起来更喜欢今年ECCV上Kaihua Zhang的Compressive Tracking:理论高深的吓人(开玩笑),源码简单的吓人。而且是目前为止我试过的off-the-shelf的tracker中跟踪效果最好的,不用调任何参数,绝对实时—-代码那么少,想不实时都难吧(顺便说一句作者的blog就在上面提到过)。这才是做研究的方法,有个强大的理论做支撑,实现可以很简单却不会影响效果。所以如果搞数学的人愿意做应用,很多人都会下岗

 

http://www4.comp.polyu.edu.hk/~cslzhang/CT/CT.htm

 

另一个PWP(Pixel-Wise Posteriors),publish时间和TLD差不多,性能看上去也很美,不过作者说要开源,一直没有兑现。是个遗憾。个人觉得level set对部分遮挡效果应该很好,做到实时也不是难事

 

http://www.robots.ox.ac.uk/~cbibby/research_pwp.shtml

 

3. 总结:TLD其实是一个非常合适的入门和进阶算法:

 

a. 有理论,有高质量的paper(BMVC, CVPR, ICPR, 最后PAMI)

 

b. 有源代码!Matlab, C++, Windows, Linux, …..你还想要啥?

 

c. 有不同大牛小牛分享的详细的介绍和详细的代码注释(几乎每一行都解释到了)!

 

4. 牵涉面广,涉及到detection, tracking, classifcation,传统的视觉技术就是这么硬梆梆的划分的三大类。研究完了对每一部分多少能有点心得。

 

The End

 TLD源码理解

 

TLD(Tracking-Learning-Detection)学习与源码理解之(一)

 

TLD(Tracking-Learning-Detection)学习与源码理解之(二)

 

TLD(Tracking-Learning-Detection)学习与源码理解之(三)

 

TLD(Tracking-Learning-Detection)学习与源码理解之(四)

 

TLD(Tracking-Learning-Detection)学习与源码理解之(五)

 

TLD(Tracking-Learning-Detection)学习与源码理解之(六)

 

TLD(Tracking-Learning-Detection)学习与源码理解之(七)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167214.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 什么是Deeplink?以及Deeplink的原理

    什么是Deeplink?以及Deeplink的原理先说一个日常场景帮大家理解。最近双十一、双十二,不知道大家有没有被亲友们发的某宝、某东、或拼夕夕的各类信息轮番轰炸?小编的亲友群、闺蜜群里常年有这类链接挂着,小红薯的笔记分享,某宝的化妆品、衣服链接分享等等,这一个个的分享链接织成一张张网,真可谓是增加亲友亲密度,快速获取优质好物的利器。这背后有个特别容易忽视却又极其重要的知识点。比如你在社交媒体上分享给翠花一个某App上的精选好店,翠花想要查看有几种操作方式:l如果翠花已经安装了该App,那她只要点开链接就可以跳转到App;l如果…

    2022年6月16日
  • JDK环境变量配置(win10)[通俗易懂]

    JDK环境变量配置(win10)[通俗易懂]前言对于每一位做Java开发人员来说,JDK是必须要安装的,安装好JDK,其实并没有结束,一般情况下还需要配置JDK的环境变量,给大家介绍一下如何在Win10下配置JDK,并检测是否配置成功。步骤使用Windows图标+R,快速打开“运行”操作界面,并输入cmd,回车确认。在命令行输入java–version;如果能显示java的版本信息,则表示不需要配置,下面的步骤也不需要了。打开系统环境变量配置的页面。具体操作是:打开开始菜单,找到“此电脑”,然后右键“更多”→“属性”。在弹出的页面,

    2022年7月21日
  • 惨挂阿里笔试题[通俗易懂]

    惨挂阿里笔试题[通俗易懂]昨天阿里笔试,惨挂到一算法题,现分享此题,集网友智慧,看如何解答此题。 请大神们不吝赐教哦!

    2022年5月23日
  • linux如何安装nodejs_js 循环里面结束整个方法

    linux如何安装nodejs_js 循环里面结束整个方法方法一:源码包安装官网下载centos下载最新版10.9https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xzmkdir/opt/software/&&cd/opt/software/tar-xvfnode-v10.9.0-linux-x64.tar.xzmvnode-v10.9.0-linux-x64nodejs建立软连接,变为全局①ln-s/opt/software……

    2022年8月31日
  • ZooKeeper的Paxos算法[通俗易懂]

    ZooKeeper的Paxos算法[通俗易懂] PaxosPaxos 这个算法是LeslieLamport在1990年提出的一种基于消息传递的一致性算法Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。 part-timeparliament PaxosMadeSimple里这样描述Paxos算法执行过程: prepare阶段: proposer【申请人】选择一个提案编号n并将prepa…

    2022年10月29日
  • 探秘Java中的String、StringBuilder以及StringBuffer

    探秘Java中的String、StringBuilder以及StringBuffer探秘Java中String、StringBuilder以及StringBuffer相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一

    2022年7月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号