ECCV2012跟踪算法CSK原理及代码解析

文章和代码下载地址:

http://www.robots.ox.ac.uk/~joao/circulant/

相信看懂相关滤波鼻祖算法MOSSE后,直接看看CSK,会产生一些疑问。本文从MOSSE出发得出CSK的相关公式,帮助大家理解。

MOSSE将相关转到频域通过最小二乘法来求解相关滤波器\small H^{*}

\small \min_{H^{\ast }} \sum_{i}|F_{i}\odot H^{*}-G_{i}|^{2}

MOSSE的解析可以参考:CVPR2010跟踪算法MOSSE原理及代码解析_博博有个大大大的Dream-CSDN博客_mosse 

CSK提出用一个线性分类器来求解相关滤波器:

\small \min_{w,b} \sum_{i}^{n}L(y_{i},f(x_{i}))+\lambda ||w||^2

是的,换件衣服我真的就不认识了。。。。。。这个公式也叫最小二乘法,确切的名字是正则化最小二乘法(RLS),也叫做岭回归。w即为MOSSE中的相关滤波器H;

L为最小二乘法的损失函数:

\small L(y_{i},f(x_{i}))=(y_{i}-f(x_{i}))^2             \small f(x_{i})=<w,x_{i}>+b      

y是理想的高斯响应,n表示样本数量,f(xi)表示图像xi与滤波器w的在频域内的点积,< , >表示点积同\odot一样,b没有实际意义,可以省略。所以\small L(y_{i},f(x_{i}))即为MOSSE中的\small |F_{i}\odot H^{*}-G_{i}|^{2}

那么CSK所用的公式就只是在后面多了一个正则项\small \lambda ||w||^2。那么加这一项有什么意义呢???

加正则项的目的是为了防止求得的滤波器H过拟合。通过最小二乘法求得的相关滤波器与当前帧输入的图像F的相关性是最高的,然而我们是要用求得的滤波器结果H去预测下一帧图像中目标所在的位置。因为下一帧图像不可能和当前帧的图像一模一样,所以拟合度过高反而会影响检测的准确度,所以加入正则项来减小输入图像和滤波器之间的拟合程度,使求得的滤波器H泛化能力更强。

现在基础公式是弄懂了,怎么解呢?

作者参考了支持向量机的解法,使用了核函数,接下来先介绍一下核函数,不然又处在云里雾里看不懂了

核函数

首先核函数是个啥?干啥用?

先来个定义:通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。特征空间的维数可能非常高。如果求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, y) ,它恰好等于在高维空间中这个内积,即K( x, y) =<φ( x) ⋅φ( y) > 。那么求解过程中就不用计算复杂的非线性变换,而由这个函数 K(x, y) 直接得到非线性变换的内积,使大大简化了计算。这样的函数 K(x, y) 称为核函数。

