MOSSE(Minimum Output Sum of Square Error)

题目:Visual Object Tracking using Adaptive Correlation Filters
来源:CVPR2010
作者:David S. Bolme等, Colorado State University

MOSSE可以算是相关滤波(CF)类跟踪器的开山之作。

1. 信号相关

   信号处理中,用相关性描述两个因素的关系。分为自相关(auto-correlation,自身信号在频域的关系)和互相关(cross-correlation,两个信号之间的关系)。
   互相关,也被称为“滑动内积”(sliding inner-product)或“滑动点乘”(sliding dot product),通常用于在一个长序列(ggg)中寻找一个短序列(fff)(即特征)。假设有两个信号f(t)f(t)f(t)和g(t)g(t)g(t),则两个信号的相关性(correlation)为
(1.1)(f⋆g)(τ)=def∫−∞+∞f∗(t)g(t+τ)dt=∫−∞+∞f∗(t−τ)g(t)dt(f⋆g)[n]=def∑m=−∞+∞f∗[m]g[m+n]\begin{aligned} (f\star g)(τ)\overset{\underset{\mathrm{def}}{}}{=}&∫_{-∞}^{+∞}{f^* (t)g(t+τ)dt}=∫_{-∞}^{+∞}{f^* (t-τ)g(t)dt} \\ \tag{1.1} (f\star g)[n]\overset{\underset{\mathrm{def}}{}}{=}&\sum_{m=-\infty}^{+\infty}{f^*[m]g[m+n]} \end{aligned}(f⋆g)(τ)=def​(f⋆g)[n]=def​​∫−∞+∞​f∗(t)g(t+τ)dt=∫−∞+∞​f∗(t−τ)g(t)dtm=−∞∑+∞​f∗[m]g[m+n]​(1.1)
其中⋆表示互相关操作,f∗f^*f∗表示fff的共轭,τττ表示信号f在t轴上向右滑动的大小(lag)。

  1. 互相关与卷积有相似的性质,只是没有信号翻转的步骤,即(1.3)[f(t)⋆g(t)](t)=[f∗(−t)∗g(t)](t)[f(t)\star g(t)](t)=[f^*(-t)*g(t)](t) \tag{1.3}[f(t)⋆g(t)](t)=[f∗(−t)∗g(t)](t)(1.3)
  2. 如果fff 是一个Hermitian函数(即f(t)=f∗(−t)f(t)=f^*(-t)f(t)=f∗(−t)),则f⋆g=f∗gf\star g=f*gf⋆g=f∗g.
  3. 根据卷积定理,有
    (1.4)F{f⋆g}=F{f}∗⋅F{g}F{f(−t)}=F{f(t)}∗\begin{aligned} \mathcal{F}\{f\star g \}&=\mathcal{F}\{f\}^*\cdot \mathcal{F}\{g\}\\ \tag{1.4} \mathcal{F}\{f(-t)\}&=\mathcal{F}\{f(t)\}^* \end{aligned}F{f⋆g}F{f(−t)}​=F{f}∗⋅F{g}=F{f(t)}∗​(1.4)
  4. 自相关用于找出一个信号序列中的周期重复模式,lag=0 时取得峰值,峰值幅度表示信号能量。

2. 原理介绍

   两个信号越相似,其相关值越高。在视觉跟踪领域,就是找到与跟踪目标响应最大的项。
   设输入灰度图像为fff,滤波器为hhh,响应输出为ggg,(注意,文中f,h,gf,h,gf,h,g 的尺寸相等)则可表达为(2.1)g=h⋆fg=h\star f \tag{2.1}g=h⋆f(2.1)
   设定期望的输出ggg是高斯函数(ggg可以为任意函数,文中取二维高斯形函数,σ=2σ=2σ=2,以训练图像fff中的目标为中心),即在目标位置处相应最大,则只需解出滤波器h。为了简化运算,可以利用卷积定理和互相关的性质,在傅里叶频域求解,表达式为
(2.2)F{g}=F{h}∗⊙F{f},即G=H∗⊙F,\mathcal{F}\{g\}=\mathcal{F}\{h\}^*⊙\mathcal{F}\{f\},即G=H^*⊙F , \tag{2.2}F{g}=F{h}∗⊙F{f},即G=H∗⊙F,(2.2)
待求的H∗H^*H∗可由H∗=G/FH^*=G/FH∗=G/F 得到。但是为了获得更加鲁棒的滤波器(应对目标发生形变等),需要同时考虑多个包含目标的训练图像fif_ifi​。由Parseval定理(下式第二个等号, 能量守恒),可得
(2.3)error=∑i∥h⋆fi−gi∥2=1MN∑i∥H∗⊙Fi−Gi∥2error=∑_{i}{{\| h\star f_i-g_i \|}^{2}}=\frac{1}{MN} ∑_{i}{{\| H^*⊙F_i-G_i \|}^2} \tag{2.3}error=i∑​∥h⋆fi​−gi​∥2=MN1​i∑​∥H∗⊙Fi​−Gi​∥2(2.3)
其中fi,gi,hf_i,g_i,hfi​,gi​,h的尺寸均为M×NM×NM×N。可以通过优化下式得到H∗H^*H∗
(2.4)minH∗∑i∥H∗⊙Fi−Gi∥2.min_{H^*}∑_{i}{{\| H^*⊙F_i-G_i \|}^2} . \tag{2.4}minH∗​i∑​∥H∗⊙Fi​−Gi​∥2.(2.4)
   设HwvH_{wv}Hwv​ 为HHH 矩阵的元素。由于在傅里叶频域都是元素级运算(element-wise),因此上边的优化目标等价于优化每个HwvH_{wv}Hwv​ ,即对上式求偏导,并使偏导为0:
