Ultralytics YOLO27: Вступи в список ожидания.
Лицензия YOLO
Назад к глоссарию Ultralytics

Kalman Filter (KF)

Фильтр Калмана оценивает изменяющееся состояние, например положение и скорость объекта, сочетая предсказания модели с зашумлёнными измерениями. Математика и код.

Фильтр Калмана (KF) — это рекурсивный алгоритм, который по потоку зашумлённых измерений оценивает скрытое состояние меняющейся системы, например положение и скорость объекта. На каждом временном шаге он предсказывает следующее состояние на основе модели движения системы, а затем корректирует предсказание с учётом нового измерения, взвешивая оба значения согласно их неопределённости. Рудольф Э. Калман опубликовал этот метод в 1960 году; для линейных систем с гауссовским шумом он даёт оценку с минимальной среднеквадратичной ошибкой. Фильтр применяется в GPS-приёмниках, навигации самолётов и космических аппаратов, локализации роботов и почти каждом трекере нескольких объектов в компьютерном зрении, где он сглаживает скачки детекций и предсказывает, где каждый объект появится дальше.

Как работает фильтр Калмана#

Фильтр хранит две величины: оценку состояния x, например положения и скорости, и ковариационную матрицу P, описывающую неопределённость этой оценки. Каждый цикл состоит из двух шагов:

  1. Предсказание: модель движения F проецирует состояние вперёд, x = F x, а неопределённость увеличивается на величину шума процесса Q, учитывающего движение, которое модель не описывает: P = F P Fᵀ + Q.
  2. Обновление: поступает новое измерение z, связанное с состоянием моделью измерения H. Фильтр вычисляет невязку z − H x и коэффициент Калмана K = P Hᵀ (H P Hᵀ + R)⁻¹, где R — это шум измерения. Скорректированное состояние равно x + K (z − H x), а неопределённость уменьшается до (I − K H) P.

Коэффициент Калмана задаёт баланс между моделью и датчиком. Когда измерения точны относительно предсказания, коэффициент приближается к 1 и оценка следует за измерением; когда измерения зашумлены, коэффициент приближается к 0 и оценка следует за предсказанием. Поскольку состояние может включать величины, которые никогда не измеряются напрямую, фильтр также выводит их косвенно: трекер, наблюдающий только положения, всё равно оценивает скорость. Если измерение отсутствует, фильтр пропускает обновление и продолжает использовать предсказание:

Фильтры Калмана в отслеживании объектов#

В отслеживании объектов для каждого трека используется собственный фильтр Калмана. Состояние включает центр и размер ограничивающей рамки, а также их скорости; модель с постоянной скоростью предсказывает, где рамка окажется в следующем кадре. Эти предсказания сопоставляются с новыми детекциями по пересечению над объединением (IoU), а каждая сопоставленная детекция становится измерением для обновления трека. Если объект скрыт несколько кадров, трек продолжает двигаться по предсказанной траектории, поэтому повторно появившаяся детекция оказывается достаточно близко к предсказанию, чтобы сохранить прежний ID.

Так работают все трекеры в режиме отслеживания Ultralytics YOLO: KalmanFilterXYAH из ByteTrack отслеживает восьмимерное состояние, включающее центр рамки, соотношение сторон, высоту и их скорости; BoT-SORT и TrackTrack используют вариант с шириной и высотой, а оба метода масштабируют шум в соответствии с размером рамки, поэтому для крупных близких объектов допустимы большие скачки в пикселях. Те же шаги предсказания и обновления можно реализовать всего в нескольких строках NumPy для одной координаты центра рамки:

import numpy as np

F = np.array([[1.0, 1.0], [0.0, 1.0]])  # constant-velocity model, state = [position, velocity]
H = np.array([[1.0, 0.0]])  # the detector measures position only
Q = 0.001 * np.eye(2)  # process noise: how far real motion may stray from the model
R = np.array([[25.0]])  # measurement noise: detections jitter by about 5 px

rng = np.random.default_rng(0)
truth = 100 + 3.0 * np.arange(60)  # box center moving 3 px per frame
z = truth + rng.normal(0, 5.0, truth.size)  # noisy detections

x, P = np.array([z[0], 0.0]), np.diag([25.0, 100.0])  # start from the first detection
estimates = [x[0]]
for measurement in z[1:]:
    x, P = F @ x, F @ P @ F.T + Q  # predict
    K = P @ H.T @ np.linalg.inv(H @ P @ H.T + R)  # Kalman gain
    x = x + K @ (measurement - H @ x)  # update with the weighted residual
    P = (np.eye(2) - K @ H) @ P
    estimates.append(x[0])

print(f"Detection error: {np.sqrt(np.mean((z - truth) ** 2)):.2f} px")
print(f"Kalman error: {np.sqrt(np.mean((np.array(estimates) - truth) ** 2)):.2f} px")
print(f"Estimated velocity: {x[1]:.2f} px/frame")

Среднеквадратичная ошибка составляет 4.50 px для исходных детекций и 2.48 px для отфильтрованных оценок, а оценённая скорость — 2.98 px за кадр, что близко к истинным 3 px, хотя скорость ни разу не измерялась.

