KCF目标跟踪方法分析与总结

Posted 一只有恒心的小菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KCF目标跟踪方法分析与总结相关的知识,希望对你有一定的参考价值。

KCF目标跟踪方法分析与总结

读"J. F. Henriques, R. Caseiro, P. Martins, J. Batista, \'High-speed tracking with kernelized correlation filters\'" 笔记

KCF是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目标检测器。而在训练目标检测器时一般选取目标区域为正样本,目标的周围区域为负样本,当然越靠近目标的区域为正样本的可能性越大。

注意论文中关于向量是行向量还是列向量总是指示不清楚,所以本文对变量符号统一之后进行推导,首先所有的小写字母均表示列向量,所有的大写字母表示矩阵,其中矩阵的每一行是一个样本,文中的函数除了是对行向量操作,其余都是对元素操做的,四则运算符号也都是针对元素操作的。还有所有对循环矩阵使用傅里叶变换时使用的生成向量都是循环矩阵的第一行向量,这点很重要。

KCF的主要贡献

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

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

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


一维脊回归

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

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

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

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

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

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

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

举例

enter description here

1474942884758.jpg

enter description here

1474942898329.jpg

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

enter description here

1D向量得到的循环矩阵.jpg

enter description here

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

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

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

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

傅氏对角化简化的脊回归
带入脊回归公式得到

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

于是

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

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

核空间的脊回归

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

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

上式就变为

该问题称为的对偶问题
令关于列向量导数为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.

快速检测

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

待分类样本集,即待检测样本集,是由预测区域和由其移位得到的样本集合
那么就可以选择最大的样本作为检测出的新目标区域,由判断目标移动的位置。

定义是测试样本和训练样本间在核空间的核矩阵
由于核矩阵满足,即类似于theorem 1 的证明可得是循环矩阵

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

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

注意我们说过小写的都是列向量,是列向量。注意我们这里是矩阵的第一行,即的第一列,而文中(22)式中是论文中的第一行,这是因为本文和论文中关于的定义正好是相转置的。也就是说我觉得(22)式只是少了一个共轭。。。
觉得蛮奇怪的,怎么和论文中推导结果好多都差一个共轭符号??
这是因为都是对称向量,而对称向量的共轭转置是实数,所以就和论文中一样了,这点参考KCF高速跟踪详解

核矩阵的快速计算

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

内积和多项式核
这种核函数核矩阵可以表示成,于是

因此对于多项式核