opentld

来源:互联网 发布:wps word表格数据计算 编辑:程序博客网 时间:2024/05/19 13:30

OPENTLD是捷克的一个博士开发的一个长时间对运动目标进行跟踪的算法。算法由三部分构成:1、Tracking 2、Detection 3、Learning。

1:Tracking:用median_flow_LK进行跟踪。但是因为部分遮挡、运动目标移出视线范围等因素long-term进行跟踪将使得跟踪失败。

2:Detection:利用semi_supervised方法训练一个on-line bin-classification。针对每一帧检测跟踪目标。

3:Learning:利用每一帧的结果对bin-classification进行学习,P-N方法纠正模型参数。


下面针对源码及论文做一个模块流程的梳理:

1、创建Grids:对InitBox的width、height以及Image的width、height利用minWidth、minHeight、scale计算有多少级Box的level。对每个level的Box的width、height从Image的(1、1)开始以0.2倍宽高进行偏移,计算总共有多少个boxes。比如对于w:94 h:70的InitBox 在W:640 H:480的Image中,当minWidth、minHeight为24时有15个不同level的boxes。每个level的box遍历全图将生成总共273254个boxes。

2、选取featureData:对每个box的特征提取利用的是类似于LBP的2bit特征。间隔采样:0.1到0.9的奇数生成5*5=25个点、0-0.8的偶数生成4*4=16个点。对41个特征点加上随机偏差,总共(25+16)*4=164个特征点。而生成决策树采用是是random-forest。树的数目为10,每棵树的深度为13。所以在164个特征中随机选取130个特征。   

3、随机森林:随机森林就是多棵决策树、通过多棵树投票来进行决策。因为决策树受样本随机性的影响比较明显,容易导致过学习。而随机森林对样本数据进行bootstrap自举重采样(自举重采样:每次从原来的N个训练样本中有放回的随机抽取N个样本,包括可能的重复样本)、构造决策树的过程中,每次从候选特征中随机选取m个特征作为当前节点下决策的备选特征。决策时,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。在TLD中,有10棵树,每棵树的深度为13,则每棵树将生成8192个叶节点、总共81920个patterP patterN。

4、生成正负样本:作者说可以利用structure信息进行semi-supervised学习。structure信息:与InitBox\lastBox的重叠度OverLap作为label样本的依据,OverLap大的为正样本、小的为负样本。OverLap=MixtureArea/SumArea。生成正样本:取OverLap得分前10的boxes,判断是否大于Thres(0.6),将大于阈值的box利用几何变换(角度、尺度、偏移、噪声)生成30/20个仿射的boxes。总共将生成近似300/200个正样本boxes。计算每个正样本box在随机森林中每棵树的决策叶节点index。同时将OverLap得分最高的box作为bestBox,归一化为一个标准的Patch,计算Pach中每个像素点的标准差。生成负样本:取OverLap低于Thres(0.2)的boxes作为候选boxes样本;计算每个box的variance,滤去方差小于一半InitBox方差的boxes;计算剩下的boxes在随机森林中每棵树的决策叶节点。同时随机选取100个负样本,归一化到标准的Patch,计算每个Patch的标准差。

5、集合分类器(随机森林)训练:将负样本一分为2,一半作为训练样本、一半作为测试样本。将正样本和一半负样本作为集合分类器的训练样本。计算每个样本的分类结果。当label=1,voteResult<5时分类器和structure信息矛盾。P-expert将分类错误的样本加入正训练集中,增加决策叶节点的patterP权重。当label=0,voteResult>5时分类器和structure信息矛盾。N-expert将分类错误的样本加入负样本训练集中,增加决策叶节点的patterN权重。相当于用已有的structure信息纠正分类器。bootstrap=2,利用自举重采样重新训练决策树。(我认为就相当于一个迭代终止,使得结果收敛,减少过拟合。)测试样本主要用来计算集合分类器以及下面将要介绍的最近邻分类器的分类阈值。

6、最近邻分类器(在线模型)训练:NNClassifier同样需要正负样本进行训练。利用4生成的正负样本模型来训练on-line正负模型。计算每个测试样本与在线模型之间的相似度:conf1、conf2、isin[3]。maxValueP为与正样本模型的最大相似度、maxValueN为与负样本模型的最大相似度。dp=1-maxValueP。dn=1-maxValueN。conf1=dn/(dp+dn)。maxValueP2为与前一半正样本模型(顺序插入)的最大相似度。dp2=1-maxValueP2。conf2=dn(dp2+dn)。isin[0]表示是否存在与样本完全匹配的正样本模型,isin[1]存放与样本最匹配的正样本索引,isin[2]表示是否存在于样本完全匹配的负样本模型。因为训练样本也是利用structure信息得到的已标记的样本。所以在线模型的训练主要是记录目标的形变以及干扰,使得分类器能够适用目标的形变,同时能够较好的避免干扰。故当label=1,但是conf1、conf2较小时,分类器输出的label=0,与structure信息矛盾,说明跟踪目标发生了形变,更新分类器,将正样本加入正样本模型。当label=0,但是conf2、conf2较大时,最近邻分类器输出的label=1,与structure信息矛盾。将样本加入负样本模型,使得分类器能够适用这种噪声干扰。随着时间推移正负样本模型将越来越多。

7:Detection模块:检测模块主要是逐级滤波,这里用的是三级:1、方差分类器 2、集合分类器 3、最近邻分类器。1、方差分类器:方差小于InitBox/lastBox的一半方差的box将滤去。2、3如上面介绍。最后如果生下了boxes则检测成功,否则失败。

8:Learning:当检测成功或者跟踪成功,即lastBox的置信度大时才进行学习更新。主要是集合分类器和最近邻分类器的学习。集合分类器的正负样本生成模式与构建分类器时近似一样,只是将InitBox替换为lastBox。也是采用P-N策略进行分类器的更新。最近邻分类器的正样本与构建时的生成模式一样,负样本则是将Detection经过1、2滤波后剩下的boxes计算其与lastBox的OverLap,取OverLap<Thres(0.2)的boxes作为负样本。说白了都是利用structure信息生成带有标签的正负样本。

9:Tracking:主要是利用median-fow-LK进行前后帧目标的跟踪。

10:总结:我看的源码是师兄从matlab改的C版本代码,而且与最新的相比版本也较老,但是核心的东西肯定是一样的。C版本的效果没有matlab的好,当然这和我们自己写的好坏有一定关系。我分析C版本效果不如matlab的原因主要是集合分类器这块。我们生产的随机特征不太好。因为很多时候经过1、2滤波器滤波的boxes只有几个、或者没有,这与作者在论文中提到的将近有50个矛盾。第一次看感觉自己看懂了,也写了注释,但是过了将近一年,再回忆其中概要还是很不清楚,所以在第二次看完之后完全利用自己的语言做了一个白话总结。

0 0
原创粉丝点击