清晰易懂版相关滤波推导

读研期间做相关滤波视觉跟踪,读了很多相关滤波的论文,但是由于当年矩阵论和数字信号处理基础太菜,一直没搞明白相关滤波的闭合解是怎么推出来的,各种论文里面的推导都是直接给个结果,过程不详。最近终于搞明白了推导的过程和原理,在这里记录一下。我觉得应该是全网最清晰最易懂的相关滤波推导了。

如果不加说明,以下粗体字 x \mathbf{x} x代表列向量,加帽 x ^ \hat{\mathbf{x}} x^代表 x \mathbf{x} x的傅里叶变换

在推导之前首先回顾几个定理:

循环卷积定理 x \mathbf{x} x的傅里叶变换为 x ^ \hat{\mathbf{x}} x^ y \mathbf{y} y的傅里叶变换为 y ^ \hat{\mathbf{y}} y^,则 x \mathbf{x} x y \mathbf{y} y的卷积 x ⊗ y \mathbf{x}\otimes\mathbf{y} xy的傅里叶变换为 x ^ \hat{\mathbf{x}} x^ y ^ \hat{\mathbf{y}} y^的点积 x ^ ⊙ y ^ \hat{\mathbf{x}}\odot\hat{\mathbf{y}} x^y^

帕斯瓦尔定理
∣ ∣ x ∣ ∣ 2 = 1 N ∣ ∣ x ^ ∣ ∣ 2 ||\mathbf{x}||^2=\frac{1}{N}||\hat{\mathbf{x}}||^2 x2=N1x^2
N N N为信号长度。

还有一个小结论,信号的反序的傅里叶变换等于原信号傅里叶变换的共轭

证明一下,记 y \mathbf{y} y x \mathbf{x} x的反序,即 y [ k ] = x [ N − k ] \mathbf{y}[k]=\mathbf{x}[N-k] y[k]=x[Nk]
y ^ [ k ] = ∑ n = 0 N − 1 x [ N − n ] e − j 2 π N n \hat{\mathbf{y}}[k]=\sum_{n=0}^{N-1}\mathbf{x}[N-n]e^{-j\frac{2\pi}{N}n} y^[k]=n=0N1x[Nn]ejN2πn
N − n = t N-n=t Nn=t
y ^ [ k ] = ∑ t = 0 N − 1 x [ t ] e − j 2 π N ( N − t ) = ∑ t = 0 N − 1 x [ t ] e j 2 π N t = x ∗ ^ [ k ] \hat{\mathbf{y}}[k]=\sum_{t=0}^{N-1}\mathbf{x}[t]e^{-j\frac{2\pi}{N}(N-t)}\\ =\sum_{t=0}^{N-1}\mathbf{x}[t]e^{j\frac{2\pi}{N}t}=\hat{\mathbf{x}^{*}}[k] y^[k]=t=0N1x[t]ejN2π(Nt)=t=0N1x[t]ejN2πt=x^[k]

在卷积操作中,信号要经过反褶操作,而信号的互相关没有经过反褶操作,因此则 x \mathbf{x} x y \mathbf{y} y的互相关 x ∗ y \mathbf{x}*\mathbf{y} xy的傅里叶变换为 x ∗ ^ \hat{\mathbf{x}^{*}} x^ y ^ \hat{\mathbf{y}} y^的点积 x ∗ ^ ⊙ y ^ \hat{\mathbf{x}^{*}}\odot\hat{\mathbf{y}} x^y^

有了这几个定理,现在开始推导吧。

相关滤波是要学习一个与 x \mathbf{x} x维度相同的滤波器 h \mathbf{h} h,使两者的互相关 h ∗ x \mathbf{h}*\mathbf{x} hx尽量接近目标函数 y \mathbf{y} y,使下面的目标函数最小。
E ( h ) = ∣ ∣ h ∗ x − y ∣ ∣ 2 + λ ∣ ∣ h ∣ ∣ 2 E(\mathbf{h})=||\mathbf{h}*\mathbf{x}-\mathbf{y}||^2+\lambda||\mathbf{h}||^2 E(h)=hxy2+λh2
根据帕斯瓦尔定理,最小化上式相当于最小化
E ( h ^ ) = ∣ ∣ h ^ ⊙ x ^ − y ^ ∣ ∣ 2 + λ ∣ ∣ h ^ ∣ ∣ 2 E(\hat{\mathbf{h}})=||\hat{\mathbf{h}}\odot\hat{\mathbf{x}}-\hat{\mathbf{y}}||^2+\lambda||\hat{\mathbf{h}}||^2 E(h^)=h^x^y^2+λh^2
把点积写成矩阵相乘的形式
E ( h ^ ) = ∣ ∣ d i a g ( x ^ ) h ^ − y ^ ∣ ∣ 2 + λ ∣ ∣ h ^ ∣ ∣ 2 E(\hat{\mathbf{h}})=||diag(\hat{\mathbf{x}})\hat{\mathbf{h}}-\hat{\mathbf{y}}||^2+\lambda||\hat{\mathbf{h}}||^2 E(h^)=diag(x^)h^y^2+λh^2
往下推还需要知道几个结论
∣ ∣ x ∣ ∣ 2 = x H x ||\mathbf{x}||^2=\mathbf{x}^H\mathbf{x} x2=xHx
H表示共轭转置

