一、算法介绍

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替换掉了灰度特征,对实验部分进行了扩充,充分证明自己的效果是比较好的。使用核函数,对偶相关滤波去计算。

KCF的主要贡献

使用目标周围区域的循环矩阵采集正负样本,利用脊回归训练目标检测器,并成功的利用循环矩阵在傅里叶空间可对角化的性质将矩阵的运算转化为向量的Hadamad积,即元素的点乘,大大降低了运算量,提高了运算速度,使算法满足实时性要求。

将线性空间的脊回归通过核函数映射到非线性空间,在非线性空间通过求解一个对偶问题和某些常见的约束,同样的可以使用循环矩阵傅里叶空间对角化简化计算。

给出了一种将多通道数据融入该算法的途径。

4、一维脊回归

脊回归

设训练样本集,那么其线性回归函数,是列向量表示权重系数,可通过最小二乘法求解

其中用于控制系统的结构复杂性,也就是VC维以保证分类器的泛化性能。

写成矩阵形式

其中的每一行表示一个向量,是列向量,每个元素对应一个样本的标签,于是令导数为0,可求得

因为后面实在傅里叶域内计算,牵涉到复数矩阵,所以我们将结果都统一写成复数域中形式

其中表示复共轭转置矩阵。

循环矩阵

KCF中所有的训练样本是由目标样本循环位移得到的,向量的循环可有排列矩阵得到,比如

当然对于二维图像的话,可以通过x轴和y轴分别循环移动实现不同位置的移动

举例

所以由一个向量可以通过不断的乘上排列矩阵得到n个循环移位向量,将这n个向量依序排列到一个矩阵中,就形成了x生成的循环矩阵,表示成

1D向量得到的循环矩阵

2D图像不同循环次数后的移位

循环矩阵傅氏空间对角化

所有的循环矩阵都能够在傅氏空间中使用离散傅里叶矩阵进行对角化

其中x对应于生成X的向量(就是X的第一行矩阵)的傅里叶变化后的值,,是离散傅里叶矩阵,是常量

关于矩阵的傅里叶对角化请参加循环矩阵傅里叶对角化,后面的笔记会专门讲解傅里叶变换。

傅氏对角化简化的脊回归

带入脊回归公式得到

注意这里的分号是点除运算,就是对应元素相除。因为,(循环矩阵傅里叶对角化)对上式两边同时傅氏变换得

于是

这里和论文式(12)不一样,论文里(12)式分子上似乎多了个共轭符号,因为Appendix A.5中的式(55)后面那个应该是少了个共轭转置符号。

这样就可以使用向量的点积运算取代矩阵运算,特别是求逆运算,大大提高了计算速度。

5、核空间的脊回归

我们希望找到一个非线性映射函数列向量,使映射后的样本在新空间中线性可分,那么在新空间中就可以使用脊回归来寻找一个分类器,所以这时候得到的权重系数为

行向量张成的空间中的一个向量,所以可以令

上式就变为

该问题称为的对偶问题

令关于列向量导数为0,

注:其实类似于核空间变量的协方差矩阵,矩阵的转置乘以矩阵,一定可逆。

对于核方法,我们一般不知道非线性映射函数的具体形式,而只是刻画在核空间的核矩阵,那么我们令表示核空间的核矩阵,由核函数得到,那么

于是

论文提出的一个创新点就是使循环矩阵的傅氏对角化简化计算,所以这里如果希望计算时可以同样将矩阵求逆运算变为元素运算,就希望将对角化,所以希望找到一个核函数使对应的核矩阵式循环矩阵。

Theorem 1. Given circulant data C(x), the corresponding kernel matrix K is circulatant if the kernel function satisfies ,for any permutation matrix M.

即核矩阵是循环矩阵应该满足两个条件:第一个样本和第二个样本都是由生成样本循环移位产生的,可以不是由同一个样本生成;满足,其中是排列矩阵。

证明:设,则,于是

因为K的第一行为所以相当于将第一行的第个元素放到K的第i行j列上,

那么就得到了循环矩阵,所以是循环矩阵。证明里表示除的余数,因为这个过程是循环的。

证毕。

若K是循环矩阵,则

其中是K中第一行。这里觉得奇怪?两个转置?这是因为我们已经约定是列向量,而的第i行是,是不是明白了~

