粒子濾波到底是怎麼得到的?
作者:小L
「3D視覺工坊」技術交流群已經成立,目前大約有12000人,方向主要涉及3D視覺、CV&深度學習、SLAM、三維重建、點雲後處理、自動駕駛、CV入門、三維測量、VR/AR、3D人臉識別、醫療影像、缺陷檢測、行人重識別、目標跟蹤、視覺產品落地、視覺競賽、車牌識別、硬體選型、學術交流、求職交流、ORB-SLAM系列原始碼交流、深度估計等。工坊致力於乾貨輸出,不做搬運工,為計算機視覺領域貢獻自己的力量!歡迎大家一起交流成長~
新增小助手微信:CV_LAB,備註學校/公司+姓名+研究方向即可加入工坊一起學習進步。
QQ群「3D視覺研習社」,群號:574432628
一、前言
粒子濾波(particle filter)是一種常見的濾波演算法,廣泛應用於目標跟蹤、移動機器人等領域。網路上有不少關於粒子濾波的資料,但大多是直接給出了粒子濾波的相關公式和證明,或較為直觀上的解釋。作者在學習粒子濾波的過程中對一些概念和操作時常感到突兀,後來發現想要完整了解粒子濾波,需要首先了解前因,逐漸深入才能理解粒子濾波,而不是直接學習粒子濾波這個方法。
本文將側重從“粒子濾波是怎麼來的”這個問題介紹粒子濾波。限於篇幅與易懂性,對一些概念並沒有展開介紹,讀者在瞭解基本思路後可以根據給出的資料深入學習。本文包含了作者自己不嚴謹的理解與闡述,如有疏漏,望批評指正。
二、對“濾波”的一些介紹
2.1 何為“濾波”?
貝葉斯濾波、卡爾曼濾波、粒子濾波……種種這些濾波方法,都涉及到了“濾波”這個詞。那麼到底什麼是濾波,不同的領域有不同的定義。比如在訊號系統領域,濾波是指將訊號中特定波段的頻率濾除的操作。而在移動機器人領域,我暫時沒有看到較為嚴格的定義。我認為可以姑且理解為:透過不斷地觀測,使得對目標狀態的估計變得更加準確。
2.2 貝葉斯濾波
卡爾曼濾波與粒子濾波都是基於貝葉斯濾波框架下的濾波演算法。講粒子濾波便不得不提貝葉斯濾波。貝葉斯濾波的基本思想是根據上一時刻的狀態對當前狀態進行預測,並根據此時的觀測進行更新。基本演算法是:
(圖片來源:《機率機器人》)
可以看出,在預測部分需要求一個積分,而這個積分往往很難求。所以顯有方法可以直接利用原始的貝葉斯進行處理。
2.3 卡爾曼濾波
卡爾曼濾波也是非常龐大的一塊內容,這裡不展開介紹。只在這裡說明,卡爾曼濾波是貝葉斯濾波線上性高斯系統下的一種濾波演算法。而對於非線性系統,則衍生出來了擴充套件卡爾曼濾波。同時指出,無論是卡爾曼還是擴充套件卡爾曼濾波,都是引數化的濾波方法,對於無法用引數化進行表示的,則採用粒子濾波。粒子濾波是一種無參的濾波演算法。
三、積分計算:從蒙特卡洛說起
3.1 分段近似法求積分
3.2 蒙特卡洛取樣求積分
(此處略過蒙特卡洛基本原理)
3.2.1 簡單的均勻取樣
求積分和求期望是相同的。假設我們對一個分佈求取積分,採用最簡單的取樣方式——均勻取樣。我們求取在x滿足均勻分佈u(x)時,f(x)在[a,b]的期望I。按照分佈u(x)進行N次隨機取樣:
可以發現最後一項對f(x)的積分,就是x的期望。所以我們可以發現,當我們按照均勻分佈u(x)對x進行大量取樣,計算對應的f(x)的平均值,就是f(x)的積分。
3.2.2 任意分佈的取樣
下面我們研究,如果不是按照均勻分佈u(x)取樣,而是任意分佈p(x)進行取樣,結果如何。此時
依舊與原始的積分相同。所以我們得出了重要的結論:在蒙特卡洛時,我們可以按照任意分佈進行取樣,再計算對應f(x)的積分。
這一點很好理解,如果我們選擇的分佈p(x)就是真實的分佈,那麼我們從p(x)進行取樣,就和直接從真實分佈進行取樣是一樣的,積分結果當然是沒有誤差的。這提醒我們,在選取p(x)分佈時要儘可能的與實際分佈接近,從而極大程度的降低方差,從而減少需要取樣的數量。
四、重要性取樣與序列重要性取樣
4.1 重要性取樣(Importance Sampling, IS)
4.2 序列重要性取樣(Sequential Importance Sampling, SIS)
4.3 重取樣(Resampling)
在實際過程中,我們發現利用權重更新公式進行更新時,在幾次迭代之後,權重的分佈會極其不均勻,出現個別粒子權重很大接近於1,而其他的都接近於0的情況。這時候採用了一種“重取樣”策略,即每次權重更新之後,根據當前權重對所有粒子進行重取樣,之後將所有權重設定為相同。這樣我們用粒子的數量代替了粒子的權重,避免了權重的不均勻。
5. 粒子濾波(Particle Filter)
此時對權重更新公式進行變形(在不產生歧義情況下部分內容用點省略):
6. 總結
本文首先從濾波問題說起,指出了貝葉斯濾波框架下積分很難求的問題。由此引出蒙特卡洛方法。之後為了降低誤差、減少運算量和避免權重集中,對應出現了重要性取樣、序列重要性取樣與重取樣,順理成章的得出了粒子濾波的數學原理,之後給出了對應的物理模型。最後給出了簡單的粒子濾波的完整演算法。
作者希望透過本文,能夠使得大家對粒子濾波的學習有一個完整的認識,知道粒子濾波之前有什麼,而不是上來就對著資料直接學習粒子濾波本身。網路上的學習資料甚多,在這裡只推薦一個:徐亦達機器學習Particle Filter:
https://www。
bilibili。com/video/BV1x
W411N7f1?p=1
。耐心看完,會有收穫。
備註:
作者也是我們
「3D視覺從入門到精通」
特邀嘉賓:
一個超乾貨的3D視覺學習社群
下一篇:串擾很難?動圖一目瞭然!