https://blog.csdn.net/xiaozuo_zhazha/article/details/90378962
https://blog.csdn.net/eastgeneral/article/details/120290391
KCF全称为Kernel Correlation Filter 核相关滤波算法。相关滤波算法算是判别式跟踪,主要是使用给出的样本去训练一个判别分类器,判断跟踪到的是目标还是周围的背景信息。主要使用循环矩阵对样本进行采集,使用快速傅里叶变化对算法进行加速计算。
All circulant matrices are made diagonal by the Discrete Fourier Transform (DFT), regardless of the generating vector x.
任意循环矩阵可以被傅里叶变换矩阵对角化。
其中 X X X是循环矩阵, x ^ \hat{x} x^是原向量 x x x的傅里叶变换, F F F是傅里叶变换矩阵,上标 H H H表示共轭转置: X H = ( X ∗ ) T X^H= (X^∗)^T XH=(X∗)T。换句话说, X X X相似于对角阵, X X X的特征值是 x ^ \hat{x} x^的元素。
另一方面,如果一个矩阵能够表示成两个傅里叶矩阵夹一个对角阵的乘积形式,则它是一个循环矩阵。其生成向量是对角元素的傅里叶逆变换:
F ⋅ d i a g ( y ) ⋅ F H = C ( F − 1 ( y ) ) F⋅diag(y)⋅F^H=C(\mathcal{F}^{-1}(y)) F⋅diag(y)⋅FH=C(F−1(y))
X X X 是什么?
X X X是由原向量 x x x生成的循环矩阵。以矩阵尺寸 K = 4 K = 4 K=4为例。
X = C ( x ) = [ x 1 x 2 x 3 x 4 x 4 x 1 x 2 x 3 x 3 x 4 x 1 x 2 x 2 x 3 x 4 x 1 ] X = C(x) = \begin{bmatrix} x_1 & x_2 & x_3 & x_4 \\ x_4 & x_1 & x_2 & x_3 \\ x_3 & x_4 & x_1 & x_2 \\ x_2 & x_3 & x_4 & x_1 \\ \end{bmatrix} X=C(x)=⎣⎢⎢⎡x1x4x3x2x2x1x4x3x3x2x1x4x4x3x2x1⎦⎥⎥⎤
F F F 是什么?
F F F是离散傅里叶矩阵(DFT matrix),可以用一个复数 ω = e − 2 π i / k \omega=e^{-2{\pi}i/k} ω=e−2πi/k 表示,其中 K K K为方阵 F F F的尺寸,以 K = 4 K=4 K=4为例。
F = 1 K [ 1 1 1 1 1 ω ω 2 ω 3 1 ω 2 ω 4 ω 6 1 ω 3 ω 6 ω 9 ] F = \frac{1}{\sqrt{K}}\begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & \omega & \omega^2 & \omega^3 \\ 1 & \omega^2 & \omega^4 & \omega^6 \\ 1 & \omega^3 & \omega^6 & \omega^9 \\ \end{bmatrix} F=K1⎣⎢⎢⎡11111ωω2ω31ω2ω4ω61ω3ω6ω9⎦⎥⎥⎤
把 ω \omega ω 想象成一个角度为 2 π / K 2\pi/K 2π/K的向量,这个矩阵的每一行是这个向量在不断旋转。从上到下,旋转速度越来越快。
之所以称为DFT matrix,是因为一个信号的DFT变换可以用此矩阵的乘积获得:
x ^ = D F T ( X ) = K ⋅ F ⋅ x \hat{x} = DFT(X) = \sqrt{K}\cdot F \cdot x x^=DFT(X)=K⋅F⋅x
反傅里叶变换也可以通过类似手段得到:
x = 1 K F − 1 x ^ x = \frac{1}{\sqrt{K}}F^{-1}\hat{x} x=K1F−1x^
傅里叶矩阵有许多性质:
注意: F F F是常数,可以提前计算好,和要处理的 x x x无关。
对角化怎么理解?
把原公式两边乘以逆矩阵:
F − 1 ⋅ X ⋅ ( F H ) − 1 = d i a g ( x ^ ) F^{-1}\cdot X \cdot (F^H)^{-1} = diag(\hat{x}) F−1⋅X⋅(FH)−1=diag(x^)
利用前述酉矩阵的性质:
左 边 = F H X F = d i a g ( x ^ ) 左边 = F^HXF = diag(\hat{x}) 左边=FHXF=diag(x^)
也就是说,矩阵 X X X通过相似变换 F F F变成了对角阵 d i a g ( x ^ ) diag(\hat{x}) diag(x^),即对循环矩阵 X X X进行对角化。
另外, F H X F F^HXF FHXF是矩阵 X X X的2D DFT 变化。即傅里叶变化可以把循环矩阵对角化。
证明过程略过。
更多性质
利用对角化,能推导出循环矩阵的许多性质。
转置
循环矩阵的转置也是一个循环矩阵(可以查看循环矩阵个元素排列证明),其特征值和原特征值共轭。
X T = F ⋅ d i a g ( ( x ^ ) ∗ ) ⋅ F H X^T = F\cdot diag((\hat{x})^*)\cdot F^H XT=F⋅diag((x^)∗)⋅FH
可以通过如下方式证明:
X T = ( F H ) T ⋅ d i a g ( x ^ ) F T X^T = (F^H)^T\cdot diag(\hat{x})F^T XT=(FH)T⋅diag(x^)FT
由于 F F F是对称酉矩阵,且已知 X X X是实矩阵:
X T = F ∗ ⋅ d i a g ( x ^ ) F = ( F ∗ ⋅ d i a g ( x ^ ) F ) ∗ = F ⋅ d i a g ( ( x ^ ∗ ) ) ⋅ F H X^T = F^*\cdot diag(\hat{x})F = (F^*\cdot diag(\hat{x})F)^* = F\cdot diag((\hat{x}^*))\cdot F^H XT=F∗⋅diag(x^)F=(F∗⋅diag(x^)F)∗=F⋅diag((x^∗))⋅FH
如果原生成向量 x x x是对称向量(例如 [ 1 , 2 , 3 , 4 , 3 , 2 ] [1,2,3,4,3,2] [1,2,3,4,3,2]),则其傅里叶变换为实数,则:
X T = C ( F − 1 ( x ^ ) ∗ ) = C ( x ) X^T = C(\mathcal{F}^{-1}(\hat{x})^*) = C(x) XT=C(F−1(x^)∗)=C(x)
卷积
循环矩阵乘向量等价于生成向量的逆序和该向量卷积,可进一步转化为傅里叶变化相乘。
注意卷积本身即包含逆序操作,另外利用了信号与系统中经典的“时域卷积,频域相乘”。
F ( X y ) = F ( C ( x ) y ) = F ( x ˉ ∗ y ) = F ∗ ( x ) ⨀ F ( y ) \mathcal{F}(Xy) = \mathcal{F}(C(x)y) = \mathcal{F}(\bar{x}*y)=\mathcal{F}^*(x)\bigodot \mathcal{F}(y) F(Xy)=F(C(x)y)=F(xˉ∗y)=F∗(x)⨀F(y)
其中 x ˉ \bar{x} xˉ 表示把 x x x的元素倒序排列。星号代表共轭。
相乘
设 C , B C,B C,B为循环矩阵,其乘积的特征值等于特征值的乘积:
A B = F ⋅ d i a g ( x ^ ) ⋅ F H ⋅ F ⋅ d i a g ( b ^ ) ⋅ F H = F ⋅ d i a g ( a ^ ) ⋅ d i a g ( b ^ ) ⋅ F H = F ⋅ d i a g ( a ^ ⨀ b ^ ) ⋅ F H = C ( F − 1 ( a ^ ⨀ b ^ ) ) AB = F \cdot diag(\hat{x}) \cdot F^H \cdot F \cdot diag(\hat{b})\cdot F^H\\ =F\cdot diag(\hat{a})\cdot diag(\hat{b})\cdot F^H = F \cdot diag(\hat{a}\bigodot \hat{b})\cdot F^H\\ =C(\mathcal{F}^{-1}(\hat{a} \bigodot \hat{b})) AB=F⋅diag(x^)⋅FH⋅F⋅diag(b^)⋅FH=F⋅diag(a^)⋅diag(b^)⋅FH=F⋅diag(a^⨀b^)⋅FH=C(F−1(a^⨀b^))
乘积也是循环矩阵,其生成向量是原生成向量对位相乘的傅里叶逆变换。
相加
和的特征值等于特征值的和:
A + B = F ⋅ d i a g ( a ^ ) ⋅ F H + F ⋅ d i a g ( b ^ ) ⋅ F H = F ⋅ d i a g ( a ^ + b ^ ) ⋅ F H A+B = F \cdot diag(\hat{a}) \cdot F^H + F \cdot diag(\hat{b}) \cdot F^H = F\cdot diag(\hat{a}+\hat{b})\cdot F^H A+B=F⋅diag(a^)⋅FH+F⋅diag(b^)⋅FH=F⋅diag(a^+b^)⋅FH
和也是循环矩阵,其生成向量是原生成向量的和。
求逆
循环矩阵的逆,等价于将其特征值求逆:
X − 1 = F ⋅ d i a g ( x ^ ) − 1 ⋅ F H = C ( F − 1 ( d i a g ( x ^ ) − 1 ) ) X^{-1} = F \cdot diag(\hat{x})^{-1}\cdot F^H = C(\mathcal{F}^{-1}(diag(\hat{x})^{-1})) X−1=F⋅diag(x^)−1⋅FH=C(F−1(diag(x^)−1))
对角阵求逆等价于对角元素求逆。以下证明:
F ⋅ d i a g ( x ^ ) − 1 ⋅ F H ⋅ F ⋅ d i a g ( x ^ ) ⋅ F H = F ⋅ d i a g ( x ^ ) − 1 ⋅ d i a g ( x ^ ) ⋅ F H = F ⋅ F H = I F \cdot diag(\hat{x})^{-1} \cdot F^H \cdot F \cdot diag(\hat{x}) \cdot F^H \\ = F \cdot diag(\hat{x})^{-1} \cdot diag(\hat{x}) \cdot F^H = F \cdot F^H = I F⋅diag(x^)−1⋅FH⋅F⋅diag(x^)⋅FH=F⋅diag(x^)−1⋅diag(x^)⋅FH=F⋅FH=I
逆也是循环矩阵。
作用
该性质可以将循环矩阵的许多运算转换成更简单的运算。例如“
X H X = F ⋅ d i a g ( x ^ ⨀ x ^ ∗ ) ⋅ F H = C ( F − 1 ( x ^ ⨀ x ^ ∗ ) ) X^HX = F \cdot diag(\hat{x} \bigodot \hat{x}^*) \cdot F^H = C(\mathcal{F}^{-1}(\hat{x} \bigodot \hat{x}^*)) XHX=F⋅diag(x^⨀x^∗)⋅FH=C(F−1(x^⨀x^∗))
原始计算量:两个方阵相乘 ( O ( K 3 ) ) (O(K^3)) (O(K3))
转换后的计算量:反向傅里叶 ( K l o g K ) (KlogK) (KlogK) + 向量点乘 K K K
cv中的许多算法,都利用了这些性质提高运算速度。
问题:
有训练样本 x i x_i xi,其标定 y i , i = 1 , 2 , . . . N y_i,i=1,2,...N yi,i=1,2,...N。
欲求解一个回归函数 f ( z ) f(z) f(z),希望 f ( x i ) = y i f(x_i)=y_i f(xi)=yi。
线性回归:
使用线性函数进行预测,即 f ( z ) = w T z f(z) = w^Tz f(z)=wTz。
求解方法有很多种,以岭回归(Ridge Regression)为例,最小化下面的函数即可:
λ ∣ ∣ w ∣ ∣ 2 + ∑ i ( w T x i − y i ) 2 \lambda||w||^2 + \sum_i(w^Tx_i - y_i)^2 λ∣∣w∣∣2+i∑(wTxi−yi)2
这个最小化问题有闭解:
w = ( X T X + λ I ) − 1 X T y w = (X^TX + \lambda I)^{-1}X^Ty w=(XTX+λI)−1XTy
其中, X X X的第 i i i行为 x i x_i xi,列向量 y y y的第 i i i元素为 y i y_i yi。
非线性回归:
使用非线性函数来预测,即 f ( z ) f(z) f(z)是关于 z z z的非线性函数。
非线性函数能够处理线性函数搞不定的分类问题。
非线性函数的估计较难,为了提高效率,引入了核方法。
核方法:
对 z z z进行一个非线性变换 ψ \psi ψ, f ( z ) f(z) f(z)是变化结果的线性函数:
f ( z ) = w T ψ ( z ) f(z) = w^T \psi (z) f(z)=wTψ(z)
w w w由训练样本的非线性变换 ψ ( x i ) \psi(x_i) ψ(xi)的线性组合构成:
w = ∑ i α i ψ ( x i ) w = \sum _i \alpha_i \psi(x_i) w=i∑αiψ(xi)
两者结合,得到完整形式:
f ( z ) = [ ∑ i α i ψ ( x i ) ] ψ ( z ) = ∑ i [ α i ψ ( x i ) ψ ( z ) ] f(z)=[\sum_i \alpha_i \psi(x_i)]\psi(z) = \sum_i[\alpha_i \psi(x_i) \psi(z)] f(z)=[i∑αiψ(xi)]ψ(z)=i∑[αiψ(xi)ψ(z)]
记 κ ( x i , x j ) = ψ ( x i ) ψ ( z ) \kappa(x_i,x_j) = \psi(x_i)\psi(z) κ(xi,xj)=ψ(xi)ψ(z),称为核函数。则:
f ( z ) = ∑ i α i κ ( z , x i ) = α T κ ( z ) f(z) = \sum_i \alpha_i \kappa(z,x_i) = \alpha^T \kappa(z) f(z)=i∑αiκ(z,xi)=αTκ(z)
α \alpha α为 N × 1 N \times 1 N×1矢量, κ ( z ) 为 N × 1 \kappa(z)为 N \times 1 κ(z)为N×1,第 i i i个元素为训练样本 x i x_i xi和测试样本 z z z的核函数值。
f ( z ) f(z) f(z)是关于 z z z的非线性函数,但确实关于 κ ( z ) \kappa(z) κ(z)的线性函数,可以使用线性函数的优化方法求解 α \alpha α。
以岭回归为例:
α = ( K + λ I ) − 1 y \alpha = (K + \lambda I)^{-1}y α=(K+λI)−1y
注:这个解对于原问题相当于 w = X − 1 y w = X^{-1}y w=X−1y,不过原问题中 X X X不是方阵,所以要写成矩阵伪逆的形式。
我们称,原始参数 w w w处于原空间 prime space中,新参数 α \alpha α则处于对偶空间 dual space中。
和真正的线性方法比起来,核方法在估计每一个 z z z的标签时,需要计算 z z z和训练集中每一个样本 x i x_i xi的和函数 κ ( z , x i ) \kappa(z,x_i) κ(z,xi)。其复杂程度和训练集大小相关。
一般的跟踪问题可以分解乘下面几步:
1、INTRODUCTION
对于分类器,很有可能专注于目标表征的感兴趣特征 —— 正样本。然而判别方法的核心原则是给目标相关环境 —— 负样本(给予其相同重要性或者更多重要性)。通常最常用的负样本来自于不同位置和尺度的图像patch,反映了在这些条件下将对分类器进行评估的先验知识。
作者认为负样本的欠采样是阻碍跟踪性能的主要因素(即负样本不足)。在本文中,作者开发了分析包括数千相对平移的样本的工具,且无需明确的迭代。如果我们使用特定的平移模型,那么在傅里叶域,一些学习算法实际上变得更加容易,因为我们添加了更多样本,这使得更容易的学习算法成为可能。
这些分析工具即循环矩阵,在流行的学习算法和经典的信号处理之间提供了一个有用的桥梁。这意味着我们能够提出一种基于核化岭回归的跟踪器而不会遭受“核化的诅咒”,其较大的渐进复杂性,甚至比非结构化线性回归表现出更低的复杂性(这里我的理解:随样本变化复杂度渐进变化)。另外,它可以被看作是线性相关滤波器的核化版本,它构成了可用的最快跟踪器的基础。 我们利用强大内核技巧实现线性相关滤波器相同的计算复杂度。 我们的框架很容易包含多个特征通道,通过使用线性内核,我们可以快速扩展线性相关滤波器到多通道情况。
2、RELATED WORK
2.1、基于检测的跟踪
这个听名字就比较好理解了,基于检测到的目标进行跟踪,首先在跟踪之前对目标进行检测,得到目标的位置,然后对目标进行学习,跟踪。
2.2、样本转换和相关滤波
相关滤波与更加复杂的方法相比具有竞争力,而且仅仅使用了一小部分计算资源实现了几百帧每秒的速度。他们利用了这样一个事实,即两个patch
的卷积(稀疏的,它们在不同相对平移时的点积)相当于傅里叶域中的元素乘积(时域卷积 = 频域点积)。 因此,通过在傅里叶域中描述它们的目标,对于几次平移或图像移位,可以指定线性分类器期望的输出。
需要在变化图像patches
和训练算法之间找到更深的连接,以克服直接傅里叶域公式的局限性。而且说出了样本和训练算法都是必须的,直接在频域使用傅里叶变化加快算法。
2.3、后来的工作
初始版本就是CSK,然后把多通道特征以及核函数这个加进来对算法进行提升。
3、CONTRIBUTIONS
提出了一个快速的效果良好的跟踪算法,把以前只能用单通道的灰度特征改进为现在可以使用多通道的HOG特征或者其他特征,而且在现有算法中是表现比较好的,使用HOG替换掉了灰度特征,对实验部分进行了扩充,充分证明自己的效果是比较好的。使用核函数,对偶相关滤波去计算。
KCF算法的贡献:
- 使用目标周围区域的循环矩阵采集正负样本,利用岭回归训练目标检测器,并成功的利用循环矩阵在傅里叶空间可对角化的性质将矩阵的运算转化为向量的Hadamad积,即元素的点乘,大大降低了运算量,提高了运算速度,使算法满足实时性要求。
- 将线性空间的脊回归通过核函数映射到非线性空间,在非线性空间通过求解一个对偶问题和某些常见的约束,同样的可以使用循环矩阵傅里叶空间对角化简化计算。
- 给出了一种将多通道数据融入该算法的途径。
4、BUILDING BLOCKS
在本节中,我们提出了在不同平移下抽取的图像patches
的分析模型,并且计算其对线性回归算法的影响。并将展示和经典相关滤波器自然潜在连接。我们开发的这个工具使得我们可以研究更加复杂的算法
4.1、Linear regression
我们将专注于岭回归,因为它存在一个简单的闭式解,且可以实现接近更复杂方法的性能。训练的目标是找到一个函数 f ( z ) = w T z f(z) = w^Tz f(z)=wTz,它最小化样本 x i x_i xi和它的回归目标 y i y_i yi的平方误差。
min w ∑ i ( f ( x i ) − y i ) 2 + λ ∣ ∣ w ∣ ∣ 2 \min_w \sum_i(f(x_i)-y_i)^2+\lambda||w||^2 wmini∑(f(xi)−yi)2+λ∣∣w∣∣2
λ \lambda λ是控制过拟合的正则化参数。上式存在闭解:
w = ( X T X + λ I ) − 1 X T y w = (X^TX+\lambda I)^{-1}X^Ty w=(XTX+λI)−1XTy
其中,数据矩阵 X X X每一行 x i x_i xi有一个样本,并且 y y y的每一个元素是回归目标 y i y_i yi。 I I I是单位矩阵。转化成复数版本:
w = ( X H X + λ I ) − 1 X H y w = (X^HX+\lambda I)^{-1}X^Hy w=(XHX+λI)−1XHy
X H X^H XH是Hermitian转置,即 X H = ( X ∗ ) T X^H = (X^*)^T XH=(X∗)T,也就是共轭转置,且 X ∗ X^* X∗是矩阵 X X X的复共轭。
通常情况下,必须求解一个大的线性方程组来计算闭式解,下面将绕过这个限制。
4.2、Cyclic shifts(循环位移)
为了简化符号,我们将关注于单通道一维信号。这些结果可以直接一般化(推广)多通道二维图像(第7节)。
考虑一个 N × 1 N\times 1 N×1的矢量,表示感兴趣目标的patch
,记为 x x x。我们将其称为基础样本。我们的目标是使用一个包括基础样本和一些通过平移获得的虚拟样本训练分类器。
我们可以通过循环移位算子来建模该向量的一维平移,循环移位算子是置换矩阵
P = [ 0 0 0 ⋯ 1 1 0 0 ⋯ 0 0 1 0 ⋯ 0 ⋮ ⋮ ⋱ ⋱ ⋮ 0 0 1 ⋯ 0 ] P = \begin{bmatrix} 0 & 0 & 0 & \cdots & 1 \\ 1 & 0 & 0 & \cdots & 0 \\ 0 & 1 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \ddots & \vdots \\ 0 & 0 & 1 & \cdots & 0 \\ \end{bmatrix} P=⎣⎢⎢⎢⎢⎢⎡010⋮0001⋮0000⋱1⋯⋯⋯⋱⋯100⋮0⎦⎥⎥⎥⎥⎥⎤
点积 P x = [ x n , x 1 , x 2 , ⋯ , x n − 1 ] T Px = [x_n,x_1,x_2,\cdots , x_{n-1}]^T Px=[xn,x1,x2,⋯,xn−1]T ,将 x x x 平移一个元素,对小的平移进行建模。我们能够通过使用矩阵的幂 P u x P^ux Pux 链接 u u u 的平移以实现更大的平移。负 u u u 将反向移动。
该模型水平平移的1D信号如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5GLwPPi-1668435169239)(Figure_1.png)]
2D图像如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qRhIqS8m-1668435169240)(Figure_2.png)]
由于循环的特性,我们每n个周期得到相同的信号 x x x,这意味使用下面的公式(29)可以得到全套的移位信号:
{ P u x ∣ u = 0 , ⋯ , n − 1 } \lbrace P^ux|u = 0,\cdots,n-1 \rbrace {Pux∣u=0,⋯,n−1}
此外,由于循环的性质,我们可以等效地将该组地前半部分视为正方向地变化,而后半部分视为负方向地变化。
4.3、Circulant matrices
为了计算样本平移的回归值,我们使用一组方程(29)作为矩阵 X X X的行,如下所示:
X = C ( X ) = [ x 1 x 2 x 3 ⋯ x n x n x 1 x 2 ⋯ x n − 1 x n − 1 x n x 1 ⋯ x n − 2 ⋮ ⋮ ⋱ ⋱ ⋮ x 2 x 3 x 4 ⋯ x 1 ] X = C(X) = \begin{bmatrix} x_1 & x_2 & x_3 & \cdots & x_n \\ x_n & x_1 & x_2 & \cdots & x_{n-1} \\ x_{n-1} & x_n & x_1 & \cdots & x_{n-2} \\ \vdots & \vdots & \ddots & \ddots & \vdots \\ x_2 & x_3 & x_4 & \cdots & x_1 \\ \end{bmatrix} X=C(X)=⎣⎢⎢⎢⎢⎢⎡x1xnxn−1⋮x2x2x1xn⋮x3x3x2x1⋱x4⋯⋯⋯⋱⋯xnxn−1xn−2⋮x1⎦⎥⎥⎥⎥⎥⎤
得到一个循环矩阵,循环矩阵的特性前面预备知识已经列举。这个矩阵是确定的,完全是由向量 X X X的第一行指定,并且不需要考虑 X X X,所有的循环矩阵 都可以通过离散的傅里叶变换(DFT)实现对角化:
X = F d i a g ( x ^ ) F H X = F diag(\hat{x})F^H X=Fdiag(x^)FH
上式中, F F F是不依赖 x x x的常数矩阵, x ^ \hat{x} x^ 表示生成向量 x x x 的离散傅里叶变换 x ^ = F ( x ) \hat{x} = \mathcal{F}(x) x^=F(x)。符号 ^ \hat{} ^ 作为向量DFT的简写。常数矩阵 F F F就是DFT 矩阵,并且是计算任何输入向量DFT的唯一矩阵,如 F ( z ) = n F ( z ) \mathcal{F}(z) = \sqrt{n}F(z) F(z)=nF(z), F F F是离散傅里叶矩阵,是常量:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FoLqGZ1-1668435169241)(060be8bd026696b9b59bf9b0ae836cd9.png)]
4.4、Putting it all together
当训练数据是通过循环位移组成时,我们可以简化公式(27) w = ( X H X + λ I ) − 1 X H y w = (X^HX+\lambda I)^{-1}X^Hy w=(XHX+λI)−1XHy 的线性回归,使用对角矩阵将会大大减少计算量,因为所有的操作都是在对角元素上操作元素的方式完成的。
考虑项 X H X X^HX XHX ,可以将其看作非中心的协方差矩阵。将公式(31)带入:
X H X = F d i a g ( x ^ ∗ ) F H F d i a g ( x ^ ) F H X^HX = F diag(\hat{x}^*)F^H F diag(\hat{x})F^H XHX=Fdiag(x^∗)FHFdiag(x^)FH
由于对角矩阵是对称的,通过Hermitian 转置仅留下共轭的部分即 x ^ ∗ \hat{x}^* x^∗,另外我们可以消除因子 F H F = I F^HF=I FHF=I。这是酉矩阵 F F F的性质,因此可以将公式(32)进行化简:
X H X = F d i a g ( x ^ ∗ ⨀ x ^ ) F H X^HX = Fdiag(\hat{x}^* \bigodot \hat{x})F^H XHX=Fdiag(x^∗⨀x^)FH
其中,括号里面的向量被称为信号 x x x的自相关。
因此公式(27)最终可以化简成为:
w = ( F d i a g ( x ^ ∗ ) F H F d i a g ( x ^ ) F H + λ F H ) − 1 F d i a g ( x ^ ∗ ) F H y = ( F d i a g ( x ^ ∗ ⨀ x ^ + λ ) F H ) − 1 F d i a g ( x ^ ∗ ) F H y = F d i a g ( x ^ ∗ x ^ ∗ ⨀ x ^ + λ ) F H y w = (F diag(\hat{x}^*)F^H F diag(\hat{x})F^H + \lambda F^H)^{-1}Fdiag(\hat{x}^*)F^Hy \\ =(Fdiag(\hat{x}^* \bigodot \hat{x} + \lambda)F^H)^{-1}Fdiag(\hat{x}^*)F^Hy\\ =Fdiag(\frac{\hat{x}^*}{\hat{x}^* \bigodot \hat{x} + \lambda})F^Hy w=(Fdiag(x^∗)FHFdiag(x^)FH+λFH)−1Fdiag(x^∗)FHy=(Fdiag(x^∗⨀x^+λ)FH)−1Fdiag(x^∗)FHy=Fdiag(x^∗⨀x^+λx^∗)FHy
这里的分号是点除运算,就是对应元素相除。因为:
F ( C ( x ) y ) = F ∗ ( x ) ⨀ F ( y ) \mathcal{F}(C(x)y) = \mathcal{F}^*(x)\bigodot \mathcal{F}(y) F(C(x)y)=F∗(x)⨀F(y)
对上式两边同时进行傅里叶变换(预备知识提到)
F ( w ) = F ∗ ( F − 1 ( x ^ ∗ x ^ ∗ ⨀ x ^ + λ ) ) ⨀ F ( y ) \mathcal{F}(w) = F^*(\mathcal{F}^{-1}(\frac{\hat{x}^*}{\hat{x}^* \bigodot \hat{x} + \lambda}))\bigodot \mathcal{F}(y) F(w)=F∗(F−1(x^∗⨀x^+λx^∗))⨀F(y)
因此最终可以化简得到
w ^ = x ^ ⨀ y ^ x ^ ∗ ⨀ x ^ + λ \hat{w} = \frac{\hat{x} \bigodot \hat{y}}{\hat{x}^* \bigodot \hat{x} +\lambda} w^=x^∗⨀x^+λx^⨀y^
这样就可以使用向量的点积运算代替矩阵运算,特别是求逆运算,大大提高计算速度,
w = F − 1 ( w ^ ) w = \mathcal{F}^{-1}(\hat{w}) w=F−1(w^)
4.5、Relationship to correlation filters
我们在上面展示的推导通过将起点指定为具有循环移位的岭回归并且实现相同的解决效果,增加了相当大的洞察力。循环矩阵允许我们能够丰富经典信号处理和当代相关滤波器提出的工具集,以及对新的算法应用傅里叶技巧。
5、NON-LINEAR REGRESSION(非线性回归)
允许更强大的非线性回归函数 f ( z ) f(z) f(z)的一种方法是使用 “核技巧”。最有吸引力的是优化问题仍然是线性的,尽管是在一组不同的变量(双重空间)中。不利的方面 f ( z ) f(z) f(z)是的复杂度随着样本量的增大而增大。然而,使用我们的新分析工具,我们将在训练和评估两方面证明可以克服这一限制,并获得与线性相关滤波器一样快的非线性滤波器,
5.1、Kernel trick – brief overview
前面预备知识已展示,此处略过。
将线性问题的输入映射成非线性问题,具有核技巧的特征空间 ψ ( x ) \psi(x) ψ(x) ,包含
将解 w w w表示为样本的线性组合:
w = ∑ i α i ϕ ( x i ) w = \sum_i \alpha_i \phi(x_i) w=i∑αiϕ(xi)
因此,优化下的变量是 α \alpha α而不是 w w w,称作 w w w的对偶问题。
对 z z z进行一个非线性变换 ψ \psi ψ, f ( z ) f(z) f(z)是变化结果的线性函数:
f ( z ) = w T ψ ( z ) f(z) = w^T \psi (z) f(z)=wTψ(z)
将公式(77)带入:
f ( z ) = [ ∑ i α i ψ ( x i ) ] ψ ( z ) = ∑ i [ α i ψ ( x i ) ψ ( z ) ] f(z)=[\sum_i \alpha_i \psi(x_i)]\psi(z) = \sum_i[\alpha_i \psi(x_i) \psi(z)] f(z)=[i∑αiψ(xi)]ψ(z)=i∑[αiψ(xi)ψ(z)]
记 κ ( x i , x j ) = ψ ( x i ) ψ ( z ) \kappa(x_i,x_j) = \psi(x_i)\psi(z) κ(xi,xj)=ψ(xi)ψ(z),称为核函数。则:
f ( z ) = ∑ i α i κ ( z , x i ) = α T κ ( z ) f(z) = \sum_i \alpha_i \kappa(z,x_i) = \alpha^T \kappa(z) f(z)=i∑αiκ(z,xi)=αTκ(z)
α \alpha α为 N × 1 N \times 1 N×1矢量, κ ( z ) 为 N × 1 \kappa(z)为 N \times 1 κ(z)为N×1,第 i i i个元素为训练样本 x i x_i xi和测试样本 z z z的核函数值。
5.2、Fast kernel regression
可以知道岭回归的核化版本的解决方案:
α = ( K + λ I ) − 1 y \alpha = (K + \lambda I)^{-1}y α=(K+λI)−1y
其中 K K K是核化矩阵, α \alpha α是系数 α i \alpha_i αi的向量,代表在对偶空间中的解。
论文提出的一个创新点就是使循环矩阵的傅氏对角化简化计算,所以这里如果希望计算 α \alpha α时可以同样将矩阵求逆运算变为元素运算,就希望将 K K K 对角化,所以希望找到一个核函数使对应的核矩阵式循环矩阵。
定理1:给定循环矩阵 C ( x ) C(x) C(x),对于任何置换矩阵 M M M,如果核函数满足 κ ( x , z ) = κ ( M x , M z ) \kappa(x,z) = \kappa(Mx,Mz) κ(x,z)=κ(Mx,Mz),则相应的核矩阵 K K K是循环的。
这意味着,为了保持核的循环结构,它必须同样的处理所有维度。以下内核满足定理1:
- 径向基函数核 —— 例如,高斯。
- 点积内核 —— 例如,线性,多项式。
- 累积内核 —— 例如,交集, χ 2 \chi^2 χ2和Hellinger内核
- 指数累积核。
使用循环矩阵 K K K 对公式(43)进行对角化,从而获得:
a = F d i a g ( k ^ x x + λ ) − 1 F H y α ^ = y ^ ( k ^ x x + λ ) ∗ a=Fdiag(\hat{k}^{xx}+\lambda)^{-1}F^Hy \\ \hat{\alpha} = \frac{\hat{y}}{(\hat{k}^{xx}+\lambda)^*} a=Fdiag(k^xx+λ)−1FHyα^=(k^xx+λ)∗y^
其中 k ^ x x \hat{k}^{xx} k^xx是矩阵 K = C ( k x x ) K=C(k^{xx}) K=C(kxx)的第一行,符号 ^ \hat{} ^表示向量的离散傅里叶变化,为了更好的理解 k x x k^{xx} kxx的角色,我们定义更通用的核相关(kernel correlation),两个任意向量 x x x和 x ′ x^{'} x′的核相关是下面公式所示元素的向量 k x x ′ k^{xx^{'}} kxx′。
k i x x ′ = κ ( x ′ , P i − 1 x ) k_i^{xx{'}} = \kappa(x^{'},P^{i-1}x) kixx′=κ(x′,Pi−1x)
它包含针对两个参数的不同相对位移进行评估的核。然后 k ^ x x \hat{k}^{xx} k^xx是傅里叶域中 x x x与自身的核相关,我们可以称之为 核自相关。可以采用更近一步的类似。 由于内核相当于高维空间 ψ ( ⋅ ) \psi(\cdot) ψ(⋅),中的点积,因此公式(45)可以表示成:
k i x x ′ = ψ T ( x ′ ) ψ ( P i − 1 x ) k_i^{xx{'}} = \psi^T(x^{'})\psi(P^{i-1}x) kixx′=ψT(x′)ψ(Pi−1x)
即高维空间 ψ ( ⋅ ) \psi(\cdot) ψ(⋅)中 x x x和 x ′ x^{'} x′的互相关。
5.3、Fast detection
首先由训练样本和标签训练检测器,其中训练集是由目标区域和由其移位得到的若干样本组成,对应的标签是根据距离越近正样本可能性越大的准则赋值的,然后可以得到 α \alpha α 待分类样本集,即待检测样本集,是由预测区域和由其移位得到的样本集合 z j = P j z z_j = P^jz zj=Pjz。我们很少想去单独评估一副图像patch
的回归函数 f ( z ) f(z) f(z)。为了检测目标,我们会从几个图象位置(即几个候选patch)对 f ( z ) f(z) f(z)进行评估。这些patch可以通过循环位移来进行建模。
定义 K z K^z Kz 表示所有训练样本和所有候选patch之间 核矩阵。其中 样本和patches是基于初始样本 x x x和初始patch z z z循环位移得到的,因此, K z K^z Kz的每一个元素都可以用 κ ( P i − 1 z , P j − 1 x ) \kappa({P^{i-1}z,P^{j-1}x}) κ(Pi−1z,Pj−1x) 得到。
根据前面定理一可知, κ ( x , z ) = κ ( M x , M z ) \kappa(x,z) = \kappa(Mx,Mz) κ(x,z)=κ(Mx,Mz) 即 κ ( x , z ) = κ ( P i x , P j z ) \kappa(x,z) = \kappa(P^ix,P^jz) κ(x,z)=κ(Pix,Pjz),因此 K z K^z Kz是循环矩阵。
因此只需要第一行来定义循环矩阵 K z K^z Kz
K z = C ( k x z ) K^z = C(k^{xz}) Kz=C(kxz)
其中 k x z k^{xz} kxz是 x x x和 z z z的核相关。可以计算所有候选patch的回归函数:
f ( z ) = ( K z ) T α f(z) = (K^z)^T \alpha f(z)=(Kz)Tα
其中, f ( z ) f(z) f(z) 是一个向量,包含 z z z 所有循环位移的输出,即全部的检测响应。为了方便计算,进行对角化可得:
f ^ ( z ) = K ^ x z ⨀ α ^ \hat{f}(z) = \hat{K}^{xz} \bigodot \hat{\alpha} f^(z)=K^xz⨀α^
在所有位置处评估 f ( z ) f(z) f(z) 可以看作是对 核值 k x z k^{xz} kxz 的空间滤波操作, 每个 f ( z ) f(z) f(z) 都是来自 k x z k^{xz} kxz 的邻域核值的线性组合,由学习系数 α \alpha α加权。因为是滤波操作,因此使用傅里叶域更适合。
6、FAST KERNEL CORRELATION(快速核相关)
尽管我们已经找到了更快的训练和检测算法,但它们仍依赖于单个核心相关性(分别为 k x x k^{xx} kxx和 k x z k^{xz} kxz)的计算。内核相关包括为两个输入向量的所有相对位移核计算。对于大小为 n n n的信号, n n n个内核的复杂性简单估计为 O ( n 2 ) O(n^2) O(n2)。但是,使用循环位移模型,将会在计算中有效的利用冗余。
6.1、Dot-product and polynomial kernels(点积核与多项式核)
对于函数 g g g,点积核的形式为 κ ( x , x ′ ) = g ( x T , x ′ ) \kappa(x,x^{'})=g(x^T,x^{'}) κ(x,x′)=g(xT,x′) 。 k x x ′ k^{xx^{'}} kxx′有元素: k i x x ′ = κ ( x ′ , P i − 1 x ) = g ( x ′ T P i − 1 x ) k_i^{xx^{'}}= \kappa(x^{'},P^{i-1}x)=g(x^{'T}P^{i-1}x) kixx′=κ(x′,Pi−1x)=g(x′TPi−1x),假设 g g g 可以在任何输入向量上暗元素工作。因此可以写成:
k x x ′ = g ( C ( x ) x ′ ) k^{xx^{'}} = g(C(x)x^{'}) kxx′=g(C(x)x′)
这使得容易实现对角化:
k x x ′ = g ( F − 1 ( x ^ ∗ ⨀ x ^ ′ ) ) k^{xx^{'}} = g(\mathcal{F}^{-1}(\hat{x}^* \bigodot \hat{x}^{'})) kxx′=g(F−1(x^∗⨀x^′))
其中 F − 1 \mathcal{F}^{-1} F−1表示离散傅里叶逆变换。特别的,对于多项式核
κ ( x , x ′ ) = ( F − 1 ( x ^ ∗ ⨀ x ^ ′ ) + a ) b \kappa(x,x^{'}) = (\mathcal{F}^{-1}(\hat{x}^* \bigodot \hat{x}^{'})+a)^b κ(x,x′)=(F−1(x^∗⨀x^′)+a)b
可写成:
k x x ′ = ( F − 1 ( x ^ ∗ ⨀ x ^ ′ ) + a ) b k^{xx^{'}} = (\mathcal{F}^{-1}(\hat{x}^* \bigodot \hat{x}^{'})+a)^b kxx′=(F−1(x^∗⨀x^′)+a)b
仅使用 O ( n l o g n ) O(nlogn) O(nlogn)时间内,使用少量的 D T F / I D F T DTF/ IDFT DTF/IDFT 和元素操作就完成计算。
6.2、Radial Basis Function and Gaussian kernels(径向基函数和高斯核)
对于某些函数 h h h,RBF 核 有下面的形式:
κ ( x , x ′ ) = h ( ∣ ∣ x − x ′ ∣ ∣ 2 ) \kappa(x,x^{'}) = h(||x-x^{'}||^2) κ(x,x′)=h(∣∣x−x′∣∣2)
k x x ′ k^{xx^{'}} kxx′有元素:
k i x x ′ = κ ( x ′ , P i − 1 x ) = h ( ∣ ∣ x ′ − P i − 1 x ∣ ∣ 2 ) k_i^{xx^{'}} = \kappa(x^{'},P^{i-1}x)=h(||x^{'}-P^{i-1}x||^2) kixx′=κ(x′,Pi−1x)=h(∣∣x′−Pi−1x∣∣2)
将上述公式展开:
k i x x ′ = h ( ∣ ∣ x ∣ ∣ 2 + ∣ ∣ x ′ ∣ ∣ 2 − 2 x ′ T P i − 1 x ) k_i^{xx^{'}} =h(||x||^2+||x^{'}||^2 - 2x^{'T}P^{i-1}x) kixx′=h(∣∣x∣∣2+∣∣x′∣∣2−2x′TPi−1x)
根据 Parseval 定理,置换矩阵 P i − 1 P^{i-1} Pi−1 不影响 x x x的范数,因为 ∣ ∣ x ∣ ∣ 2 ||x||^2 ∣∣x∣∣2和 ∣ ∣ x ′ ∣ ∣ 2 ||x^{'}||^2 ∣∣x′∣∣2是常数,并且公式(58)具有与点积核相同的形式 k i x x ′ = κ ( x ′ , P i − 1 x ) = g ( x ′ T P i − 1 x ) k_i^{xx^{'}}= \kappa(x^{'},P^{i-1}x)=g(x^{'T}P^{i-1}x) kixx′=κ(x′,Pi−1x)=g(x′TPi−1x),因此:
k x x ′ = h ( ∣ ∣ x ∣ ∣ 2 + ∣ ∣ x ′ ∣ ∣ 2 − 2 F − 1 ( x ^ ∗ ⨀ x ^ ′ ) ) k^{xx^{'}} = h(||x||^2+||x^{'}||^2-2\mathcal{F}^{-1}(\hat{x}^* \bigodot \hat{x}^{'})) kxx′=h(∣∣x∣∣2+∣∣x′∣∣2−2F−1(x^∗⨀x^′))
对于高斯核:
κ ( x , x ′ ) = e x p ( − 1 σ 2 ∣ ∣ x − x ′ ∣ ∣ 2 ) \kappa (x,x^{'}) = exp(-\frac{1}{\sigma^2}||x-x^{'}||^2) κ(x,x′)=exp(−σ21∣∣x−x′∣∣2)
经过化简:
k x x ′ = e x p ( − 1 σ 2 ( ∣ ∣ x ∣ ∣ 2 + ∣ ∣ x ′ ∣ ∣ 2 − 2 F − 1 ( x ^ ∗ ⨀ x ^ ′ ) ) ) k^{xx^{'}}=exp(-\frac{1}{\sigma^2}(||x||^2+||x^{'}||^2-2\mathcal{F}^{-1}(\hat{x}^*\bigodot\hat{x}^{'}))) kxx′=exp(−σ21(∣∣x∣∣2+∣∣x′∣∣2−2F−1(x^∗⨀x^′)))
核相关的计算时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)。
6.3、Other kernels
前两节的方法取决于内核值是否由酉变换(例如DFT)保持不变。 这通常不适用于其他内核,例如:交叉核。 我们仍然可以使用快速训练和检测结果(第5.2和5.3节),但必须通过更昂贵的滑动窗口方法来评估核相关性。
7、MULTIPLE CHANNELS(多通道)
在本节中,我们将看到在双空间(频域核空间域)中工作具有多通道(例如HOG描述符的方向区间)的优点,只需在傅里叶域中对它们求和即可。 该特性延伸到线性情况,在特定条件下显着简化了最近提出的多通道相关滤波器。
7.1、General case
为了处理多通道的问题,我们假设向量 x x x连接 C C C每个通道的各个向量(例如,HOG变量的31个梯度方向区),例如 x = [ x 1 , ⋯ , x c ] x = [x_1,\cdots,x_c] x=[x1,⋯,xc]。第6节中研究的所有核要么是基于参数的点积要么是范式。可以通过简单地对每个通道的各个点积进行求和来计算点积。 通过DFT的线性,这允许我们对傅里叶域中每个通道的结果求和。 作为一个具体的例子,我们可以将这个方法应用于高斯核,得到下面公式:
k x x ′ = e x p ( − 1 σ 2 ( ∣ ∣ x ∣ ∣ 2 + ∣ ∣ x ′ ∣ ∣ 2 − 2 F − 1 ( ∑ i x ^ ∗ ⨀ x ^ ′ ) ) ) k^{xx^{'}} = exp(-\frac{1}{\sigma^2}(||x||^2+||x^{'}||^2-2\mathcal{F}^{-1}(\sum_i \hat{x}^* \bigodot \hat{x}^{'}))) kxx′=exp(−σ21(∣∣x∣∣2+∣∣x′∣∣2−2F−1(i∑x^∗⨀x^′)))
需要强调的是,多通道的集成不会导致更难的推理问题,我们只需在计算核相关性时对通道求和即可。
7.2、Linear kernel
对于线性核 κ ( x , x ′ ) = x T x ′ \kappa(x,x^{'})=x^Tx^{'} κ(x,x′)=xTx′,从前面的章节可以简单的得到多通道扩充,如下:
k x x ′ = F − 1 ( ∑ i x ^ C ∗ ⨀ x ^ c ′ ) k^{xx^{'}} = \mathcal{F}^{-1}(\sum_i \hat{x}_C^* \bigodot \hat{x}_c^{'}) kxx′=F−1(i∑x^C∗⨀x^c′)
我们将其命名为双相关滤波器 (DCF)。这个滤波器是线性的,但是在双空间 α \alpha α训练。
通过线性核进行双(空间)处理,我们仅使用元素操作,就能训练出多通道线性分类器。
么是范式。可以通过简单地对每个通道的各个点积进行求和来计算点积。 通过DFT的线性,这允许我们对傅里叶域中每个通道的结果求和。 作为一个具体的例子,我们可以将这个方法应用于高斯核,得到下面公式:
k x x ′ = e x p ( − 1 σ 2 ( ∣ ∣ x ∣ ∣ 2 + ∣ ∣ x ′ ∣ ∣ 2 − 2 F − 1 ( ∑ i x ^ ∗ ⨀ x ^ ′ ) ) ) k^{xx^{'}} = exp(-\frac{1}{\sigma^2}(||x||^2+||x^{'}||^2-2\mathcal{F}^{-1}(\sum_i \hat{x}^* \bigodot \hat{x}^{'}))) kxx′=exp(−σ21(∣∣x∣∣2+∣∣x′∣∣2−2F−1(i∑x^∗⨀x^′)))
需要强调的是,多通道的集成不会导致更难的推理问题,我们只需在计算核相关性时对通道求和即可。
7.2、Linear kernel
对于线性核 κ ( x , x ′ ) = x T x ′ \kappa(x,x^{'})=x^Tx^{'} κ(x,x′)=xTx′,从前面的章节可以简单的得到多通道扩充,如下:
k x x ′ = F − 1 ( ∑ i x ^ C ∗ ⨀ x ^ c ′ ) k^{xx^{'}} = \mathcal{F}^{-1}(\sum_i \hat{x}_C^* \bigodot \hat{x}_c^{'}) kxx′=F−1(i∑x^C∗⨀x^c′)
我们将其命名为双相关滤波器 (DCF)。这个滤波器是线性的,但是在双空间 α \alpha α训练。
通过线性核进行双(空间)处理,我们仅使用元素操作,就能训练出多通道线性分类器。
因为我们只考虑单个基样本 x x x,指出这种可能,来解决这些差异。在这种情况下,无论特征或通道的数量如何,核矩阵 K = X X T K = XX^T K=XXT 都是 n × n n\times n n×n大小的,它涉及基样本的 n n n个循环位移,并且通过 D F T DFT DFT的 n n n个基对角化。由于 K K K是完全对角的,我们可以单使用元素操作。但是,如果我们考虑两个基本样本,则 K K K的大小变为 2 n × 2 n 2n\times 2n 2n×2n,并且 n n n个 D F T DFT DFT基不在足以完全对角化,这种不完全对角化(块对角化)需要更昂贵的操作来处理。总之,对于快速元素操作,我们可以选择多个通道(在双通道中,获得DCF)或多个基本样本(在原始中,获得MOSSE),但不能同时选择两个。 这对时间关键型应用程序(如跟踪)具有重要影响。 一般情况更昂贵,主要适用于线下训练应用。