zoukankan      html  css  js  c++  java
  • KCF1

    http://blog.csdn.net/carrierlxksuper/article/details/46461245 

    最近在阅读tracking的相关文章,作为2015年的最新出的KCF ,引起我的关注,作者的相关paper以及code在此:http://home.isr.uc.pt/~henriques/circulant/

    刚开始接触tracking,下面分析的可能有纰漏。在这篇文章中作者提出了一种比correlation filter更加强大的tracking方法。作者的核心思想就是:采用判别式的tracking,需要区分目标和surrounding 环境,需要大量的训练样本,这些样本之间存在着大量的冗余,于是作者采用创新的circulant matrix来生成训练样本,这样的好处就是得到的数据矩阵是circulant,于是可以利用DFT(离散傅里叶变化)对角化,从而减少计算量。 同时,作者发现用这种样本训练的linear regression 等价于correlation filter,大大加快tracking速度。同时作者考虑核regression的情况,提出了Kernelized correlation filter(KCF)以及采用线性核的Dual correlation filter。

     下面将针对着上面提到的各个知识点展开。

     1 Bridge regression

     在tracking中,训练一个好的分类器需要大量的样本,这就意味着大量的时间消耗,作者发现很多样本之间的translation可以通过一定的方法实现,就是circulant matrices。在这里,我们选择的分类器是Bridge regression,而不是复杂的SVM,其实笔者在前几天做过实验,很多情况下,如果输入分类器的特征已经很powerful的话,两者的区别不大。笔者曾经在深度学习网络框架caffe上分别用自带的softmax分类,同时提取出倒数第二层的特征输入到SVM分类,发现精度差别很小。言归正传,在linear regression中训练的目的是找到了一个W,使得函数能够最小化样本x和目标y之间的最小二乘误差:

    其闭式解是:

    复数形式为

       2 Cyclic shifts

    在这里考虑一个一维的vector表示的是目标的一部分,我们称之为base sample。我们的目标是利用一个正的base sample和多个虚拟的负样本来训练一个分类器,这些负样本是对那个正样本的translate获得的。于是我们可以用下面的matrix实现:

    对vector 做shifts的效果如下所示:

    二维图像的效果如下:

    表示为矩阵叫做circulant matrix就是:

    这种矩阵的特性之一就是可以被离散傅里叶变换对角化:

    其中F是一个与x无关的矩阵而是X的傅里叶变换:=F(X)

     3 替换

    将公式7带入到公式3中去,可以简化为:

    进一步的:

    括号里的正好是signal x的自相关。于是公式3可以简化为:

    进一步的,

    4 非线性回归(Kernel regression)

      核技巧

    根据表达理论,我们可以将解w表达成关于样本x的线性组合的方式:

    我们将特征空间中的点积表达为:

    也就是用核函数k来代表点积的运算。那么所有样本之间的点积可以存储成一个kernel矩阵K,每一个元素的形式就是:.

    于是在特征空间下,函数f(z)可以写成:

    于是桥回归的解就变成了:

    在这里K是核矩阵,alpha是系数矢量。如果能证明K对于数据的cyclic shifts是circulant的话那么就可以对角化公式16,因此也就大大简化计算。作者给出了很多核函数下满足上述条件。比如常见的高斯核函数,线性核等。于是上式可以对角化为下面的形式:

    注意这个地方已经是频域空间中了,所有的变量都带着个hat,表明是经过DFT的。

    在这里,是kernel matrix 的第一行。在这里定义核相关,指的是:

    5 Fast detection

        为了检测感兴趣的图像位置,很多是时候需要检测多个candidate paches,这些patches可以通过cyclic shifts来建模得到。

    在这里构建所有的训练样本和所有candidate patches之间的核矩阵。由于样本和patches分别是对base sample x和base patchz的cyclic shifts得到的,因此的每一个元素都可以表达成:

    在这里还需要计算这个核矩阵的第一行:

    于是我们就可以得到所有 candidate patches下的回归函数:----------------------------------------21

    这里的z是一个vector,包含所有的z的cyclic shifts的输出。转化到频域就是:

    直观上,最所有位置上计算f(z)等价于利用做空间滤波操作。

    6 Fast kernel correlation

     点积和多项式核

    径向基函数和高斯核

    7 Multi-Channel 

    对于HoG特征可以采用多通道的correlation filter。比如HoG特征的话,每一个patch会产生31个梯度方向bin,于是就需要对所有channel 求和之后,再处理:

    最后贴出 tracking pipeline

  • 相关阅读:
    JS 和 CSS 的位置对其他资源加载顺序的影响
    How browsers workBehind the scenes of modern web browsers
    Gruntjs入门 (2)
    Superhero.js – 构建大型 JavaScript 应用程序的最佳资源
    利用位反操作来简化 indexOf 判断
    Gruntjs入门 (1)
    js和css的顺序关系
    (翻译)理解JavaScript函数调用和"this"(by Yehuda Katz)
    秒,微秒,毫秒
    您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序
  • 原文地址:https://www.cnblogs.com/voyagflyer/p/6506754.html
Copyright © 2011-2022 走看看