2014新跟踪算法KCF笔记
来源:互联网 发布:怎么跟淘宝办理假护照 编辑:程序博客网 时间:2024/05/22 08:22
作者的主页:http://home.isr.uc.pt/~henriques/
可以下载到文章和代码,文章的名字叫 High-Speed Tracking with Kernelized Correlation Filters.
这是另外一个,可以下载各种语言的代码 http://www.robots.ox.ac.uk/~joao/circulant/
总结来说,这也是一种Tracking By Detection的跟踪方法,跟TLD,OAB同宗,以跟踪对象为正样本,以周围坏境为负样本,训练一个判别分类器.paper的实验结果显示,kcF(Kernelized Correlation Filter)准确率比Struck和TLD都高(paper中提到With HOG features, both the linear DCF and non-linear KCF outperform by a large margin top-ranking trackers, such as Struck [7] or Track-Learn-Detect(TLD) [4], while comfortably running at hundreds of frames-per-second.)。之所以能有这么快的速度,得益于作者巧妙地通过循环偏移构建出了分类器的训练样本,从而使得数据矩阵变成了一个循环矩阵。然后基于循环矩阵的特性把问题的求解变换到了离散傅里叶变换域,从而避免了矩阵求逆的过程,降低了好几个数量级的算法复杂度.
4.1 样本训练过程实际上是一个岭回归问题,或者叫做正则化最小二乘问题,即
(公式直接从文章截图了)
公式1大家都很熟悉把,回忆一下SVM的原理,我们可以知道,训练的最终目的就是为寻找一组权值W,得到公式2
X,y就是对应的样本和类别.因为考虑到后面要在傅里叶域进行计算,这里来转化一下,给出一个复数情况下的求解结果,其中
随着样本数目的增加,直接求解公式3时非常耗时的(因为有求逆计算).这篇作者的贡献就是非常高效的避开了求逆运算,接着看.
(样本循环着移来移去利用了循环矩阵的性质,使得只需要计算循环矩阵的第一行就可以达到计算循环整个矩阵的效果.)
重要思想:All circulant matrices are made diagonal by the Discrete Fourier Transform (DFT), regardless of the generating vector x.
任意循环矩阵可以被傅里叶变换矩阵对角化。
4.2 Cyclic shifts(循环偏移)***
式
其中,
其中,
其中,
至此,我们可以看出通过上述变换后,权重向量
为什么能降低计算量,因为可以利用循环矩阵的性质的将许多运算转换成更简单的运算。例如:
原始计算量:两个方阵相乘(
转化后的计算量:反向傅里叶(
以上介绍的都是线性回归的情况,如果能引入核函数,分类器的性能将会更好。核函数的引入是把特征空间映射到一个更高维的空间去,这里我们假设这个映射函数为
这样我们最终要求解的参数就由
这样最终的回归函数变为,
直接计算上述函数相对来说是很耗时的,下面还是结合循环矩阵的特性实现一种快速的核函数计算方法。
快速训练
基于核函数下的岭回归的解为6,
其中,
这里,
如果两个向量的元素的次序发生变化不影响最终通过核函数计算的结果,则该核函数构成的矩阵就是一个循环矩阵,像高斯核函数,多项式核函数都是满足上面条件的。
快速检测
上面已经提到直接计算式
其中,
注意这里
快速计算核函数相关性
到现在为止,只剩下前面部分提到的
其中,
所以,对于多项式核函数,其计算公式如下,
对于高斯核函数,其计算公式如下,
附上伪代码,感觉这伪代码逻辑特别清晰
Inputs• x: training image patch, m × n × c• y: regression target, Gaussian-shaped, m × n• z: test image patch, m × n × cOutput• responses: detection score for each location, m × nfunction alphaf = train(x, y, sigma, lambda)k = kernel_correlation(x, x, sigma);alphaf = fft2(y) ./ (fft2(k) + lambda);endfunction responses = detect(alphaf, x, z, sigma)k = kernel_correlation(z, x, sigma);responses = real(ifft2(alphaf .* fft2(k)));endfunction k = kernel_correlation(x1, x2, sigma)c = ifft2(sum(conj(fft2(x1)) .* fft2(x2), 3));d = x1(:)’*x1(:) + x2(:)’*x2(:) - 2 * c;k = exp(-1 / sigma^2 * abs(d) / numel(d));end
- 2014新跟踪算法KCF笔记
- 2014新跟踪算法KCF笔记
- 2014新跟踪算法KCF笔记
- 2014新跟踪算法KCF笔记
- 2014新跟踪算法KCF笔记 --续(代码部分)
- 2014新跟踪算法KCF笔记 --续2
- 2014新跟踪算法KCF笔记 --续(代码部分)
- KCF跟踪算法笔记
- KCF目标跟踪算法笔记
- 目标跟踪算法学习笔记之一:KCF
- KCF 跟踪算法
- KCF跟踪算法
- KCF跟踪算法代码整理
- KCF 跟踪算法(2)
- KCF 跟踪算法(3)
- kcf跟踪算法实例整理
- KCF目标跟踪算法学习
- KCF目标跟踪算法介绍
- linux shell 初学 变量 循环 分支
- 广播Boradcast socket sendto出错 errno: 101 Network is unreachable
- OpenCV 实践程序18—— Ubuntu14.04配置CodeBlocks+opencv3.1.0
- C++ Primer Plus 第六版(中文版)课后编程题----第五章
- CoUninitialize 退出时 m_pInterface->Release()崩溃 解决
- 2014新跟踪算法KCF笔记
- 无网不通,有网则顺:OpenStack Neutron解析
- AOP (面向切面编程)思想
- nginx-image模块和fastdfs module的协作
- 关于百度推送中的一些问题
- 字符数组和字符指针
- iOS时间与时间戳相互转换
- Nagios全方位接入告警-微信/电话/短信都支持
- VIM 高级应用(持续更新)