相关滤波跟踪·KCF公式详细推导
因为KCF算法和CSK基本一样,因此关于KCF的笔记仅记录从section 4 开始的公式推导和理解。
为了表述清楚,本文所有小写加粗符号表示列向量,小写不加粗表示元素或参量,大写符号表示矩阵。
4 Building blocks
4.1 Linear regression
通过岭回归(ridge regression)或支持向量机(SVM)
minw∑in(f(xi)−yi)2+λ∥w∥2\min_{\mathbf{w}}\sum_{i}^{n}(f(\mathbf{x}_{i})-y_{i})^2+\lambda\| \mathbf{w} \|^2wmini∑n(f(xi)−yi)2+λ∥w∥2
分类器f(xi)=wTxif(\mathbf{x}_{i})=\mathbf{w}^T\mathbf{x}_{i}f(xi)=wTxi
所以上式=minw∑in(wTxi−yi)2+λ∥w∥2=minw∥Xw−y∥2+λ∥w∥2=(Xw−y)T(Xw−y)+λwTw\begin{aligned} &=\min_{\mathbf{w}}\sum_{i}^{n}(\mathbf{w}^T\mathbf{x}_{i}-y_{i})^2+\lambda\| \mathbf{w} \|^2\\ &=\min_{\mathbf{w}}\|X\mathbf{w}-\mathbf{y}\|^2+\lambda\| \mathbf{w} \|^2\\ &=(X\mathbf{w}-\mathbf{y})^T(X\mathbf{w}-\mathbf{y})+\lambda\mathbf{w}^T\mathbf{w}\\ \end{aligned}=wmini∑n(wTxi−yi)2+λ∥w∥2=wmin∥Xw−y∥2+λ∥w∥2=(Xw−y)T(Xw−y)+λwTw
接下来是矩阵的求导,这里是分子布局(numerater layout)的标量/向量情况
∂[...]∂w=2(Xw−y)T∂∂w(Xw−y)+2λwT=2(Xw−y)T∂∂w(Xw)+2λwT=2(Xw−y)TX+2λwT\begin{aligned} \frac{\partial[...] }{\partial \mathbf{w}} &=2(X\mathbf{w}-\mathbf{y})^T \frac{\partial}{\partial \mathbf{w}}(X\mathbf{w}-\mathbf{y}) +2\lambda \mathbf{w}^T\\ &=2(X\mathbf{w}-\mathbf{y})^T \frac{\partial}{\partial \mathbf{w}}(X\mathbf{w}) +2\lambda \mathbf{w}^T\\ &=2(X\mathbf{w}-\mathbf{y})^T X +2\lambda \mathbf{w}^T \end{aligned}∂w∂[...]=2(Xw−y)T∂w∂(Xw−y)+2λwT=2(Xw−y)T∂w∂(Xw)+2λwT=2(Xw−y)TX+2λwT
令∂[...]∂w=0\frac{\partial[...] }{\partial \mathbf{w}}=0∂w∂[...]=0,有
wTXTX−yTX+λwT=0wT(XTX+λI)=yTXwT=(XXT+λI)−1yTXw=(XXT+λI)−1XTy\begin{aligned} \mathbf{w}^TX^TX-\mathbf{y}^TX+\lambda \mathbf{w}^T=0\\ \mathbf{w}^T(X^TX+\lambda I)=\mathbf{y}^TX\\ \mathbf{w}^T=(XX^T+\lambda I)^{-1}\mathbf{y}^TX\\ \mathbf{w}=(XX^T+\lambda I)^{-1}X^T\mathbf{y} \end{aligned}wTXTX−yTX+λwT=0wT(XTX+λI)=yTXwT=(XXT+λI)−1yTXw=(XXT+λI)−1XTy
因为后续会变换到傅里叶域,所以将XTX^TXT处理为(X∗)T(X^*)^T(X∗)T,记为XHX^HXH,所以w=(XXH+λI)−1XHy\mathbf{w}=(XX^H+\lambda I)^{-1}X^H\mathbf{y}w=(XXH+λI)−1XHy
4.2 Cyclic shift 4.3 Circulant matrics
引入循环矩阵增加样本量,首先讨论一维样本x\mathbf{x}x的情况(n*1)
Px=[xnx1x2......xn−1]TP\mathbf{x}=[x_{n}x_{1} x_{2}......x_{n-1}]^TPx=[xnx1x2......xn−1]T
{Pux∣u=0,1,2,...,n}\begin{Bmatrix} {P^u\mathbf{x}|u=0,1,2,...,n} \end{Bmatrix}{Pux∣u=0,1,2,...,n}
u<[n/2]往正方向移动,u>[n/2]往相反方向移动,u>n循环为i=1的情况。
其循环位移的结果可以由图片简式
每一行都是上一行通过位移矩阵P位移一个元素的结果。
X=C(x)=[(p0x)T(p1x)T(p2x)T⋮(pnx)T]=[p0xp1xp2xp0x⋯pnx]TX=C(\mathbf{x})=\begin{bmatrix} (p^0\mathbf{x})^T\\ (p^1\mathbf{x})^T\\ (p^2\mathbf{x})^T\\ \vdots \\ (p^n\mathbf{x})^T \end{bmatrix} =\begin{bmatrix} p^0\mathbf{x}&p^1\mathbf{x}&p^2\mathbf{x}&p^0\mathbf{x}&\cdots &p^n\mathbf{x} \end{bmatrix}^TX=C(x)=⎣⎢⎢⎢⎢⎢⎡(p0x)T(p1x)T(p2x)T⋮(pnx)T⎦⎥⎥⎥⎥⎥⎤=[p0xp1xp2xp0x⋯pnx]T
顺便一提,一维样本通过循环位移形成二维的循环矩阵,二维样本通过循环位移成为四维的循环矩阵(可以形象地理解为二维图片的处理有两个自由度(上下方向、左右方向),处理后的许多样本图片再堆叠起来)。
引入循环矩阵是将原来xi\mathbf{x_{i}}xi样本扩充为C(xi)C(\mathbf{x_{i}})C(xi),增加样本数,提高准确率,但这样计算量不是大大增加吗,为什么还能简化运算?
之所以引入循环矩阵,还是为了利用循环矩阵的傅里叶对角化特性,将其转入傅里叶域加快计算。(其他特性及证明这里不多赘述)(1)X=C(x)=F⋅diag(x^)⋅FH(1)X=C(\mathbf{x})=F\cdot diag(\mathbf{\hat{x}})\cdot F^H(1)X=C(x)=F⋅diag(x^)⋅FH
diagdiagdiag是保留对角化元素形成矩阵(这里是矩阵,不是向量);相对文章简化一下,令F⋅x=x^F\cdot \mathbf{x}=\mathbf{\hat{x}}F⋅x=x^ ;FFH=FHF=IFF^H=F^HF=IFFH=FHF=I
(2)C(x)y=F−1(F∗(x)⋅F(y))(2)C(\mathbf{x})\mathbf{y}=F^{-1}(F^*(\mathbf{x})\cdot F(\mathbf{y}))(2)C(x)y=F−1(F∗(x)⋅F(y))这个性质实质上是由上个式子推导得到。
4.4 Putting it all together
X=F⋅diag(x^)⋅FHX=F\cdot diag(\mathbf{\hat{x}})\cdot F^HX=F⋅diag(x^)⋅FH
XH=(FH)H⋅diag(x^∗)⋅FH=F⋅diag(x^∗)⋅FHX^H=(F^H)^H\cdot diag(\mathbf{\hat{x}}^*)\cdot F^H=F\cdot diag(\mathbf{\hat{x}}^*)\cdot F^HXH=(FH)H⋅diag(x^∗)⋅FH=F⋅diag(x^∗)⋅FH
XHX=F⋅diag(x^∗)⋅(FH⋅F)⋅diag(x^)⋅FH=F⋅diag(x^∗)⋅diag(x^)⋅FH=F⋅diag(x^∗⊙x^)⋅FH\begin{aligned} X^HX&=F\cdot diag(\mathbf{\hat{x}}^*)\cdot (F^H\cdot F)\cdot diag(\mathbf{\hat{x}})\cdot F^H\\ &=F\cdot diag(\mathbf{\hat{x}}^*)\cdot diag(\mathbf{\hat{x}})\cdot F^H\\ &=F\cdot diag(\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}})\cdot F^H\end{aligned}XHX=F⋅diag(x^∗)⋅(FH⋅F)⋅diag(x^)⋅FH=F⋅diag(x^∗)⋅diag(x^)⋅FH=F⋅diag(x^∗⊙x^)⋅FH
设I=C(δ),δ=[100...0]T,δ^=1I=C\left ( \delta \right ),\delta=\begin{bmatrix} 1 & 0 & 0 &... & 0 \end{bmatrix}^T,\hat{\delta}=1I=C(δ),δ=[100...0]T,δ^=1
C(δ)=F⋅diag(δ^)⋅FH=FIFHC(\delta)=F\cdot diag(\hat{\delta})\cdot F^H=FIF^HC(δ)=F⋅diag(δ^)⋅FH=FIFH
w=(XXH+λI)−1XHy=(XHX+λC(δ))−1XHy=(F⋅diag(x^∗⊙x^)⋅FH+λFIFH)−1XHy=(Fdiag(x^∗⊙x^+λ)FH)−1XHy=(Fdiag(x^∗⊙x^+λ)−1FH)XHy=Fdiag(x^∗⊙x^+λ)−1(FHF)diag(x^∗)FHy=Fdiag(x^∗x^∗⊙x^+λ)FHy=C(F−1(x^∗x^∗⊙x^+λ))y=F−1(F∗(F−1(x^∗x^∗⊙x^+λ))⊙F(y))=x^x^⊙x^∗+λ⊙F(y)=x^⊙y^x^⊙x^∗+λ\begin{aligned} \mathbf{w}&=(XX^H+\lambda I)^{-1}X^H\mathbf{y}\\ &=(X^HX+\lambda C(\delta))^{-1}X^H\mathbf{y}\\ &=(F\cdot diag(\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}})\cdot F^H+\lambda FIF^H)^{-1}X^H\mathbf{y}\\ &=(Fdiag(\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}}+\lambda)F^H)^{-1}X^H\mathbf{y}\\ &=(Fdiag(\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}}+\lambda)^{-1}F^H)X^H\mathbf{y}\\ &=Fdiag(\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}}+\lambda)^{-1}(F^HF) diag(\mathbf{\hat{x}}^*)F^H\mathbf{y}\\ &=Fdiag(\frac{\mathbf{\hat{x}}^*}{\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}}+\lambda})F^H\mathbf{y}\\\\ &=C(F^{-1}(\frac{\mathbf{\hat{x}}^*}{\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}}+\lambda}))\mathbf{y}\\\\ &=F^{-1}(F^*(F^{-1}(\frac{\mathbf{\hat{x}}^*}{\mathbf{\hat{x}}^*\odot \mathbf{\hat{x}}+\lambda}))\odot F(\mathbf{y}))\\\\ &=\frac{\mathbf{\hat{x}}}{\mathbf{\hat{x}}\odot \mathbf{\hat{x}}^*+\lambda}\odot F(\mathbf{y})\\\\ &=\frac{\mathbf{\hat{x}}\odot\mathbf{\hat{y}}}{\mathbf{\hat{x}}\odot \mathbf{\hat{x}}^*+\lambda} \end{aligned}w=(XXH+λI)−1XHy=(XHX+λC(δ))−1XHy=(F⋅diag(x^∗⊙x^)⋅FH+λFIFH)−1XHy=(Fdiag(x^∗⊙x^+λ)FH)−1XHy=(Fdiag(x^∗⊙x^+λ)−1FH)XHy=Fdiag(x^∗⊙x^+λ)−1(FHF)diag(x^∗)FHy=Fdiag(x^∗⊙x^+λx^∗)FHy=C(F−1(x^∗⊙x^+λx^∗))y=F−1(F∗(F−1(x^∗⊙x^+λx^∗))⊙F(y))=x^⊙x^∗+λx^⊙F(y)=x^⊙x^∗+λx^⊙y^
4.5 relationship to correlation filter
之前已经总结过,这里不赘述。
相关滤波跟踪·MOSSE算法的梳理
相关滤波跟踪·CSK算法梳理(巨详(啰)细(嗦))
5. Non-linear regression
5.1 kernel trick - brief overview
第四部分讨论的是样本线性可分的情况的,当样本线性不可分时,将样本映射到高维空间使线性可分。
但不仅这个映射关系复杂无规律,而且在高维空间的点乘计算量巨大,易产生“维数灾难”,所以利用核函数技巧(kernel trick),通过一些特殊的核函数将高维空间的运算等同到低维空间来。
这部分具体解释见SVM学习整理·结合CSK\KCF
映射关系xi→φ(xi)\mathbf{x}_{i}\rightarrow \varphi (\mathbf{x}_{i})xi→φ(xi)
分类器权重w\mathbf{w}w的线性组合w=∑jnαjφ(xj)\mathbf{w}=\sum_{j}^{n}\alpha_{j}\varphi (\mathbf{x}_{j})w=∑jnαjφ(xj)
岭回归表示为min∑i(f(φ(xi))−yi)2+λ∥w∥2=min∑i(∑jαjφT(xj)φ(xi)−yi)2+λ∥w∥2=min(φT(X)φ(X)α−yi)2+λαTφT(X)φ(X)α\begin{aligned} &\min\sum_{i}(f(\varphi(\mathbf{x}_{i}))-y_{i})^2+\lambda\|\mathbf{w}\|^2\\ =&\min\sum_{i}(\sum_{j}\alpha_{j}\varphi^T(\mathbf{x}_{j})\varphi(\mathbf{x}_{i})-y_{i})^2+\lambda\|\mathbf{w}\|^2\\ =&\min(\varphi^T(X)\varphi(X)\boldsymbol{\alpha}-\mathbf{y}_{i})^2+\lambda\boldsymbol{\alpha}^T\varphi^T(X)\varphi(X)\boldsymbol{\alpha}\\ \end{aligned}==mini∑(f(φ(xi))−yi)2+λ∥w∥2mini∑(j∑αjφT(xj)φ(xi)−yi)2+λ∥w∥2min(φT(X)φ(X)α−yi)2+λαTφT(X)φ(X)α
(here,Xij=xiTxj)(here, X_{ij}=\mathbf{x}_{i}^T\mathbf{x}_{j})(here,Xij=xiTxj)
令K=φT(X)φ(X)Kij=φT(xi)φ(xj)=κ(xi,xj)\begin{aligned}&K=\varphi^T(X)\varphi(X)\\ &K_{ij}=\varphi^T(\mathbf{x}_{i})\varphi(\mathbf{x}_{j})=\kappa (\mathbf{x}_{i},\mathbf{x}_{j})\end{aligned}K=φT(X)φ(X)Kij=φT(xi)φ(xj)=κ(xi,xj)
5.2 fast kernel regression
现引入循环操作矩阵PPP(此处有附录A.2证明KKK可以随XXX是循环矩阵而是循环矩阵的证明过程:XXX是(j-i)%n的循环,KKK也是(j-i)%n的循环)
xi=Pixxj=PjxKij=φT(Pix)φ(Pjx)=κ(Pix,Pjx)=κ(p−iPix,p−iPjx)=κ(x,Pj−ix)\begin{aligned} &\mathbf{x}_{i}=P^i\mathbf{x}\\ &\mathbf{x}_{j}=P^j\mathbf{x}\\ &K_{ij}=\varphi^T(P^i\mathbf{x})\varphi(P^j\mathbf{x})=\kappa (P^i\mathbf{x},P^j\mathbf{x})=\kappa (p^{-i}P^i\mathbf{x},p^{-i}P^j\mathbf{x})=\kappa (\mathbf{x},P^{j-i}\mathbf{x})\end{aligned}xi=Pixxj=PjxKij=φT(Pix)φ(Pjx)=κ(Pix,Pjx)=κ(p−iPix,p−iPjx)=κ(x,Pj−ix)(此处利用了文中定理1)
现在,已知KKK是循环矩阵,那么求他的生成向量,也就是求这个矩阵的第一行。
即,令i=1i=1i=1,K1j==κ(x,Pj−1x)K_{1j}==\kappa (\mathbf{x},P^{j-1}\mathbf{x})K1j==κ(x,Pj−1x),也表示为
kixx=φT(x)φ(Pi−1x)=κ(x,Pi−1x)\mathbf{k}_{i}^{\mathbf{xx}}=\varphi^T(\mathbf{x})\varphi(P^{i-1}\mathbf{x})=\kappa(\mathbf{x},P^{i-1}\mathbf{x})kixx=φT(x)φ(Pi−1x)=κ(x,Pi−1x)
回到求解滤波器上,即求解α\alphaα
α=(K+λI)−1y=(C(kxx)+λI)−1y=(Fdiag(k^xx)FH+λFdiag(δ^)FH)−1y=(Fdiag(k^xx+λ)−1FH)y\begin{aligned} \boldsymbol{\alpha}=&(K+\lambda I)^{-1}\mathbf{y}\\ &=(C(\mathbf{k^{xx}})+\lambda I)^{-1}\mathbf{y}\\ &=(Fdiag(\mathbf{\hat{k}^{xx}})F^H+\lambda Fdiag(\hat{\delta})F^H)^{-1}\mathbf{y}\\ &=(Fdiag(\mathbf{\hat{k}^{xx}}+\lambda)^{-1}F^H)\mathbf{y}\\ \end{aligned}α=(K+λI)−1y=(C(kxx)+λI)−1y=(Fdiag(k^xx)FH+λFdiag(δ^)FH)−1y=(Fdiag(k^xx+λ)−1FH)y
两边同乘以FHF^HFH
FHα=diag(k^xx+λ)−1FHyα^∗=diag(1k^xx+λ)y^∗=y^∗k^xx+λ\begin{aligned} F^H\boldsymbol{\alpha}&=diag(\mathbf{\hat{k}^{xx}}+\lambda)^{-1}F^H\mathbf{y}\\ \boldsymbol{\hat{\alpha}}^*&=diag(\frac{1}{\mathbf{\hat{k}^{xx}}+\lambda})\mathbf{\hat{y}}^*\\ &=\frac{\mathbf{\hat{y}}^*}{\mathbf{\hat{k}^{xx}}+\lambda} \end{aligned}FHαα^∗=diag(k^xx+λ)−1FHy=diag(k^xx+λ1)y^∗=k^xx+λy^∗
5.3 fast detection
这部分只是把其中一个样本x\mathbf{x}x换成在该帧中上一帧的位置取的图像z\mathbf{z}z
y^=f^(z)=k^xzα^\mathbf{\hat{y}}=\mathbf{\hat{f}(z)}=\mathbf{\hat{k}^{xz}}\boldsymbol{\hat{\alpha}}y^=f^(z)=k^xzα^
6 fast kernel correlation
这部分讲了符合循环矩阵的几种核函数的具体形式
6.1 dot-product and polynomial kernels
6.2 Radial Basis Function and Guassian kernels
6.3 other kernels
eg:intersection kernel
KCF的公式推导笔记基本上就是这样,欢迎讨论。
[181118]
%这周先交差,第五部分第六部分明天再写
[181122]
%线性回归里的下标就是循环产生的虚拟样本
相关滤波跟踪·KCF公式详细推导相关推荐
- 相关滤波跟踪·CSK算法梳理(巨详(啰)细(嗦))
从MOSSE到CSK算是了解相关滤波跟踪的必经之路了.CSK在MOSSE模型的基础上增加了正则项以避免过拟合,提出了分类器的概念,同时引入了循环矩阵和核函数提高运算速率. 答应我,看CSK或者KCF之 ...
- 相关滤波跟踪(MOSSE)
转载自:http://blog.csdn.net/autocyz/article/details/48136473 相关滤波跟踪(MOSSE) 在信号处理中,有这么一个概念--相关性(correlat ...
- 视频教程-小白学习课程:梯度下降算法与公式详细推导-深度学习
小白学习课程:梯度下降算法与公式详细推导 国内"双一流"大学博士研究生,计算机专业,研究方向和兴趣包括人工智能,深度学习,计算机视觉,群体智能算法,元胞自动机等,愿意分享自己的技术 ...
- 递推最小二乘法RLS公式详细推导
递推最小二乘法RLS公式详细推导 整理递推最小二乘法推导过程自我整理. 递推最小二乘估计(RLS)作为一种估计方式是在最小二乘法(LS)的基础上发展来的. 最小二乘法可以解决的问题是不需要知道先验的概 ...
- kcf 跟随_KCF相关滤波跟踪算法
写作理由:看了网上各种版本的kcf原理,都不是特别理解(主要是不能特别说服我,哈哈).详细琢磨了下,谈谈自己的理解,本人水平有限,难免有理解不到位的地方,请大家批评指正 本文主要会从下面几个方面讲:目 ...
- 卡尔曼滤波原理公式详细推导过程[包括引出]
卡尔曼滤波在很多项目中都有用到,但是对于原理却很少有详细分析,而只是直接应用,在看完b站up主DR_CAN视频推导后自行推导一遍和查看其他资料后进行总结,将从最初的递归算法,利用数据融合,协方差矩阵, ...
- 三角有理式积分——万能代换公式详细推导
三角有理式积分中的万能代换是指一种将许多复杂的待积函数转化为某些简单的有理式的技巧,以方便进行积分的操作.在考试中,如果一道题实在解不出,可利用万能公式进行代换求解. 万能代换 详细推导 详细推导
- 逻辑回归的梯度下降公式详细推导过程
逻辑回归的梯度下降公式 逻辑回归的代价函数公式如下: J(θ)=−1m[∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]J(\theta)=-\frac{ ...
- KCF核相关滤波跟踪
此篇文章是对之前工作的总结,当时负责项目中的kcf结合目标检测进行跟踪开发模块. 介绍: KCF为一种鉴别式跟踪方法.该方法在追踪过程中通过训练一个目标检测器来检测下一帧预测位置是否是目标:然后再使用 ...
最新文章
- php mysql函数未定义,PHP MySQLi未定义的方法错误
- 题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)
- 给自己的Sublime Text换上Soda Theme主题后清爽了好多
- MongoDB学习笔记~MongoDB实体中的值对象
- Linux禁止非WHEEL用户使用SU命令
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
- Python爬虫过程中验证码识别的三种解决方案
- 照片转换为动画 html5,如何使用html5让图片转圈的动画效果
- Shell脚本查询进程存活信息
- 送书《数据库系统概念》,送课,SQL必备!!
- row_number()函数的使用
- 网上预约订餐系统(联网可用)
- JAVA之CRC校验算法
- Tab Layout教程
- 【原】小软件开发心得(一)——需求、开发
- 微信小程序使用wxparse插件,渲染文章不换行问题
- php掼蛋源码,掼蛋游戏WEB版——PHP后台实现源码
- 游戏开发全免费下载网站:源代码插件模型场景全部免费
- ElementUI el-table合并单元格
- 2007武汉房地产数据分析报告
热门文章
- C++模板编程(16)---继承与类模板(Derivation and Class Templates)
- UML时序图-软件需求分析与设计
- Command line is too long. Shorten command line for Application
- C++线程同步——阻塞线程的方法
- String HDU - 6572
- 基于Redis的分布式锁,Redisson的简单使用和常用配置
- python3.7安装pygal,python3.6使用pygal模块不具交互性,图片不能显示数据
- Word中A3纸的表格转化成A4纸的表格打印
- npm安装vue报错npm ERR code EPERM npm ERR syscall mkdir npm ERR path D:\Program Files\node_cache
- 智能家居能给我们带来什么?