粒子滤波网络信息读后感

来源:互联网 发布:淘宝手机拍照软件 编辑:程序博客网 时间:2024/06/13 01:06

粒子滤波 粒子指什么?是指目标状态的一种可能性(一个粒子),滤波就是滤出目标最可能的状态。在估计理论中指由当前和以前的观测值来估计目标当前的状态。粒子滤波的含义是目标状态传播的后验概率可以由若干个粒子近似表示。

http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html

一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去。一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu/~hess/)实现的这个粒子滤波。从代码入手,一下子就明白了粒子滤波的原理。根据维基百科上对粒子滤波的介绍(http://en.wikipedia.org/wiki/Particle_filter),粒子滤波其实有很多变种,Rob Hess实现的这种应该是最基本的一种,Sampling Importance Resampling (SIR),根据重要性重采样。下面是我对粒子滤波实现物体跟踪的算法原理的粗浅理解:

1)初始化阶段-提取跟踪目标特征

该阶段要人工指定跟踪目标,程序计算跟踪目标的特征,比如可以采用目标的颜色特征。具体到Rob Hess的代码,开始时需要人工用鼠标拖动出一个跟踪区域,然后程序自动计算该区域色调(Hue)空间的直方图,即为目标的特征。直方图可以用一个向量来表示,所以目标特征就是一个N*1的向量V。

2)搜索阶段-放狗

好,我们已经掌握了目标的特征,下面放出很多条狗,去搜索目标对象,这里的狗就是粒子particle。狗有很多种放法。比如,a)均匀的放:即在整个图像平面均匀的撒粒子(uniform distribution);b)在上一帧得到的目标附近按照高斯分布来放,可以理解成,靠近目标的地方多放,远离目标的地方少放。Rob Hess的代码用的是后一种方法。狗放出去后,每条狗怎么搜索目标呢?就是按照初始化阶段得到的目标特征(色调直方图,向量V)。每条狗计算它所处的位置处图像的颜色特征,得到一个色调直方图,向量Vi,计算该直方图与目标直方图的相似性。相似性有多种度量,最简单的一种是计算sum(abs(Vi-V)).每条狗算出相似度后再做一次归一化,使得所有的狗得到的相似度加起来等于1.

3)决策阶段

我们放出去的一条条聪明的狗向我们发回报告,“一号狗处图像与目标的相似度是0.3”,“二号狗处图像与目标的相似度是0.02”,“三号狗处图像与目标的相似度是0.0003”,“N号狗处图像与目标的相似度是0.013”...那么目标究竟最可能在哪里呢?我们做次加权平均吧。设N号狗的图像像素坐标是(Xn,Yn),它报告的相似度是Wn,于是目标最可能的像素坐标X = sum(Xn*Wn),Y = sum(Yn*Wn).

4)重采样阶段Resampling

既然我们是在做目标跟踪,一般说来,目标是跑来跑去乱动的。在新的一帧图像里,目标可能在哪里呢?还是让我们放狗搜索吧。但现在应该怎样放狗呢?让我们重温下狗狗们的报告吧。“一号狗处图像与目标的相似度是0.3”,“二号狗处图像与目标的相似度是0.02”,“三号狗处图像与目标的相似度是0.0003”,“N号狗处图像与目标的相似度是0.013”...综合所有狗的报告,一号狗处的相似度最高,三号狗处的相似度最低,于是我们要重新分布警力,正所谓好钢用在刀刃上,我们在相似度最高的狗那里放更多条狗,在相似度最低的狗那里少放狗,甚至把原来那条狗也撤回来。这就是Sampling Importance Resampling,根据重要性重采样(更具重要性重新放狗)。

(2)->(3)->(4)->(2)如是反复循环,即完成了目标的动态跟踪。

 

根据我的粗浅理解,粒子滤波的核心思想是随机采样+重要性重采样。既然我不知道目标在哪里,那我就随机的撒粒子吧。撒完粒子后,根据特征相似度计算每个粒子的重要性,然后在重要的地方多撒粒子,不重要的地方少撒粒子。所以说粒子滤波较之蒙特卡洛滤波,计算量较小。这个思想和RANSAC算法真是不谋而合。RANSAC的思想也是(比如用在最简单的直线拟合上),既然我不知道直线方程是什么,那我就随机的取两个点先算个直线出来,然后再看有多少点符合我的这条直线。哪条直线能获得最多的点的支持,哪条直线就是目标直线。想法非常简单,但效果很好。

 扯远了,下面还是说说代码吧。Rob Hess的代码好像是linux上的,我稍微改了下,让Windows+VS2008能跑。main函数在track1.c里,默认是处理附带的视频,当然可以方便的改成从摄像头输入视频(cvCaptureFromCAM)。我用的是opencv2.0,没有测试低于2.0的版本。程序开始后,读入第一帧图像后,需要用鼠标拖动出跟踪目标区域,(然后按回车)。跟踪区域较小时速度较快,跟踪区域大时明显变得很卡。代码还需要gsl库的支持,我用的是gsl1.8,下面提供了gsl1.8安装文件的下载。这里是全部代码和相关的VS2008工程文件

 

