一. 何为相关滤波?

Correlation Filter 最早应用于信号处理,用来描述两个信号之间的相关性,或者说相似性(有点像早期的概率密度),先来看定义:

对于两个数据 f 和 g,则两个信号的相关性(correlation)为:

其中 f∗ 表示 f 的 复共轭,这是和卷积的区别(相关性 与 卷积 类似,区别就在于里面的共轭)。

PS:复共轭是指 实部不变,虚部取反 (a + b i)* = a - b i;  共轭矩阵是指 矩阵转置后再对每个元素求共轭,不理解的童鞋请查阅百科。

二.  CF 在图像的引入 - MOSSE

可以参考经典论文 MOSSE (Minimum Output Sum of Squared Error filter)

论文下载:visual object tracking using adaptive correlation filters

对于图像来讲,问题描述为要找到一个 滤波模版 h,与输入图像 f 求相关性,得到相关图 g

为了方便理解,用一幅图来进行说明(相关图 g 描述目标响应,越接近时值越大):

为了加快计算速度,这里引入了傅里叶变换,根据卷积定理(correlation版本)可知,函数互相关的傅里叶变换等于函数傅里叶变换的乘积:

通过上面的公式,将复杂的互相关计算转换成 点乘。注意后面的 F(h) 是共轭,与卷积不同,公式可以简化描述为:

H* 就是我们要求的滤波器,MOSSE 提出的方法就是 最小化平方和误差,也就是针对m个样本 求最小二乘,描述为:

上面公式是将图像展开到像素,每个像素是独立计算的,最小化上面的公式很简单,就是求偏导=0,具体求解过程不再展开,得到最终的求解公式为:

作者提出了一个更新算法,根据当前帧不断进行调整,即在线更新策略,调整策略如下:

其中 η 为学习率,一般设置为 0.1,通过分子分母分别更新。

三. 有一种速度叫 KCF

KCF是一个非常经典的算法(kernelized correlation filters),速度极快,正常可以达到 100+ FPS。

论文下载:High-speed tracking with kernelized correlation filters(ECCV 2012, TPAMI 2015)

Paper及源码下载参考作者主页:http://www.robots.ox.ac.uk/~joao/#

关于 KCF 的介绍可以参考之前的博文:【 机器学习实践系列之5 - 目标跟踪 】

四. 品味经典之 DSST

DSST(Discriminative Scale Space Tracker)是在 MOSSE 基础上的改进,主要在应对尺度变化上(增加了一个 尺度 Correlation Filter),通过两个 Filter 分别跟踪 位置变化(translation)和尺度变化(scale estimation),Translation Filter 专门用于确定新的目标位置,Scale Filter
用来进行尺度估计。

另外 DSST 将原来的灰度特征替换为 HOG 特征,能够对目标特征更好的描述。

论文下载:Accurate Scale Estimation for Robust Visual Tracking

Discriminative Scale Space Tracking

工程及 Matlab 代码可以参考【作者主页】  CPP代码参考(window c++11)【Github

> 4.1 Filter 合并

DSST 组合成了一个三维的空间滤波器(M*N*S),其中 M*N对应输入Sample宽高(Trans)S对应尺度(Scale)。当然说是组合,实际上是分开独立计算的,先来看一幅图:

1)Translation Filter

对应上图(a),对于当前Sample框(2倍目标大小),对每个像素 提取 d维特征(d-1维的 hog特征 + 1维的灰度特征-最下patch),得到d个 Patch, 在不同特征维度l=[0,d) 上做基于最小二乘的目标函数:

公式中 λ 为正则项,降低 低权重系数的影响,滤波器 通过求偏导得到(公式推导可以看 Paper 的 Appendix):

● 模型训练过程:

为了简化计算,作者采用了 Single Training Sample的方法,只训练当前帧的输入,通过和之前帧的加权平均学习到前面的数据(借鉴了 MOSSE 的参数更新策略):

