【目标跟踪】相关滤波算法之MOSSE
简要
2010年David S. Bolme等人在CVPR上发表了《Visual Object Tracking using Adaptive Correlation Filters》一文,首次将相关滤波器引入到目标跟踪当中。该算法大幅提高了目标跟踪的性能,论文实验结果可达到669FPS的速度。这相比同期间的跟踪算法可以算是一个极大的飞跃。本文将以该论文作为分析一类基于相关滤波的目标检测算法的引子。
基于相关滤波的跟踪
MOSSE算法的创新的在于,它是第一篇将相关滤波引入到目标跟踪的领域的论文。其思想是构造一个滤波模板 \(h\),使用该模板与图像序列帧 \(f\) (此处解释下,f指的是输入图像中框定的目标区域,也称为目标窗口,并非整个图像帧)做卷积运算,根据得到的响应输出\(g\)来确定目标在新的一帧图像中的位置。
\[g=f \ast h\]
上式的符号\(\ast\)表示卷积运算。对于输入图像的2维快速傅里叶变换有\(F=\mathcal{F}(f)\),而对模板\(h\)的变换为\(H=\mathcal{F}(h)\)
根据傅里叶变换的性质,时空域\(f\)和\(h\)的卷积运算可以转换为傅里叶频域的点乘运算,有如下式子:
\[G=F\bigodot H^\ast\]
上式 \(H^\ast\) 表示为\(H\)的共轭复,\(\bigodot\)表示为点乘运算。
由此时空域的卷积运算转化为频域的点乘运算,将有助于提高运算速度,事实上后来的大部分改进算法也是基于这个性质进行的。
MOSSE滤波器
前面可知,基于相关滤波的目标跟踪算法核心是用滤波模板与图像序列做卷积运算来确定目标的位置,那么对与滤波模板的求解是算法的核心。
MOSSE全称是Minimum Output Sum of Squared Error ,算法开始需要有一组训练图像\(f{_i}\)和期望的训练输出\(g{_i}\)。\(g{_i}\)通常是以目标为中心,\(\sigma\)为方差生成的一个高斯矩阵。由此滤波模板\(H\)的计算如下:
\[H{_i^\ast} = \frac{G{_i}}{F{_i}}\]
上式是对单独一帧图像计算滤波模板的,但是在实际情况下滤波模板需要能够适应整个图像序列。MOSSE的滤波其要求对于视频序列的所有实际输出和期望输出的平方误差最小,即:
\[\underset{H^\ast}{min} \underset{i} {\sum} \begin{vmatrix} F_i \bigodot H^\ast - G_i \end{vmatrix}^{2}\]
该式的求解非本文重点,有兴趣的读者可以翻阅原论文的附录。该式子的求解结果如下:
\[H^\ast = \frac{\sum_i G_i \bigodot F^\ast_i}{\sum_i F_i \bigodot F^\ast_i}\]
分子是输入图像与期望的输入图像的卷积,而分母则是输入图像的能量谱图。
UMACE和ASEF滤波器
该论文虽然叫做MOSSE算法,不仅使用了Minimum Output Sum of Squared Error滤波器,其算法框架可以简单的将MOSSE滤波其替换为UMACE和ASEF等滤波器。
文中给出了UMACE和ASEF滤波其的求解形式。
UMACE滤波器形式如下:
\[H^\ast = \frac{\sum_i F^\ast_i}{\sum_i F_i \bigodot F^\ast_i}\]
可以看出其与MOSSE区别在于分子部分。
ASEF滤波器如下:
\[H^\ast = \frac{1}{N} \sum_i \frac{ G_i \bigodot F^\ast_i}{F_i \bigodot F^\ast_i}\]
对于ASEF滤波器因为输入图像的能量谱图\({F_i \bigodot F^\ast_i}\)在某些情况下可能接近与零,于是使用\({F_i \bigodot F^\ast_i + \varepsilon }\)替代。
滤波器初始化与更新
初始化
上诉的三个滤波其公式可以看到下标i,其表示的是多帧图像帧。MOSSE算法在初始化的时候需要一组训练图像和期望输出。那么这些训练数据是如何获得的?
作者给出的方案是,对第一个目标窗口\(f_i\)进行八个仿射变换得到一组训练图像,而\(g_i\)则以目标中心生成高斯矩阵。
更新
因为一个视频序列会有关照、旋转、尺度等变换,所以需要滤波器进行更新以便滤波器适应环境的变化。该论文使用了滑动平均值作为更新策略,这是很常用的更新方式。
对于ASEF和MOSSE的更新方式有稍许不同。ASEF滤波其的更新方式如下:
\[H_i^\ast = \eta \frac{G_i \bigodot F_i^\ast}{F_i \bigodot F_i^\ast} + (1-\eta)H_{i-1}^\ast\]
其中\(\eta\)为学习因子。而MOSSE更新方式如下。
\[H_i^\ast = \frac{A_i}{B_i}\]
\[A_i=\eta G_i \bigodot F_i^\ast+(1-\eta)A_{i-1}\]
\[B_i=\eta F_i \bigodot F_i^\ast+(1-\eta)B_{i-1}\]
从ASEF和MOSSE滤波其的形式不难看何其更新方式的不同。
其他
到这里,MOSSE算法的主要思想其实已经解释完了,但是还存在几个要点需要提及
检测
前文说目标的位置通过响应输出\(g\)来确定,其实就是通过频域计算出\(G=F\bigodot H^\ast\),再进行逆傅里叶变换求出\(g\),\(g\)矩阵的最大值就是目标的位置
\(G_i\)究竟指的是啥?
原文论文中对与\(g_i\)和\(G_i\)的阐述不够清晰,可能大部分读者会疑惑,哪个是响应输出?哪个是期望的响应输出?
- 期望的响应输出指的是,期望经过滤波模板卷积后得到的输出,该输出是符合高斯分布的。MOSSE的平方误差中,\(F_i \bigodot H^\ast\)指的是目标窗口和滤波模板卷积后的响应输出的傅里叶变换,而\(G_i\)指的是期望得到的输出的傅里叶变换,这个输出要符合高斯分布。
- 初始化过程中生成了一组期望的响应输出\(g_i\),这组训练数据通过更新滤波器的公式,初始化了滤波器。而在随后的检测更新过程中,\(g_i\)是以\[g=f_{i} \ast h_{i-1}\]响应输出的最大值坐标作为目标中心点而生成的高斯矩阵。
听着很绕口,其实简单的说,在检测过程中,更新滤波器公式使用的\(G_i\)是以当前目标位置作为中心的。
预处理
对图像和滤波器进行卷积操作会将其映射到拓扑空间中,形成圆环性,即左边与右边相连,上边与下边相连。这样可能会影响到检测的正确性。其原因是因为当左边和右边连接,在傅里叶域中计算时候,可能在边界上会产生高的响应值,而使目标位置定位到边界上。故预先对图像乘上一个\(\cos\)窗口,以减小影响。这个方法在随后改进的算法中经常使用到。
【目标跟踪】相关滤波算法之MOSSE的更多相关文章
- ICCV2013 录用论文(目标跟踪相关部分)(转)
单目标(表观模型): 1. Seunghoon Hong, BohyungHan. Orderless Trackingthrough Model-Averaged Density Estimatio ...
- 挑战目标跟踪算法极限,SiamRPN系列算法解读
商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT.PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 收录为 Oral 的 SiamRPN++.此篇文章将解读目 ...
- 基于MeanShift的目标跟踪算法及实现
这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法[matlab/c两个版本] csdn贴公式比较烦,原谅我直接截图了 ...
- 目标跟踪之ECO:Efficient Convolution Operators for Tracking
一. 相关滤波算法总结 作者首先分析了 影响相关滤波算法效率 和 导致过拟合 的几个原因: 1)Model Size (模型大小) 包括两个方面: - 模型层数,对应多分辨率 Sample,比如多层 ...
- 目标跟踪之相关滤波:CF及后续改进篇
一. 何为相关滤波? Correlation Filter 最早应用于信号处理,用来描述两个信号之间的相关性,或者说相似性(有点像早期的概率密度),先来看定义: 对于两个数据 f 和 g,则两个信号的 ...
- 目标跟踪之粒子滤波---Opencv实现粒子滤波算法
目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...
- 视觉目标跟踪算法——SRDCF算法解读
首先看下MD大神2015年ICCV论文:Martin Danelljan, Gustav Häger, Fahad Khan, Michael Felsberg. "Learning Spa ...
- Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解
视频目标跟踪问题分析 视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...
- TLD目标跟踪算法
1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...
随机推荐
- 【Beta Scrum】冲刺! 3/5
1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 完成登录注册api,协助web端完成api N SDN课程实践加上课缘故,仅仅写完了登录注册的逻辑判断内容,但是短 ...
- golang变量的注意
方法内部的变量使用方法: /* 定义三个变量,它们分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 编译器会根据初始化的值自动推导出相应的类型 */ vname1, v ...
- mvc、mvp和mvvm理解
MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...
- java通过传入的日期,获取所在周的周一至周日
public static void main(String[] args) { try { SimpleDateFormat sdf=new SimpleDateFormat("yyyy- ...
- javascript高级选择器querySelector和querySelectorAll
querySelector 和 querySelectorAll 方法是 W3C Selectors API规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流浏 ...
- QT中PRO文件写法的详细介绍
学习Qt时,发现有些知识看了不经常用就忘了,以下是书本上写的一些关于qmake的相关知识,自己看后,打算把一些经常用到的记下来,整理整理. Qt程序一般使用Qt提供的qmake工具来编译. qmake ...
- linux公钥和私钥生成
1. 路径 cd /root/.ssh 2. 输入命令 ssh-keygen -t rsa 按三次回车 3. 会依次生成 id_rsa 私钥和 id_rsa.pub 公钥 [root@insure ...
- Android学习之基础知识十一 —运用手机多媒体
一.使用通知(Notification) 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助 ...
- C++11 并发指南四(<future> 详解一 std::promise 介绍)
前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...
- highcharts为X轴标签添加链接
$(function () { var categoryLinks = { 'Foo': 'http://www.google.com/search?q=foo', 'Bar': 'http://ww ...