背景
博主正准备往tracking方向入坑,在师兄推荐下学习KCF算法,据说是目前最流行的online visual tracking算法。
论文:J. F. Henriques, R. Caseiro, P. Martins, J. Batista, ‘High-speed tracking with kernelized correlation filters’
从论文所展示的实验效果来看,确实在速度方面有很大的提升,172FPS达到真正意义上的实时,并且在准确率方面也有一定的提升。下面将进行简单的算法分析。
KCF算法原理
使用循环矩阵是KCF算法速度提升的关键
如图所示对于一个实际的检测目标,在红色虚线的框所确定区域为目标区域,该区域为正样本
(xi,1) ,而通过循环产生的周围其他颜色的区域为负样本(xi,−1) ,训练的目标是找到合适的权重w使得因此得到正则化的优化目标为:f(xi)=wT⋅xi=yi 使用矩阵表示得到最小二乘解为:minwΣi(f(xi)−yi)2+λ∣∣w∣∣2 w=(XHX+λI)−1XHY
论文中使用循环矩阵傅立叶对角化方法优化上述运算,避免了求逆运算,循环矩阵对角化:具体关于循环矩阵、其傅立叶对角化和相应性质可参考这篇博客: 循环矩阵傅立叶对角化X=C(x)=F⋅diag(x^)⋅FH
优化得到w=F−1(x^⊙y^x^⊙x^∗+λδ)
接下来使用求得的w对下一帧进行检测,如上图所示,在上一帧最优位置基础上进行循环产生周边区域,在所有样本中某一个区域(白色框所在区域)对目标函数f(xi) 的响应最大,那么该位置设为目标位置,如此求得在新一帧当中前景位置。原理如上所示,关于文章中其他内容以及总结,可参考这篇博客:KCF目标跟踪方法分析与总结