目标跟踪算法KCF原理详解

article/2025/11/11 4:22:15

一直以来没有很想写这个,以为这个东西比较简单,还算是比较容易理解的一个算法,但是在知乎上回答过一个问题之后就有朋友私信我一些关于细节的东西,我一直以为关于细节的东西大家可以自己去理解,大家都是想快速了解这个,那我就厚脸皮了在这写一下自己的见解了,如果有写的不详细或者大家想了解的东西没写到的都可以留言,我给补充上去。

————————————————————————————————————————————

一、算法介绍

KCF全称为Kernel Correlation Filter 核相关滤波算法。是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins, and Jorge Batista提出来的,算法出来之后也算是轰动一时,这个算法不论是在跟踪效果还是跟踪速度上都有十分亮眼的表现,所以引起了一大批的学者对这个算法进行研究以及工业界也在陆续把这个算法应用在实际场景当中。这个算法主页里面有论文还有代码都可以在这里面下载,也有一些简介之类的,这篇文章在2015年作者又发在了TPAMI上面,所以大家可能会看到两个版本,但是没有改动,都是可以看到。论文下载地址相关滤波算法算是判别式跟踪,主要是使用给出的样本去训练一个判别分类器,判断跟踪到的是目标还是周围的背景信息。主要使用轮转矩阵对样本进行采集,使用快速傅里叶变化对算法进行加速计算。

二、详细介绍

这部分就直接根据论文当中的安排给大家解释一下,这样大家对照论文去看,也算是比较舒服的理解了。

Abstract:主要介绍了一下这篇文章的想法的由来以及算法的成就和所使用的东西,还介绍了一下论文在哪些数据集上测试了等。简介一般就是论文的总结,对论文做一个总体的介绍,大致的思想基本看了间接之后就能明白了,就是上面我写的那些,使用核相关滤波器训练一个判别式分类器,使用轮转矩阵生成样本去训练分类器,代码也是开源的。

1、Introduction

第一部分就是对整个跟踪的问题进行一个介绍,跟踪是计算机视觉领域一个比较重要的成分,可以应用在多种领域,人机交互、监控等我就不一一列举了,这个大家可以自己去查了,在第一部分比较重要的有这么几句话,Although the reasons for doing so are understandable, we argue that under sampling negatives is the main factor inhibiting performance in tracking. In this paper, we develop tools to analytically incorporate thousands of samples at different relative translations, without iterating over them explicitly. This is made possible by the discovery that, in the Fourier domain, some learning algorithms actually become easier as we add more samples, if we use a specific model for translations.
主要的意思就是说负样本对训练一个分类器是一个比较重要的存在,但是在训练的时候负样本的数量是比较少的,所以我们本文的算法就是为了更加方便地产生更多的样本,以便于我们能够训练一个更好的分类器。
Our framework easily incorporates multiple feature channels, and by using a linear kernel we show a fast extension of linear correlation filters to the multi-channel case.
相关滤波器是根据之前的MOSSE算法(论文地址)改进的,可以说是后来CSK、STC、Color Attributes等tracker的鼻祖。Correlation Filter(以下简称CF)源于信号处理领域,后被运用于图像分类等方面。而Correlation Filter应用于tracking方面最朴素的想法就是:相关是衡量两个信号相似值的度量,如果两个信号越相似,那么其相关值就越高,而在tracking的应用里,就是需要设计一个滤波模板,使得当它作用在跟踪目标上时,得到的响应最大,最大响应值的位置就是目标的位置。(详细的介绍大家可以参考一下王泥喜龙一的博客地址)如下图所示:
这里写图片描述
CSK(论文下载地址)是这个算法改进的初级版本,这篇是主要引进了循环矩阵生成样本,使用相关滤波器进行跟踪,本篇KCF是对CSK进行更进一步的改进,引进了多通道特征,可以使用比着灰度特征更好的HOG(梯度颜色直方图)特征或者其他的颜色特征等。

2、Related Work

2.1、基于检测的跟踪
这个听名字就比较好理解了,基于检测到的目标进行跟踪,首先在跟踪之前对目标进行检测,得到目标的位置,然后对目标进行学习,跟踪。
2.2、样本转换和相关滤波
对一些以前存在的样本转换的方法和相关滤波的一些知识进行一个介绍。For us, this hinted that a deeper connection between translated image patches and training algorithms was needed, in order to overcome the limitations of direct Fourier domain formulations.而且说出了样本和训练算法都是必须的,直接在频域使用傅里叶变化加快算法。
2.3、后来的工作
初始版本就是我上面说的CSK那篇,然后把多通道特征以及核函数这个加进来对算法进行提升。