下面这两个结论参见《matrix cookbook》
∂ x T A x ∂ x = A + A T \frac{\partial \mathbf{x^TAx}}{\partial \mathbf{x}}=\mathbf{A+A^T} xxTAx=A+AT


∂ x T a ∂ x = ∂ a T x ∂ x = a \frac{\partial \mathbf{x^T a}}{\partial \mathbf{x}}=\frac{\partial \mathbf{a^T x}}{\partial \mathbf{x}}=\mathbf{a} xxTa=xaTx=a

接着往下推
E ( h ^ ) = ( d i a g ( x ^ ) h ^ − y ^ ) H ( d i a g ( x ^ ) h ^ − y ^ ) + λ h ^ H h ^ = h ^ H d i a g ( x ∗ ^ ) d i a g ( x ^ ) h ^ − h ^ H d i a g ( x ∗ ^ ) y ^ − y ^ H d i a g ( x ^ ) h ^ + y ^ H y ^ + λ h ^ H h ^ E(\hat{\mathbf{{h}}})=(diag(\hat{\mathbf{x}})\hat{\mathbf{h}}-\hat{\mathbf{y}})^H(diag(\hat{\mathbf{x}})\hat{\mathbf{h}}-\hat{\mathbf{y}})+\lambda \hat{\mathbf{h}}^H \hat{\mathbf{h}}\\ =\hat{\mathbf{h}}^Hdiag(\hat{\mathbf{x}^*})diag(\hat{\mathbf{x}})\hat{\mathbf{h}}-\hat{\mathbf{h}}^Hdiag(\hat{\mathbf{x}^*})\hat{\mathbf{y}}-\hat{\mathbf{y}}^Hdiag(\hat{\mathbf{x}})\hat{\mathbf{h}}+\hat{\mathbf{y}}^H\hat{\mathbf{y}}+\lambda \hat{\mathbf{h}}^H\hat{\mathbf{h}} E(h^)=(diag(x^)h^y^)H(diag(x^)h^y^)+λh^Hh^=h^Hdiag(x^)diag(x^)h^h^Hdiag(x^)y^y^Hdiag(x^)h^+y^Hy^+λh^Hh^
将目标函数对 h ^ \hat{\mathbf{h}} h^求偏导(共轭转置和转置不太一样,但是验证一下也是成立的,不太严谨地求个导)
∂ E ( h ^ ) ∂ h ^ = 2 d i a g ( x ∗ ^ ⊙ x ^ ) h ^ − 2 d i a g ( x ∗ ^ ) y ^ + 2 λ h ^ \frac{\partial E(\hat{\mathbf{h}})}{\partial \hat{\mathbf{h}}}=2diag(\hat{\mathbf{x}^{*}}\odot{\hat{\mathbf{x}}})\hat{\mathbf{h}}-2diag(\hat{\mathbf{x}^{*}})\hat{\mathbf{y}}+2\lambda \hat{\mathbf{h}} h^E(h^)=2diag(x^x^)h^2diag(x^)y^+2λh^
∂ E ( h ^ ) ∂ h ^ = 0 \frac{\partial E(\hat{\mathbf{h}})}{\partial \hat{\mathbf{h}}}=0 h^E(h^)=0,解得
h ^ = ( d i a g ( x ∗ ^ ⊙ x ^ ) + λ I ) − 1 d i a g ( x ∗ ^ ) y ^ = x ∗ ^ ⊙ y ^ x ∗ ^ ⊙ x ^ + λ \hat{\mathbf{h}}=(diag(\hat{\mathbf{x}^{*}}\odot{\hat{\mathbf{x}}})+\lambda I)^{-1}diag(\hat{\mathbf{x}^{*}})\hat{\mathbf{y}}\\ =\frac{\hat{\mathbf{x}^{*}}\odot\hat{\mathbf{y}}}{\hat{\mathbf{x}^{*}}\odot{\hat{\mathbf{x}}}+\lambda} h^=(diag(x^x^)+λI)1diag(x^)y^=x^x^+λx^y^

这就是论文里常见的那个公式的由来了。

多通道情况的推导参见fDSST论文的附录,利用了每个像素之间的独立性。

