核相关跟踪

本文参考了: An Experimental Survey on Correlation Filter-based Tracking ,High-Speed Tracking with Kernelized Correlation Filters


KCF(核化相关滤波算法)


    相关滤波跟踪算法的原理就是在目标场景中寻找目标候选区域中的最高响应值(correlation peak)相关峰值,即目标区域。我们可以看到很

多对相关滤波跟踪改进,大体可以分为以下几个部分:

1、引入更好的训练方案
2、提取更强大的特征
3、减轻尺度变化的影响
4、将目标分块识别
5、结合长期目标跟踪方法

    上一篇文章中已经提到了关于核相关跟踪算法的流程,这里将重点结合KCF算法进行说明。

    本文主要介绍了核相关滤波中的一种KCFHigh-Speed Tracking with Kernelized Correlation Filters)算法,核相关滤波是相对于之前的滤波方法引入核函数和岭(脊)回归(Ridge Regression),想深入了解的可以参考原文献 《An Experimental Survey on Correlation Filter-based Tracking》或者参考leek1727博客: An Experimental Survey on Correlation Filter-based Tracking

1、线性回归(Linear regression):集中于岭回归(Ridge Regression),它承认一个封闭的解,且能够获得更加复杂的方法性能,例如支持向量机(SVM)。我们的目的是训练找到一个函数 能够使样本 与它们回归值 误差平方最小化即求最小化误差平方下w的值。
    通过将相关滤波器看作是一个分类器,我们可以通过找到第i个训练样本和它对应的回归目标之间的关系来训练。我们假设他们的关系是通过这样一个函数式得到的,训练问题可以看做是最小化如下这样一个目标函数:
                                                                                 
                                                                                                                      
w表示的是参数。是正则化参数,为了阻止过拟合。

    其中w为:
                                                                                        
                                                                                         
X表示的是一个矩阵,它的每一行代表一个训练样本,y表示的回归目标,I是单位矩阵。

因为后面的工作我们将在傅里叶域中进行,所以我们将w表达式用下是代替。

                                                                                                                   
其中 是X的共轭转置, 是X的复共轭;方程的求逆给计算增加了复杂度,将样本X构造成循环矩阵可以克服求逆问题。

为解决样本不可分的问题,我们引入核函数将低维特征空间映射到高维特征空间,使样本可分,提高性能。在本文中是一个线性输入问题通过映射到一

个非线性特征空间。w的表达式将成为样本线性组合:
                                                                                        
引入的核函数(例如高斯或者多项式),我们把每一对样本之间的点乘存入核矩阵K中,则核矩阵K元素为: 

                                                                                          

由于回归函数的复杂性随着样本数量的增加而增加,为了解决这个问题,所以我们假设核矩阵为循环矩阵。


2、循环矩阵(Circulant matrices):对于n阶方阵 C,若C[i][j] = c[(n-i+j)%n],则称C为循环矩阵。通俗的说循环矩阵就是每一行元素都可以由上一行元素向右移动一个单位得到。
                                             
    在跟踪领域,为了速度,样本量都是稀疏采样的,即在跟踪目标框(第一帧是真实的初始化框)邻近的为正样本(+1),较远的是负样本(-1),如果

下一帧跟踪时在要在候选区域内选取最佳区域,但在选出最佳区域时得对候选区域进行一一判断。我们可以看出这类跟踪算法缺点:在训练层

Train)为了速度,牺牲样本数,降低了分类器的可分性;在检测层(Detecting),要对候选窗口挨个判断,也很耗时。而通过使用循环矩阵,我们可

以非常容易的在目标的周围获取训练样本而不会牺牲速度。

通过循环矩阵的性质我们能够大大降低计算的级数。

循化矩阵性质如下:

       1、循环矩阵的线性运算及乘积仍是循环矩阵。

       2、满足乘法交换律:AB=BA。

       3、循环矩阵的逆矩阵也是循环矩阵。

证明可以参照:http://blog.csdn.net/code4101/article/details/18956275

循环变换(Cyclic shifts



           核相关跟踪_第1张图片                            核相关跟踪_第2张图片                  核相关跟踪_第3张图片


由公式求W变为求a,求a的公式为: ,其中 K 为循环矩阵。循环矩阵可以用它的基准向量的离散傅里叶变换对角化,可知: 其中,则 ,由于矩阵是对角阵,由埃尔米特矩阵知 ;定义

element-wise product(点乘)为,则 。关于其中公式的推导就暂时说这么多吧,有好多公式我推导不下来,只是

对这部分做了 解, 个人觉得能理解算法就好。

KCF算法延伸(大家有兴趣可以参照EmbeddedApp博客:运动目标跟踪(十二)--KCF跟踪及CSK,CN对比):

CSK:paper:Exploiting the Circulant Structure of Tracking-by-detection with Kernels(作者和KCF/DCF同一个作者)
文章特点:

输入:整个候选区域的原始像素( raw pixel )作为特征, label(y_i),label 为符合高斯分布的连续取值
目的:训练一个分类器,学习分类器的权重 W 。 求解分类器的权重W,探究子图像窗口( subimage_window )和循环结构以及内核( kernel )的关系,利用这个关系引入核函数. 利用循环矩阵和来求解分类器的权重,利用傅里叶变换以及循环矩阵的性质,避免了求权重 W 时的矩阵逆运算。    
输出:相对平移量,实验选区响应值最大的位置作为目标移动的大小。

KCF算法:

在CSK的基础上解决了如下几个问题:

1、输入为多通道的(multi-channels)(可以是lab特征也可以是Hog特征),并定义了多通道特征的连接方法。    
2、用不同核函数,高斯核函数,文章叫KCF,采用线性核时,文章取名叫DCF,其中DCF由于采用的线性核所以多通道合并时有优势,速度比KCF快,但效果差一点点。


    下面的几幅图是我的运行结果:说明了采用KCF算法是如果遇到目标遮挡会造成误差的积累,导致跟踪漂移;由于跟踪目标的快速移动导致跟踪丢

失,导致跟踪失败;但是在其他的跟踪当中KCF算法还是很厉害的。这印证在文章开篇所说的关于相关滤波方法应该改进的方向,针对相关滤波方法改

进的文章有不少,有兴趣可以自己找找看看。KCF算法的代码是开源的大家可以自己找一下,运行一下,看看结果。
                核相关跟踪_第4张图片                      核相关跟踪_第5张图片

新手上路,请大家多多指教,希望大家可以相互沟通互相进步!

你可能感兴趣的:(目标跟踪)