kernelizedcorrelationfilterskcf算法.docx
《kernelizedcorrelationfilterskcf算法.docx》由会员分享,可在线阅读,更多相关《kernelizedcorrelationfilterskcf算法.docx(6页珍藏版)》请在冰豆网上搜索。
kernelizedcorrelationfilterskcf算法
KernelizedCorrelationFilters(KCF)算法
Contents[hide]1问题阐述2DFT下的线性回归3构建循环样本矩阵4引入核函数4.1快速训练4.2快速检测4.3快速计算核函数相关性5总结
目前在onlinevisualtracking这个领域,已经涌现出很多的跟踪算法,比较知名如TLD,Struck,OAB,CT等等。
但是能做到非常快速而且效果还不错的相对就较少了,好多算法都是刚刚能实时,而且还是在图像分辨率不是很大的情况下。
之前在博客里提到一篇该领域的测评综述Computervisionandpatternrecognition(CVPR),2013IEEEConferenceon,2013,pp.2411-2418."title="">1,对该领域大部分算法进行了一个总结和评估,作者在一个有50个视频的数据集上测试了29个算法,其中速度和效果都还不错的算法有TLDPatternAnalysisandMachineIntelligence,IEEETransactionson,pp.1-1,2011."title="">2和Struck2011IEEEInternationalConferenceonComputerVision(ICCV),pp.263-270,2011."title="">3。
Struck的评价运行速度大概是20帧/s,TLD相对快一点,,大概28帧/s。
但这个速度仍然不是很快,而14年的一篇paper提出了一种叫做KCF(KernerlizedCorrelationFilter)IEEETransactionsonPatternAnalysisandMachineIntelligence,2014."title="">4的跟踪算法使得速度有了很大提升,在同样的测试数据集上,平均运行速度达到172帧/s(使用HOG特征的情况下)。
而且据paper的实验结果显示,准确率比Struck和TLD都高。
之所以能有这么快的速度,得益于作者巧妙地通过循环偏移构建出了分类器的训练样本,从而使得数据矩阵变成了一个循环矩阵。
然后基于循环矩阵的特性把问题的求解变换到了傅里叶变换域,从而避免了矩阵求逆的过程,大大降低了算法的复杂度。
问题阐述
目前跟踪算法主流的思想还是基于trackingbydetection,而训练样本的选择基本上就以目标中心为提取正样本,然后基于周围的图像提取负样本。
大部分算法都是采用非正即负的方法来标记训练样本,即正样本标签为1,负样本为0。
这种标记样本的方法有一个问题就是不能很好的反应每个负样本的权重,即对离中心目标远的样本和离中心目标的近的样本同等看待。
所以就有算法提出使用连续的标签进行标记样本,即根据样本中心里目标的远近分别赋值[0,1]范围的数。
离目标越近,值越趋向于1,离目标越远,值越趋向于0。
事实也证明这种标记样本的方法能得到更好的效果,比如Struck和KCF。
Struck是通过一种loss函数隐式地采用了这种连续的样本标记方法,而KCF则通过使用[0,1]范围的值作为样本的回归值,从而给不同偏移下得到的样本不同的权重。
首先,我们先介绍一个简单的线性回归模型,然后再讨论引入kernel之后的情况。
样本训练过程实际上是一个岭回归问题,或者叫做正则化最小二乘问题,它有一个闭式的解。
假设给定一些训练样本及其回归值{(x1,y1),(x2,y2),...,(xi,yi),...}"role="presentation"style="position:
relative;">{(x1,y1),(x2,y2),...,(xi,yi),...}{(x1,y1),(x2,y2),...,(xi,yi),...},其训练的最终目标是找到一个函数f(z)=wTz"role="presentation"style="position:
relative;">f(z)=wTzf(z)=wTz使得如下残差函数最小,
(1)minw∑i(f(xi)−yi)2+λ∥w∥2"role="presentation">minw∑i(f(xi)?
yi)2+λ∥w∥2
(1)
(1)minw∑i(f(xi)?
yi)2+λ∥w∥2
其中,λ"role="presentation"style="position:
relative;">λλ是正则化参数,防止过拟合的。
上式的闭式解可以参考线性最小二乘的求解得出如下,
(2)w=(XTX+λI)−1XTy"role="presentation">w=(XTX+λI)?
1XTy
(2)
(2)w=(XTX+λI)?
1XTy
这里X"role="presentation"style="position:
relative;">XX是由一个样本的特征向量占一行组成的样本矩阵。
y"role="presentation"style="position:
relative;">yy是对应每个样本的回归值yi"role="presentation"style="position:
relative;">yiyi组成的列向量。
I"role="presentation"style="position:
relative;">II是个单位矩阵。
因为考虑到后面要在傅里叶域进行计算,这里给出一个复数情况下的求解结果,其中XH"role="presentation"style="position:
relative;">XHXH是X"role="presentation"style="position:
relative;">XX的共轭转置,w∗"role="presentation"style="position:
relative;">w?
w?
是w"role="presentation"style="position:
relative;">ww的共轭。
(3)w∗=(XHX+λI)−1XHy"role="presentation">w?
=(XHX+λI)?
1XHy(3)(3)w?
=(XHX+λI)?
1XHy
现在问题来了,如果直接求解上述闭式解,其中的求逆计算随着样本数的增大是非常耗时的。
显然直接求解的方式是不靠谱的,这里这篇paper的作者通过巧妙地把上述闭式解变换到傅里叶变换域的方式,从而避开了矩阵求逆的运算,大大节省了运行时间。
而这也是这篇paper的主要贡献所在。
DFT下的线性回归
为了解释的简明性,这里仅仅就一维的单通道信息做分析,也就是说这里的x"role="presentation"style="position:
relative;">xx都是一维向量,当然推广到二维也是适用的,而且实际上代码中也的确就是在二维上做的。
我们看到式(3)"role="presentation"style="position:
relative;">(3)(3)中的样本矩阵X"role="presentation"style="position:
relative;">XX如果是一个循环矩阵的话,该式子的计算就会变得容易很多。
即,
(4)X=C(x)=[x1x2x3⋯xnxnx1x2⋯xn−1xn−1xnx1⋯xn−2⋮⋮⋮⋱⋮x2x3x4⋯x1]"role="presentation">X=C(x)=?
?
?
?
?
?
?
?
?
x1xnxn?
1?
x2x2x1xn?
x3x3x2x1?
x4?
?
?
?
?
xnxn?
1xn?
2?
x1?
?
?
?
?
?
?
?
?
(4)(4)X=C(x)=[x1x2x3?
xnxnx1x2?
xn?
1xn?
1xnx1?
xn?
2?
?
?
?
?
x2x3x4?
x1]
其中,x"role="presentation"style="position:
relative;">xx是矩阵的第一行,整个矩阵式由这一行的循环偏移得到的。
那我们假设存在这么一个循环矩阵,看看接下来式(3)"role="presentation"style="position:
relative;">(3)(3)会变成怎样。
首先列出一个循环矩阵拥有的一个性质Toeplitzandcirculantmatrices:
Areview:
nowpublishersinc,2006."title="">5如下:
(5)X=FHdiag(x^)F"role="presentation">X=FHdiag(x^)F(5)(5)X=FHdiag(x^)F
其中,x"role="presentation"style="position:
relative;">xx头上的那个小帽x^"role="presentation"style="position:
relative;">x^x^代表x"role="presentation"style="position:
relative;">xx的傅里叶变换,F"role="presentation"style="position:
relative;">FF是离散傅里叶变换矩阵,即满足x^=Fx"role="presentation"style="position:
relative;">x^=Fxx^=Fx。
这样把式(5)"role="presentation"style="position:
relative;">(5)(5)代入式(3)"role="presentation"style="position:
relative;">(3)(3)中得,
(6)w∗=(FHdiag(x^∗)FFHdiag(x^)F+λI)−1FHdiag(x^∗)Fy=F−1(diag(x^∗⊙x^)+λI)−1diag(x^∗)Fy=F−1diag(x^∗x^∗⊙x^+λ)Fy"role="presentation">w?
=(FHdiag(x^?
)FFHdiag(x^)F+λI)?
1FHdiag(x^?
)Fy=F?
1(diag(x^?
⊙x^)+λI)?
1diag(x^?
)Fy=F?
1diag(x^?
x^?
⊙x^+λ)Fy(6)(6)w?
=(FHdiag(x^?
)FFHdiag(x^)F+λI)?
1FHdiag(x^?
)Fy=F?
1(di