一是使用追踪器根据物体在上一帧的位置预测它在下一帧的位置,但这样会积累误差,而且一旦物体在图像中消失,追踪器就会永久失效,即使物体再出现也无法完成追踪
二是使用检测器,对每一帧单独处理检测物体的位置,但这又需要提前对检测器离线训练,只能用来追踪事先已知的物体
TLD是对视频中未知物体的长时间跟踪的算法。“未知物体”指的是任意的物体,在开始追踪之前不知道哪个物体是目标。“长时间跟踪”又意味着需要算法实时计算,在追踪中途物体可能会消失再出现,而且随着光照、背景的变化和由于偶尔的部分遮挡,物体在像素上体现出来的“外观”可能会发生很大的变化。
从这几点要求看来,单独使用追踪器或检测器都无法胜任这样的工作。所以作者提出把追踪器和检测器结合使用,同时加入机器学习来提高结果的准确度,于是就有了TLD。。。
TLD架构
嗯,图是盗来的。。。TLD分为三大块:Tracking、Learning、Detection
追踪器的作用是跟踪连续帧间的运动,当物体始终可见时跟踪器才会有效。追踪器根据物体在前一帧已知的位置估计在当前帧的位置,这样就会产生一条物体运动的轨迹,从这条轨迹可以为学习模块产生正样本(Tracking->Learning);
检测器的作用是估计追踪器的误差,如果误差很大就改正追踪器的结果。检测器对每一帧图像都做全面的扫描,找到与目标物体相似的所有外观的位置,从检测产生的结果中产生正样本和负样本,交给学习模块(Detection->Learning)。算法从所有正样本中选出一个最可信的位置作为这一帧TLD的输出结果,然后用这个结果更新追踪器的起始位置(Detection->Tracking);
学习模块根据追踪器和检测器产生的正负样本,迭代训练分类器,改善检测器的精度(Learning->Detection)。
三个模块过程其实相互独立,但是又相互作用的,合作愉快!
下面就分模块的分析...理解的比较肤浅,求轻拍...
Detection
Detection划分为三个阶段:
(1)Patch Variance Classifier计算图像块的方差;
(2)Ensemble Classifier集联分类器;
(3)Nearest Neighbor Classifier最近邻分类;
只有经过这三个阶段而被留下来的图像元就可能会是目标图像元。。
Patch Variance Classifier
也可以利用积分图的方法来计算得到。计算图像元像素灰度值的方差,把样本图像块和目标图像块之间的方差(一般取灰度值计算)小于50%的样本标记为负(Reject)。对一个图像块p,方差计算公式为 。这一步骤就拒绝了超过50%的不包含目标的图像块(例如天空和街道)。同时,方差阈值的选择也会约束目标所能够发生的最大的形变,即如果目标发生的形变过大,图像块会有可能被拒绝。不过,阈值大小是可以自行设定的,可以根据实际问题和应用来调整大小。
Ensemble Classifier
我水平比较渣,这个分类器我卡了蛮久,还是一位远在帝都为人民服雾的大神指点才略懂,比较高大上的随机森林啊啥的我也不大会讲,然后就讲讲我肤浅的认识。。
首先第一帧的时候要产生这个分类器训练样本:
目标包围框中筛选出10个与目标距离最近(重叠度大于0.7)的包围框,对每个包围框做微小的仿射变换(平移10%、缩放10%、旋转10°以内),产生20个图像元,这样就产生200个正样本。再选出若干距离较远的包围框(重叠度小于0.2),产生负样本。这样产生的样本是已标签的样本,把这些样本放入训练集,用于更新分类器的参数。
然后测试样本呢就是后来的帧,也就是对每帧用不同尺寸的扫描窗(scanning grid)对图像进行逐行扫描,每在一个位置就形成一个包围框(bounding box),包围框所确定的图像区域称为一个图像元(patch),图像元进入机器学习的样本集就成为一个样本。扫描产生的样本是未标签样本,需要用分类器来分类,确定它的标签。
下面讲咋训练的...
作者提出Pixel comparisons的概念产生binary code x,x即代表着图像元
我肤浅的认为,从一个图像元,也就是一个框中选取13对垂直或者水平的点,然后呢水平方向的点对假如左边大于右边就生成1,否则为0,垂直方向也差不多一个意思,13对垂直或者水平的点就产生13个由0或者1组成的二值编码x,那么这个x就有2^13种可能对吧。那么我们的训练样本中的图像元我们求他们的这个13位的二值编码x,代表这个图像元,然后呢我们发现那么多的图像元中我们有好多x是一样的,并且这些x带着正样本或负样本的标签,那我们就看看这些一样的x中有几个是正样本#p,有几个负样本#n,简单的计算得到这个x可能是正样本的概率P(y|xi)= #p/(#p+#n),然后我们的测试样本的图像元也经过计算得到他的x,我们就去查他的P(y|xi),假如大于0.5,ok,这货就是正样本。但是如果这么简单的话,分类错误的概率太大了有木有,于是作者机智的取10组不同的13对垂直或者水平的点,然后每一组搞一波上面提到的过程,然后我们就得到10个这个图像元的正样本概率P(y|xi),加起来平均下,大于0.5,ok,正样本。正样本就是是可能是目标的图像元哈。。这段理解是我比较渣的理解,可能是不对的,就做个参考哈。。
Nearest Neighbor Classifier
这个分类器是基于一些定义的:
相似度被用于指出一个任意的图像块和目标模型中的部分有多大的相似。
相关相似度用来定义最近邻分类器。
如果(取0.6),那么图像块被分类为正样本,否则就被分类为负样本,就是这么自信。。