KCF目标跟踪算法

article/2025/11/11 2:28:57

论文链接:https://link.zhihu.com/?target=http%3A//ieeexplore.ieee.org/abstract/document/6870486/

代码链接:http://www.robots.ox.ac.uk/~joao/

个人认为,这篇论文是近年来跟踪界最经典的论文,没有之一。主要思想就是利用了循环矩阵对角化等性质,使得核化之后的计算变得十分简单。原理很复杂(原文中公式竟然有60多个啊+_+),代码很简单(少到令人感动)。下面废话不多说,谈谈论文的主要思想。

1.总体思路:所谓的相关滤波方法就是根据当前帧的信息和之前帧的信息训练出一个相关滤波器,然后与新输入的帧进行相关性计算,得到的置信图就是预测的跟踪结果,显然,得分最高的那个点(或者块)就是最可能的跟踪结果。由于KCF里并没有任何的流程图,所以我们借助STC[1]中的配图来理解一下,看着配图应该能理解主要的流程了。这里要说一下,为什么能用其它论文的配图,因为我们介绍的这篇KCF和STC都是对12年CSK[2]的改进,不同的是,KCF是在CSK基础上加了HOG特征使得效果大大提升了,STC是在贝叶斯的框架下对CSK进行解释并在其中加入了上下文(context)信息的应用。所以本质上来说,这几个都是一样的流程。

preview

1.1上面的部分就是利用之前帧的跟踪结果图片训练出相关滤波器。我们将原始的问题表述为:

 

优化函数由凸优化里最简单的最小二乘和正则项组成,也就是最常用的岭回归方法:

这里的理想回归期望(标签)假设是高斯型,直观上理解就是离上一帧跟踪结果越近,那么它是这一帧的跟踪结果的概率也就越大。如下图,下一帧中心点的位置在黄色点周围的可能性大,不会跑太远,所以理想回归函数也就是中间大周围小。

因为最小二乘类的优化方法已经很成熟了,所以我们可以直接用公式求解(其实就是求偏导令其等于0):

看起来比较复杂,又是共轭转置又是求逆的,所以要简化一下。那么本文也是常规思路,把非线性问题转化为线性问题,所以就想到了SVM中也用到的核技巧(注意我们这里推导的时候用的是点积核,但其实核函数还有多项式核、径向基核及高斯核等),引入核函数后能够把参数训练问题简化:

这里的K是两个矩阵的核相关性。看起来似乎已经简化了很多了,但是,还是有求逆!求逆杀伤力太强了,不行,一定还要简化。怎么办呢?这时循环矩阵对角化的性质派上用场了,利用循环矩阵的性质,使得训练过程进一步简化。

这里顶上的符号是复域的意思。不管你信不信,反正我是信了,竟然如此简单,这里详细的推导过程放在后面的部分。

1.2下面的部分就是对新输入的帧进行检测,其实就是跟滤波器计算出相关性再乘上回归系数,如果是新手听不懂没关系,后面会再讲的哦。右下角的置信图(就是各个点是跟踪结果的可能性)用公式来表达就是如下:

没错,就是这么简单就能求出输入帧的跟踪结果了。如上图右下角所示,新的跟踪结果比原跟踪结果往右上方移了一些,直观上来看红色框中David的脸确实往右上方移动了一些,所以结果应该是对的,当然这只是我们肉眼看到的结果,真正结果好不好还要看在数据集上跑的结果,KCF的结果会在之后的实验部分讲,结果是相当好的,当然那是在2014年的时候。

 

那么这里得到的响应矩阵(置信图)该怎么理解呢?便于理解,故放一张图。这里也是循环采样的精髓之处。

 

