首页 > 代码库 > 目标跟踪系列十一:Exploiting the Circulant Structure of Tracking-by-detection with Kernels代码思路
目标跟踪系列十一:Exploiting the Circulant Structure of Tracking-by-detection with Kernels代码思路
Tracking学习系列原创,转载标明出处: http://blog.csdn.net/ikerpeng/article/details/40144497
这篇文章很赞啊!很有必要将其好好的学习,今天首先记录它的代码思路(详细的推导过程后面会给出的)。
首先,这篇文章使用的决策函数是一个结构风险最小化的函数:
这个函数中:前面是一个损失函数,损失函数里面的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
目标跟踪系列十一:Exploiting the Circulant Structure of Tracking-by-detection with Kernels代码思路