这里推出来的公式和论文中公式(17)也不大一样

那么那些核函数满足上述性质呢?论文中给出

Radial Basis Function kernels -e.g. Gaussian

Dot-Product kernels -e.g. linear, polynomial

Additive kernels - e.g. intersection,  and Hellinger kernels

Exponentiated additive kernels.

6、快速检测

首先由训练样本和标签训练检测器,其中训练集是由目标区域和由其移位得到的若干样本组成,对应的标签是根据距离越近正样本可能性越大的准则赋值的,然后可以得到

待分类样本集,即待检测样本集,是由预测区域和由其移位得到的样本集合

那么就可以选择最大的样本作为检测出的新目标区域,由判断目标移动的位置。

定义是测试样本和训练样本间在核空间的核矩阵

由于核矩阵满足,即类似于theorem 1 的证明可得是循环矩阵

我记得曾经见到过有人问非方阵的情况,假设采样窗口非方形,即那么采样窗口通过移位都会产生个样本,无论是训练样本还是测试样本,所以一定是方阵

于是得到各个测试样本的响应

注意我们说过小写的都是列向量,是列向量。注意我们这里是矩阵的第一行,即的第一列,而文中(22)式中是论文中的第一行,这是因为本文和论文中关于的定义正好是相转置的。也就是说我觉得(22)式只是少了一个共轭。。。

觉得蛮奇怪的,怎么和论文中推导结果好多都差一个共轭符号??

这是因为都是对称向量,而对称向量的共轭转置是实数,所以就和论文中一样了,这点参考KCF高速跟踪详解

7、核矩阵的快速计算

现在还存在的矩阵运算就是核矩阵的第一行的计算

内积和多项式核

这种核函数核矩阵可以表示成,于是

因此对于多项式核

径向基核函数

比如高斯核,这类函数是的函数

所以

对于高斯核则有

1D到2D

上面公式推导的很爽,可是都是在1D情况下得到了结论,2D图像该怎么办呢?

这个问题困扰了我好久。。。。刚开始我也想从线性空间的脊回归推导,假设是目标图像,是由生成的循环矩阵块,即表示的第块,是由右移,下移得到的样本块。那么即使块循环矩阵能够通过2D傅里叶变换矩阵对角化又怎么用呢??因为我们不可能带入类似的式子中啊(这个式子是类比于1D脊回归写的,并无实际意义)

哎呀,想破脑袋啊!

啊哈,想明白了,线性假设下没办法用,直接在核空间推导,发现豁然开朗~

现在有一个函数,自变量,因变量,也不知道怎么映射的,也不知道是多少,反正是个确定但未知的值。那么在核空间我们就可以使用脊回归的公式了~

注意:由移位生成的样本共有个,所以,这里,是对应样本的标签,是对应样本标签的矩阵形式。

ok,现在再来看看定理2

Theorem 2. The block matrix  with elements  is a Block-Circulant Matrix (BCCM) if  is a unitarily invariant kernel.

这里和Theorem 1是类似的,a unitarily invariant kernel就是说,定理的证明参见Theorem 1.

而径向基核,dot-product kernel等都满足这个条件,所以得到的核矩阵都是块循环矩阵。

块循环矩阵可以使用2D傅里叶变换矩阵对角化(循环矩阵傅里叶对角化)

其中是2D傅里叶变换矩阵,是生成块循环矩阵的生成矩阵,表示对进行2D傅里叶变换的结果。

ok,那现在

其中表示全1的m维列向量。

这里的分别对应着的矩阵形式。

对应的响应

其中表示块循环矩阵的生成矩阵。

后面测试就类似于1D不推了

多通道问题

论文中在提取目标区域的特征时可以是灰度特征,但是使用Hog特征能够取得更好的效果,那么Hog特征该如何加入前面提到的模型呢?

Hog特征是将图像划分成较小的局部块,称为cell,在cell里提取梯度信息,绘制梯度方向直方图,然后为了减小光照影响,将几个cell的方向直方图串在一起进行block归一化,最终将所有的cell直方图串联起来就是图像的特征啦。

那么,按照传统的方式一张图像就提取出一个向量,但是这个向量怎么用啊?我们又不能通过该向量的移位来获得采样样本,因为,你想啊,把直方图的一个bin循环移位有什么意义啊?

