您當前的位置:首頁 > 攝影

粒子濾波到底是怎麼得到的?

作者:由 怪僧小凡 發表于 攝影時間:2020-12-05

作者:小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視覺學習社群

標簽: 濾波  取樣  粒子  積分  貝葉斯