Extended Kalman Filter (EKF)
Explora el Filtro de Kalman Extendido (EKF) para la estimación de estados no lineales. Aprende cómo mejora el seguimiento de objetos en Ultralytics YOLO26 y en sistemas autónomos.
El Filtro de Kalman Extendido (EKF) es un algoritmo matemático robusto diseñado para estimar el estado de un sistema dinámico que se comporta de manera no lineal. Si bien el Kalman Filter (KF) estándar proporciona una solución óptima para sistemas que se mueven en línea recta o siguen ecuaciones lineales simples, la física del mundo real rara vez es tan predecible. La mayoría de los objetos físicos, como un dron que lucha contra la resistencia del viento o un brazo robótico que gira en múltiples ejes, siguen trayectorias curvas o complejas. El EKF aborda esta complejidad creando una aproximación lineal del sistema en un punto específico del tiempo, lo que permite a los ingenieros y científicos de datos aplicar técnicas de filtrado eficientes a tareas de modelado predictivo incluso cuando la mecánica subyacente es complicada.
Mecanismo y linealización#
Para manejar dinámicas complejas, el EKF emplea un proceso matemático llamado linealización, que esencialmente estima la pendiente de una función en el punto de operación actual. Esto a menudo implica calcular una matriz jacobiana para aproximar cómo cambia el sistema en intervalos cortos. El algoritmo opera en un bucle recursivo que consta de dos fases principales: predicción y actualización. En la fase de predicción, el filtro proyecta el estado actual hacia adelante utilizando un modelo físico de movimiento. En la fase de actualización, corrige esta proyección utilizando datos nuevos y a menudo ruidosos de sensores como giroscopos o acelerómetros. Este ciclo continuo de predicción y corrección ayuda a reducir el ruido de datos y proporciona una estimación más fluida y precisa del estado real de lo que cualquier sensor por sí solo podría proporcionar.
Relevancia en visión artificial#
En el ámbito de la visión por computador (CV), el Extended Kalman Filter desempeña un papel fundamental en el mantenimiento de la identidad de los elementos en movimiento. Modelos avanzados como YOLO26 son excepcionales en la detección de objetos en fotogramas individuales, pero no entienden inherentemente la continuidad del movimiento a lo largo del tiempo. Al integrar un EKF o una lógica similar, un sistema de seguimiento de objetos puede predecir dónde debería aparecer una caja delimitadora en el siguiente fotograma de vídeo basándose en su velocidad y trayectoria anteriores. Esto es especialmente útil para gestionar oclusiones, en las que un objeto queda temporalmente bloqueado de la vista; el filtro mantiene el «seguimiento» activo estimando la posición del objeto hasta que vuelve a ser visible, una técnica esencial para un seguimiento de múltiples objetos (MOT) robusto.
Aplicaciones en el mundo real#
La versatilidad del EKF lo convierte en una tecnología fundamental en varias industrias de alta tecnología donde el aprendizaje automático (ML) se cruza con el hardware físico:
- Vehículos autónomos: Los coches autónomos confían en la fusión de sensores para navegar de forma segura. Un EKF combina flujos de datos distintos de Sistemas de Posicionamiento Global (GPS), LiDAR y radar para calcular la posición y orientación precisas del vehículo en la carretera, compensando las pérdidas de señal o el ruido ambiental.
- Robótica: Los robots que operan en entornos no estructurados utilizan algoritmos de localización y mapeo simultáneos (SLAM). El EKF ayuda a un robot a construir un mapa de una habitación mientras determina simultáneamente su propia ubicación dentro de ese mapa, corrigiendo el deslizamiento de las ruedas o la deriva de los sensores para garantizar un movimiento preciso.
- Estimación de postura: En aplicaciones como la realidad virtual o la analítica deportiva, el seguimiento de las articulaciones humanas requiere suavizar los puntos clave inestables. Los algoritmos EKF refinan la salida de los modelos de aprendizaje profundo para crear animaciones de movimiento fluidas y naturales para sistemas de reconocimiento de acciones.
Comparación con conceptos relacionados#
Es útil distinguir el Filtro de Kalman extendido de otros métodos de filtrado relacionados para comprender su utilidad específica:
- EKF frente a Kalman Filter (KF): El KF estándar es matemáticamente óptimo y computacionalmente más barato, pero falla cuando los sistemas son altamente no lineales. El EKF amplía el KF para trabajar con sistemas no lineales mediante aproximación.
- EKF frente a Filtro de partículas: Un filtro de partículas gestiona muy bien la no linealidad y el ruido no gaussiano utilizando muchas muestras aleatorias (partículas) para representar la probabilidad. Sin embargo, requiere mucha más potencia de cálculo, lo que convierte al EKF en la opción preferida para sistemas empotrados con recursos limitados.
- EKF frente a Filtro de Kalman Sin Esmañar (UKF): El Unscented Kalman Filter ofrece un punto intermedio, utilizando puntos de muestreo deterministas para manejar la no linealidad sin el cálculo complejo requerido por el EKF, aunque el EKF sigue siendo un estándar de la industria para muchos sistemas de control.
Ejemplo de implementación#
En el paquete ultralytics, los algoritmos de seguimiento utilizan conceptos de filtrado de Kalman internamente para suavizar trayectorias y asociar detecciones entre fotogramas. Aunque no codificas manualmente las matemáticas de matrices del EKF al utilizar herramientas de alto nivel, comprender que impulsa al rastreador ayuda a configurar los parámetros para la Ultralytics Platform.
A continuación se muestra cómo iniciar un rastreador con un modelo de YOLO, que utiliza estas técnicas de filtrado para la estimación de estados:
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()}")





