单个多对象卡尔曼滤波器与多单对象卡尔曼滤波器(复数)

Posted

技术标签:

【中文标题】单个多对象卡尔曼滤波器与多单对象卡尔曼滤波器(复数)【英文标题】:A single multi-object Kalman filter vs. multiple-single-object Kalman filters (plural) 【发布时间】:2015-02-16 12:07:54 【问题描述】:

Gidday 鞋匠/尊敬的同事,

对于实现卡尔曼预测/校正的多对象跟踪,我在其他 SO 线程中看到的一般方法是简单地为每个对象设置一个卡尔曼滤波器的向量/数组。

即'多单对象卡尔曼滤波器'

但是知道,如果您正确定义状态空间矩阵,那么一旦任何(连贯的)数学被说和完成,彼此独立的状态将保持不变 - 为什么我们不只是增加各种状态和相关矩阵/与所有对象“数据”的过滤器中涉及的向量并使用一个卡尔曼过滤器? (是的,大多数矩阵中都会有很多零)。

这两种方法都有算法复杂性的优势吗?我的直觉是,使用一个过滤器而不是多个过滤器可能会减少开销?

也许在处理多个过滤器时,在人类可读性方面更容易管理?

还有其他原因吗?

谢谢

附言最终代码将在 openCV/C++ 中

【问题讨论】:

想评论否决票? 【参考方案1】:

如果通过扩充您的意思是将所有对象的状态(均值和协方差)组合成单个超状态,然后使用单个过滤器来预测/估计该超状态,那么恐怕您对此的直觉提高效率很可能是错误的。

您需要考虑 KF 方程涉及矩阵求逆等运算,计算复杂度为 O(n^3)(或非常接近该图),其中 n 是矩阵的维数。如果你将多个对象聚合成一个状态,计算复杂度会飙升,即使你说的大部分都是零。

在我看来,从设计的角度来看,处理多个过滤器(每个跟踪对象一个)既干净又有效。如果您确实受到 KF 性能的瓶颈(配置文件优先),请考虑将卡尔曼滤波器数据分配到一个连续的数组中,以最大限度地减少缓存未命中。

【讨论】:

是的,这就是我的意思 - 你的回答很有趣 - 我来自 Matlab,我知道(至少“听说”>rolleyes 另外,我只是推断它可能有更好的效率——即在减少开销的特定情况下——它仍然可以做到吗? 我对 OpenCV 不太熟悉,所以我真的不知道它们的实现中包含了什么样的优化...就开销而言,您确实可以节省一些内存变量将在每个过滤器中相乘,但任何此类增益可能会被放大的协方差矩阵所抵消,该矩阵在典型实现中保持在过滤器状态(除非它使用某种稀疏存储)。 只是一个更新 - 最终实现了“许多”卡尔曼滤波器,因为它更容易融入类结构中,我直接编写它们(而不是 openCV 自己的滤波器),但仍然使用openCV 'mat' 大部分复制 Matlab 语法。我会再次更新,如果我有机会比较方法,Matlab 与 openCV 可能会很有趣......

以上是关于单个多对象卡尔曼滤波器与多单对象卡尔曼滤波器(复数)的主要内容,如果未能解决你的问题,请参考以下文章

扩展卡尔曼滤波EKF与多传感器融合

无损卡尔曼滤波UKF与多传感器融合

无损卡尔曼滤波UKF与多传感器融合

多目标卡尔曼滤波器:识别问题

多对象的卡尔曼滤波器:识别问题

opencv卡尔曼滤波器多目标跟踪错误