TLD之扯淡篇(一)

Reference:

[1] Tracking-Learning-Detection,PAMI 2012

[2] Forward-Backward Error: Automatic Detection of Tracking Failures,ICPR 2010

CodeMatlabC++我的完整注释(C++)

作者主页资料完备官方TLD 1.0&2.0

前人的部分博客:

TLD算法流程说明--episode

Tracking-Learning-Detection TLD解析

TLDTracking-Learning-Detection)学习与源码理解

我的:TLD之检测篇(二)TLD之跟踪篇(三)TLD之学习篇(四)

TLD之扯淡篇

电影《极品飞车》

    经常看大片的人,对于这样的场景,一定不会陌生:猪脚(车技一流)驱车逃逸,遭N多警车围追堵截,与此同时,天上还会有直升飞机,场面异常震撼。好了,问题来了,大家有没有想过,为什么派出警车的同时还要派出直升飞机呢?我觉得吧,作为电影造势是必须的,还有就是空中打击具有无可比拟的优势。不过,今天我只从目标跟踪角度看待这个问题,从而引出今天的猪脚,TLD目标跟踪算法

     假设我们的目的是要地面抓捕,那首先得保证能跟踪到目标,待时机成熟,再实施抓捕,从跟踪的角度来讲,直升飞机是有助于跟踪目标的。待小生细细道来:

    Case 1: 对于车辆少,道路分叉少的情况下,警车只要用肉眼便可跟上目标,直升飞机显得多余,当然,这是比较理想的情况,不过身为猪脚,肯定没这么笨。

    Case 2:,于是他钻到了繁华的商业区,车多,岔路多,导致警车的行动不便,视野也容易被遮挡。在一个高楼林立的三岔路口,一辆飞驰而过的救护车,成功地掩护了我们的猪脚,于是猪脚就跟丢了……,但是呢,在直升机眼皮底下,想逃走就没那么容易了。于是,警车在直升机的引导下,重新找到了我们那脚底抹了香油的猪脚。抽象一下,车的可视范围是一条线,而直升飞机的可视范围是面。

    Case 3: 不过,身为猪脚,必须高智商,为了躲避直升飞机,它中途挟持了一个听话的配角,于是他俩愉快地换车了。由于其迅雷不及掩耳之速,加上直升飞机距离地面太远,猪脚又很小,因而视物模糊,结果,直升飞机并没有察觉。不幸的是,警车里面的人可都看在眼里呀(假设哈)……于是警车里的人及时向直升飞机里的人反馈,于是直升飞机又重新锁定了目标。

TLD概述

    目标跟踪的应用场合很多,很多也挺有意思,下面这张图是我从这里盗来的……

    TLD是一个比较有名的目标跟踪算法,作者甚至用这个算法开了一个公司。TLD的思路和上面漏洞百出的例子(不过,我从中得到了一些提高速度的启示)很相似,它有三大猪脚,Tracker(跟踪,简称小T),Detector(检测器,小D),Leaner(简称小L)。小T就相当于警车,小D就相当于直升飞机,小L不太好打比方,总之,凡是要综合小D和小T的信息,就是小L要干的活,比如小T跟丢了之后,小D告诉他目标的位置。TLD算法成功的原因就在于它将检测器和跟踪器有机的整合在一起,从而实现了长线跟踪。大伙先看看一个video demo,从视频中可以看得出来TLD是一种单目标跟踪算法,操作很简单,只需要框定要跟踪的目标即可。

TLD框图

    下面介绍TLD的这三大主角,小T,小D,小L,ppt里面的介绍如下:

    Tracker estimates the object motion under the assumption that the object is visible and its motion is limited.

      Detector performs full scanning of the image to localize all appearances that have been observed in the past.

     Learning observes performance of both, the tracker and the detector, identifies errors of the detector and generates training examples to avoid these errors in the future.

    补充说明一下:

    小T是依据上一帧和上一帧中目标所处的位置,来预测当前帧目标出现的位置,具体是使用光流法。所以,小T和警车很像,眼睛得一直盯着车。

    首先注意到小D是使用多尺度sliding windows(滑动窗口)检测方法,所以检测可以看成一个广义的分类问题,于是就需要正负样本来训练分类器。由于目标会不断地变化,比如,跟踪人脸的时候,闭上眼睛,张开嘴巴等变化,这就需要分类器还不仅要认得原始目标而且还得具有一双火眼金睛,能认出目标的七十二般变化,为了修炼这样一双眼睛,就需要把这些变化后的样本加入训练集重新训练分类器,从而让分类器随着目标的变化而不断更新。所以,小D很像盘旋在天空的直升飞机,他只需要瞟一眼就能找到目标,所以他侧重找目标,而不是跟踪。

    小L的作用是综合小D和小T的跟踪结果得到目标所处的区域,同时它还要让小D和小T这两兄弟相互学习

    既然是兄弟,我喜欢分个长幼,哪个靠谱哪个为兄。显然,相对于跟踪的结果而已,检测器的结果一般更靠谱,为什么呢?首先检测器的搜索范围是全局的,找出来的目标是全局最优的,而检测器是局部的,其次,检测器是经过严格训练的,其判断依据是所有历史数据,而跟踪器只不过依据上下两帧的孤立跟踪点,而目标的运动是变幻莫测的,所以小D是兄,小T是弟

    当小D的表现比小T好的时候,小T就得接受小D的结果,即小T要放弃它自己的跟踪结果,接受小D的结果,于是下一帧小T就从小D所认为的位置开始跟踪,对应TLD框图中的re-initialization。

   但是,当小T的结果比小D好的时候,小T得尊敬兄长,所谓长兄为父,所以目标最终的位置,并不一定是小T说了算,它还得参考小D结果。小D表现不好分为三种情况,后面细说。当然,小D还是要跟小T学习,对应TLD框图中的trianing data。

    这里只是泛泛地说明了两种情况,实际上的情况非常多,后面再详细讨论小L。

本文分析的是C++版本,首先记住几个类TLD、 LKTracker、FerNNClassifier,大致对应小L,小T,小D。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页