【论文阅读】【目标跟踪】High-Speed Tracking with Kernelized Correlation Filters

KCF,TPAMI,2015
核相关滤波的典型算法

code:https://github.com/uoip/KCFpy
当然,KCF已经集成到cv2中了,可以直接调用

讲KCF的博客非常多了,我这里就当做一个笔记了。强力推荐阅读以下原文,写的非常有逻辑。看再多的博客,也不如看一下论文,而且论文写的还是比较容易理解的。

KCF

前三section不是核心

4 BUILDING BLOCKS

4.1 Linear Regression

给出岭回归的目标函数和解的形式:
在这里插入图片描述
在这里插入图片描述
上标H表示Hermitian transpose,是考虑了复数的转置,如果X为实矩阵,则对应的就是转置

4.2 Cyclic Shifts

介绍循环移位,对于一个向量x,乘以一个permutation matrix,起到交换x中元素位置的作用。permutation matrix定义如下:
在这里插入图片描述
对1维向量的可视化表示如下:
在这里插入图片描述
对2维图片的表示如下:
在这里插入图片描述
可以看到,这个操作大致就是做平移。
可以对信号做多次平移,然后把所有的平移信号表示成为一个矩阵
在这里插入图片描述
注意:这种平移会产生失真,例如[1,2,3,4]平移一次变为[2,3,4,1],这其实造成了边缘的扭曲。补救办法如下。做padding,[1,2,3,4]先padding为[0,0,0,1,2,3,4,0,0,0],然后平移为[0,0,1,2,3,4,0,0,0,0]

4.3 Circulant Matrices

对x进行平移,就得到了循环矩阵,矩阵记为X,基于x构建循环矩阵的操作记为C(x):
在这里插入图片描述
循环矩阵有个性质,对循环矩阵X,可以表示为一个对角形式:
在这里插入图片描述
其中F是固定的,被称为DFT matrix,与x无关, x ^ \hat{x} x^表示对x求离散傅里叶变换(DFT)

4.4 Putting It All Together

那么有了上述性质,如果将循环矩阵作为岭回归训练的输入,那么闭式解也可以用DFT表示:
在这里插入图片描述
其中,圆圈内加点这个操作表示element product,两个向量做元素积。

5 NON-LINEAR REGRESSION

那么,可不可以做岭回归的时候不用X,而是用它的一种非线性变换之后的特征呢?这就引入了核函数。

5.1 Kernel Trick – Brief Overview

核函数的几个特征如下:

1)闭式解w是是用核函数表示的,但要训练的变量变成了 α \alpha α
在这里插入图片描述
2) ϕ ( x ) \phi(x) ϕ(x)是隐式的非线性变换函数,其出现形式均与其转置相关联,也就是表示成了核函数:
在这里插入图片描述
3)对于所有的训练样本,可以都将其信息储存在一个核矩阵K中,K的表达形式如下:
在这里插入图片描述
4)对于新给出一个特征z,要求其回归值,使用以下公式:
在这里插入图片描述

5.2 Fast Kernel Regression

虽然5.1中给出了w的闭式解,但 α \alpha α怎么求也没说,相当于在回归过程中把要训练的权重从w变成了 α \alpha α,因为在5.1的4)中可以看到,回归以下新的z,需要的就是 α \alpha α α \alpha α的闭式解如下:
在这里插入图片描述
这种计算速度还是慢,因为要求逆。当训练数据很大的话,求解很慢。所以可不可以也对角化?

Theorem 1给出,对于高斯核,多项式核函数等一些常见的函数,如果X为循环矩阵,那么由其构造的核矩阵仍然是循环矩阵。那么 α \alpha α的闭式解就变成了:
在这里插入图片描述
其中 k ^ x x \hat{k}^{xx} k^xx这一项是:
在这里插入图片描述
注意:上述的意思是有了x,就可以构造X,就可构造K,可以反算 α \alpha α,但很慢。有了x,有了核函数,如果X是循环矩阵,那么就直接可以算 k ^ x x \hat{k}^{xx} k^xx,然后就可以直接算 α ^ \hat{\alpha} α^,然后就可以通过逆DFT算 α \alpha α

5.3 Fast Detection

上述是对于一个z,那如果我们考虑由z构成的一个循环矩阵呢?假设z的维度是n,那么由z构成的循环矩阵就是nxn的大小,也就是对n个z都做5.1的4)中的求解。

首先,我们构造一个核矩阵 K z K^z Kz
在这里插入图片描述
根据5.2给出的公式,可以推出 K z K^z Kz的构造方法,不用算 n 2 n^2 n2次核函数
在这里插入图片描述
那么对z构成的循环矩阵套入回归,可以表示为
在这里插入图片描述
但其实也不用这么麻烦算,也可以在DFT中做,享受对角化带来的优势:
在这里插入图片描述

6 FAST KERNEL CORRELATION

上述已经使用DFT极大的简化了各种计算,但仍然避不开算 k x z k^{xz} kxz。那么对于这个部分的计算,其实仍然可以用DFT来简化。首先可以表示如下:
在这里插入图片描述
用矩阵的形式可以表示为
在这里插入图片描述
就可以使用对角化:
在这里插入图片描述
然后文章中给出了几个例子,对于多项式核函数:
在这里插入图片描述
对于高斯核:
在这里插入图片描述

算法流程

上面讲完了原理,就可以说说算法流程了:

初始化:在第一帧图像中,给定第一个框
1)把初始框作为roi,计算HOG特征
2)设置循环矩阵的置信度,设置方法为在中心位置放一个高斯函数。毕竟给定了初始框,肯定是不做任何位移的是真值。
3)用置信度和循环矩阵求解 α \alpha α

更新:新个一帧图像
1)沿用上帧的roi,在新的图像中,计算HOG特征,并构建循环矩阵
2)使用 α \alpha α来计算循环矩阵的置信度,挑取置信度最大的作为新的ori
3)用新的ori中的循环矩阵,再次训练 α \alpha α,可以用Momentum的方式进行更新

猜你喜欢

转载自blog.csdn.net/wqwqqwqw1231/article/details/113144788