举个例子:核函数K(Kernel Function)为:K(x,y')=<φ(x),φ(y)>,其中,< , >表示点积,φ(.)表示低维到高维的映射。

x=(x1,x2,x3);y=(y1,y2,y3)

φ(x)=(x1x1,x1x2,x1x3,x2x1,x2x2,x2x3,x3x1,x3x2,x3x3)

φ(y)=(y1y1,y1y2,y1y3,y2y1,y2y2,y2y3,y3y1,y3y2,y3y3)

令x=(1,2,3),y=(4,5,6);

那么

φ(x)=(1,2,3,2,4,6,3,6,9);

φ(y)=(16,20,24,20,25,30,24,30,36);

<φ(x),φ(y)>=16+40+72+40+100+180+72+180+324=1024

因为我们把三维空间数据映射到九维空间中,所以计算复杂。

如果我们通过核函数,直接在低维空间中计算呢?

令核函数K(x,y)=(<x,y>)^2

则K(x,y)=(4+10+18)^2=1024

避开了非线性变换 φ的计算是不是方便很多,速度也快很多。所以核技巧就是用来避开这些繁琐的计算的。并且如果是将数据映射到无限维空间,通过普通的算法是无法计算的,而通过核函数却可以,如:高斯核RBF: K(x,y)=exp(-||x-y||^2)。

文归正传

1、核化的最小二乘法(KRLS)

CSK算法使用核技巧是为了提高在高维特征空间中分类样本的速度。

令φ(x)表示特征空间,K(x,x')=<φ(x),φ(x')>表示其核函数,根据支持向量机核定理可得滤波器w的解可以表示为如下的线性组合:

\small w=\sum_{j}^{n}\alpha _{j}\varphi (x_{j})

所以

\small f(x_{i})=<w,x_{i}>+b=\sum_{j}^{n}\alpha _{j}k( x_{j},x_{i})=K\alpha

\small ||w||^2=<w,w>=\alpha ^{T}K\alpha

b在实际中没有意义,不用管,可以理解直接省掉。

那么求解公式可写成如下形式:

\small \min_{w} \sum_{i}^{n}L(y_{i},f(x_{i}))+\lambda ||w||^2=\min_{\alpha } \sum_{i}^{n}(y_{i}-K\alpha )^2+\lambda \alpha ^{T}K\alpha

求最小值,K是核函数,无论是高斯核函数还是什么核函数,它都可以当做已知量,所以只需要求\small \alpha即可。上式除以2没有影响,等价于

\small F=\small \frac{1}{2}\min_{\alpha } \sum_{i}^{n}(y-K\alpha )^T(y-K\alpha )+\frac{\lambda}{2} \alpha ^{T}K\alpha

通过求导来求解最小值

\small \bigtriangledown F_{\alpha }=(y-K\alpha )^T(-K)+\lambda K\alpha =-Ky+K^2\alpha +\lambda K\alpha=0

\small -Ky+K^2\alpha +\lambda K\alpha=0

求得:

\small \alpha =(K+\lambda I)^{-1}y

\small I表示单位矩阵。

2、循环矩阵&稠密采样

循环矩阵和稠密采样都是为了求滤波器\small w,换言之就是为了求\small \alpha,理想响应\small y是已知的,所以求出K即可。

\small u为一个\small n\times 1的向量,作者定义一个\small n\times n的循环矩阵为:

其中\small u可以暂时理解为输入图像,第一行表示原始的\small u,后面的每一行都是通过循环得到的。

那么就存在如下等式:

\small u\otimes v=C(u)v=\mathbb{F}^{-1}(\mathbb{F}^{*}(u)\odot\mathbb{F}(v) )

这其实就是相关转换到频域计算的公式,作者只是把傅里叶变换边界循环补充的结构给表示出来了。之所以使用循环矩阵的形式表示出来,是为了利用循环矩阵的特性:循环矩阵的和、点积、求逆都是循环矩阵

那么是如何通过循环矩阵来稠密采样的呢?

假设输入图片为\small x,为一个\small n\times 1的向量,构造循环矩阵为:

\small C(x)=\begin{bmatrix} P^{0}x \\ P^{1}x \\ P^{2}x \\ \cdot \cdot \cdot \\ P^{n-1}x \end{bmatrix}

其中,\small P表示循环移位操作,每次移动一个元素。

\small x_{i}=P^{i}x,\forall i=0,1,...,n-1


这一段是证明定理,与求解过程无关。

那么矩阵K可以定义为:

K=\begin{bmatrix} k(P^{0}x,P^{0}x) & k(P^{0}x,P^{1}x) & k(P^{0}x,P^{2}x) & ...&k(P^{0}x,P^{n-1}x) \\ k(P^{1}x,P^{0}x) & k(P^{1}x,P^{1}x) & k(P^{1}x,P^{2}x) & ...&k(P^{1}x,P^{n-1}x) \\ k(P^{2}x,P^{0}x) & k(P^{2}x,P^{1}x) & k(P^{2}x,P^{2}x) & ...&k(P^{2}x,P^{n-1}x) \\ ...& ...& ... & ... &... \\ k(P^{n-1}x,P^{0}x) & k(P^{n-1}x,P^{1}x) & k(P^{n-1}x,P^{2}x) & ...&k(P^{n-1}x,P^{n-1}x) \end{bmatrix}

因为

\small K_{i,j}=k(P^{i}x,P^{j}x)=k(P^{-i}P^{i}x,P^{-i}P^{j}x)=k(x,P^{j-i}x), e.g. K_{0,0}=K_{1,1}

所以\small K也是一个循环矩阵。


用循环矩阵的特性来求解\small \alpha

原最小二乘法表示中:

\small w=\sum_{j}^{n}\alpha _{j}\varphi (x_{j})

\small f(x_{i})=<w,x_{i}>+b=\sum_{j}^{n}\alpha _{j}k( x_{j},x_{i})=K\alpha

将这里的\small K表示成循环矩阵

\small K=C(k)=\begin{bmatrix} k(x,P^{0}x)\\ k(x,P^{1}x)\\ k(x,P^{2}x)\\ \cdot \cdot \cdot \\ k(x,P^{n-1}x) \end{bmatrix}

\small x表示输入图片,长度为\small n,所以这里的\small K\small n\times n的矩阵,且为循环矩阵。

我们把单位矩阵\small I也看作是一个循环矩阵,即:

\small \delta =[1,0,0,...,0]^{T},I=C(\delta )

那么

\small \alpha =(C(k)+\lambda C(\delta ))^{-1}y=(C(k+\lambda \delta ))^{-1}y

根据傅里叶变换的线性性质:

\small \alpha =(C(\mathbb{F}^{-1}(\mathbb{F}(k)+\lambda \mathbb{F}(\delta ))))^{-1}y=C(\mathbb{F}^{-1}(\frac{1}{\mathbb{F}(k)+\lambda} ))y,\mathbb{F}(\delta )=1

根据前面提到的这个公式:

\small u\otimes v=C(u)v=\mathbb{F}^{-1}(\mathbb{F}^{*}(u)\odot\mathbb{F}(v) )

求得:

\small \alpha =\mathbb{F}^{-1}(\frac{\mathbb{F}(y)}{\mathbb{F}(k)+\lambda })

检测的时候我们通过如下公式即可求得响应图:

\small \widehat{y}=\mathbb{F}^{-1}(\mathbb{F}(\overline{k})\odot \mathbb{F}(\alpha ))

作者在代码中用的高斯核,所以对应的\small k为:

\small k^{Gauss}=exp(-\frac{1}{\sigma ^{2}}(||x||^{2}+||{x}'||^{2}-2\mathbb{F}^{-1}(\mathbb{F}(x)\odot \mathbb{F}^{*}({x}'))))

参考博客:目标跟踪系列十三:Exploiting the Circulant Structure of Tracking-by-detection with Kernels 公式详细的推导_ikerpeng-CSDN博客

  • 25
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值