基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点

基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点相关跟踪的核心就是滤波器filters的求解,从MOSSE到KCF再到SRDCF,滤波器的模型越来越复杂,计算速度越来越慢,使得相关滤波在计算速度上的优势越来越不明显。比如较新的算法CFLB和BACF等采用了空间约束来解决边界效应,SRDCF和STRCF等使用空间正则来解决边界效应,这些解决边界效应的措施都让相关跟踪面临实时性的挑战。ADMM把一个大优化问题分成可分布式同时求解的多个子问题,通过对…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

相关跟踪的核心就是滤波器filters的求解,从MOSSE到KCF再到SRDCF,滤波器的模型越来越复杂,计算速度越来越慢,使得相关滤波在计算速度上的优势越来越不明显。比如较新的算法CFLB和BACF等采用了空间约束来解决边界效应,SRDCF和STRCF等使用空间正则来解决边界效应,这些解决边界效应的措施都让相关跟踪面临实时性的挑战。ADMM把一个大优化问题分成可分布式同时求解的多个子问题,通过对子问题的迭代可以快速得到滤波器的近似解。

baseline ADMM

ADMM求解以下形式的最小化问题:

基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点\\arg\min_{x,y}f(x)+g(y)\\s.t. Ax+By=c

该式的拉格朗日表达式为:

{\cal L}(x,y,\varsigma )=f(x)+g(y)+\varsigma^T(Ax+By-c)+\frac{\mu }{2}\begin{Vmatrix} Ax+By-c \end{Vmatrix}_{2}^{2}

迭代步骤为:

x^{k+1}:=arg\min_{x}{\cal L}(x^k,y^k,\varsigma^k )

y^{k+1}:=arg\min_{y}{\cal L}(x^{k+1},y^k,\varsigma^k )

\varsigma^{k+1}:=\varsigma^k +\mu (Ax^{k+1}+By^{k+1}-c)

example SRDCF

SRDCF原文用的是高斯-塞德尔(Gauss-Seidel)求解器,高斯-塞德尔(Gauss-Seidel)求解器也是一种迭代方法,缺点就是比ADMM要慢23333333。SRDCF最小化如下公式:

arg\min_{f} \frac{1}{2}||\sum_{d=1}^{D}x_{t}^{d}\ast f^{d}-y||^{2}+\frac{1}{2}\sum_{d=1}^{D}||wf^{d}||^{2}

此处的f为我们需要求的滤波器,也是ADMM迭代的变量之一,通过baseline的公式我们知道ADMM需要迭代两个变量,并且需要约束条件。变量不足可以构造一个辅助变量g,没有约束条件我们设定约束条件g=f,所以:

\\arg\min_{f} \frac{1}{2}||\sum_{d=1}^{D}x_{t}^{d}\ast f^{d}-y||^{2}+\frac{1}{2}\sum_{d=1}^{D}||wg^{d}||^{2} \\s.t.g=f

该式的拉格朗日表达式为:

\\{\cal L}(f,g,\varsigma )=\frac{1}{2}||\sum_{d=1}^{D}x_{t}^{d}\ast f^{d}-y||^{2}+\frac{1}{2}\sum_{d=1}^{D}||wg^{d}||^{2}+\varsigma^T\sum_{d=1}^{D}(f^d-g^d)+\frac{\mu }{2}\sum_{d=1}^{D}\begin{Vmatrix} f^d-g^d \end{Vmatrix}_{2}^{2}

迭代步骤为:

\\f^{k+1}:=\frac{1}{2}||\sum_{d=1}^{D}x_{t}^{d}\ast f^{d}-y||^{2}+\varsigma^T(f-g)+\frac{\mu }{2}\begin{Vmatrix} f-g \end{Vmatrix}_{2}^{2}

g^{k+1}:=\frac{1}{2}||wg||^{2}+\varsigma^T(f-g)+\frac{\mu }{2}\begin{Vmatrix} f-g \end{Vmatrix}_{2}^{2}

\varsigma^{k+1}:=\varsigma^k +\mu (f^{k+1}-g^{k+1})