如上图,最后得到的响应矩阵其实可以理解成一种密集的采样对应的响应矩阵,左上角(上图中第1行第1列)的响应值就是预测的当前输入帧以这个点为中心的可能性,当然这个点的预测值肯定是很低的,因为我下一帧很难跑到那里去。以此类推,MxN个响应对应的就是MxN种循环移位。下面一句话是重点,所谓的循环矩阵到这里就大显身手了,仔细想想,第ij块表示原图下移i行右移j列,那么换句话说,好像我所有的这MxN个循环移位的矩阵只要用一个量就可以表示了。

 

有没有一种熟悉的感觉?对,就是基波和谐波。类比一下,我用一个基波和一个倍数就能表示所有的谐波了,这里的原图就是基波,而位移之后的图就是谐波。自然地,既然那么像,那我们就试试傅立叶变换呗,一试就成了,因为需要计算的量很少,所以速度快,因为密集采样样本大大增加,所以跟踪的效果又很好。

如果你不是做跟踪这行的话,可能会问,右下角t+1帧的时候为什么红色框的中心(也就是黄色小点)不是David的鼻子那里,那是因为这个红色框是根据上一帧的跟踪结果来画的,这个小黄点的位置其实是上一帧David(David也算是个数据集中的明星0.0)鼻子的位置,这也是常见做法,先用上一帧的结果在当前输入帧框出一个大框,然后跟最新的滤波器做相关性计算,相关性最大的就是鼻子那块,也就是当前输入帧的跟踪结果。

2.其实讲到这里已经把精髓讲完了,下面讲一些推导细节,加深理解。

2.1循环矩阵对角化有神奇效果,大大降低了运算量。首先举个例子,来展现它神奇的效果。就拿上文出现的岭回归公式当例子吧,看看能把它简化成什么样。

原始公式:

 

在复域中(H表示共轭转置)即:

 

化简过程:

 

这是我早前推的,比起他的公式,我个人更喜欢他的代码嘻嘻。这个公式推下来并没有用,只是让我们见识一下循环矩阵化简的威力,真正用到代码里去的是下面3个推导。

 

2.2大家是否还记得我们这里实际上用到的是核化的岭回归啊?也就是比普通的稍微简化了一些的,所以推导起来也比较容易。

原始公式:

 

化简过程:

 

 

嗯,好像看起来还不错哦,既没有求逆又没有很多矩阵乘法运算。它的代码其实更感人。

 

 

简单的不能再简单了,至此,训练过程结束。下面看检测过程,同样化简得面目全非。

 

2.3检测出跟踪结果,就是当前输入的帧和滤波器求相关性,相关性最大的即为跟踪结果。

原始公式:

 

化简过程:

 

嗯,这篇论文真是不断地感动着我们这些吃瓜群众,原来可以这么简单。看着公式,代码闭着眼睛都能编了。

 

 

现在只剩一个问题了,那就是核相关性怎么求。

 

2.4核相关性的化简。好像解决了这个就完美了,那这个核相关性好求吗?如果不好求的话,就空亏一篑了,放心,跟踪界的allstar Henriques(葡萄牙人的名字我至今不会读)当然已经帮我们解决好了,依然简单。

原式公式:

 

化简过程:

 

我们这里只推导点积核。剩下的多项式核,径向基核,高斯核类比就能得到。论文里效果最好的是高斯核。

 

注意,代码里第2行是使用HOG特征的关键,他把31层HOG特征全部加起来了,这个简单的操作使得之前的CSK能用很多高维特征,故性能大增。

 

3.实验。我在OTB50上跑了0.514,因为加入了形状特征HOG,所以抗光照等性能骤升,当时(2014年)能排世界第3,由于实现起来非常简单,在很多人眼里是近年来跟踪界当之无愧的最佳论文(其实是在我眼里)。

本人跑的结果:

 

作者论文中的对比实验结果:

 

 

4.总结

本论文使用了HOG特征+核函数法把相关滤波器领域又推到了一个新的高度上。KCF是原理很复杂,实现很简单的代表作之一。