另外 Henriques的KCF论文[2]里是利用循环矩阵傅里叶变换对角化的性质去推导的,很多博主的推导都指出原论文推导结果错误,推出的滤波器结果是
w ^ = x ^ ⊙ y ^ x ∗ ^ ⊙ x ^ + λ \hat{\mathbf{w}}=\frac{\hat{\mathbf{x}}\odot\hat{\mathbf{y}}}{\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}}+\lambda} w^=x^x^+λx^y^
分母上的 x ^ \hat{\mathbf{x}} x^没有共轭,而且从论文的附录5的推导看,确实推不到式(57),后来看了一下作者的学位论文,推导这个公式的起点不是论文中带有共轭转置的(3)式,而是论文的(2)式。
w = ( X T X + λ I ) − 1 X T y \mathbf{w}=(X^TX+\lambda I)^{-1}X^Ty w=(XTX+λI)1XTy
也就是说样本矩阵 X X X学习到的滤波器 w \mathbf{w} w在空域中都是实数。

回顾一下论文里的样本矩阵
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(\mathbf{x})=\left[\begin{array}{ccccc}{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} & {\vdots} & {\ddots} & {\vdots} \\ {x_{2}} & {x_{3}} & {x_{4}} & {\cdots} & {x_{1}}\end{array}\right] X=C(x)=x1xnxn1x2x2x1xnx3x3x2x1x4xnxn1xn2x1
再使用这个性质
X = F d i a g ( x ^ ) F H X=F diag(\hat{\mathbf{x}})F^{H} X=Fdiag(x^)FH
这个时候发现 X T X^T XT的第一行正好是 x \mathbf{x} x的倒序,因此它的傅里叶变换为 x ∗ ^ \hat{\mathbf{x}^*} x^, 所以
X T X = F d i a g ( x ∗ ^ ) F H F d i a g ( x ^ ) F H = F d i a g ( x ∗ ^ ⊙ x ^ ) F H X^TX=Fdiag(\hat{\mathbf{x}^*})F^HFdiag(\hat{\mathbf{x}})F^H=Fdiag(\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}})F^H XTX=Fdiag(x^)FHFdiag(x^)FH=Fdiag(x^x^)FH
再代入上面的式子
w = ( F d i a g ( x ∗ ^ ⊙ x ^ ) F H + λ F F H ) − 1 F d i a g ( x ∗ ^ ) F H y = F d i a g ( 1 x ∗ ^ ⊙ x ^ + λ ) F H F d i a g ( x ∗ ^ ) F H y = F d i a g ( x ^ x ∗ ^ ⊙ x ^ + λ ) y ∗ ^ \mathbf{w}=(Fdiag(\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}})F^H+\lambda FF^H)^{-1}Fdiag(\hat{\mathbf{x}^*})F^H\mathbf{y}\\ =Fdiag(\frac{1}{\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}}+\lambda})F^{H}Fdiag(\hat{\mathbf{x}^*})F^H\mathbf{y}\\ =Fdiag(\frac{\hat{\mathbf{x}}}{\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}}+\lambda})\hat{\mathbf{y}^*} w=(Fdiag(x^x^)FH+λFFH)1Fdiag(x^)FHy=Fdiag(x^x^+λ1)FHFdiag(x^)FHy=Fdiag(x^x^+λx^)y^
两边乘 F H F^H FH
w ^ ∗ = d i a g ( x ^ x ∗ ^ ⊙ x ^ + λ ) y ∗ ^ \hat{\mathbf{w}}^*=diag(\frac{\hat{\mathbf{x}}}{\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}}+\lambda})\hat{\mathbf{y}^*} w^=diag(x^x^+λx^)y^
两边取共轭
w ^ = x ∗ ^ ⊙ y ^ x ∗ ^ ⊙ x ^ + λ \hat{\mathbf{w}}=\frac{\hat{\mathbf{x}^{*}}\odot\hat{\mathbf{y}}}{\hat{\mathbf{x}^*}\odot\hat{\mathbf{x}}+\lambda} w^=x^x^+λx^y^
结果相同,因此原论文结果正确,只是推导过程错误。

记录一点自己的理解,希望可以帮到大家。

参考博文

KCF目标跟踪方法分析与总结

KCF公式推导错误及验证

MOSSE(DSST)类和KCF类中滤波器推导结果不一致的解释

参考文献

[1] Petersen K B, Pedersen M S The Matrix Cookbook book

[2] Danelljan M , Häger, Gustav, Khan F S , et al. Discriminative Scale Space Tracking[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2016, 39(8):1561-1575. paper

[3] Henriques J F, Rui C, Martins P, et al. High-Speed Tracking with Kernelized Correlation Filters[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2015, 37(3):583-596. paper

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值