子问题的求解是不是很简单,哈哈哈哈。

子问题f的求解:

转换到傅里叶域:

\hat{f}=\frac{1}{2}||\hat{x}_{t} \hat{f}-\hat{y}||^{2}+\hat \varsigma^T(\hat{f}-\hat{g})+\frac{\mu }{2}\begin{Vmatrix} \hat{f}-\hat{g} \end{Vmatrix}_{2}^{2}

其中,\hat {x}_{t},\hat{f}\hat{g}都是D维的。对\hat{f}求导得:

(\hat{x}_t\hat{f}-y)\hat{x}_t^{T}+\hat \varsigma^T\hat{f}+\mu(\hat{f}-\hat{g})=0

\hat{f}=\frac{y\hat{x}_t^{T}-\hat \varsigma^T+\mu \hat{g}}{\hat{x}_t\hat{x}_t^{T}+\mu I}

子问题g的求解:

g没有涉及卷积不用转换到傅里叶域,直接对g求导:

w^Twg-\varsigma+\mu(g-f)=0

g=\frac{\varsigma+\mu f}{w^Tw+\mu}

至此,SRDCF的ADMM迭代算法全部解完。

2019.04.15更新,下面给出SRDCFwithADMM的代码(注:本工程借鉴了ICCV2017目标跟踪算法BACF的相关代码)

1、代码下载地址:

SRDCFwithADMM_ADMM代码-机器学习代码类资源-CSDN下载

2、打开Demo更改数据集路径运行

基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点

3、运行结果:

基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点

4、run_SRDCFwithADMM.m中给出了OTB数据集的接口,可在OTB数据集中测试结果。 

2019.05.17更新,终于把一个deadline赶完了,以前的SRDCF的ADMM迭代是简化版的,便于大家理解,现在给出详细推导过程(这个推导过程是参考文章BACF来的:求别又diss我抄袭了233333,做个博客而已,搞科研对抄袭这个词真心很敏感。。。)

承接上文:

arg\min_{f} \frac{1}{2}||\sum_{d=1}^{D}x_{t}^{d}\ast f^{d}-y||^{2}+\frac{1}{2}\sum_{d=1}^{D}||wf^{d}||^{2}

构造辅助变量\hat g= \hat f=\sqrt L Ff,这个\wedge表示傅里叶变换,\sqrt L Fa是离散傅里叶变换的2D表达式,L是图像的大小。

那么拉格朗日表达式就变为:

\\{\cal L}(f,\hat g,\hat \varsigma ) = \frac{1}{2}||\hat x\hat g - \hat y|{|^2} + \frac{1}{2}||wf|{|^2} + {\hat \varsigma ^T}(\hat g - \sqrt L Ff) + \frac{\mu }{2}||\hat g - \sqrt L Ff|{|^2}

这里为了简化省略了D个通道的表达。

子问题g的求解:

转换到傅里叶域:

\hat g = \frac{1}{2}||{\hat x_t}\hat g - \hat y|{|^2} + {\hat \varsigma ^T}(\hat g - \sqrt L Ff) + \frac{\mu }{2}||\hat g - \sqrt L Ff|{|^2}

其中,\hat {x}_{t},f\hat{g}都是D维的。对\hat{g}求导得:

\hat{g}=\frac{y\hat{x}_t-L\hat \varsigma+\mu L\hat{f}}{\hat{x}_t\hat{x}_t^{T}+L\mu I}

因为分母上是D维的,使用Sherman-Morrison formula加速运算得:

\hat g = \frac{1}{\mu }\left( {L\hat y\hat x_t - \hat \varsigma + \mu \hat f} \right) - \frac{​{\hat x}}{​{\mu b}}\left( {L\hat y{​{\hat S}_x} - {​{\hat S}_\varsigma } + \mu {​{\hat S}_f}} \right)

这里的变量定义为{​{\hat S}_x} = \hat x_t^T{​{\hat x}_t},{​{\hat S}_\varsigma } = \hat x_t^T\hat \varsigma ,{​{\hat S}_f} = \hat x_t^T\hat f,b = {​{\hat S}_x} + L\mu

