matlab求kcf算法响应图_Kernelized Correlation Filters(KCF)算法

目前在online visual tracking这个领域,已经涌现出很多的跟踪算法,比较知名如TLD,Struck,OAB,CT等等。但是能做到非常快速而且效果还不错的相对就较少了,好多算法都是刚刚能实时,而且还是在图像分辨率不是很大的情况下。之前在博客里提到一篇该领域的测评综述1,对该领域大部分算法进行了一个总结和评估,作者在一个有50个视频的数据集上测试了29个算法,其中速度和效果都还不错的算法有TLD2和Struck3。Struck的评价运行速度大概是20帧/s,TLD相对快一点,,大概28帧/s。但这个速度仍然不是很快,而14年的一篇paper提出了一种叫做KCF(Kernerlized Correlation Filter)4的跟踪算法使得速度有了很大提升,在同样的测试数据集上,平均运行速度达到172帧/s(使用HOG特征的情况下)。而且据paper的实验结果显示,准确率比Struck和TLD都高。之所以能有这么快的速度,得益于作者巧妙地通过循环偏移构建出了分类器的训练样本,从而使得数据矩阵变成了一个循环矩阵。然后基于循环矩阵的特性把问题的求解变换到了傅里叶变换域,从而避免了矩阵求逆的过程,大大降低了算法的复杂度。

问题阐述

目前跟踪算法主流的思想还是基于tracking by detection,而训练样本的选择基本上就以目标中心为提取正样本,然后基于周围的图像提取负样本。大部分算法都是采用非正即负的方法来标记训练样本,即正样本标签为1,负样本为0。这种标记样本的方法有一个问题就是不能很好的反应每个负样本的权重,即对离中心目标远的样本和离中心目标的近的样本同等看待。所以就有算法提出使用连续的标签进行标记样本,即根据样本中心里目标的远近分别赋值[0,1]范围的数。离目标越近,值越趋向于1,离目标越远,值越趋向于0。事实也证明这种标记样本的方法能得到更好的效果,比如Struck和KCF。Struck是通过一种loss函数隐式地采用了这种连续的样本标记方法,而KCF则通过使用[0,1]范围的值作为样本的回归值,从而给不同偏移下得到的样本不同的权重。

首先,我们先介绍一个简单的线性回归模型,然后再讨论引入kernel之后的情况。样本训练过程实际上是一个岭回归问题,或者叫做正则化最小二乘问题,它有一个闭式的解。假设给定一些训练样本及其回归值 {(x1,y1),(x2,y2),...,(xi,yi),...}{(x1,y1),(x2,y2),...,(xi,yi),...} ,其训练的最终目标是找到一个函数 f(z)=wTzf(z)=wTz 使得如下残差函数最小,

minw∑i(f(xi)?yi)2+λ∥w∥2(1)(1)minw∑i(f(xi)?yi)2+λ∥w∥2

其中, λλ 是正则化参数,防止过拟合的。上式的闭式解可以参考线性最小二乘的求解得出如下,

w=(XTX+λI)?1XTy(2)(2)w=(XTX+λI)?1XTy

这里 XX 是由一个样本的特征向量占一行组成的样本矩阵。 yy 是对应每个样本的回归值 yiyi 组成的列向量。 II 是个单位矩阵。 因为考虑到后面要在傅里叶域进行计算,这里给出一个复数情况下的求解结果,其中 XHXH 是 XX 的共轭转置, w?w? 是 ww 的共轭。

w?=(XHX+λI)?1XHy(3)(3)w?=(XHX+λI)?1XHy

现在问题来了,如果直接求解上述闭式解,其中的求逆计算随着样本数的增大是非常耗时的。显然直接求解的方式是不靠谱的,这里这篇paper的作者通过巧妙地把上述闭式解变换到傅里叶变换域的方式,从而避开了矩阵求逆的运算,大大节省了运行时间。而这也是这篇paper的主要贡献所在。

DFT下的线性回归

为了解释的简明性,这里仅仅就一维的单通道信息做分析,也就是说这里的 xx 都是一维向量,当然推广到二维也是适用的,而且实际上代码中也的确就是在二维上做的。我们看到式 (3)(3) 中的样本矩阵 XX 如果是一个循环矩阵的话,该式子的计算就会变得容易很多。即,

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]

其中, xx 是矩阵的第一行,整个矩阵式由这一行的循环偏移得到的。那我们假设存在这么一个循环矩阵,看看接下来式 (3)(3) 会变成怎样。首先列出一个循环矩阵拥有的一个性质5如下:

X=FHdiag(x^)F(5)(5)X=FHdiag(x^)F