[1] K. Zhang, L. Zhang, Q. Liu, D. Zhang, and M.-H. Yang. Fast visual tracking via dense spatio-temporal context learning. In Proceedings of the European Conference on Computer Vision, 2014.

[2] J. F. Henriques, R. Caseiro, P. Martins, and J. Batista. Exploiting the circulant structure of tracking-by-detection with kernels. In Proceedings of the European Conference on Computer Vision, 2012.


http://chatgpt.dhexx.cn/article/RS3Qgs1p.shtml

相关文章

目标跟踪算法----KCF进阶(基于KCF改进的算法总结)

一、前情提要 如果你对目标跟踪和KCF是什么东西还不了解的话欢迎你看前一篇博文KCF入门详解:http://blog.csdn.net/crazyice521/article/details/53525366。如果你已经对基于KCF的目标跟踪有了一定的了解,并想知道这个算法有怎么样的后续的发展的话&a…

KCF算法公式推导

1 最小二乘法求解矩阵形式推导 设训练样本集为 ( x i , y i ) (x_i,y_i) (xi​,yi​),一元(向量)线性回归可表示为: f ( x i ) w T x i ⃗ b f(x_i)w^T\vec{x_i}b f(xi​)wTxi​ ​b若把样本输入 x i ⃗ \vec{x_i} xi​ ​表示…

目标跟踪算法——KCF 进阶

一、前情提要 如果你对目标跟踪和KCF是什么东西还不了解的话欢迎你看前一篇博文KCF入门详解:http://blog.csdn.net/crazyice521/article/details/53525366。如果你已经对基于KCF的目标跟踪有了一定的了解,并想知道这个算法有怎么样的后续的发展的话&am…

追踪算法KCF体验

本文使用KCF的opencv版本实现。 对应论文:High-Speed Tracking with Kernelized Correlation Filters 编译环境:VS2015 win7 64位 相关软件下载安装 需要下载opencv3.10,opencv_contrib和cmake-gui。 图:opencv下载说明 图&…

单目标跟踪--KCF算法(核化相关滤波算法)Python实现(超详细)

Tracking-KCF Algorithm 注:本文涉及的算法的代码实践已上传至GitHub,恳求大佬们指点!^ _ ^ 1. 目标检测跟踪与算法背景概述 ​ 目标跟踪任务在许多的计算机视觉系统中都是极为关键的一个组成部分。对于任意给定的一个初始图像的Patch&…

目标跟踪算法KCF原理详解

一直以来没有很想写这个,以为这个东西比较简单,还算是比较容易理解的一个算法,但是在知乎上回答过一个问题之后就有朋友私信我一些关于细节的东西,我一直以为关于细节的东西大家可以自己去理解,大家都是想快速了解这个…

KCF算法原理笔记

KCF算法全称是Kernelized Correlation Filters,是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins, and Jorge Batista提出来的跟踪算法,这个算法不论是在跟踪效果还是跟踪速度上都有十分亮眼的表现。该算法主要使用循环矩阵对样本进行采集&am…

目标跟踪算法——KCF入门详解

一直以来没有很想写这个,以为这个东西比较简单,还算是比较容易理解的一个算法,但是在知乎上回答过一个问题之后就有朋友私信我一些关于细节的东西,我一直以为关于细节的东西大家可以自己去理解,大家都是想快速了解这个…

【KCF算法解析】High-Speed Tracking with Kernelized Correlation Filters笔记

前段时间研究了一下KCF算法,单单看论文有很多看不懂的地方。查阅参考了,很多博客和其他材料才算了解了文章的大题思路,现将个人的理解在此记录,作为笔记。 主要内容 0.1 目标跟踪的背景介绍 0.2 学习该算法需先了解的预备知识 …

前端项目如何做测试?

前端项目也叫web端项目(通俗讲就是网页上的功能)是我们能够在屏幕上看到并产生交互的体验。 前端项目如何做测试? 要讲清楚这个问题,先需要你对测试流程现有一个全局的了解,先上一张测试流程图: 接下来下…