子问题f的求解:

f = \frac{1}{2}||wf|{|^2}+ {\hat \varsigma ^T}(\hat g - \sqrt L Ff) + \frac{\mu }{2}||\hat g - \sqrt L Ff|{|^2}

f没有涉及卷积不用转换到傅里叶域,直接对f求导:

f=\frac{\varsigma+\mu g}{w^Tw+\mu}

至此,SRDCF的ADMM迭代算法全部解完。

代码简要解析:

%子问题g的求解
g_f = (((1/(T*mu)) * bsxfun(@times, yf, model_xf)) - ((1/mu) * l_f)  + h_f) - ...
            bsxfun(@rdivide,(((1/(T*mu)) * bsxfun(@times, model_xf, (S_xx .* yf))) ...
            - ((1/mu) * bsxfun(@times, model_xf, S_lx)) + (bsxfun(@times, model_xf, S_hx))), B);
        
%子问题f的求解
H_h=ifft2((mu*g_f) + l_f);
h = argmin_h(ww,mu,H_h);

Jetbrains全家桶1年46,售后保障稳定

其中argmin_h.m定义为:

function h = argmin_h(w1,mu, X)
     lhd= 1 ./  ((w1.^2)+ mu); % left hand
     
     h=zeros(size(X));

     % compute T for each channel
     for i = 1:size(X,3)
         h(:,:,i) = lhd.* (X(:,:,i));
     end
end

[References]

[1] 博客参考:用ADMM求解大型机器学习问题 – BreezeDeus – 博客园
[2] S. Boyd. Alternating Direction Method of Multipliers (Slides).
[3] S. Boyd et al. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 2010.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226740.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是黑盒测试?它的常用方法有哪些?[通俗易懂]

    什么是黑盒测试?它的常用方法有哪些?[通俗易懂]什么是黑盒测试?它的常用方法有哪些?一:什么是黑盒测试?黑盒测试(Black-boxTesting),黑盒测试又称为“功能测试”,是将测试对象看做一个黑盒,在并不考虑软件产品的内部结构和处理过程的基础上对软件产品进行功能测试。黑盒测试注重软件产品的“功能性需求”。二:黑盒测试常用的方法有哪些?运用黑盒技术设计测试用例常用的方法有:①等价类划分②边界值分析③因果图分析法④错误推断法等详细分析:(一)等价类划分:等价类的划分无非就两种情况:有效等价类、无效等价类1.有效等

    2022年10月3日
    0
  • FastClick的用法「建议收藏」

    FastClick的用法「建议收藏」为什么要使用FastClick移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。为了能够立即响应用户的点击事件,才有了FastClick。FastClick的使用安装fastclick可以使用npm,Component和Bower。另外也提供了Ruby版的gemfastclick-rails以及.NET提供了NuGetpack…

    2022年6月19日
    39
  • 在智联上投了一个月的简历,很多都有意向,但是却没有通知我去

    在智联上投了一个月的简历,很多都有意向,但是却没有通知我去

    2022年2月13日
    217
  • Oracle number类型的语法和用法

    Oracle number类型的语法和用法Oraclenumber类型的语法和用法2012-10-2910:37:08    我来说两句     作者:liwenshui322收藏  我要投稿Oraclenumber类型的语法和用法    number类型的语法很简单,就是:   number(p,s)   p,s都是可选的,假如都不填,p默认为38,s默认为-48~127。

    2022年7月24日
    23
  • Groovy新手教程

    Groovy新手教程

    2021年11月29日
    41
  • 下面哪几个符号是linux通配符_什么是通配符,有什么作用

    下面哪几个符号是linux通配符_什么是通配符,有什么作用linux通配符含义:.当前目录****..当前目录的上一级目录*****通配符,代表任意0个或多个字符*****?通配符,代表重复0个或一个0前面的字符:连续不同命令的分隔符*****#配置文件注释*****|管道*****~用户的家目录*****-上一次的目录*****$变量前需加的符号/路径分隔符>或1…

    2022年9月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号