天天看点

目标跟踪KCF方法

Henriques, João F., et al. “High-speed tracking with kernelized

correlation filters.” Pattern Analysis and Machine Intelligence, IEEE

Transactions on 37.3 (2015): 583-596.

本文的跟踪方法效果甚好,速度奇高,思想和实现均十分简洁。其中利用循环矩阵进行快速计算的方法尤其值得学习。另外,作者在主页上十分慷慨地给出了各种语言的实现代码。

本文详细推导论文中的一系列步骤,包括论文中未能阐明的部分。请务必先参看这篇简介循环矩阵性质的博客。

思想

一般化的跟踪问题可以分解成如下几步:

1. 在ItIt。

循环矩阵表示图像块

在图像中,循环位移操作可以用来近似采样窗口的位移。

目标跟踪KCF方法

训练时,围绕着当前位置进行的一系列位移采样可以用二维分块循环矩阵XX可以利用傅里叶变换快速完成许多线性运算。

线性回归训练提速

此部分频繁用到了循环矩阵的各类性质,请参看这篇博客。

线性回归的最小二乘方法解为:

w=(XHX+λI)−1XHyw=(XHX+λI)−1XHy

根据循环矩阵乘法性质,XHXXHX

=(Fdiag(x^⊙x^∗+λδ)FH)−1XHy=(Fdiag(x^⊙x^∗+λδ)FH)−1XHy

根据循环矩阵求逆性质,可以把矩阵求逆转换为特征值求逆。

w=F⋅diag(1x^⊙x^∗+λδ)⋅FHXHyw=F⋅diag(1x^⊙x^∗+λδ)⋅FHXHy

w=F⋅diag(1x^⊙x^∗+λδ)⋅FH⋅Fdiag(x^∗)FH⋅yw=F⋅diag(1x^⊙x^∗+λδ)⋅FH⋅Fdiag(x^∗)FH⋅y

利用FF

分号表示用1进行对位相除。

反用对角化性质:Fdiag(y)FH=C(F−1(y))Fdiag(y)FH=C(F−1(y))

利用循环矩阵卷积性质F(C(x)⋅y)=x^∗⊙y^F(C(x)⋅y)=x^∗⊙y^的每个元素都是实数,所以共轭不变:

F(w)=x^x^⊙x^∗+λδ⊙F(y)=x^⊙y^x^⊙x^∗+λδF(w)=x^x^⊙x^∗+λδ⊙F(y)=x^⊙y^x^⊙x^∗+λδ

论文中,最后这一步推导的分子部分写成x^∗⊙y^x^∗⊙y^,是错误的。但代码中没有涉及。

线性回归系数ωω可以通过向量的傅里叶变换和对位乘法计算得到。

核回归训练提速

不熟悉核方法的同学可以参看这篇博客的简单说明。核回归方法的回归式为:

f(z)=αTκ(z)f(z)=αTκ(z)

KK也是循环矩阵。以下核都满足这样的条件:

目标跟踪KCF方法

设核相关矩阵的生成向量是kk

=Fdiag(1k^+λδ)FHy=C(F−1(1k^+λδ))y=Fdiag(1k^+λδ)FHy=C(F−1(1k^+λδ))y

利用循环矩阵卷积性质F(C(x)⋅y)=x^∗⊙y^F(C(x)⋅y)=x^∗⊙y^

两者都是同一个向量和自身位移结果进行运算。因为所有涉及到的核函数都只和位移的绝对值有关,所以ki=kN−iki=kN−i是对称向量。

举例:x0=[1,2,3,4]x0=[1,2,3,4]。

对称向量的傅里叶变换为实数,有:

α^=(1k^+λδ)⊙

继续阅读