所以论文中Hog特征的提取是将sample区域划分成若干的区域,然后再每个区域提取特征,代码中是在每个区域提取了32维特征,即,其中就是梯度方向划分的bin个数,每个方向提取了3个特征,2个是对方向bin敏感的,1个是不敏感的,另外4个特征是关于表观纹理的特征还有一个是零,表示阶段特征,具体参见fhog。提取了31个特征(最后一个0不考虑)之后,不是串联起来,而是将每个cell的特征并起来,那么一幅图像得到的结果就是一个立体块,假设划分cell的结果是,那么fhog提取结果就是,我们成31这个方向为通道。那么就可以通过cell的位移来获得样本,这样对应的就是每一通道对应位置的移位,所有样本的第i通道都是有生成图像的第i通道移位获得的,

,所以分开在每一个通道上计算,就可以利用循环矩阵的性质了。

我们来看1D的情况,1D弄明白了,2D也就明白咯,因为我们上面说了怎么推导2D的

样本cell数为M,每个cell特征维数为L,第个样本的第通道向量表示成,样本的总特征可以表示成.

于是K矩阵的第一行有

这里用到

这是dot product kernel的情况,那径向基核就很容易推了

8、总结

KCF相对于其他的tracking-by-detection方法速度得到了极大的提升,效果也相对较好,思想和实现十分简单。

借上图来总结下KCF的过程,左图是刚开始我们使用红色虚线框框定了目标,然后红色实线框就是使用的padding了,其他的框就是将padding循环移位之后对齐目标得到的样本,由这些样本就可以训练出一个分类器,当分类器设计好之后,来到了下一帧图像,也就是右图,这时候我们首先在预测区域也就是红色实线框区域采样,然后对该采样进行循环移位,对齐目标后就像图中显示的那个样子 了,(这是为了理解,实际中不用对齐。。。),就是周围那些框框啦,使用分类器对这些框框计算响应,显然这时候白色框响应最大,因为他和之前一帧红色框一样,那我们通过白色框的相对移位就能推测目标的位移了。

然后继续,再训练再检测。。。。

论文中还说到几点

对特征图像进行cosine window加权,这主要是为了减轻由于边界移位导致图像不光滑。

padding的size是目标框的2.5倍,肯定要使用padding窗口,要不然移位一次目标就被分解重组合了。。。效果能好哪去。。

对于标签使用了高斯加权

前后帧结果进行了线性插值,为了让他长记性,不至于模型剧烈变化。

但是其缺点也是很明显的。

依赖循环矩阵,对于多尺度的目标跟踪效果并不理想。当然可以通过设置多个size,在每个size上进行KCF运算,但这样的话很难确定应预先设置多少size,什么样的size,而且对size的遍历必将影响算法的速度。KCF最大的优势就是速度。

我在想能不能通过少量特征点的匹配来调整窗口的size,当然这样的话,速度也是个问题

这种情况下还能保证最大响应就对应着目标中心所在的框吗?如果不能偏差会不会越来越大?

初始化矩阵不能自适应改变,其实这个问题和上一个缺点类似,这里强调的是非刚体运动,比如跳水运动员,刚开始选定区域肯定是个瘦长的矩形框,但当运动员开始屈体的时候显然这个预选定框就很大误差了。

3.难处理高速运动的目标

难处理低帧率中目标,这个和3类似,都是说相邻帧间目标位移过大。

目标下一帧出现位置不在你的padding内,你怎么也不可能移位找到。。。

5.虽然算法中对模型系数进行线性插值,但是对于目标一旦被遮挡若干帧之后,可能模型就再也回不去了。。。因为模型已经完全被遮挡物污染掉了。

6.我觉的论文还有一个问题就是仅仅通过检测到的框中心和目标实际中心的距离来度量性能,这是有问题的。

比如我现在有一个人垂直我的镜头逐渐远去了,但他的中心一直在我镜头的中心处,那我就开始画个框就是镜头的视角范围,那这样我检测结果百分之百,可是有什么用呢。。。。当然论文方法是在很多不同数据集上检验的性能还是很有说服力的。我的意思就是对于单个数据集不能仅凭这个指标定方法的好坏。

9 EXPERIMENTS

9.1 Tracking pipeline

9.2 Evaluation

在50个序列集上进行测试对比。

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