gt2e支持升级鸿蒙,鸿蒙测试版下月发布,Mate40或率先升级

鸿蒙系统终于要来了,Mate 40或成为率先升级的机型,12月中下旬将推出开发者测试版本,网友评论称终于等到你,国产操作系统终于要来了。 前一阵子余承东说鸿蒙系统将不会在今年推出,当时这个消息说实话让很多人感到失望&a…

gt2e鸿蒙系统,华为Watch GT2e评测:轻松开启年轻人一手掌控的百变运动潮酷生活...

【TechWeb】4月23日,华为nova7发布会上,华为Watch GT系列家族新成员——华为Watch GT 2e手表也正式发布。这款手表主要面向95后Z世代年轻人群体,定位运动潮流内核,潮流的外观造型和丰富的运动功能上吸引了不少年轻人关注的目光,同时也吸引了小编尝鲜的好奇之心。 潮酷外观…

vue_test_unit_e2e常见问题npm run unit单元测试和npm run e2e集成测试问题

vue项目要进行unit和e2e常见问题 localStorage is not available for opaque origins console.error node_modules\vue\dist\vue.runtime.common.dev.js 通常根据vue init webpack myproject 生成的项目,选择了unit和e2e模块后,都会有些问题。 1.首先是…

谈谈端到端测试(End-to-End Testing)

谈谈端到端测试(End-to-End Testing) 当今的软件系统是复杂的,并且与许多子系统相互关联。如果任何子系统出现故障,整个软件系统都可能崩溃。这是一个主要的风险,可以通过端到端测试来避免。 端到端测试是一种技术&a…

“汽车人”眼中的网络安全---关于AUTOSAR E2E及测试开发实践

1.前言 上篇文章“聊聊网络安全的5W1H”对网络安全知识体系和技术脉络做了深入浅出的介绍,提到AUTOSAR所定义的网络和通信安全相关的技术,本期我们将介绍其中的E2E策略(严格来说属于Safety的范围),并分享在项目中的测…

【E2E】E2E通信保护协议学习1

文章目录 前言一、E2E简介和功能介绍1.E2E简介2.一些名词简写及其对应含义 二、一些功能规格1.通讯保护概述2.配置文档概述 总结 前言 在软件测试工作中,E2E是功能的一部分。 非E2E专业工程师,如果有哪里写的不对,请大家多多指正。 一、E2E简…

使用Nightwatch进行E2E测试

本文在线预览 E2E测试 不同于行为驱动测试(BDD)和单元测试独立运行并使用模拟/存根,端到端测试将试着尽可能从用户的视角,对真实系统的访问行为进行仿真。对Web应用来说,这意味着需要打开浏览器、加载页面、运行Java…

cypress进行e2e测试之理论

cypress 进行 e2e 测试之理论 cypress 是目前 e2e 很火的一个测试组件,内部绑定了 macha、chai、chai-jquery 之类的断言,为了让代码代码 更有说服力,减少提交测试错误,进行 e2e 测试显然是非常有必要的。 官网 GitHub 借鉴官网一句话来说…

自动化测试(二)01-前端测试分为单元测试、集成测试和E2E测试 测试工具对比-适合TDD或 BDD、断言、异步测试 测试工具的类型

自动化测试(二)01-前端测试分为单元测试、集成测试和E2E测试 & 测试工具对比-适合TDD或 BDD、断言、异步测试 & 测试工具的类型 前端自动化测试 测试是一个庞大的主题,包括各种分类的测试,诸如黑盒测试/白盒测试、单元测…

web前端测试——e2e测试

开发环境:安装有node的macbook(windows没测) 第一步: 创建自己需要测试的项目,如在桌面创建一个test目录作为我们的项目根目录。 打开sublim text ,并将项目拖到sublim text中,方便管理。 第…