3、Contributions

提出了一个快速的效果良好的跟踪算法,把以前只能用单通道的灰度特征改进为现在可以使用多通道的HOG特征或者其他特征,而且在现有算法中是表现比较好的,使用HOG替换掉了灰度特征,对实验部分进行了扩充,充分证明自己的效果是比较好的。使用核函数,对偶相关滤波去计算。

4、Building Blocks

4.1、 Linear regression
主要使用岭回归函数,能够像SVM那些有良好的表现。训练的目的就是找到这么一个函数这里写图片描述使得我们的误差函数最小,在本文中使用的误差函数为这里写图片描述
接下来的一切内容都是去讲怎么去最小化这个二次函数,以及怎么去找这个函数,这个方法也是比较简单的,就是对函数求导,然后使导数等于0,然后得到w,既是我们要求的函数。
4.2、Cyclic Shifts
本文的重点来了,循环矩阵,文章中为了介绍方便,作者使用了单通道一维的数据表示去进行讲解,可以直接扩展到二维的情况。一维的情况下就是矩阵想乘的问题了,就是矩阵分析当中学过的左乘一个单位矩阵和右乘一个单位矩阵。左乘是行变换,右乘列变化。目的就是得到更多的样本,每乘一次都是一个新的样本,这样的话就可以多出来n*n个样本了,这就是循环矩阵在这里最大的用处,制造样本的数量,以图像的形式展示就是这样的,一个样本经过循环矩阵之后就可以产生这么多的样本。

这里写图片描述

在二维图像的情况下就是像下图这样

这里写图片描述
把图像向上、向下分别移动不同的像素得到新的样本图像,这就是循环之后的样本,这样算是直接增加了样本的数量,然后用来对分类器进行训练,更多的样本肯定能够训练的分类器的效果就更好了。
4.3、Circulant matrices
循环矩阵的计算可以直接把所有的样本都转换为对角矩阵进行处理,因为在循环矩阵对样本进行处理的时候,样本并不是真实存在的样本,存在的只是虚拟的样本,可以直接利用循环矩阵所特有的特性,直接把样本矩阵转换为对角矩阵进行计算, 这样可以大幅度加快矩阵之间的计算,因为对角矩阵的运算只需要计算对角线上非零元素的值即可。Eq. 7 expresses the eigendecomposition of a general circulant matrix. The shared, deterministic eigenvectors Flie at the root of many uncommon features, such as commutativity or closed-form inversion. 说的意思就是大概是做了特征分解,其实是一个意思就是简化运算,加快速度。

4.4 Putting it all together

本节就是对上面w进行一个求解的过程,具体的公式推导的部分我不会做详细的推导,主要是我也不是很懂,哈哈,虽然自己推出来了,如果有想知道的或者大神希望指点,想要知道没有推出来的同学也可以问问我,我给你们说一下我的思路。

4.5 Relationship to Correlation filters

Correlation filters have been a part of signal processing since the 80’s, with solutions to a myriad of objective functions in the Fourier domain . Recently, they made a reappearance as MOSSE filters [9], which have shown remarkable performance in tracking, despite their simplicity and high FPS rate.
相关滤波一开始是信号处理的东西,经过MOSSE的发表之后引进到tracking 当中,因为计算的速度和精度都很不错,所以取得了很好的效果。

Circulant matrices allow us to enrich the toolset put forward by classical signal processing and modern correlation filters, and apply the Fourier trick to new algorithms.
循环矩阵丰富了样本库,给出了更好的相关滤波算法。

这一个小节可以好好看一下,就是相关滤波跟踪算法怎么来的。

5 Non-linear regression

使用非线性回归对模型进行训练。

5.1 Kernel trick- brief overview

核技巧,这个是本文的另外一大亮点,把低维空间的计算映射到高维的核空间,在低维空间不可分的情况到高维空间之后变的线性可分了,这样用一个简单的核函数直接做映射可以很好的完成这个工作。
核函数主要的目的就是把一个线性问题映射到一个非线性核空间,这样把在低维空间不可分的到核空间之后就能够可分了。
本章节接下来的部分就是对核技巧进行很好的解读了。

5.2 Fast kernel regression

快速的核回归。就是怎么去计算核函数,怎么快速得到最优解。

5.3 Fast detection

快速检测。核函数训练完成之后,新来的样本直接进行映射到核空间,然后使用训练得到的函数进行运算得到函数值,对所有的位置都进行计算,就能快速的检测到目标的位置所在。

6 Fast kernel Correlation

本节就是介绍了几种常见的核函数的形式,以及每种核函数所对应的计算方式。