10 CONCLUSIONS AND FUTURE WORK

opencvkcf算法改进_KCF跟踪算法原理 入门详解相关推荐

  1. KCF跟踪算法原理 入门详解

    一.算法介绍 KCF全称为Kernel Correlation Filter 核相关滤波算法.是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins ...

  2. 机器学习--组合分类方法之AdaBoost算法实战(单层决策树原理代码详解)

    详细原理请看我的这篇文章,那里是纯理论说明,大量的数学推倒,建议大家多看看数学推倒,因为那才是本质,只有理解了本质你才知道如何使用这个算法,这个算法的优缺点你才会深入理解,搞算法其实就是搞数学,代码实 ...

  3. 自控原理入门详解**********

    经典控制理论建立模型 1.分析系统 首先,在我们面对一个需要进行建模的系统时,需要观察思考如下几点: · 系统的输入输出. · 系统的物理,化学,电力等方面的规律. 2.建立模型 在分析了系统之后,我 ...

  4. 抖音推荐算法原理全文详解

    阅读目录 一.系统概览 二.内容分析 三.用户标签 四.评估分析 五.内容安全 抖音推荐算法原理全文详解 本次分享将主要介绍今日头条推荐系统概览以及内容分析.用户标签.评估分析,内容安全等原理. 回到 ...

  5. 今日头条推荐算法原理全文详解之一

    本次分享将主要介绍今日头条推荐系统概览以及内容分析.用户标签.评估分析,内容安全等原理. 今日头条推荐算法原理全文详解 今日头条 数据分析 产品经理 产品 好文分享 第1张 一.系统概览 推荐系统,如 ...

  6. 一种改进的蚁狮优化算法 改进的ALO算法

    一种改进的蚁狮优化算法 改进的ALO算法[matlab代码] 在原始ALO算法的基础上添加了两种改进策略 改进1:将原先的间断性边界收缩因子变为连续性边界收缩因子,从而增强算法的遍历性 改进2:将原先 ...

  7. 今日头条推荐算法原理全文详解之四

    三.用户标签 内容分析和用户标签是推荐系统的两大基石.内容分析涉及到机器学习的内容多一些,相比而言,用户标签工程挑战更大. 今日头条推荐算法原理全文详解 今日头条 数据分析 产品经理 产品 好文分享 ...

  8. carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道

    carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化 ...

  9. carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法

    carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化 ...

最新文章

  1. HDU 4135 Co-prime(容斥原理)
  2. session对象运行机制
  3. Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法
  4. android 数据存储怎么保存图片_遇到验证码怎么办?Python编写一个验证码图片数据标注GUI程序!...
  5. 口的内存映射 stm32f7_STM32F7高速缓存
  6. mysql使用游标的访问过程_mysql存储过程中使用游标的实例_MySQL
  7. 1051 复数乘法 (15 分)
  8. 一个软件工程师的职业规划
  9. POJ 1321 棋盘问题(回溯)
  10. 多项新政催生本年度购房最佳“窗口期”
  11. DMA讲解《一》(清华大学)
  12. 【数据结构 by 解学武】线性表简介
  13. c++ 单引和双引的区别
  14. python+opencv人脸识别(用耶鲁大学的Yale人脸库训练cnn)3
  15. 2020-11-12 Python 类继承、多态和特殊模式
  16. mysql 8.0 直方图_MySQL 8.0 中统计信息直方图的尝试
  17. 我赌你的电脑里肯定有漏洞—不信测测看
  18. WebRTC -- 添加选择音频输入输出设备功能
  19. thinkphp 文件上传为什么总是显示没有上传的文件解决方案
  20. 93、R语言教程详解

热门文章

  1. PHP常用正则表达式
  2. 店宝宝:网店创业的机会,再不抓住就错过
  3. 阿里平头哥发布RISC-V高能效处理器玄铁C908,打造端云一体生态
  4. 全国职业院校技能大赛网络建设与运维赛项赛题(七)
  5. 近十万台路由器组成僵尸网络,专门向WordPress网站发起撞库攻击
  6. Erlang 基础操作 练习题
  7. java开发什么程序_java可以开发哪些软件
  8. How to fix corrupt HDFS FIles
  9. 5G时代到来,为什么运营商都在全力布局微基站?
  10. Web网站有什么特点?