KCF跟踪算法论文阅读与原理分析
文章目录
- 前言
- 一、KCF的前身:MOSSE算法
- 1、相关滤波
- 2、MOSSE算法
- 二、岭回归与循环矩阵
- 1.岭回归(Ridge Regression)
- 2.循环矩阵
- 2.1 循环移位
- 2.2 循环矩阵的处理
- 三、非线性回归
- 3.1 核函数
- 3.2 快速核回归
- 3.3 快速检测
- 四、多通道
- 总结
前言
- KCF算法的论文题目为:High-Speed Tracking with Kernelized Correlation Filters,是一种典型且有效的跟踪算法,自提出以来在目标跟踪领域得到了广泛的应用。
- KCF是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目标检测器。
- 从作者的论文中,可以总结出:KCF跟踪算法的基本思想是使用核相关滤波器训练一个判别式分类器,使用循环矩阵生成样本去训练分类器。
参考文献:
[1] J. F. Henriques, R. Caseiro, P. Martins and J. Batista, “High-Speed Tracking with Kernelized Correlation Filters,” in IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 37, no. 3, pp. 583-596, 1 March 2015, doi: 10.1109/TPAMI.2014.2345390.
[2] D. S. Bolme, J. R. Beveridge, B. A. Draper and Y. M. Lui, “Visual object tracking using adaptive correlation filters,” 2010 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2010, pp. 2544-2550, doi: 10.1109/CVPR.2010.5539960.
一、KCF的前身:MOSSE算法
1、相关滤波
- 相关滤波(Correlation Filter) 最早应用于信号处理,用来描述两个信号之间的相关性(相似性)。
- 对于两组数据f、gf、gf、g其相关性的计算公式如下:
(f⊙g)(τ)=∫−∞+∞f∗(t)g(t+τ)dt(f \odot g)(\tau)=\int_{-\infty}^{+\infty}f^*(t)g(t+\tau)dt(f⊙g)(τ)=∫−∞+∞f∗(t)g(t+τ)dt
(f⊙g)(n)=∑−∞+∞f∗[m]g[m+n](f\odot g)(n)=\sum_{-\infty}^{+\infty}f^*[m]g[m+n](f⊙g)(n)=∑−∞+∞f∗[m]g[m+n] - 其中的复共轭是与卷积操作的区别。
2、MOSSE算法
MOSSE(Minimum Output Sum Square Error):是最初将相关滤波应用于目标跟踪领域中的,它在保持较好的跟踪效果的同时,其速度远超同时期的其它跟踪算法。
MOSSE算法基本思想:根据第一帧图像框选的目标构建一个响应,该响应在所绘制的目标框的中心处的响应值最大,向四周缓慢衰减(按照二维高斯分布)。希望找到一个滤波器使得图像和这个滤波器进行相关运算之后刚好得到的就是这个响应,这样根据响应值最大的位置就可以找出目标的位置。当新的一帧图像进来时,用之前得到的滤波器与新的图像进行相关运算,即可更新目标位置。
从公式上来看,希望获得滤波器hhh可以满足:g=f∗hg=f*hg=f∗h。通过傅里叶变换,转换到频率,即G=F⊙H∗G=F⊙H^*G=F⊙H∗(*表示复共轭,⊙表示频域下的卷积运算)。当GGG和F∗F^*F∗均已知的情况下,可求出H∗=GFH^*=\frac{G}{F}H∗=FG。
为了增加H*的鲁棒性,将第一帧图像的目标进行多次的变换,得到多个f,构成一个数据集。
按照优化的思想,minH∗∑i∣Fi⊙H∗−Gi∣2min_{H^*} \sum_{i}|F_i \odot H^*-G_i|^2minH∗∑i∣Fi⊙H∗−Gi∣2得到鲁棒性较好的H∗:H∗=∑iGi⊙Fi∗∑iFi⊙Fi∗H^*:H^*=\frac{\sum_iG_i\odot F_i^*}{\sum_i F_i\odot F_i^*}H∗:H∗=∑iFi⊙Fi∗∑iGi⊙Fi∗。
对于后续的视频帧MOSSE算法给出了更新方法:H∗=AiBi,Ai=ηGi⊙Fi∗+(1−η)Ai−1,Bi=ηFi⊙Fi∗+(1−η)Bi−1H^*=\frac{A_i}{B_i}, A_i=\eta G_i \odot F_i^*+(1-\eta)A_{i-1}, B_i=\eta F_i \odot F_i^*+(1-\eta)B_{i-1}H∗=BiAi,Ai=ηGi⊙Fi∗+(1−η)Ai−1,Bi=ηFi⊙Fi∗+(1−η)Bi−1。
其中 η\etaη表示学习率,η\etaη越大,则对当前帧保留的信息越多,对历史信息保留的越少,论文中给出的最佳值为0.125。
二、岭回归与循环矩阵
1.岭回归(Ridge Regression)
- 是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法
- 算法形式:
minw∑i(f(xi)−yi)2+λ∣∣w∣∣2\min \limits_w \sum_i (f(x_i)-y_i)^2+\lambda ||w||^2wmin∑i(f(xi)−yi)2+λ∣∣w∣∣2,其中f(x)=wTxf(x)=w^Txf(x)=wTx - 对上式可以得到闭式解:w=(XTX+λI)−1XTyw=(X^TX+\lambda I)^{-1}X^Tyw=(XTX+λI)−1XTy,其中,数据矩阵 XXX每一行 xix_ixi有一个样本,并且yyy每一个元素是回归目标yiy_iyi
- 为实现在频域进行处理,对闭式解进行调整:w=(XHX+λI)−1XHyw=(X^HX+\lambda I)^{-1}X^Hyw=(XHX+λI)−1XHy,其中XH=(X∗)TX^H=(X^*)^TXH=(X∗)T,成为Hermitian转置亦即共轭转置。
2.循环矩阵
2.1 循环移位
循环移位算子:
有Px=[xn,x1,x2,...,xn−1]TPx=[x_n, x_1,x_2,...,x_{n-1}]^TPx=[xn,x1,x2,...,xn−1]T相当于对xxx循环移位一个元素。
通过PuxP^uxPux可以实现更大的位移,而且±u\pm u±u可以代表循环移位的方向。循环移位示意图如下:
这是一种一维的水平循环移位示意图,每一行的元素都可以看作第一行的元素进行循环移位获得。
这是一个二维的垂直循环移位示意图。由于循环的特性,每nnn个周期得到相同的信号,所以{Pux∣u=0,1,2,...,n−1}\{P^ux|u=0,1,2,...,n-1\}{Pux∣u=0,1,2,...,n−1}可以表示全套的移位信号。展开表示为:
另外,由于循环性质,我们可以等效地将该组的前半部分视为正方向的变化,而后半部分则视为负方向的变化。
2.2 循环矩阵的处理
- 通过离散傅里叶变换(DFT)对角化:X=diag(x^)FHX=diag(\hat x)F^HX=diag(x^)FH,其中FFF是不依赖于生成向量xxx的常数矩阵即DFT矩阵满足(z)=nF(z)\mathcal(z)=\sqrt nF(z)(z)=nF(z),x^\hat xx^表示生成向量xxx的傅里叶变换,即x^=F(x)\hat x=\mathcal{F}(x)x^=F(x)。
- 考虑XHXX^HXXHX,可以视为非中心协方差矩阵,有XHX=Fdiag(x^∗)FHFdiag(x^)FH=Fdiag(x^∗)diag(x^)FH=Fdiag(x^∗⊙x^)FHX^HX=Fdiag(\hat x^*)F^HFdiag(\hat x)F^H=Fdiag(\hat x^*)diag(\hat x)F^H=Fdiag(\hat x^* \odot\hat x)F^HXHX=Fdiag(x^∗)FHFdiag(x^)FH=Fdiag(x^∗)diag(x^)FH=Fdiag(x^∗⊙x^)FH,括号中的向量被称为信号x的自相关(在傅立叶域中,也被称为功率谱)
- 作者将上述的推导递归应用于线性回归的完整表达式,得到w^=diag(x^∗x^∗⊙x^+λ)y^=x^∗⊙y^x^∗⊙x^+λ\hat w=diag(\frac{\hat x^*}{\hat x^*\odot \hat x+\lambda})\hat y=\frac{\hat x^* \odot \hat y}{\hat x^* \odot \hat x+\lambda}w^=diag(x^∗⊙x^+λx^∗)y^=x^∗⊙x^+λx^∗⊙y^
- 最突出的效果在于使用上式进行计算,将存储和计算减少了几个数量级。
三、非线性回归
在这一部分,作者获得了与线性相关滤波器一样快的非线性滤波器
3.1 核函数
- (1)使用核技巧将线性空间(原空间)的输入映射到非线性特征空间(对偶空间),将原空间中的向量www表示为对偶空间中基向量的线性组合:w=∑iαiΦ(xi)w=\sum_i \alpha_i \Phi(x_i)w=∑iαiΦ(xi),将求解问题转换为求解向量α\alphaα。
- (2)定义核函数为向量之间的点积φT(x)φ(x′)=k(x,x′)\varphi^T(x)\varphi(x')=k(x,x')φT(x)φ(x′)=k(x,x′);所有样本对之间的点积用n×nn\times nn×n维核矩阵KKK表示,Ki,j=k(xi,xj)K_{i,j}=k(x_i,x_j)Ki,j=k(xi,xj)。
- (3)f(z)=wTz=∑i=1nαik(z,xi)f(z)=w^Tz=\sum_{i=1}^n\alpha_ik(z,x_i)f(z)=wTz=∑i=1nαik(z,xi)
3.2 快速核回归
(1)对岭回归在对偶空间中的解可以表示为:α=(K+λI)−1y\alpha = (K+\lambda I)^{-1}yα=(K+λI)−1y,KKK为核矩阵,α\alphaα是系数向量。
(2)作者证明了矩阵KKK对于循环移位的数据集是循环的(对于径向基函数核、点积核、加权核、指数加权核都满足),对于上式的求解可以对矩阵KKK进行对角化,得到如同线性问题的快速解决方式。可以表示为:K=C(kxx)K=C(k^{xx})K=C(kxx),其中kxxk^{xx}kxx表示循环矩阵KKK的第一行向量。
(3)α=(C(kxx)+λI)−1y=Fdiag(1k^xx+λ)FHy\alpha = (C(k^{xx})+\lambda I)^{-1}y =Fdiag(\frac{1}{\hat k^{xx}+\lambda})F^Hy α=(C(kxx)+λI)−1y=Fdiag(k^xx+λ1)FHy
对两边同时进行傅里叶变化得到:α^=y^k^xx+λ\hat \alpha=\frac{\hat y}{\hat k^{xx}+\lambda}α^=k^xx+λy^(4)作者定义了更一般核相关:对于任意两个向量xxx和x′x'x′,二者的核相关向量kxx′k^{xx'}kxx′的第iii个元素kixx′=k(x′,Pi−1x)k_i^{xx'}=k(x',P^{i-1}x)kixx′=k(x′,Pi−1x)。在高维空间φ(.)\varphi(.)φ(.)中,有kixx′=φT(x′)φ(Pi−1x)k_i^{xx'}=\varphi ^T(x')\varphi (P^{i-1}x)kixx′=φT(x′)φ(Pi−1x)。
kxx′k^{xx'}kxx′是n×1n\times 1n×1维的向量,随样本数量呈线性增长,摒弃了传统核方法需要计算n×nn\times nn×n维的核矩阵。
3.3 快速检测
- 为了检测感兴趣的目标对象,我们通常希望在几个图像位置上评估回归函数f(z)f(z)f(z),用KzK^zKz表示所有训练样本和所有候选块之间的核矩阵。
- 训练样本和候选块分别由基础样本xxx和基础图像块zzz通过循环移位组成,因此矩阵KzK^zKz的每个元素可以表示为Ki,j=k(Pi−1z,Pj−1x)K_{i,j}=k(P^{i-1}z,P^{j-1}x)Ki,j=k(Pi−1z,Pj−1x)。
- 对评估函数进行处理:f(z)=∑i=1nαik(z,xi)=(Kz)Tα=Fdiag(k^xz)Fαf(z)=\sum_{i=1}^n\alpha_ik(z,x_i)=(K^z)^T\alpha=Fdiag(\hat k^{xz})F\alphaf(z)=∑i=1nαik(z,xi)=(Kz)Tα=Fdiag(k^xz)Fα,两边进行傅立叶变换,得:f^(z)=k^xz⊙α^\hat f(z)=\hat k^{xz}\odot \hat \alphaf^(z)=k^xz⊙α^。
- 可以看出,所有位置处的评估函数都可以视为对核值kxzk^{xz}kxz的空间滤波操作。
四、多通道
多通道情况下,由于离散傅里叶变换的线性性质,对傅里叶域中每个通道的结果求和即可。所以只需要在计算核相关函数时对通道求和即可。
总结
- 通过循环移位来建模,构建循环移位数据集
- 傅里叶域进行处理循环矩阵
- 将核函数矩阵转换为循环矩阵处理
- 多通道扩展
KCF跟踪算法论文阅读与原理分析相关推荐
- 造球粒径检测算法论文阅读笔记
造球粒径检测算法论文阅读笔记 1.图像感兴趣区域的划分 2.生球区图像高斯滤波 3.生球区域与阴影区域的分割 4.对生球区域的分类标记(区分上下层球) 1.图像感兴趣区域的划分 依据光照的不同,将图像 ...
- 【推荐算法论文阅读】LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
这篇文章是基于NGCF提出的改进,NGCF相关的工作参考[推荐算法论文阅读]Neural Graph Collaborative Filtering 一.背景 通过严格的对照实验(在相同的数据集和评估 ...
- kcf算法c语言,基于KCF跟踪算法的目标轨迹记录系统的设计与实现
摘要: 计算机视觉一直属于比较热门的研究领域.计算机视觉中的一个重要分支是目标的跟踪.目标跟踪以及轨迹记录在交通监控,行人流量,天文观测,导航制导,武器装备的研发等领域有着很实用的价值.KCF(ker ...
- KCF跟踪算法原理 入门详解
一.算法介绍 KCF全称为Kernel Correlation Filter 核相关滤波算法.是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins ...
- PathAFL论文阅读+源码分析
PathAFL: Path-Coverage Assisted Fuzzing 文章来自 ASIA CCS2020 作者来自南开大学 Abstract 提出了PathAFL,有效地识别和利用 h-pa ...
- keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记
背景 <SSA-CNN Semantic Self-Attention CNN for Pedestrian Detection>是2019 的工作,其作者来自于南洋理工.这篇文章主要是做 ...
- 长期跟踪经典之作2--- LCT 算法论文阅读与代码运行
好了 TLD很费劲地弄完了,现在开始进阶的SHJT大神的LCT,就是长期追踪,我相信未来这个方向会火起来的. 这两天琢磨完了论文,这里罗列一下读论文主要需要参阅的: 1 STC (用到了时空上下文分 ...
- kcf跟踪算法实例整理
http://blog.csdn.NET/shenxiaolu1984/article/details/50905283 本文的跟踪方法效果甚好,速度奇高,思想和实现均十分简洁.其中利用循环矩阵进行快 ...
- 论文阅读-《结合分析直接照明和随机阴影》
提示:将直接照明公式化为无阴影照明和照明加权阴影的乘积,并将实时无阴影照明技术与光线追踪和去噪阴影相结合.这产生了具有低方差并且可以在不模糊阴影细节的情况下进行去噪的直接照明的比率估计器 文章目录 摘 ...
最新文章
- github提交代码却没有显示绿格子
- 【转】mysqldump的锁表的问题
- Oracle - 使用各种SQL来熟知buffer cache使用情况
- BERT-of-Theseus:基于模块替换的模型压缩方法
- ASP.NET Core中HTTP管道和中间件的二三事
- 王译潇20162314 第九周作业总结
- flex 下对齐_Flex 布局示例
- ctf 绕过php,Bugku-CTF之各种绕过
- 干货 | 设计大佬用的UI手机样机,你要么?
- 创建一个urdf机器人_Matlab官方机器人工具箱Robotics System Toolbox官网翻译教程2
- 【Prison Break】第三天(3.29)
- Oracle 同音字查询,对外汉语汉字教学
- openwrt开发--驱动程序IPK包开发(GPIO控制)
- Suspense示例
- ensp防火墙出口路由双链路运营商,负载分担及设备冗余
- 计算机实践学什么作用,大学计算机基础:计算机操作实践
- python正则爬取微信阅读总榜单写入csv
- Win7下IE浏览器主页被篡改为2345导航页,怎么改掉?
- Qt实现Linux下的硬盘空间监测和文件清理
- java在文件中输出换行符