6.1 Dot-product and polynomial kernels

6.2 Radial Basis Function and Gaussian kernels

6.3 Other kernels

7 MULTIPLE CHANNELS

In this section, we will see that working in the dual has the advantage of allowing multiple channels (such as the orientation bins of a HOG descriptor [20]) by simply summing over them in the Fourier domain. This characteristic extends to the linear case, simplifying the recently-proposed multi-channel correlation filters [31], [32], [33] considerably, under specific conditions.

7.1 General case

这里写图片描述
这个公式看明白了这一节就没什么问题了,无非就是单通道转换为多通道,使用高斯核函数。

7.2 Linear kernel

这个就是线性核函数多通道
这里写图片描述

In conclusion, for fast element-wise operations we can choose multiple channels (in the dual, obtaining the DCF) or multiple base samples (in the primal, obtaining the MOSSE), but not both at the same time. This has an important impact on time-critical applications, such as tracking. The general case [31] is much more expensive and suitable mostly for offline training applications.

8 EXPERIMENTS

8.1 Tracking pipeline

这里写图片描述

8.2 Evaluation

在50个序列集上进行测试对比。
这里写图片描述

最后结果是0.732,精度还是不错的,比着原有算法有大幅度提升。

9 CONCLUSIONS AND FUTURE WORK

In this work, we demonstrated that it is possible to analytically model natural image translations, showing that under some conditions the resulting data and kernel matrices become circulant. Their diagonalization by the DFT provides a general blueprint for creating fast algorithms that deal with translations. We have applied this blueprint to linear and kernel ridge regression, obtaining state-of-the-art trackers that run at hundreds of FPS and can be implemented with only a few lines of code. Extensions of our basic approach seem likely to be useful in other problems. Since the first version of this work, circulant data has been exploited successfully for other algorithms in detection [31] and video event retrieval [30]. An interesting direction for further work is to relax the assumption of periodic boundaries, which may improve performance. Many useful algorithms may also be obtained from the study of other objective functions with circulant data, including classical filters such as SDF or MACE [25], [26], and more robust loss functions than the squared loss. We also hope to generalize this framework to other operators, such as affine transformations or non-rigid deformations.

———————————————————————————————————到此为止,本篇的主要目的就是给大家梳理一下,给那些不想深入去了解的同学一个可以分析的参考路线,看完我说的这些,基本上你对KCF计算有一个大致的方向,如果只是想拿来使用,基本没什么问题了,想要进一步提升的话就要你去仔细专研,如果只是想要毕业设计用这个来做,水一下,基本看完我说的这些,然后配合代码完全没问题的,希望各路同学和大牛们指出,如果有哪里分析不对和想要知道我没有写到的地方可以直接留言跟我说,我会回来继续补充完整,或者直接给你解答。


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

相关文章

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中,方便管理。 第…

E2E 端到端测试学习 - E2E 介绍、Cypress 案例基本使用

E2E 测试介绍 E2E E2E(end to end)端到端测试是最直观可以理解的测试类型。在前端应用程序中,端到端测试可以从用户的视角通过真实浏览器自动检查应用程序是否正常工作。 E2E 把整个系统当作一个黑盒,测试人员模拟真实用户在浏…

Unity射线与UI碰撞检测

问题产生背景:我们有的时候,需要实现射线与3D UI之间的碰撞,当射线碰撞到3D UI之后(将Canvas设置为World Space),调整到合适的位置。使用LineRender表示射线的直观显示,使用一把枪结合第一人称控…

unity中射线碰撞检测总结

这阵子通过看视频,看书对unity中射线碰撞检测,有了一些了解,这里我把它总结一下写下来,希望能帮助到你们,也希望通过各位大神来指正不足之处; 射线碰撞检测,就是由某一物体发射出一道射线&#…

Unity 射线与碰撞范围检测【踩坑记录】

射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有一次debug了好久才发现) 对应API如下 Physics.Raycast(Vector3 origin,Vec…

Unity 碰撞位置

获取碰撞位置的方法1:使用 Collider.ClosestPoint Returns a point on the collider that is closest to a given location. 返回碰撞器上最接近给定位置的点。 下方是子弹打到物体上,生成撞击火星的代码: // 碰撞体的检测 private void O…

Unity入门7——物理系统之碰撞检测

一、刚体 Rigid Body ​ 刚体利用体积(碰撞器 Collider)进行碰撞计算,模拟真实的碰撞效果,产生力的作用 ​ 碰撞产生的必要条件: 两个物体都有碰撞器 Collider至少一个物体有刚体 Mass:质量 默认为千克&a…