(2.5)0=∂∂Hwv∗∑i∥Hwv∗Fiwv−Giwv∥2.0=\frac{\partial}{\partial H^*_{wv}}∑_{i}{{\| H_{wv}^*F_{iwv}-G_{iwv} \|}^2} . \tag{2.5}0=∂Hwv∗​∂​i∑​∥Hwv∗​Fiwv​−Giwv​∥2.(2.5)
经过频域中复杂的求导推算,可以得到Hwv=∑iFiwvGiwv∗∑iFiwvFiwv∗H_{wv}=\frac{\sum_i{F_{iwv}G^*_{iwv}}}{\sum_i{F_{iwv}F^*_{iwv}}}Hwv​=∑i​Fiwv​Fiwv∗​∑i​Fiwv​Giwv∗​​, 最后得到H∗=∑iGi⊙Fi∗∑iFi⊙Fi∗H^*=\frac{\sum_i{G_{i}\odot F^*_{i}}}{\sum_i{F_{i}\odot F^*_{i}}}H∗=∑i​Fi​⊙Fi∗​∑i​Gi​⊙Fi∗​​. 当只有一个训练样本时,Hi∗=GiFi=Gi⊙Fi∗Fi⊙Fi∗H^*_i=\frac{G_i}{F_i}=\frac{G_{i}\odot F^*_{i}}{F_{i}\odot F^*_{i}}Hi∗​=Fi​Gi​​=Fi​⊙Fi∗​Gi​⊙Fi∗​​, 过拟合会比较严重,使用平均化策略效果会比较好,即
(2.6)H∗=1N∑iGi⊙Fi∗Fi⊙Fi∗.H^*=\frac{1}{N}\sum_{i}{\frac{G_{i}\odot F^*_{i}}{F_{i}\odot F^*_{i}}}. \tag{2.6}H∗=N1​i∑​Fi​⊙Fi∗​Gi​⊙Fi∗​​.(2.6)
为了保障求解的稳定性,在分母上加一个较小的正则项εεε(相当于在频谱上增加一个白噪声),试验发现ε=0.1ε=0.1ε=0.1时PSR(参见第3节)最高。
在第一帧时,对跟踪框(groundtruth)进行随机仿射变换(random affine transformations),获取多个训练样本(文中为8个)fif_ifi​。在 fif_ifi​ 上以目标为中心做出对应的期望高斯相应gig_igi​.
   为了使输出连续光滑,作者加入了平滑滤波的更新策略,第i帧的MOSSE滤波器由下式得到
(2.7)Hi∗=AiBiAi=ηGi⊙Fi∗+(1−η)Ai−1Bi=ηFi⊙Fi∗+(1−η)Bi−1\begin{aligned} H^*_i&=\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} \tag{2.7} \end{aligned}Hi∗​Ai​Bi​​=Bi​Ai​​=ηGi​⊙Fi∗​+(1−η)Ai−1​=ηFi​⊙Fi∗​+(1−η)Bi−1​​(2.7)
其中ηηη为学习率;较近帧在本帧的决策中的权重较大。作者通过实验,发现η=0.125η=0.125η=0.125 能够使滤波器快速适应目标形变,还能保持较好的鲁棒性。
   当在当前帧内 M×NM×NM×N 大小的检测区域 ZZZ 进行检测时,检测结果为
(2.8)y=F−1H∗⊙Zy=F^{-1} {H^*\odot Z} \tag{2.8}y=F−1H∗⊙Z(2.8)
新目标的估计位置即为相关分数矩阵yyy 的最大值位置。

3. 算法性能

3.1 跟踪效果评估指标 PSR

   PSR(The Peak-to-Sidelobe Ratio)峰值旁瓣比,衡量相关性峰值,检测遮挡或跟踪失败,或获取新出现的跟踪目标。论文中定义检测响应输出矩阵y的最大值为峰值ymaxy_{max}ymax​,峰值附近11×11之外的区域定义为旁瓣(Sidelode)。μslμ_{sl}μsl​和σslσ_{sl}σsl​为“旁瓣”区域的均值和标准差,则PSR定义为
