趣聊粒子滤波器Particle Filter的概念问题

我在知乎上看到了几条关于PF很有意思的解释——放狗and放猴,让我们暂时摆脱那些复杂的公式与代码,从简单概念中领略PF的神奇吧!他们是这样子说的:

作者:沐风流云

链接:https://www.zhihu.com/question/25371476/answer/31552082

来源:知乎

放狗:

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)如是反复循环,即完成了目标的动态跟踪


作者:贾子枫

链接:https://www.zhihu.com/question/25371476/answer/31333118
来源:知乎

放猴:

寒冷的冬日,我来到了一个陌生的城市。漫无目的的走着,街上看不到什么人。旁边的一位老大妈在兜售五块钱一张的地图。生活艰辛啊!我慈善式的买了一张地图,继续漫无目的的走。天空开始飘雪,光线也慢慢的暗了下来,不远处的楼房都模糊了,偌大的世界仿佛只有我一个人在这里!我在那儿?(只有差不多这个时候,我的处境才差不多和一个要开始做Global localization的机器人类似)

我现在能做的,就是打开这张宝贵的地图 (这就是定位时要用的Global map)。现在我完全不知道在哪儿,地图上任何的点都有可能。不,我在马路上,应该是任何马路上的点都有可能(这就是根据条件来做初始化,初始化得当可以缩小很多的范围。这一点即便是有些很有经验的机器人研究人员也会忘记)。在我的意念里,我变成了美猴王,揪下一撮猴毛,让这些猴兵猴将猴子猴孙们均匀的分布在这地图上的每个街道。现在我要先转一圈看看四周的情况(这是我的第一次的动作,其实这时候用Motion model来更新一下所有位置意义不大,但是为了算法每个周期内的一致,我们也都更新一遍)。我发现我能看到一座百米开外的城门。这座城市有十八个城门,那我现在就非常有可能站在其中一个城门的附近。可是我现在在城里还是城外呢?总之,令人欣喜的是,我可以把我遍布全图的猴子们,号召到这18个城门附近,因为不知道里里外外,所以大概分成了三十六个阵营 (这是Particle filter最美的部分,resampling。其实像是开民主大会,每个人各抒己见,最后大家再投票表决。凡是讲的有道理的,都会有人拥护)。随着我在实际中向城门靠近,它们也在地图中向城门靠近 (虽然内外阵营的移动方向是相反的,但是这些都是严格按照我的相对运动来更新的)。离城门不远的时候,我发现了一条护城河!由于这个惊人的发现,城外的猴子们说服了城内的猴子,大家都纷纷加入了城外的阵营!现在还有18个阵营的猴子!

我决定从城门走进去。这是一个比较大的城门,走过城门,发现已经有很多不坚定的猴子加入了东南西北四个正门的阵营中。我也暗自高兴,我已经知道我在城的里面了。没走几步,这座城市的中心建筑,东南西北大街交汇处的钟楼,就依稀能看见轮廓了。看见了钟楼,原来在其他阵营的猴子都来到了东南西北大街。而这个城市的南大街最短,猴子们也在南大街聚集的最多 (主要是因为基于Motion的信任比较高,没走几步说明很短,所以比较短的南大街可能性高)继续向前,我走到了钟楼下,这时钟楼的东南西北围满了面朝钟楼的猴子们。向左看,钟楼饭店,向右看,开元商城。登时所有的猴子都齐刷刷的聚到了南大街,坐南朝北


而我是这样理解的:

        粒子滤波器如果投放的足够多(如果不够多,效果也好不到哪儿去),那么我们可以将整个粒子看做一个由有生命力的水滴组成的湖面,而这个平静湖面有一个突兀的物体,每当物体移动,这个物体就会引起波纹,随后所有湖面的水滴都会向着这个波纹的中心点靠拢,但每次靠拢的距离有限,无法一次性全部靠拢。之后每当物体移动,波纹激起,这些有生命力的水滴就会迅速向着波纹中心靠拢,如此反复,最后所有水滴呈现高斯分布聚在该物体周围。那么有人就问了,按照这样子去理解粒子滤波的话,那是怎么理解PF预测物体运动的呢?其实这也不难理解,水面上哪个方向的水滴(粒子)波动的剧烈程度最大,那么物体便是向着那个方向运动(当然这个过程绝对是非高斯分布的),运动的距离取决于波动的剧烈程度。


祝大家玩的开心!

若理解有误,欢迎斧正。

猜你喜欢

转载自blog.csdn.net/qq_51831335/article/details/127356405