其中, xx 头上的那个小帽 x^x^ 代表 xx 的傅里叶变换, FF 是离散傅里叶变换矩阵,即满足 x^=Fxx^=Fx 。这样把式 (5)(5) 代入式 (3)(3) 中得,

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(diag(x^?⊙x^)+λI)?1diag(x^?)Fy=F?1diag(x^?x^?⊙x^+λ)Fy

其中, ⊙⊙ 代表向量对应元素相乘,然后两边同时左乘 FF 得,

w^?=x^?⊙y^x^?⊙x^+λ(7)(7)w^?=x^?⊙y^x^?⊙x^+λ

至此,我们可以看出通过上述变换后,权重向量 ww 的求解变换到了傅里叶变换域,而且计算量大大降低。

构建循环样本矩阵

不同的提取训练样本方法:左图是以base图像为中心,向周围偏移得到的样本作为负样本;右图是基于base图像,做循环偏移得到的样本作为负样本。

通过上面的计算我们可以看出,如果能构建一个循环矩阵,那么就能极大的加速样本的训练过程。那到底能不能呢,我们先来看一组基于目标中心周围偏移提取的正负训练样本。

通过右图可以看出,常规的方法是以目标图像为base图像,基于该图像左右上下偏移得出一系列的图像块作为负样本进行训练(左图所示)。而通过对base图像进行循环偏移的方法可以得到一些近似的的负样本作为训练样本进行训练(右图所示)。这里我们发现通过循环偏移得到的图像在边界处并不是很平滑,消除这种现象的方式就是通过对base图像乘以一个汉宁窗来降低边缘图像的权重。这样,训练样本构成的样本矩阵就变成了一个循环矩阵(如式 (4)(4) 所示)。

引入核函数

以上介绍的都是线性回归的情况,如果能引入核函数,分类器的性能将会更好。核函数的引入是把特征空间映射到一个更高维的空间去,这里我们假设这个映射函数为 φ(x)φ(x) ,则分类器的权重向量变为,

w=∑iαiφ(x)(8)(8)w=∑iαiφ(x)

这样我们最终要求解的参数就由 ww 变为 αα ,这里 α={α1,α2,...,αi,...}Tα={α1,α2,...,αi,...}T 。因为其实我们并不知道核函数映射的高维空间是什么,我们只是知道高维空间下的两个向量的乘积可以通过一个映射函数把其在低维空间下的乘积映射到高维空间,也就是核函数。这里设不同样本之间的乘积的核函数结果组成的矩阵为

Kij=κ(xi,xj)(9)(9)Kij=κ(xi,xj)

这样最终的回归函数变为,

f(z)=wTz=∑i=1nαiκ(z,xi))(10)(10)f(z)=wTz=∑i=1nαiκ(z,xi))

直接计算上述函数相对来说是很耗时的,下面还是结合循环矩阵的特性实现一种快速的核函数计算方法。

快速训练

基于核函数下的岭回归的解为6,

α=(K+λI)?1y(11)(11)α=(K+λI)?1y

其中, KK 核函数矩阵,如式 (9)(9) 所示。如果我们能够证明 KK 是循环矩阵,则上式的求解就可以转换到DFT域,即,

α^?=y^k^xx+λ(12)(12)α^?=y^k^xx+λ

这里, kxxkxx 是核函数矩阵 KK 的第一行元素组成的向量。

如果两个向量的元素的次序发生变化不影响最终通过核函数计算的结果,则该核函数构成的矩阵就是一个循环矩阵,像高斯核函数,多项式核函数都是满足上面条件的。

快速检测

上面已经提到直接计算式 (10)(10) 是非常耗时的,快速的解法是像式 (9)(9) 那样,通过构建测试样本和训练样本的核函数矩阵如下,

Kz=C(kxz)(13)(13)Kz=C(kxz)

其中, kxzkxz 是这个循环矩阵的第一行组成的向量。这样就可以同时计算基于测试样本 zz 的循环偏移构成的所有测试样本的响应,即,

f(z)=(Kz)Tα(14)(14)f(z)=(Kz)Tα

注意这里 f(z)f(z) 不同于式 (10)(10) ,它是一个向量,由基于base样本 zz 不同循环偏移下的响应值组成。根据循环矩阵的性质(如式 (5)(5) 所示),上式变换到DFT域后,

f^(z)=(k^xz)?⊙α^(15)(15)f^(z)=(k^xz)?⊙α^

快速计算核函数相关性

到现在为止,只剩下前面部分提到的 kxxkxx 和 kxzkxz 没有阐明如何计算了。首先列出 kxx^'kxx^' 的计算公式如下,

kxx′=g(C(x′)x)(16)(16)kxx′=g(C(x′)x)

其中, g(x)g(x) 是核函数, C(x′)C(x′) 是基于 x′x′ 为第一行的循环矩阵。参考式 (5)(5) 所示循环矩阵的特性,代入上式得,