Стандартный фильтр Калмана предполагает линейные модели движения и измерений с гауссовским шумом. Родственные методы ослабляют эти допущения:

  • Расширенный фильтр Калмана (EKF): на каждом шаге линеаризует нелинейные модели вокруг текущей оценки с помощью матриц Якоби. Это стандартный выбор для GPS и инерциальной навигации.
  • Несмещённый фильтр Калмана (UKF): пропускает небольшой набор тщательно выбранных пробных точек через нелинейную модель. Обычно это точнее линеаризации, и производные не требуются.
  • Фильтр частиц: представляет распределение состояния множеством взвешенных случайных выборок. Это позволяет работать с негауссовскими и мультимодальными распределениями, например когда робот не знает, в каком из двух коридоров находится, но требует значительно больших вычислительных затрат.
  • Скрытая марковская модель (HMM): использует ту же рекурсию предсказания и обновления для дискретных состояний; фильтр Калмана — её аналог для непрерывных состояний с линейной динамикой и гауссовским шумом.

Применение за пределами отслеживания#

  • Робототехника и объединение данных датчиков: роботы объединяют одометрию колёс, IMU, лидар и камеры в единую оценку позы, а методы на основе EKF — классический подход к одновременной локализации и построению карты.
  • Дополненная реальность: гарнитуры фильтруют измерения положения головы, чтобы виртуальные объекты оставались неподвижными при малой задержке.
  • Экономика и обработка сигналов: аналитики используют сглаживание Калмана, чтобы оценивать ненаблюдаемые тренды по зашумлённым временным рядам.
  • Навигация: самолёты, корабли, дроны и телефоны объединяют данные GPS и инерциальных датчиков, чтобы положение оставалось стабильным между спутниковыми коррекциями. Навигация стала и первым крупным применением фильтра: в начале 1960-х Стэнли Ф. Шмидт из NASA Ames адаптировал его для оценки нелинейных траекторий навигационным компьютером Apollo.

Изучи решения

Компьютерное зрение в спорте

Компьютерное зрение в спорте

Узнай, как Ultralytics YOLO обеспечивает компьютерное зрение в спорте: отслеживание игроков и мяча, аналитика результатов, полезные выводы для тренеров и реабилитация спортсменов.
Подробнее
Компьютерное зрение для аэросъёмки

Компьютерное зрение для аэросъёмки

Превращай снимки с дронов и аэрофотоснимки в полезные данные в реальном времени для сельского хозяйства, аквакультуры, охраны природы и геопространственного анализа с Ultralytics YOLO.
Подробнее
Компьютерное зрение в аэрокосмической отрасли

Компьютерное зрение в аэрокосмической отрасли

Применяй компьютерное зрение в аэрокосмической отрасли с Ultralytics YOLO: для осмотра самолётов, обнаружения посторонних предметов на взлётно-посадочных полосах, наземного обслуживания аэропортов и выявления дефектов композитных материалов.
Подробнее
Компьютерное зрение в сфере безопасности

Компьютерное зрение в сфере безопасности

Защити любой объект с помощью моделей Ultralytics YOLO. ИИ на базе компьютерного зрения обеспечивает мониторинг периметра, обнаружение угроз, распознавание номерных знаков и безопасность на рабочем месте.
Подробнее
Компьютерное зрение в робототехнике

Компьютерное зрение в робототехнике

Создавай более интеллектуальные машины с моделями Ultralytics YOLO. ИИ на базе компьютерного зрения в робототехнике обеспечивает автономную навигацию, восприятие, отслеживание объектов и управление в реальном времени.
Подробнее
Компьютерное зрение в логистике

Компьютерное зрение в логистике

Оптимизируй логистику с моделями Ultralytics YOLO. Визуальный AI обеспечивает проверку посылок, сортировку, отслеживание транспорта и мониторинг безопасности на складе в реальном времени.
Подробнее
Компьютерное зрение в розничной торговле

Компьютерное зрение в розничной торговле

Переосмысли розничную торговлю с моделями Ultralytics YOLO. Визуальный AI обеспечивает отслеживание запасов, мониторинг полок, управление очередями и более глубокое понимание поведения покупателей.
Подробнее
Компьютерное зрение в здравоохранении

Компьютерное зрение в здравоохранении

Создавай решения для здравоохранения с моделями Ultralytics YOLO. Визуальный AI в здравоохранении ускоряет медицинскую визуализацию, улучшает диагностику и мониторинг пациентов.
Подробнее
Компьютерное зрение в производстве

Компьютерное зрение в производстве

Оптимизируй производство с моделями Ultralytics YOLO. Компьютерное зрение на базе ИИ обеспечивает контроль качества, обнаружение дефектов, контроль использования СИЗ и автоматизацию сборочных линий.
Подробнее
Компьютерное зрение в автомобильной отрасли

Компьютерное зрение в автомобильной отрасли

Применяй компьютерное зрение в автомобильной отрасли с моделями Ultralytics YOLO. Компьютерное зрение на базе ИИ повышает безопасность дорожного движения, улучшает помощь водителю и автоматизацию автомобилей, делая дороги умнее.
Подробнее
Компьютерное зрение в сельском хозяйстве

Компьютерное зрение в сельском хозяйстве

Внедряй ИИ для компьютерного зрения в умное сельское хозяйство с моделями Ultralytics YOLO. Используй их для мониторинга посевов, отслеживания скота и точного земледелия, чтобы повысить урожайность и эффективность.
Подробнее

Давай вместе строить будущее ИИ!

Начни свой путь в будущее машинного обучения