其中 A、B 分别对应分子、分母,通过上面的公式迭代求解,η 表示应学习率。

● 求解计算过程:

对于 输入样本 Z,根据 响应函数 Y=H* Z,并求 逆向 FFT 得到最大相关滤波响应值 y:

2)Scale Filter

对应上图(b),按照目标位置 {w,h} 进行尺度缩放采样,缩放尺度为
a^n,a=1.02,n=[-16,16],对应采样为 33级别(=S),构成了一个层数为S的金字塔。

对应在每层金字塔上,将 Patch 图像缩放成统一尺寸,提取d维Hog特征,以该特征作为训练样本,得到相关滤波器 H,用来预测输出尺度。

模型更新过程、滤波响应求解过程 与 Translation Filter 一致。

> 4.2 算法描述

输入(input):

a)t 时刻的图像 I(t)

b)上一帧 目标位置 P(t-1) 和尺度 S(t-1)

c)上一帧的位置模型 A_trans(t-1), B_trans(t-1) 和 尺度模型 A_scale(t-1), B_scale(t-1)

输出(output):

a)当前帧的 估计位置 P(t) 和估计尺度 S(t)

b)更新后的位置模型 A_trans(t), B_trans(t) 和 尺度模型 A_scale(t), B_scale(t)

位置估计过程:

1)根据上一帧目标位置 P(t-1) 和尺度 S(t-1),在当前帧图像 I 上,按照2倍目标大小采样,得到 Search 样本 Ztrans;

2)根据上一帧位置模型 A_trans(t-1), B_trans(t-1) ,计算位置响应,公式为:

3)得到目标位置 P(t) = max(y_trans);

位置估计过程:

4)提取不同尺度样本 Ztrans(文中对应33个);

5)与上面同样的方式计算出 y_scale,得到目标尺度  S(t) = max(y_scale);

模型更新过程:

6)从当前帧图像 I(t) 提取 训练样本 f_trans 和 f_scale;

提取对应Hog特征、灰度特征,构造对应尺度的高斯响应函数。

7)更新模型 位置模型 和 尺度模型;

参照上面的模型训练过程。

作者后续在 DSST基础上进行改进,提出了 fDSST,旨在优化算法效率,转发表在 PAMI上,帧率有了 成倍的提升。主要改进思路有两点:一是 相关性插值(sub-grid interpolation of correlation scores),即通过 Coarse Grid 计算 Score,通过插值得到 全分辨率的 Score;二是 通过PCA降维来减少特征维度。都是比较简单的Trick,本文不再展开(Paper 可以参考上面的链接)。

五. VOT2016 排名第一的 C-COT

比赛说明实力,这篇文章来自于 2016年的ECCV,MD大神注定要在 CF 上死磕。

论文下载:Beyond Correlation Filters: Learning Continuous Convolution Operators for Visual Tracking

代码下载:Github

传统的相关滤波方法只是用 灰度、Hog 做 Single Sample的特征提取和滤波训练,也许很多人都能想到 要用金字塔,要结合CNN多尺度的卷积特征,思路没错,只是 MD 比你下手快而已。

算法核心思想是:

1)对于Search Region,提取不同分辨率的特征(RGB+Conv特征),对应 第一列;

2)通过针对不同层训练的相关滤波器 进行计算,对应 第二列;

3)得到响应图(Confidence Scores),对应第三列;

4)将响应图 进行累加,得到多个分辨率置信度之和,即为最终的置信图,对应最大值为目标位置;

这篇文章算是过渡阶段的产品,除了引入深度学习的元素之外,其实没有太多的创新点,对于时间充裕的童鞋可以详细看看,否则的话建议忽略。

六. 沿着这条路继续……

相关滤波 带给我们的不只是这些,Visual Tracking 在这条道路上可以走的更远,我们看到了 ECO,还有更远处~你的Paper!