kxx′=g(F?1(x^⊙x^?))(17)(17)kxx′=g(F?1(x^⊙x^?))

所以,对于多项式核函数,其计算公式如下,

kxx′=(F?1(x^⊙x^?)+a)b(18)(18)kxx′=(F?1(x^⊙x^?)+a)b

对于高斯核函数,其计算公式如下,

kxx′=exp(?1σ2(∥x∥2+∥x′∥2?2F?1(x^⊙x^?)))(19)(19)kxx′=exp(?1σ2(∥x∥2+∥x′∥2?2F?1(x^⊙x^?)))

总结

KCF的最大优势在于速度很快,但是每帧训练的权重向量更新问题并没有很好的解决,目前算法采用的是按照一定比例更新最新的训练的权重向量到现有的权重向量中去。此外作者在其主页上公布了Matlab源代码,我根据其代码也写了一个C++版的,具体可以参考这里。

ReferencesY. Wu, J. Lim, and M.-H. Yang, "Online object tracking: A benchmark," in Computer vision and pattern recognition (CVPR), 2013 IEEE Conference on, 2013, pp. 2411-2418.

Z. Kalal, K. Mikolajczyk, and J. Matas, "Tracking-Learning-Detection," Pattern Analysis and Machine Intelligence, IEEE Transactions on,pp. 1-1, 2011.

S. Hare, A. Saffari, and P. H. S. Torr, "Struck: Structured Output Tracking with Kernels," 2011 IEEE International Conference on Computer Vision (ICCV),pp. 263-270, 2011.

J. F. Henriques, R. Caseiro, P. Martins, and J. Batista, "High-Speed Tracking with Kernelized Correlation Filters," IEEE Transactions on Pattern Analysis and Machine Intelligence,2014.

R. M. Gray, Toeplitz and circulant matrices: A review: now publishers inc, 2006.

R. Rifkin, G. Yeo, and T. Poggio, "Regularized least-squares classification," Nato Science Series Sub Series III Computer and Systems Sciences,vol. 190, pp. 131-154, 2003.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native之js同步调用安卓原生方法@ReactMethod(isBlockingSynchronousMethod = true)

1 问题 之前的代码js调用安卓原生都是用的异步方法,比如callback, promiss,异步的话,我们一般是在安卓原生有耗时操作,才用异步,如果我要离开返回,就需要js调用安卓同步方法 利用callback实现js调用原生可以参考我的这篇博客 React Native实现js调用安卓原生代码 React Nat…

用POP动画引擎实现弹簧动画(POPSpringAnimation)

效果图: #import "ViewController.h" #import <POP.h>interface ViewController ()property (nonatomic, weak) UIView *testView;endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor blackColor…

地理知识归纳:影响降水的九大因素

降水指大气中水汽凝结降落的过程,包括降雨、下雪、冰雹等形式,降水的多少要受很多因素的影响,但主要条件是三个:充足的水汽供应,气流上升达到过饱和状态,足够的凝结核。通常情况下,我们不需要考虑凝结核的问题,只是考虑有没有充足的水汽和促使气流上升的机制就可以,归…

linux 查看cpu_作为高级Java,你应该了解的Linux知识

作为一个javaer&#xff0c;我以前写过很多关于Linux的文章。但经过多年的观察&#xff0c;发现其实对于大部分人&#xff0c;有些东西压根就用不着。用的最多的&#xff0c;就是到线上排查个问题而已&#xff0c;这让人很是苦恼。那么&#xff0c;我们就将范围再缩小一下。最有…

uva-10305-水题-拓扑排序

uva-10305-水题-拓扑排序 输入n,m,n代表点数,m代表边数(i,j),排序时i在j前面,没出现的点随意排 #include <iostream> #include<stdio.h> #include<math.h> #include<memory.h> using namespace std;const int maxNum 120; int a, b; int map[maxNum][…

layer和3D仿射变换

1、视图的显示基于图层&#xff0c;通过控制图层同样能控制显示效果&#xff0c;获取当前的视图的layer,并为其增加圆角边框。 //设置layer边框的宽度为2view.layer.borderWidth2;//如果需要为layer添加颜色需要转换为CGColor对象view.layer.borderColor[UIColor greenColor].C…

服务器维修质保合同,服务器维护保修合同(标准版本).pdf

服务器维护保修合同甲 方 &#xff1a;乙 方 &#xff1a;。服务器维护保修合同甲 方&#xff1a;住 所&#xff1a;法定代表人&#xff1a;联 系 电 话 &#xff1a; 传 真&#xff1a;联 系 地 址 &#xff1a;邮 政 编 码 &#xff1a;乙 方&#xff1a;住 所&#xff1a;法…

React Native之Android原生通过DeviceEventEmitter发送消息给js

