Tracking学习系列原创,转载标明出处:
这篇文章非常赞啊!非常有必要将其好好的学习,今天首先记录它的代码思路(具体的推导过程后面会给出的)。
首先,这篇文章使用的决策函数是一个结构风险最小化的函数:
这个函数中:前面是一个损失函数,损失函数里面的f(x)就是最后要求的判别函数;后面是一个结构化的惩处因子。对于SVM分类器来讲就是合页损失函数(Hinge loss)。可是实际上,採用核函数的最小二乘法(Regularized Least Squares(RLS) with Kernels)也能够相同的达到这种效果。于是文章就採用了这个方案来求解这个Function。得到的结果是:
详细的细节后面再说。这里主要说代码的思路。
首先: 读入视频文件,得到groundtruth信息,也就得到了object的位置和大小的信息;然后得到一个在目标框图内目标的分布函数(高斯的分布,这一点我不是非常明确,和公式里面不一样);
接下来: 读入第一张图片,转化为灰度图,对框内的数据进行窗体滤波的处理,得到一个边缘效应比較小的数据。而且这个数据是被归一化到-0.5~05的;
然后: 通过以上数据求得核函数K;然后利用K再求出f(x)须要用到的 alpha(就是上面公式里面的c);(值得注意的是这里对于这两个重要的參数的求解都是从Fourier Domain求得的,这里是本文的一个创新点,也是速度如此快的原因)
接下来: 对于后面的每一帧图像, 先转化为灰度图像,然后用hann窗预处理好输入的数据;接下来结合上一帧图像的信息再次计算K;然后由如今的alpha和K来计算出响应值,选出响应值最大的位置。(值得注意的是这里计算的出来的响应值是待处理的Frame里面的每个可能的目标区域)
最后: 依据响应值最大的位置来计算如今的K,然后更新alpha。然后处理下一帧图像。(同一时候也要看到,计算响应值和更新alpha所用到的K的计算的方式是不一样的。代码里面,计算响应值的K是目标和待检測的目标img进行卷积的,而更新的时候是目标和自己卷积的)
存在的问题(慢慢的解决掉):
1. alpha里面的Y究竟是什么?依照原来的公式应该是标签的,但终于怎么成了一个高斯的分布?(好像有点懂了,由于他不是像别人那样直接给目标标签定为1或者是0,而是一个确信度,难道这就是回归的思想 O(∩_∩)O哈哈~)
1' 一直没有对alpha里面的y进行更新的原因?(事实上和位置无关,仅仅和框的大小有关,有木有发现!)
2. 为什么这就代表了一个image里面全部的块和这个的响应值勒?
3. 加hann窗对数据处理的原因?
iker Cross
2014.10.17