15

粒子滤波到底是怎么得到的?

 3 years ago
source link: https://mp.weixin.qq.com/s/bXs-78F5GkA1j_GaLQtFLg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

Image

一、前言

粒子滤波(particle filter)是一种常见的滤波算法,广泛应用于目标跟踪、移动机器人等领域。网络上有不少关于粒子滤波的资料,但大多是直接给出了粒子滤波的相关公式和证明,或较为直观上的解释。作者在学习粒子滤波的过程中对一些概念和操作时常感到突兀,后来发现想要完整了解粒子滤波,需要首先了解前因,逐渐深入才能理解粒子滤波,而不是直接学习粒子滤波这个方法。本文将侧重从“粒子滤波是怎么来的”这个问题介绍粒子滤波。限于篇幅与易懂性,对一些概念并没有展开介绍,读者在了解基本思路后可以根据给出的资料深入学习。本文包含了作者自己不严谨的理解与阐述,如有疏漏,望批评指正。

二、对“滤波”的一些介绍

2.1 何为“滤波”?

贝叶斯滤波、卡尔曼滤波、粒子滤波……种种这些滤波方法,都涉及到了“滤波”这个词。那么到底什么是滤波,不同的领域有不同的定义。比如在信号系统领域,滤波是指将信号中特定波段的频率滤除的操作。而在移动机器人领域,我暂时没有看到较为严格的定义。我认为可以姑且理解为:通过不断地观测,使得对目标状态的估计变得更加准确。

2.2 贝叶斯滤波

卡尔曼滤波与粒子滤波都是基于贝叶斯滤波框架下的滤波算法。讲粒子滤波便不得不提贝叶斯滤波。贝叶斯滤波的基本思想是根据上一时刻的状态对当前状态进行预测,并根据此时的观测进行更新。基本算法是:
640?wx_fmt=jpeg
(图片来源:《概率机器人》)可以看出,在预测部分需要求一个积分,而这个积分往往很难求。所以显有方法可以直接利用原始的贝叶斯进行处理。

2.3 卡尔曼滤波

卡尔曼滤波也是非常庞大的一块内容,这里不展开介绍。只在这里说明,卡尔曼滤波是贝叶斯滤波在线性高斯系统下的一种滤波算法。而对于非线性系统,则衍生出来了扩展卡尔曼滤波。同时指出,无论是卡尔曼还是扩展卡尔曼滤波,都是参数化的滤波方法,对于无法用参数化进行表示的,则采用粒子滤波。粒子滤波是一种无参的滤波算法。

三、积分计算:从蒙特卡洛说起

3.1 分段近似法求积分

640?wx_fmt=png

3.2 蒙特卡洛采样求积分

(此处略过蒙特卡洛基本原理)

3.2.1 简单的均匀采样

求积分和求期望是相同的。假设我们对一个分布求取积分,采用最简单的采样方式——均匀采样。我们求取在x满足均匀分布u(x)时,f(x)在[a,b]的期望I。按照分布u(x)进行N次随机采样:

640?wx_fmt=png

可以发现最后一项对f(x)的积分,就是x的期望。所以我们可以发现,当我们按照均匀分布u(x)对x进行大量采样,计算对应的f(x)的平均值,就是f(x)的积分。

3.2.2 任意分布的采样

下面我们研究,如果不是按照均匀分布u(x)采样,而是任意分布p(x)进行采样,结果如何。此时

640?wx_fmt=png

依旧与原始的积分相同。所以我们得出了重要的结论:在蒙特卡洛时,我们可以按照任意分布进行采样,再计算对应f(x)的积分。
640?wx_fmt=png
这一点很好理解,如果我们选择的分布p(x)就是真实的分布,那么我们从p(x)进行采样,就和直接从真实分布进行采样是一样的,积分结果当然是没有误差的。这提醒我们,在选取p(x)分布时要尽可能的与实际分布接近,从而极大程度的降低方差,从而减少需要采样的数量。

四、重要性采样与序列重要性采样

4.1 重要性采样(Importance Sampling, IS)

640?wx_fmt=png

4.2 序列重要性采样(Sequential Importance Sampling, SIS)

640?wx_fmt=png
640?wx_fmt=png

4.3 重采样(Resampling)

在实际过程中,我们发现利用权重更新公式进行更新时,在几次迭代之后,权重的分布会极其不均匀,出现个别粒子权重很大接近于1,而其他的都接近于0的情况。这时候采用了一种“重采样”策略,即每次权重更新之后,根据当前权重对所有粒子进行重采样,之后将所有权重设定为相同。这样我们用粒子的数量代替了粒子的权重,避免了权重的不均匀。

5. 粒子滤波(Particle Filter)

640?wx_fmt=png
此时对权重更新公式进行变形(在不产生歧义情况下部分内容用点省略):
640?wx_fmt=png
640?wx_fmt=png

6. 总结

本文首先从滤波问题说起,指出了贝叶斯滤波框架下积分很难求的问题。由此引出蒙特卡洛方法。之后为了降低误差、减少运算量和避免权重集中,对应出现了重要性采样、序列重要性采样与重采样,顺理成章的得出了粒子滤波的数学原理,之后给出了对应的物理模型。最后给出了简单的粒子滤波的完整算法。作者希望通过本文,能够使得大家对粒子滤波的学习有一个完整的认识,知道粒子滤波之前有什么,而不是上来就对着资料直接学习粒子滤波本身。网络上的学习资料甚多,在这里只推荐一个:徐亦达机器学习Particle Filter:https://www.bilibili.com/video/BV1xW411N7f1?p=1。耐心看完,会有收获。备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区本文仅做学术分享,如有侵权,请联系删文。下载1在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。下载2在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。下载3在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

640?wx_fmt=png▲长按加微信群或投稿

640?wx_fmt=jpeg

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款640?wx_fmt=jpeg 圈里有高质量教程资料、可答疑解惑、助你高效解决问题觉得有用,麻烦给个赞和在看~640?wx_fmt=gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK