卡尔曼滤波学习笔记

在之前的文章里,我们完成了SIFT和CBWH方法的基本学习。在之后的这一系列文章中,我们将进行卡尔曼滤波的学习。

Credit:

本文中所引用的研究来自:

王芳芳,陈华 《动态背景下的视频目标跟踪》,硕士学位论文

以及源自互联网的大量信息与课程整理。

什么是卡尔曼滤波

与之前我们接触到的SIFT和CBWH不同,卡尔曼滤波并非针对于某一种特定用途而开发出来的方法,而是一种普适性很高的算法。只要符合要求的情景,都可以使用卡尔曼滤波,所以它是一个相对抽象一些的概念。在了解卡尔曼滤波之前,先了解一下什么是滤波。

什么是滤波

滤波在信号学中指的是通过一定的过程,将波形中的杂波滤除,而保留真正携带信息的波形的方法。本质上而言就是消除环境带来的干扰而让真正有用的信息更加清晰。

卡尔曼滤波的目的和应用场景

卡尔曼滤波的目的在于,通过基于一定规律的预测模型,还有我们对于模型的测量,考虑到其中包含的噪声干扰,用这些信息获得一个相对准确的目标状态的过程。即,卡尔曼滤波的目的是获取目标的真实状态。而卡尔曼滤波的应用范围非常广,各种需要测量的地方都可以使用,比如对于自然界某个环境因素的建模等等。而在目标追踪中,卡尔曼滤波主要用于进行目标的轨迹的预测并用之后其他方法获得的真实数据修正模型。

目标追踪中为什么要使用卡尔曼滤波

在目标追踪中,通常是通过上一帧或第一帧获得目标的某些特征,之后在一定的范围内搜索对应的特征,以完成匹配,从而进行追踪。而在搜索当前帧的时候,如果全部搜索,运算两台打,所以引入卡尔曼滤波,通过卡尔曼滤波获得一个相对准确的大致范围,之后在范围内搜索,再用获得的结果更新修正卡尔曼滤波器。

怎样进行卡尔曼滤波

进行卡尔曼滤波的第一步就是将观测模型和预测模型用合适的方法表示。

模型表示

在目标追踪的卡尔曼滤波中,信号模型表示为:

\[s[n]=As[n-1]+u[n]\]

而观测模型表示为:

\[X[n]=Hs[n-1]+w[n]\]

其中,\(n\geq 2\),表示状态的角标。而公式中的\(u[n]\)和\(w[n]\)是符合高斯分布的噪声信号,即因为预测和测量而引入的不确定性。在这里认为它们服从高斯分布。那么,对于以上两个模型怎么理解呢?

在卡尔曼滤波中,模型分为两部分。第一部分是按照一定的规律,由上一个状态所推测的当前状态,即上面的第一个模型。它是基于真实的上一状态(因为每一步迭代都有误差缩小的机制,与绝对真实状态相差不会太远,所以将上一状态视作真实状态),进行预测,可能存在一定的偏差的状态。而预测与实际的偏差,在这里用高斯噪声表示,服从分布\((0,Q)\),表明认为噪声是正态分布且与时间无关的。第二部分是观测模型,即通过一定的手段,在目标追踪中是通过常规追踪方法获得的位置。通常因为追踪得到的目标位置不完全是目标的真实位置,此模型依然存在一个偏差,同样的用高斯噪声表示,服从分布\((0,R)\)。

上式中的A是\(4 \times 4\)的状态转移矩阵,H是\(2 \times 4\)的目标观测矩阵。这两个矩阵的作用都是状态转移,即,为模型提供一个由上一状态转移至当前状态的方法。

执行预测并进行修正

在获得上一状态\(s[n-1]\)之后,通过:

\[s[n|n-1]=As[n-1|n-1]\]

进行预测。即一个正常的迭代。在预测之后,就是图像追踪算法的责任了。在获得追踪位置之后,就需要通过一定的方法,结合之前的预测结果,获得更准确的位置。

最小预测MSE矩阵

在进行修正时,一个重要的指标是最小MSE矩阵(MMSE矩阵)MSE就是我们说的平均方差,公式是:

\[J(w,b)={1 \over {2m}}\sum_{i=1}^m (a_i - y_i)^2\]

其中的J是MSE,a和y是真实值与预测值。最小MSE是令MSE在最小,也就是预测尽量贴近真实值的要求下的修正项,是用上一状态的MMSE矩阵迭代而来。最小MSE矩阵是用矩阵化归的MMSE,这样方便与其他矩阵形式的元素进行运算。其公式是:

\[M[n|n-1]=AM[n-1|n-1]A^T+Q\]

对于不熟悉线代的读者,统一解释一下上面的符号:\(A^T\)是矩阵A的转置,而方括号内由竖线分隔开的两个标号的意义是,因为卡尔曼滤波在目标追踪中有两个阶段,预测与修正,第一个标号代表预测迭代次数,第二个代表修正迭代次数,即

\[s[n|n-1]\]

表示模型包含第n次的预测与第n-1次的修正。

卡尔曼增益

对于两个不同的模型而言,综合成第三个模型的时候,一个因素就是更偏向于谁,哪个的权重更大。在卡尔曼滤波中,这一权值就是卡尔曼增益。它的公式是:

\[K[n]=M[n|n-1]H^T(R+HM[n|n-1]H^T)^{-1}\]

卡尔曼增益越大,越倾向于观测,反之倾向于预测。

模型的修正与迭代

在获得全部修正模型所需的信息之后,只需简单的线代运算即可修正:

\[s[n|n]=s[n|n-1]+K[n] (X[n]-Hs[n|n-1])\] \[M[n|n]=(I-K[n]H)M[n|n-1]\]

即可获得修正之后的模型。这一模型将参与下一帧的目标大致范围预测。

在本篇文章中,我们探讨了卡尔曼滤波的一些基本事项,和它如何在图像追踪算法中应用与实现。到目前为止,我们与希望实现的算法之间的差距仅有SVM还没有进行专项的了解。但是考虑到支持向量机的普遍性,许多人已经有了一定的了解,而且本算法中SVM并非主要部分,再加上类似LIBSVM这一类平台的存在,SVM不是我们在接下来的文章中重点研究的内容。所以我将在下一篇文章中简要介绍SVM,以及本算法采用的C-SVC,再之后的文章中,将开始对算法进行完整的讲解。