关于KCF 在网上的文章已经很多了,这篇文章就从我自己的理解分析的角度 来详细分析其原理以及代码
KCF原理
首先,我们假设训练的样本集为 ( x i , y i ) \left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{y}_{\boldsymbol{i}} \right) (xi,yi),那么其线性回归函数 f ( x i ) = ω T x i \boldsymbol{f}\left( \boldsymbol{x}_{\boldsymbol{i}} \right) =\boldsymbol{\omega }^{\boldsymbol{T}}\boldsymbol{x}_{\boldsymbol{i}} f(xi)=ωTxi ,这其中, ω \boldsymbol{\omega } ω是列向量表示的权重系数,可以通过最小二乘法来求解, min ω ∑ i ( f ( x i ) − y i ) 2 + λ ∣ ∣ ω ∣ ∣ 2 \underset{\boldsymbol{\omega }}{\min}\sum_{\boldsymbol{i}}{\left( \boldsymbol{f}\left( \boldsymbol{x}_{\boldsymbol{i}} \right) -\boldsymbol{y}_{\boldsymbol{i}} \right) ^2+\boldsymbol{\lambda }}||\boldsymbol{\omega }||^2 ωmini∑(f(xi)−yi)2+λ∣∣ω∣∣2
目标是最小化我们的采样数据 x i \boldsymbol{x}_{\boldsymbol{i}} xi的计算标签 f ( x i ) \boldsymbol{f}\left( \boldsymbol{x}_{\boldsymbol{i}} \right) f(xi)与下一帧真实目标位置的真实标签 y i \boldsymbol{y}_{\boldsymbol{i}} yi(回归目标)的距离,我计算出来的标签越像真实标签,说明我找到的下一帧的位置就离他真实的位置就越近,写矩阵的形式就是: min ω ∣ ∣ X w − y ∣ ∣ 2 + λ ∣ ∣ ω ∣ ∣ 2 \underset{\boldsymbol{\omega }}{\min}||\boldsymbol{X}_{\boldsymbol{w}}-\boldsymbol{y}||^2+\boldsymbol{\lambda }||\boldsymbol{\omega }||^2 ωmin∣∣Xw−y∣∣2+λ∣∣ω∣∣2
其中 X = [ x 1 , x 2 , ⋯ , x n ] T \boldsymbol{X}=\left[ \boldsymbol{x}_1,\boldsymbol{x}_2,\cdots ,\boldsymbol{x}_{\boldsymbol{n}} \right] ^{\boldsymbol{T}} X=[x1,x2,⋯,xn]T的每一行表示一个向量, y \boldsymbol{y} y是列向量,每个元素对应一个样本的标签,于是令导数为0,可求得: ω = ( X T X + λ I ) − 1 X T y \boldsymbol{\omega }=\left( \boldsymbol{X}^{\boldsymbol{T}}\boldsymbol{X}+\boldsymbol{\lambda I} \right) ^{-1}\boldsymbol{X}^{\boldsymbol{T}}\boldsymbol{y} ω=(