深圳Yolo 视觉
深圳
立即加入
词汇表

扩展卡尔曼滤波器 (EKF)

Learn how the Extended Kalman Filter (EKF) handles non-linear systems for accurate object tracking and sensor fusion. Enhance your [YOLO26](https://docs.ultralytics.com/models/yolo26/) projects on the [Ultralytics Platform](https://platform.ultralytics.com).

扩展卡尔曼滤波器(EKF)是一种鲁棒数学算法,旨在估计非线性动态系统的状态。标准卡尔曼滤波器(KF)虽能为直线运动或遵循简单线性方程的系统提供最优解,但现实物理系统鲜少如此可预测。 多数物理对象——例如对抗风阻的无人机或多轴旋转的机械臂——都遵循曲线或复杂路径。EKF通过在特定时间点对系统进行线性近似处理,使工程师和数据科学家能够在基础力学机制复杂的情况下,仍能运用高效滤波技术完成预测建模任务。

机制与线性化

为处理复杂动力学,扩展卡尔弗里斯特滤波器采用一种称为线性化的数学过程,其本质是估算函数在当前工作点的斜率。这通常涉及计算雅可比矩阵,以近似描述系统在短时间间隔内的变化。该算法通过递归循环运行,包含两个主要阶段:预测与更新。在预测阶段,滤波器利用运动物理模型将当前状态向前推演。 在更新阶段,滤波器通过陀螺仪或加速度计等传感器提供的新数据(通常存在噪声)修正该投影。这种预测与修正的持续循环有助于降低数据噪声,相较于单一传感器独立工作,能提供更平滑、更精确的真实状态估计。

在计算机视觉中的相关性

计算机视觉(CV)领域, 扩展卡尔曼滤波器(EKF)在保持移动物体身份识别方面发挥着关键作用。诸如YOLO26等先进模型虽擅长单帧物体检测, 却无法天然理解时间维度的运动连续性。通过集成EKF或类似逻辑, 物体追踪系统可基于物体先前速度与轨迹, 预测其边界框在下一视频帧的出现位置。 该技术在处理遮挡场景时尤为有效——当目标物体暂时被遮挡时,滤波器通过持续估算目标位置维持"track",直至目标重新显现。这种技术对实现稳健的多目标跟踪(MOT)至关重要。

实际应用

EKF的多功能性使其成为多种高科技产业中的基石技术,这些产业中机器学习(ML)与物理硬件相互交融:

  • 自动驾驶汽车 自动驾驶汽车依靠传感器融合技术实现安全导航。 扩展卡尔弗里斯特克尔滤波器(EKF)整合来自全球定位系统(GPS)、 激光雷达和雷达的独立数据流,计算车辆在道路上的精确位置和 姿态,同时补偿信号中断或环境噪声的影响。
  • 机器人技术在非结构化环境中运行的机器人采用同步定位与建图(SLAM)算法。扩展卡尔弗里特算法(EKF)能帮助机器人构建房间地图,同时确定自身在地图中的位置,并修正车轮打滑或传感器漂移问题,从而确保精准移动。
  • 姿势估计 在虚拟现实或运动分析等应用中,追踪人体关节需要平滑抖动的关键点。扩展卡尔曼滤波算法通过优化深度学习模型的输出,为动作识别系统生成流畅自然的运动动画。

与相关概念的比较

区分扩展卡尔曼滤波器与相关滤波方法有助于理解其特定用途:

  • 扩展卡尔曼滤波器(EKF)与卡尔曼滤波器(KF) 标准卡尔曼滤波器在数学上最优且计算成本较低,但在系统高度非线性时失效。 扩展卡尔曼滤波器通过近似方法将卡尔曼滤波器扩展至非线性系统。
  • EKF与粒子滤波器对比粒子滤波器通过使用大量随机样本(粒子)来表示概率,能很好地处理非线性和非高斯噪声。然而,它需要显著更高的计算能力,这使得扩展卡尔弗里特滤波器(EKF)成为资源受限的嵌入式系统的首方案
  • EKF与无香卡尔曼滤波器(UKF)的对比: 无香卡尔曼滤波器提供了一种折中方案, 通过确定性采样点处理非线性问题, 无需EKF所需的复杂微积分运算。 尽管如此,EKF仍被众多控制系统视为行业标准。

实施实例

ultralytics 在目标跟踪算法中,内部采用卡尔曼滤波原理来平滑轨迹并关联不同帧间的检测结果。虽然使用高级工具时无需手动编写扩展卡尔曼滤波矩阵的数学公式,但理解其作为追踪器核心机制的原理,有助于为 Ultralytics 平台.

以下是使用YOLO 初始化追踪器的方法,该模型采用以下过滤技术进行状态估计:

from ultralytics import YOLO

# Load the latest YOLO26 model (nano version for speed)
model = YOLO("yolo26n.pt")

# Track objects in a video source
# Trackers like BoT-SORT or ByteTrack use Kalman filtering logic internally
results = model.track(source="https://ultralytics.com/images/bus.jpg", tracker="botsort.yaml")

# Print the ID of the tracked objects
for r in results:
    if r.boxes.id is not None:
        print(f"Track IDs: {r.boxes.id.numpy()}")

加入Ultralytics 社区

加入人工智能的未来。与全球创新者联系、协作和共同成长

立即加入