下一篇会针对 ECO 进行专门剖析,希望能和大家多多交流!

目标跟踪之相关滤波:CF及后续改进篇的更多相关文章

  1. 【目标跟踪】相关滤波算法之MOSSE

    简要 2010年David S. Bolme等人在CVPR上发表了<Visual Object Tracking using Adaptive Correlation Filters>一文 ...

  2. 目标跟踪之粒子滤波---Opencv实现粒子滤波算法

    目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...

  3. Video Target Tracking Based on Online Learning—深度学习在目标跟踪中的应用

    摘要 近年来,深度学习方法在物体跟踪领域有不少成功应用,并逐渐在性能上超越传统方法.本文先对现有基于深度学习的目标跟踪算法进行了分类梳理,后续会分篇对各个算法进行详细描述. 看上方给出的3张图片,它们 ...

  4. CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结

    本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...

  5. 挑战目标跟踪算法极限,SiamRPN系列算法解读

    商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT.PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 收录为 Oral 的 SiamRPN++.此篇文章将解读目 ...

  6. Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解

    视频目标跟踪问题分析         视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...

  7. 目标跟踪之ECO:Efficient Convolution Operators for Tracking

    一. 相关滤波算法总结 作者首先分析了 影响相关滤波算法效率 和 导致过拟合 的几个原因: 1)Model Size (模型大小) 包括两个方面: - 模型层数,对应多分辨率 Sample,比如多层 ...

  8. [Tracking] KCF + KalmanFilter目标跟踪

    基于KCF和MobileNet V2以及KalmanFilter的摄像头监测系统 简介 这是一次作业.Tracking这一块落后Detection很多年了,一般认为Detection做好了,那么只要能 ...

  9. 目标跟踪之meanshift---均值漂移搞起2000过时的

    基于灰度均值分布的目标跟踪! http://blog.csdn.net/wds555/article/details/24499599 但他有些有点: 1.不会受遮挡太多影响 Mean Shift跟踪 ...

随机推荐

  1. python16_day18【Django_Form表单、分页】

    一.表单 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 1.Form类 创建Form类时,主 ...

  2. PHP范例注册审核

    <body> <h1>注册</h1> <form action="zcchuli.php" method="post" ...

  3. Windows netstat 查看端口、进程占用(转)

    本文转自:http://ywsm.iteye.com/blog/510670 目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. 操作:操作分为两步: 1)查 ...

  4. dogo 官方翻译 Ajax with dojo/request

    require(["dojo/request"], function(request){ request("helloworld.txt").then( fun ...

  5. 【c++习题】【17/4/16】动态分配内存

    #include<iostream> #include<cstring> #define N 100 using namespace std; class String{ pu ...

  6. 《棋牌游戏服务器》斗地主AI设计

    设计目标 要取得良好效果,首先要搞清楚一个问题:我们想得到一个什么样的斗地主AI?我们的AI是用在手游产品当中,在真实玩家不足时为用户提供陪玩服务,这个目标决定了这个AI要具备以下两个核心特点:1.执 ...

  7. tinyxml优化之一

    原文链接:http://www.cnblogs.com/zouzf/p/4154569.html 最近在搞XML解析优化,公司引擎用了tinyxml1和tinyxml2两个XML库,后者的效率比前者高 ...

  8. zabbix监控windows

    windows  版zabbix_agent下载地址: https://www.zabbix.com/download_agents 解压,有bin和conf两个文件夹 配置: 在windows被监控 ...

  9. JUnit4 入门笔记

    Test注解的两个可选参数 expected timeout The Test annotation supports two optional parameters. The first, expe ...

  10. HDU 1241 油田

    这道题明明很简单但不知道为什么运行结果一直错,但提交却是对的!代码真是神奇,不过我猜测可能是提上给出的数据错了,可能提上给的数据m和n后多给了一个空格或回车,但题的数据没有 #include<s ...