(3.1)PSR=ymax−μslσsl.\text{PSR}=\frac{y_{max}-μ_{sl}}{σ_{sl}} . \tag{3.1}PSR=σsl​ymax​−μsl​​.(3.1)
   作者通过实验发现,当PSR取值在20~60之间,表明有很强的峰值(检测结果显著);当PSR跌落到7附近时,则表明出现遮挡或检测失败。

3.2 速度

    669fps (2.4Ghz Core 2 Duo)

3.3 效果展示

参考资料

https://blog.csdn.net/autocyz/article/details/48136473
https://en.wikipedia.org/wiki/Cross-correlation

目标跟踪 — MOSSE相关推荐

  1. 基于Python和OpenCV的目标跟踪学习教程 Object Tracking using Python and OpenCV

    实现12种不同的算法来跟踪视频和网络摄像头中的对象! 你会学到: 使用Python和OpenCV跟踪视频和网络摄像头中的对象 理解跟踪算法的基本直觉 实现12种跟踪算法 了解对象检测和对象跟踪之间的区 ...

  2. 一文详解目标跟踪中的相关滤波

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文来源:AI干货知识库 / 导读 / 目标跟踪是计算机视觉领域的一个重要问题,目前广泛应用在体育赛事 ...

  3. 目标跟踪学习算法DSST

    原文:http://blog.csdn.net/gxb0505/article/details/52601613?locationNum=8 简介(Accurate Scale Estimation ...

  4. python 粒子滤波目标追踪_Python实现基于相关滤波的单目标跟踪算法

    最近在阅读一些单目标跟踪的算法论文,主要看了一系列基于相关滤波的算法,尝试着用python实现了其中一些比较经典的算法,地址在https://github.com/wwdguu/pyCFTracker ...

  5. Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)

    本博客翻译搬运自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python,用于初入目标跟踪的新手学习,转贴请注明! 使用O ...

  6. 单目标跟踪——个人笔记

    单目标跟踪--个人笔记 以<Handcrafted and Deep Trackers: A Review of Recent ObjectTracking Approaches>为主线看 ...

  7. 【目标跟踪】Long-term Correlation Tracking 阅读笔记

    Long-term Correlation Tracking 论文地址: https://www.cv-foundation.org/openaccess/content_cvpr_2015/pape ...

  8. 视觉单目标跟踪任务概述

      视觉目标跟踪的主要目的是:模仿生理视觉系统的运动感知功能,通过对摄像头捕获到的图像序列进行分析,计算出运动目标在每一帧图像中的位置:然后,根据运动目标相关的特征值,将图像序列中连续帧的同一运动目标 ...

  9. 目标跟踪(1)基于OpenCV实现单目标跟踪

    在本教程中,我们将学习使用OpenCV跟踪对象.OpenCV 3.0开始引入跟踪API.我们将学习如何和何时使用OpenCV 4.2中可用的8种不同的跟踪器- BOOSTING, MIL, KCF, ...

  10. 90+目标跟踪算法九大benchmark!基于判别滤波器和孪生网络的视觉目标跟踪:综述与展望...

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标跟踪]技术交流群 后台回复[视觉目标跟踪综述]获取本文论文! 准确和鲁棒的视觉目标 ...

最新文章

  1. 2017计算机考研教材,【考研】2017计算机考研:四大科目参考书推荐
  2. 初等数论--原根--怎么判断a是不是模m的原根
  3. asc desc排序_HIVE的学习之路(六)Hive的分组Join排序
  4. biee mysql_BIEE 11g linux下连接mysql数据源
  5. [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程
  6. 传说中Python最难理解的点|看这完篇就够了
  7. CSS文件未加载浏览器报警告:Resource interpreted as Stylesheet but transferred with MIME type text/html...
  8. 《图书管理系统》—需求分析报告
  9. springboot整合aceadmin
  10. Caffe框架的基本操作和分析
  11. Ubuntu实时监控网速、CPU、内存
  12. grldr(GRUB,grub4dos)使用方法简介
  13. Prisma(一)——基础
  14. Android TextView 文字设置不同字体大小和颜色样式
  15. 什么软件可以支持视频转换成文字?
  16. Ubuntu18.04启动盘制作
  17. Android逆向:通过Xposed解密柠某直播本地数据
  18. 基于C语言开发Linux平台的协议分析软件
  19. 着急上市的喜马拉雅FM,进退两难
  20. 看完就懂——MySQL备份与恢复

热门文章

  1. 公司拿到了量化交易模型, 交易员和策略师就可滚蛋了?
  2. c语言实现运输问题表上作业法,运输问题表上作业法
  3. rose 生产java代码m_rose 生成代码
  4. 分享一款影视源码_爱客影院网站3.5.6版本
  5. 最新爱客影院自动采集源码v3.5.5
  6. 【读书笔记】终极算法
  7. 手机APP数据包抓包分析
  8. PHP将日期转换为时间戳方式,php日期转换为时间戳的方法
  9. ISO/IEC17025与ISO9000族标准的区别和联系
  10. 小米wifi驱动 linux驱动,Centos7-驱动小米WIFI做AP