1 问题 Android原生向js发消息,并且可以携带数据 2 实现原理 Android原生可以使用RCTEventEmitter来注册事件,然后这里需要指定事件的名字,然后在js那端进行监听同样事件的名字监听,就可以收到消息得到数据 Android注册关键代码 reactContext.getJSModule(DeviceEventManag…

knex 单表查询_knex.js

软件简介knex.js 是一个查询构建器&#xff0c;用于 PostgreSQL, MySQL 和 SQLite3。它设计灵活&#xff0c;轻便和有趣。特性&#xff1a;例子&#xff1a;var knex require(knex)({dialect: sqlite3,connection: {filename: ./data.db}});// Create a tableknex.schema.crea…

IOS-网络(大文件下载)

一、不合理方式 1 //2 // ViewController.m3 // IOS_0131_大文件下载4 //5 // Created by ma c on 16/1/31.6 // Copyright © 2016年 博文科技. All rights reserved.7 //8 9 #import "ViewController.h" 10 11 interface ViewController ()<NSURLConne…

地理素养的核心构成和主要特点

素养教育已成为21世纪国际教育发展的重大课题和紧迫任务。新一轮地理课程改革把地理素养置于地理课程目标的核心地位。因此,统一认识和准确把握地理素养的内涵与特质,对于促进学生的全面发展具有十分重要的意义。 一、地理素养的内涵与组成 地理素养是指学习者经过地理学习后…

【开题报告】基于SpringBoot的电子二手产品交易平台的设计与实现

1.研究背景 随着互联网的快速发展和普及&#xff0c;电子商务行业蓬勃发展&#xff0c;二手产品交易作为电子商务领域的一个重要分支也得到了广泛关注。传统的线下二手交易存在一些问题&#xff0c;例如信息不对称、交易风险高、交易流程繁琐等&#xff0c;这些问题限制了用户…

Blazor University (9)组件 — 代码生成 HTML 属性

原文链接&#xff1a;https://blazor-university.com/components/code-generated-html-attributes/代码生成 HTML 属性Razor 在条件 HTML 输出或在 for 循环中输出 HTML 时非常棒&#xff0c;但在元素本身内的条件代码方面&#xff0c;事情就有点棘手了。例如&#xff0c;以下代…

python重定向_在Python中使用urlopen()防止“隐藏”重定向

我正在使用BeautifulSoup进行网页抓取,并且在使用urlopen时遇到特定类型网站的问题.网站上的每个商品都有其独特的页面,并且商品具有不同的格式(例如&#xff1a;500 mL,1L,2L等). 当我使用Internet浏览器打开产品的URL(www.example.com/product1)时,会看到500 mL格式的图片,有…

CentOS安装JAVA JDK

普通情况下&#xff0c;我们都要将linux自带的OPENJDK卸载掉。然后安装SUN的JDK。首先查看Linux自带的JDK是否已安装。 输入例如以下命令&#xff0c;查看已经安装的JAVA版本号信息。 Linux代码 java -version 输入例如以下命令。查看JDK的信息。Linux代码 rpm -qa|grep j…

Android之解决Android8.0手机(Notification)收不到自定义消息通知以及其它手机得到数据不同步

1 问题 app,自定义消息通知的时候,在Android8.0手机上收不到通知 2 解决办法 NotificationManager需要创建NotificationChannel,然后调用createNotificationChannel把NotificationChannel传递进去,并且通过setChannelId设置相应的id 3 普通样本代码实现 private static fina…

世界史

评价华盛顿&#xff1a;打破一个旧世界需要勇气与胆魄&#xff0c;建设一个新世界却需要耐心与智慧。

安装bigdesk后es无法启动_安装天正后,探索者无法双击启动?

用户经常会出现&#xff0c;安装天正后&#xff0c;探索者无法双击启动&#xff0c;或者是图纸无法拖拽入CAD中&#xff0c;如何解决&#xff1f;答&#xff1a;天正安装完成后&#xff0c;默认将CAD的acad.exe程序&#xff0c;添加了“以管理员身份运行此程序”而导致的&#…

服务器安全维护包含,服务器安全维护包含

服务器安全维护包含 内容精选换一换本章节介绍如何使用管理控制台向导创建裸金属服务器。创建裸金属服务器时&#xff0c;您需要配置规格、镜像、存储、网络、安全组等必备信息。同时&#xff0c;向导也提供了丰富的扩展配置功能&#xff0c;方便您进行个性化部署和管理。在创建…

VS2008系统开发背景图片的添加及注意事项

最初的做法是&#xff0c;直接将父窗体的Image属性改成背景图片&#xff0c;并将其BackgroundImageLayout属性设置为stretch&#xff0c;结果发现这样做的结果是系统运行超级慢&#xff0c;便考虑用代码实现&#xff0c;如下&#xff1a; //this.BackgroundImage System.Draw…