关于粒子滤波在组合导航中应用的一个问题

本人最近在做粒子滤波,看了一些关于粒子滤波在组合导航中应用的论文,发现一个问题,在系统状态为高阶情况下,样本的粒子数应该是急剧增大的,但是我看了很多论文,都没有提到选取粒子的问题,我现在用的模型的状态量是13维德,请问一下各位,样本取多少个粒子比较合适?

你用的是那种粒子滤波?SIR 还是SIS?我觉得这两个对于状态维数多的不是怎么好用,用在一维的还可以。我用的是UPF,耗时太大了,我选的是200个粒子

SIS恐怕不行,样本退化太快,但是阶数高的时候,重采样耗费的时间太长。我用SIR做了一阶和二阶系统的,效果还行。
但是我做的组合导航状态量13维,观测量10维,用粒子滤波恐怕很难,但是有好多人写过关于各类粒子滤波在组合导航中应用的论文,不知道怎么弄的...

我用SIR做过二维的一个粒子,不知道你有没有看过多次试验的结果,差别好像挺大的。
我也读过这方面的东西,感觉都是先把贝叶斯框架搬上来,然后介绍蒙特卡洛,简单把粒子滤波介绍一下,接着就出结果了,感觉挺虚的,我自己做的结果也不能算很好

我做过一阶,二阶的,网上有很多程序,也有三阶的例子,但是观测量都是一阶的,我做过一个观测量二阶的例子,还有点效果。
粒子数选的少的时候,确实每次实验的结果不一样,有的时候能收敛,有的时候就是发散的。但是粒子选的多的时候,似乎就每次都收敛了,不知道你说的是不是这个情况?
我看西工大,北航南航等牛人都写过这方面的文章,但是总感觉在高阶系统里粒子滤波是不可能实现的,不知道他们的仿真是怎么做出来的。很迷茫。

目前的硬件水平来说粒子滤波用起来确实有点问题,硬件水平上去的话,应该还是不错的。如果追求低成本、适量精度的话,确实用不着粒子滤波,不过还有非常长的路还要走啊

我做了大概一周的时间,发现高阶系统的粒子滤波不可能做成,但是我现在还有一个疑问,网上那些牛X期刊的论文上的仿真图,难道都是造出来的么....好多论文的作者都是牛人啊

比较基础的滤波我做过EKF、UKF和CDKF,EKF感觉还是不错的,我用在组合导航里还试了一下,粒子滤波感觉还是计算量太大,我做了二阶和三阶系统的仿真,感觉粒子数和系统状态量是成指数增长关系的,用在组合导航里不可能...不说实物了,在计算机上都仿真不了

恩,你说的有道理,前几天我在网上上到一篇论文:混合高斯粒子滤波在组合导航中应用的计算量分析,这篇论文讨论的是选取的粒子个数的多少对于粒子滤波结果的影响,他的模型的状态量是20个,实验过程中用的采样点分别是2000、 3000、 5000、 和10000个,虽然我不知道20阶的系统取多少个粒子是合适的,但我感觉至少要上亿才有可能,我也在怀疑好多论文的关于这方面的仿真图是怎么做出来的,不知道你对于选取粒子的个数有没有什么经验。

终于找到组织了,我做过4阶的仿真,包括pf和ekpf,粒子500-1000个,收敛趋势还是有的,但有时也不明显。粒子数大于3000后速度明显下降,不知道是不是我程序的问题。好多论文里高阶的结果我都纳闷他们是怎么仿出来的。工程里还是EKF好用。

一个博士的BLOG      http://blogs.oregonstate.edu/hess/code/particles/

Visual object tracking is a difficult problem, but in recent years, particle filter-based object trackers have proven to be very effective.  Conceptually, a particle filter-based tracker maintains a probability distribution over the state (location, scale, etc.) of the object being tracked.  Particle filters represent this distribution as a set of weighted samples, or particles. Each particle represents a possible instantiation of the state of the object. In other words, each particle is a guess representing one possible location of the object being tracked. The set of particles contains more weight at locations where the object being tracked is more likely to be.  This weighted distribution is propagated through time using a set of equations known as the Bayesian filtering equations, and we can determine the trajectory of the tracked object by taking the particle with the highest weight or the weighted mean of the particle set at each time step.

The particle filter tracker available here is a simple single-object tracker that uses a color histogram-based observation model and a second-order autoregressive dynamical model.  It is implemented in C using OpenCV and the GSL.  The image sequence below shows the tracker in action.

0 0
原创粉丝点击